UpdraftPlus WordPress Backup Plugin - Version 1.13.1

Version Description

  • 09/May/2017 =

  • REFACTOR: Completed re-factoring of the remote storage modules, so that now all remote storage code has completed this current stage of re-factoring (more to come in future - laying the foundation for a significant new feature)

  • FIX: Added a nonce to the Dropbox deauth link. This is a minor security issue - someone personally targetting you, who knew that you were logged in to your WordPress admin, and who could persuade you to visit a personally-crafted web page, could cause the connection between UpdraftPlus and your Dropbox to be broken. The only impact of this is that the sending of your next backup to Dropbox would fail, and you would be alerted about the need to re-connect.

  • FIX: Import settings now handle the new remote storage options format

  • TWEAK: Added a version check when saving settings to prevent errors or lost settings

  • TWEAK: 'Existing Backups' table now shows an icon for each remote destination that the backup was sent to

  • TWEAK: Update SSL CA certificates file

  • TWEAK: If, when uploading to S3, a file is not found, handle it slightly more elegantly

  • TWEAK: Work with some WebDAV servers that previously sent empty responses to OPTIONS requests

Download this release

Release Info

Developer DavidAnderson
Plugin Icon 128x128 UpdraftPlus WordPress Backup Plugin
Version 1.13.1
Comparing to
See all releases

Code changes from version 1.12.40 to 1.13.1

admin.php CHANGED
@@ -122,12 +122,21 @@ class UpdraftPlus_Admin {
122
  }
123
  }
124
  if ('googlecloud' === $services || (is_array($services) && in_array('googlecloud', $services))) {
125
- $opts = UpdraftPlus_Options::get_updraft_option('updraft_googlecloud');
126
- if (!empty($opts)) {
127
- $clientid = $opts['clientid'];
128
- $token = (empty($opts['token'])) ? '' : $opts['token'];
 
 
 
 
 
 
 
 
 
 
129
  }
130
- if (!empty($clientid) && empty($token)) add_action('all_admin_notices', array($this,'show_admin_warning_googlecloud'));
131
  }
132
 
133
  if ('dropbox' === $services || (is_array($services) && in_array('dropbox', $services))) {
@@ -148,19 +157,43 @@ class UpdraftPlus_Admin {
148
  }
149
 
150
  if ('onedrive' === $services || (is_array($services) && in_array('onedrive', $services))) {
151
- $opts = UpdraftPlus_Options::get_updraft_option('updraft_onedrive');
152
- //if (((!empty($opts['clientid']) && !empty($opts['secret'])) || !empty($opts['use_master'])) && empty($opts['refresh_token']))
153
- if((defined('UPDRAFTPLUS_CUSTOM_ONEDRIVE_APP') && UPDRAFTPLUS_CUSTOM_ONEDRIVE_APP)){
154
- if(!empty($opts['clientid']) && !empty($opts['secret']) && empty($opts['refresh_token'])) add_action('all_admin_notices', array($this,'show_admin_warning_onedrive') );
155
- } else{
156
- if(empty($opts['refresh_token']))add_action('all_admin_notices', array($this,'show_admin_warning_onedrive') );
 
 
 
 
 
 
 
 
 
 
 
 
 
157
  }
158
  }
159
 
160
  if ('updraftvault' === $services || (is_array($services) && in_array('updraftvault', $services))) {
161
- $vault_settings = UpdraftPlus_Options::get_updraft_option('updraft_updraftvault');
162
- $connected = (is_array($vault_settings) && !empty($vault_settings['token']) && !empty($vault_settings['email'])) ? true : false;
163
- if (!$connected) add_action('all_admin_notices', array($this,'show_admin_warning_updraftvault') );
 
 
 
 
 
 
 
 
 
 
 
164
  }
165
 
166
  if ($this->disk_space_check(1048576*35) === false) add_action('all_admin_notices', array($this, 'show_admin_warning_diskspace'));
@@ -571,8 +604,12 @@ class UpdraftPlus_Admin {
571
  wp_enqueue_script('jquery-blockui', UPDRAFTPLUS_URL.'/includes/jquery.blockUI.js', array('jquery'), '2.70.0');
572
 
573
  wp_enqueue_script('jquery-labelauty', UPDRAFTPLUS_URL.'/includes/labelauty/jquery-labelauty.js', array('jquery'), '20160622-ud');
574
- wp_enqueue_style('jquery-labelauty', UPDRAFTPLUS_URL.'/includes/labelauty/jquery-labelauty.css', array(), '20150925');
 
 
575
 
 
 
576
  do_action('updraftplus_admin_enqueue_scripts');
577
 
578
  $day_selector = '';
@@ -708,6 +745,7 @@ class UpdraftPlus_Admin {
708
  'search' => __('Search', 'updraftplus'),
709
  'download_timeout' => __('Unable to download file. This could be caused by a timeout. It would be best to download the zip to your computer.', 'updraftplus'),
710
  'loading_log_file' => __('Loading log file', 'updraftplus'),
 
711
  ) );
712
  }
713
 
@@ -1057,7 +1095,7 @@ class UpdraftPlus_Admin {
1057
  $itext = empty($findex) ? '' : $findex;
1058
  $known_size = isset($backup_history[$timestamp][$type.$itext.'-size']) ? $backup_history[$timestamp][$type.$itext.'-size'] : 0;
1059
 
1060
- $services = (isset($backup_history[$timestamp]['service'])) ? $backup_history[$timestamp]['service'] : false;
1061
  if (is_string($services)) $services = array($services);
1062
 
1063
  $updraftplus->jobdata_set('service', $services);
@@ -1148,7 +1186,14 @@ class UpdraftPlus_Admin {
1148
 
1149
  }
1150
 
1151
- # Pass only a single service, as a string, into this function
 
 
 
 
 
 
 
1152
  private function download_file($file, $service) {
1153
 
1154
  global $updraftplus;
@@ -2833,6 +2878,12 @@ class UpdraftPlus_Admin {
2833
  return false;
2834
  }
2835
 
 
 
 
 
 
 
2836
  public function storagemethod_row($method, $header, $contents) {
2837
  ?>
2838
  <tr class="updraftplusmethod <?php echo $method;?>">
@@ -2842,6 +2893,21 @@ class UpdraftPlus_Admin {
2842
  <?php
2843
  }
2844
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2845
  public function last_backup_html() {
2846
 
2847
  global $updraftplus;
@@ -3337,6 +3403,9 @@ class UpdraftPlus_Admin {
3337
 
3338
  public function date_label($pretty_date, $key, $backup, $jobdata, $nonce, $simple_format = false) {
3339
  // $ret = apply_filters('updraftplus_showbackup_date', '<strong>'.$pretty_date.'</strong>', $backup, $jobdata, (int)$key);
 
 
 
3340
  $ret = apply_filters('updraftplus_showbackup_date', $pretty_date, $backup, $jobdata, (int)$key, $simple_format);
3341
  if (is_array($jobdata) && !empty($jobdata['resume_interval']) && (empty($jobdata['jobstatus']) || 'finished' != $jobdata['jobstatus'])) {
3342
  if ($simple_format) {
@@ -3599,7 +3668,7 @@ ENDHERE;
3599
  continue;
3600
  }
3601
 
3602
- if (is_string($files)) $files=array($files);
3603
 
3604
  foreach ($files as $ind => $file) {
3605
 
@@ -3846,11 +3915,12 @@ ENDHERE;
3846
  global $updraftplus;
3847
 
3848
  if (empty($_POST) || empty($_POST['subaction']) || 'savesettings' != $_POST['subaction'] || !isset($_POST['nonce']) || !is_user_logged_in() || !UpdraftPlus_Options::user_can_manage() || !wp_verify_nonce($_POST['nonce'], 'updraftplus-settings-nonce')) die('Security check');
3849
-
3850
  if (empty($_POST['settings']) || !is_string($_POST['settings'])) die('Invalid data');
3851
 
3852
  parse_str(stripslashes($_POST['settings']), $posted_settings);
3853
  // We now have $posted_settings as an array
 
3854
 
3855
  echo json_encode($this->save_settings($posted_settings));
3856
 
@@ -3867,13 +3937,40 @@ ENDHERE;
3867
  $this->import_settings($_POST);
3868
  }
3869
 
 
 
 
 
 
3870
  public function import_settings($settings) {
3871
-
3872
- $settings = json_decode(stripslashes($settings['settings']),true);
3873
-
3874
- echo json_encode($this->save_settings($settings));
3875
-
3876
- die;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3877
  }
3878
 
3879
  private function backup_now_remote_message() {
@@ -3900,77 +3997,82 @@ ENDHERE;
3900
  public function save_settings($settings) {
3901
 
3902
  global $updraftplus;
3903
-
3904
  // Make sure that settings filters are registered
3905
  UpdraftPlus_Options::admin_init();
3906
-
3907
- $return_array = array('saved' => true);
3908
 
3909
- $add_to_post_keys = array('updraft_interval', 'updraft_interval_database', 'updraft_starttime_files', 'updraft_starttime_db', 'updraft_startday_files', 'updraft_startday_db');
3910
 
3911
- //If database and files are on same schedule, override the db day/time settings
3912
- if (isset($settings['updraft_interval_database']) && isset($settings['updraft_interval_database']) && $settings['updraft_interval_database'] == $settings['updraft_interval'] && isset($settings['updraft_starttime_files'])) {
3913
- $settings['updraft_starttime_db'] = $settings['updraft_starttime_files'];
3914
- $settings['updraft_startday_db'] = $settings['updraft_startday_files'];
3915
- }
3916
- foreach ($add_to_post_keys as $key) {
3917
- // For add-ons that look at $_POST to find saved settings, add the relevant keys to $_POST so that they find them there
3918
- if (isset($settings[$key])) {
3919
- $_POST[$key] = $settings[$key];
 
 
 
 
 
 
 
3920
  }
3921
- }
3922
 
3923
- // Check if updraft_include_more_path is set, if it is then we need to update the page, if it's not set but there's content already in the database that is cleared down below so again we should update the page.
3924
- $more_files_path_updated = false;
3925
 
3926
- // i.e. If an option has been set, or if it was currently active in the settings
3927
- if (isset($settings['updraft_include_more_path']) || UpdraftPlus_Options::get_updraft_option('updraft_include_more_path')) {
3928
- $more_files_path_updated = true;
3929
- }
3930
-
3931
- // Wipe the extra retention rules, as they are not saved correctly if the last one is deleted
3932
- UpdraftPlus_Options::update_updraft_option('updraft_retain_extrarules', array());
3933
- UpdraftPlus_Options::update_updraft_option('updraft_email', array());
3934
- UpdraftPlus_Options::update_updraft_option('updraft_report_warningsonly', array());
3935
- UpdraftPlus_Options::update_updraft_option('updraft_report_wholebackup', array());
3936
- UpdraftPlus_Options::update_updraft_option('updraft_extradbs', array());
3937
- UpdraftPlus_Options::update_updraft_option('updraft_include_more_path', array());
3938
-
3939
- $relevant_keys = $updraftplus->get_settings_keys();
3940
-
3941
- if (method_exists('UpdraftPlus_Options', 'mass_options_update')) {
3942
- $original_settings = $settings;
3943
- $settings = UpdraftPlus_Options::mass_options_update($settings);
3944
- $mass_updated = true;
3945
- }
3946
-
3947
- foreach ($settings as $key => $value) {
3948
- // $exclude_keys = array('option_page', 'action', '_wpnonce', '_wp_http_referer');
3949
-
3950
- // if (!in_array($key, $exclude_keys)) {
3951
- if (in_array($key, $relevant_keys)) {
3952
- if ($key == 'updraft_service' && is_array($value)){
3953
- foreach ($value as $subkey => $subvalue){
3954
- if ($subvalue == '0') unset($value[$subkey]);
3955
  }
3956
- }
3957
 
3958
- // This flag indicates that either the stored database option was changed, or that the supplied option was changed before being stored. It isn't comprehensive - it's only used to update some UI elements with invalid input.
3959
- $updated = empty($mass_updated) ? (is_string($value) && $value != UpdraftPlus_Options::get_updraft_option($key)) : (is_string($value) && (!isset($original_settings[$key]) || $original_settings[$key] != $value));
3960
-
3961
- $db_updated = empty($mass_updated) ? UpdraftPlus_Options::update_updraft_option($key, $value) : true;
3962
-
3963
- // Add information on what has changed to array to loop through to update links etc.
3964
- // Restricting to strings for now, to prevent any unintended leakage (since this is just used for UI updating)
3965
- if ($updated) {
3966
- $value = UpdraftPlus_Options::get_updraft_option($key);
3967
- if (is_string($value)) $return_array['changed'][$key] = $value;
3968
- }
3969
 
3970
- } else {
3971
- // When last active, it was catching: option_page, action, _wpnonce, _wp_http_referer, updraft_s3_endpoint, updraft_dreamobjects_endpoint. The latter two are empty; probably don't need to be in the page at all.
3972
- //error_log("Non-UD key when saving from POSTed data: ".$key);
 
3973
  }
 
 
3974
  }
3975
 
3976
  // Checking for various possible messages
@@ -4005,8 +4107,14 @@ ENDHERE;
4005
  $this->show_admin_warning_unwritable();
4006
  }
4007
 
4008
- if ($return_array['saved'] == true){ //
4009
  $this->show_admin_warning(__('Your settings have been saved.', 'updraftplus'), 'updated fade');
 
 
 
 
 
 
4010
  }
4011
 
4012
  $messages_output = ob_get_contents();
122
  }
123
  }
124
  if ('googlecloud' === $services || (is_array($services) && in_array('googlecloud', $services))) {
125
+ $settings = $updraftplus->update_remote_storage_options_format('googlecloud');
126
+
127
+ if (is_wp_error($settings)) {
128
+ if (!isset($this->storage_module_option_errors)) $this->storage_module_option_errors = '';
129
+ $this->storage_module_option_errors .= "Google Cloud (".$settings->get_error_code()."): ".$settings->get_error_message();
130
+ add_action('all_admin_notices', array($this, 'show_admin_warning_multiple_storage_options'));
131
+ $updraftplus->log_wp_error($settings, true, true);
132
+ } elseif (!empty($settings['settings'])) {
133
+ foreach ($settings['settings'] as $instance_id => $storage_options) {
134
+ $clientid = $storage_options['clientid'];
135
+ $token = (empty($storage_options['token'])) ? '' : $storage_options['token'];
136
+
137
+ if (!empty($clientid) && empty($token)) add_action('all_admin_notices', array($this,'show_admin_warning_googlecloud'));
138
+ }
139
  }
 
140
  }
141
 
142
  if ('dropbox' === $services || (is_array($services) && in_array('dropbox', $services))) {
157
  }
158
 
159
  if ('onedrive' === $services || (is_array($services) && in_array('onedrive', $services))) {
160
+ $settings = $updraftplus->update_remote_storage_options_format('onedrive');
161
+
162
+ if (is_wp_error($settings)) {
163
+ if (!isset($this->storage_module_option_errors)) $this->storage_module_option_errors = '';
164
+ $this->storage_module_option_errors .= "OneDrive (".$settings->get_error_code()."): ".$settings->get_error_message();
165
+ add_action('all_admin_notices', array($this, 'show_admin_warning_multiple_storage_options'));
166
+ $updraftplus->log_wp_error($settings, true, true);
167
+ } elseif (!empty($settings['settings'])) {
168
+ foreach ($settings['settings'] as $instance_id => $storage_options) {
169
+ if((defined('UPDRAFTPLUS_CUSTOM_ONEDRIVE_APP') && UPDRAFTPLUS_CUSTOM_ONEDRIVE_APP)){
170
+ if(!empty($storage_options['clientid']) && !empty($storage_options['secret']) && empty($storage_options['refresh_token'])) {
171
+ add_action('all_admin_notices', array($this,'show_admin_warning_onedrive') );
172
+ } elseif (empty($storage_options['refresh_token'])) {
173
+ add_action('all_admin_notices', array($this,'show_admin_warning_onedrive') );
174
+ }
175
+ } else{
176
+ if(empty($storage_options['refresh_token']))add_action('all_admin_notices', array($this,'show_admin_warning_onedrive') );
177
+ }
178
+ }
179
  }
180
  }
181
 
182
  if ('updraftvault' === $services || (is_array($services) && in_array('updraftvault', $services))) {
183
+ $settings = $updraftplus->update_remote_storage_options_format('updraftvault');
184
+
185
+ if (is_wp_error($settings)) {
186
+ if (!isset($this->storage_module_option_errors)) $this->storage_module_option_errors = '';
187
+ $this->storage_module_option_errors .= "UpdraftVault (".$settings->get_error_code()."): ".$settings->get_error_message();
188
+ add_action('all_admin_notices', array($this, 'show_admin_warning_multiple_storage_options'));
189
+ $updraftplus->log_wp_error($settings, true, true);
190
+ } elseif (!empty($settings['settings'])) {
191
+ foreach ($settings['settings'] as $instance_id => $storage_options) {
192
+ if (empty($storage_options['token']) && empty($storage_options['email'])) {
193
+ add_action('all_admin_notices', array($this,'show_admin_warning_updraftvault') );
194
+ }
195
+ }
196
+ }
197
  }
198
 
199
  if ($this->disk_space_check(1048576*35) === false) add_action('all_admin_notices', array($this, 'show_admin_warning_diskspace'));
604
  wp_enqueue_script('jquery-blockui', UPDRAFTPLUS_URL.'/includes/jquery.blockUI.js', array('jquery'), '2.70.0');
605
 
606
  wp_enqueue_script('jquery-labelauty', UPDRAFTPLUS_URL.'/includes/labelauty/jquery-labelauty.js', array('jquery'), '20160622-ud');
607
+ wp_enqueue_style('jquery-labelauty', UPDRAFTPLUS_URL.'/includes/labelauty/jquery-labelauty.css', array(), '20150925');
608
+
609
+ wp_enqueue_script('jquery.serializeJSON', UPDRAFTPLUS_URL.'/includes/jquery.serializeJSON/jquery.serializejson.min.js', array('jquery'), '2.8.1');
610
 
611
+ $this->enqueue_jstree();
612
+
613
  do_action('updraftplus_admin_enqueue_scripts');
614
 
615
  $day_selector = '';
745
  'search' => __('Search', 'updraftplus'),
746
  'download_timeout' => __('Unable to download file. This could be caused by a timeout. It would be best to download the zip to your computer.', 'updraftplus'),
747
  'loading_log_file' => __('Loading log file', 'updraftplus'),
748
+ 'updraftplus_version' => $updraftplus->version
749
  ) );
750
  }
751
 
1095
  $itext = empty($findex) ? '' : $findex;
1096
  $known_size = isset($backup_history[$timestamp][$type.$itext.'-size']) ? $backup_history[$timestamp][$type.$itext.'-size'] : 0;
1097
 
1098
+ $services = isset($backup_history[$timestamp]['service']) ? $backup_history[$timestamp]['service'] : false;
1099
  if (is_string($services)) $services = array($services);
1100
 
1101
  $updraftplus->jobdata_set('service', $services);
1186
 
1187
  }
1188
 
1189
+ /**
1190
+ * Downloads a specified file into UD's directory
1191
+ *
1192
+ * @param String $file - The name of the file
1193
+ * @param String $service - The identifier of the service to download from. You cannot pass multiple services.
1194
+ *
1195
+ * @return Boolean - Whether the operation succeeded. Inherited from the storage module's download() method. N.B. At the time of writing it looks like not all modules necessarily return true upon success; but false can be relied upon for detecting failure.
1196
+ */
1197
  private function download_file($file, $service) {
1198
 
1199
  global $updraftplus;
2878
  return false;
2879
  }
2880
 
2881
+ /**
2882
+ * Outputs html for a storage method using the parameters passed in, this version should be removed when all remote storages use the multi version
2883
+ * @param [String] $classes - a list of classes to be used when
2884
+ * @param [String] $header - the table header content
2885
+ * @param [String] $contents - the table contents
2886
+ */
2887
  public function storagemethod_row($method, $header, $contents) {
2888
  ?>
2889
  <tr class="updraftplusmethod <?php echo $method;?>">
2893
  <?php
2894
  }
2895
 
2896
+ /**
2897
+ * Outputs html for a storage method using the parameters passed in, this version of the method is compatible with multi storage options
2898
+ * @param [String] $classes - a list of classes to be used when
2899
+ * @param [String] $header - the table header content
2900
+ * @param [String] $contents - the table contents
2901
+ */
2902
+ public function storagemethod_row_multi($classes, $header, $contents) {
2903
+ ?>
2904
+ <tr class="<?php echo $classes;?>">
2905
+ <th><?php echo $header;?></th>
2906
+ <td><?php echo $contents;?></td>
2907
+ </tr>
2908
+ <?php
2909
+ }
2910
+
2911
  public function last_backup_html() {
2912
 
2913
  global $updraftplus;
3403
 
3404
  public function date_label($pretty_date, $key, $backup, $jobdata, $nonce, $simple_format = false) {
3405
  // $ret = apply_filters('updraftplus_showbackup_date', '<strong>'.$pretty_date.'</strong>', $backup, $jobdata, (int)$key);
3406
+
3407
+ $pretty_date = $simple_format ? $pretty_date : '<div class="clear-right">'.$pretty_date.'</div>';
3408
+
3409
  $ret = apply_filters('updraftplus_showbackup_date', $pretty_date, $backup, $jobdata, (int)$key, $simple_format);
3410
  if (is_array($jobdata) && !empty($jobdata['resume_interval']) && (empty($jobdata['jobstatus']) || 'finished' != $jobdata['jobstatus'])) {
3411
  if ($simple_format) {
3668
  continue;
3669
  }
3670
 
3671
+ if (is_string($files)) $files = array($files);
3672
 
3673
  foreach ($files as $ind => $file) {
3674
 
3915
  global $updraftplus;
3916
 
3917
  if (empty($_POST) || empty($_POST['subaction']) || 'savesettings' != $_POST['subaction'] || !isset($_POST['nonce']) || !is_user_logged_in() || !UpdraftPlus_Options::user_can_manage() || !wp_verify_nonce($_POST['nonce'], 'updraftplus-settings-nonce')) die('Security check');
3918
+
3919
  if (empty($_POST['settings']) || !is_string($_POST['settings'])) die('Invalid data');
3920
 
3921
  parse_str(stripslashes($_POST['settings']), $posted_settings);
3922
  // We now have $posted_settings as an array
3923
+ if (!empty($_POST['updraftplus_version'])) $posted_settings['updraftplus_version'] = $_POST['updraftplus_version'];
3924
 
3925
  echo json_encode($this->save_settings($posted_settings));
3926
 
3937
  $this->import_settings($_POST);
3938
  }
3939
 
3940
+ /**
3941
+ * This method handles the imported json settings it will convert them into a readable format for the existing save settings function, it will also update some of the options to match the new remote storage options format (Apr 2017)
3942
+ *
3943
+ * @param Array $settings - The settings from the imported json file
3944
+ */
3945
  public function import_settings($settings) {
3946
+ global $updraftplus;
3947
+
3948
+ $posted_settings = json_decode(stripslashes($settings['settings']),true);
3949
+
3950
+ if (!empty($settings['updraftplus_version'])) $posted_settings['updraftplus_version'] = $settings['updraftplus_version'];
3951
+
3952
+ // Handle the settings name change of WebDAV and SFTP (Apr 2017) if someone tries to import an old settings to this version
3953
+ if (isset($posted_settings['updraft_webdav_settings'])) {
3954
+ $posted_settings['updraft_webdav'] = $posted_settings['updraft_webdav_settings'];
3955
+ unset($posted_settings['updraft_webdav_settings']);
3956
+ }
3957
+
3958
+ if (isset($posted_settings['updraft_sftp_settings'])) {
3959
+ $posted_settings['updraft_sftp'] = $posted_settings['updraft_sftp_settings'];
3960
+ unset($posted_settings['updraft_sftp_settings']);
3961
+ }
3962
+
3963
+ // We also need to wrap some of the options in the new style settings array otherwise later on we will lose the settings if this information is missing
3964
+ if (empty($posted_settings['updraft_webdav']['settings'])) $posted_settings['updraft_webdav'] = $updraftplus->wrap_remote_storage_options($posted_settings['updraft_webdav']);
3965
+ if (empty($posted_settings['updraft_googledrive']['settings'])) $posted_settings['updraft_googledrive'] = $updraftplus->wrap_remote_storage_options($posted_settings['updraft_googledrive']);
3966
+ if (empty($posted_settings['updraft_googlecloud']['settings'])) $posted_settings['updraft_googlecloud'] = $updraftplus->wrap_remote_storage_options($posted_settings['updraft_googlecloud']);
3967
+ if (empty($posted_settings['updraft_onedrive']['settings'])) $posted_settings['updraft_onedrive'] = $updraftplus->wrap_remote_storage_options($posted_settings['updraft_onedrive']);
3968
+ if (empty($posted_settings['updraft_azure']['settings'])) $posted_settings['updraft_azure'] = $updraftplus->wrap_remote_storage_options($posted_settings['updraft_azure']);
3969
+ if (empty($posted_settings['updraft_dropbox']['settings'])) $posted_settings['updraft_dropbox'] = $updraftplus->wrap_remote_storage_options($posted_settings['updraft_dropbox']);
3970
+
3971
+ echo json_encode($this->save_settings($posted_settings));
3972
+
3973
+ die;
3974
  }
3975
 
3976
  private function backup_now_remote_message() {
3997
  public function save_settings($settings) {
3998
 
3999
  global $updraftplus;
4000
+
4001
  // Make sure that settings filters are registered
4002
  UpdraftPlus_Options::admin_init();
 
 
4003
 
4004
+ $more_files_path_updated = false;
4005
 
4006
+ if (isset($settings['updraftplus_version']) && $updraftplus->version == $settings['updraftplus_version']) {
4007
+
4008
+ $return_array = array('saved' => true);
4009
+
4010
+ $add_to_post_keys = array('updraft_interval', 'updraft_interval_database', 'updraft_starttime_files', 'updraft_starttime_db', 'updraft_startday_files', 'updraft_startday_db');
4011
+
4012
+ //If database and files are on same schedule, override the db day/time settings
4013
+ if (isset($settings['updraft_interval_database']) && isset($settings['updraft_interval_database']) && $settings['updraft_interval_database'] == $settings['updraft_interval'] && isset($settings['updraft_starttime_files'])) {
4014
+ $settings['updraft_starttime_db'] = $settings['updraft_starttime_files'];
4015
+ $settings['updraft_startday_db'] = $settings['updraft_startday_files'];
4016
+ }
4017
+ foreach ($add_to_post_keys as $key) {
4018
+ // For add-ons that look at $_POST to find saved settings, add the relevant keys to $_POST so that they find them there
4019
+ if (isset($settings[$key])) {
4020
+ $_POST[$key] = $settings[$key];
4021
+ }
4022
  }
 
4023
 
4024
+ // Check if updraft_include_more_path is set, if it is then we need to update the page, if it's not set but there's content already in the database that is cleared down below so again we should update the page.
4025
+ $more_files_path_updated = false;
4026
 
4027
+ // i.e. If an option has been set, or if it was currently active in the settings
4028
+ if (isset($settings['updraft_include_more_path']) || UpdraftPlus_Options::get_updraft_option('updraft_include_more_path')) {
4029
+ $more_files_path_updated = true;
4030
+ }
4031
+
4032
+ // Wipe the extra retention rules, as they are not saved correctly if the last one is deleted
4033
+ UpdraftPlus_Options::update_updraft_option('updraft_retain_extrarules', array());
4034
+ UpdraftPlus_Options::update_updraft_option('updraft_email', array());
4035
+ UpdraftPlus_Options::update_updraft_option('updraft_report_warningsonly', array());
4036
+ UpdraftPlus_Options::update_updraft_option('updraft_report_wholebackup', array());
4037
+ UpdraftPlus_Options::update_updraft_option('updraft_extradbs', array());
4038
+ UpdraftPlus_Options::update_updraft_option('updraft_include_more_path', array());
4039
+
4040
+ $relevant_keys = $updraftplus->get_settings_keys();
4041
+
4042
+ if (method_exists('UpdraftPlus_Options', 'mass_options_update')) {
4043
+ $original_settings = $settings;
4044
+ $settings = UpdraftPlus_Options::mass_options_update($settings);
4045
+ $mass_updated = true;
4046
+ }
4047
+
4048
+ foreach ($settings as $key => $value) {
4049
+
4050
+ if (in_array($key, $relevant_keys)) {
4051
+ if ($key == 'updraft_service' && is_array($value)){
4052
+ foreach ($value as $subkey => $subvalue){
4053
+ if ($subvalue == '0') unset($value[$subkey]);
4054
+ }
 
4055
  }
 
4056
 
4057
+ // This flag indicates that either the stored database option was changed, or that the supplied option was changed before being stored. It isn't comprehensive - it's only used to update some UI elements with invalid input.
4058
+ $updated = empty($mass_updated) ? (is_string($value) && $value != UpdraftPlus_Options::get_updraft_option($key)) : (is_string($value) && (!isset($original_settings[$key]) || $original_settings[$key] != $value));
4059
+
4060
+ $db_updated = empty($mass_updated) ? UpdraftPlus_Options::update_updraft_option($key, $value) : true;
4061
+
4062
+ // Add information on what has changed to array to loop through to update links etc.
4063
+ // Restricting to strings for now, to prevent any unintended leakage (since this is just used for UI updating)
4064
+ if ($updated) {
4065
+ $value = UpdraftPlus_Options::get_updraft_option($key);
4066
+ if (is_string($value)) $return_array['changed'][$key] = $value;
4067
+ }
4068
 
4069
+ } else {
4070
+ // When last active, it was catching: option_page, action, _wpnonce, _wp_http_referer, updraft_s3_endpoint, updraft_dreamobjects_endpoint. The latter two are empty; probably don't need to be in the page at all.
4071
+ //error_log("Non-UD key when saving from POSTed data: ".$key);
4072
+ }
4073
  }
4074
+ } else {
4075
+ $return_array = array('saved' => false, 'error_message' => sprintf(__('UpdraftPlus seems to have been updated to version (%s) different to the version running when this settings page was loaded. Please reload the settings page before trying to save settings.', 'updraftplus'), $updraftplus->version));
4076
  }
4077
 
4078
  // Checking for various possible messages
4107
  $this->show_admin_warning_unwritable();
4108
  }
4109
 
4110
+ if ($return_array['saved']){ //
4111
  $this->show_admin_warning(__('Your settings have been saved.', 'updraftplus'), 'updated fade');
4112
+ } else {
4113
+ if (isset($return_array['error_message'])) {
4114
+ $this->show_admin_warning($return_array['error_message'], 'error');
4115
+ } else {
4116
+ $this->show_admin_warning(__('Your settings failed to save. Please refresh the settings page and try again', 'updraftplus'), 'error');
4117
+ }
4118
  }
4119
 
4120
  $messages_output = ob_get_contents();
class-updraftplus.php CHANGED
@@ -107,23 +107,41 @@ class UpdraftPlus {
107
  public function itsec_scheduled_external_backup($x) { return (!wp_next_scheduled('updraft_backup')) ? false : true; }
108
  public function itsec_external_backup_link($x) { return UpdraftPlus_Options::admin_page_url().'?page=updraftplus'; }
109
 
 
 
 
 
110
  public function wp_loaded_vault_disconnect() {
111
- $opts = UpdraftPlus_Options::get_updraft_option('updraft_updraftvault');
112
- if (is_array($opts) && !empty($opts['token']) && $opts['token']) {
113
- $site_id = $this->siteid();
114
- $hash = hash('sha256', $site_id.':::'.$opts['token']);
115
- if ($hash == $_POST['reset_hash']) {
116
- $this->log('This site has been remotely disconnected from UpdraftPlus Vault');
117
- require_once(UPDRAFTPLUS_DIR.'/methods/updraftvault.php');
118
- $vault = new UpdraftPlus_BackupModule_updraftvault();
119
- $vault->ajax_vault_disconnect();
120
- // Die, as the vault method has already sent output
121
- die;
122
- } else {
123
- $this->log('An invalid request was received to disconnect this site from UpdraftPlus Vault');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
124
  }
125
  }
126
- echo json_encode(array('disconnected' => 0));
127
  die;
128
  }
129
 
@@ -222,20 +240,11 @@ class UpdraftPlus {
222
  $current_setting = UpdraftPlus_Options::get_updraft_option($method_key, array());
223
 
224
  if (!is_array($current_setting) && false !== $current_setting) return new WP_Error('format_unrecognised', 'Settings format not recognised', array('method' => $method, 'current_setting' => $current_setting));
225
-
226
  // Already converted?
227
  if (isset($current_setting['version'])) return $current_setting;
228
 
229
- // Cryptographic randomness not required. The prefix helps avoid potential for type-juggling issues.
230
- $uuid = 's-'.md5(rand().uniqid().microtime(true));
231
-
232
- $new_setting = array(
233
- 'version' => 1,
234
- );
235
-
236
- if (!is_array($current_setting)) $current_setting = array();
237
-
238
- $new_setting['settings'] = array($uuid => $current_setting);
239
 
240
  $already_active = true;
241
  $updated = UpdraftPlus_Options::update_updraft_option($method_key, $new_setting);
@@ -249,6 +258,30 @@ class UpdraftPlus {
249
 
250
  }
251
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
252
  // Returns the number of bytes free, if it can be detected; otherwise, false
253
  // Presently, we only detect CPanel. If you know of others, then feel free to contribute!
254
  public function get_hosting_disk_quota_free() {
@@ -3419,45 +3452,98 @@ class UpdraftPlus {
3419
  return $interval;
3420
  }
3421
 
3422
- // Acts as a WordPress options filter
 
 
 
 
 
3423
  public function onedrive_checkchange($onedrive) {
3424
- $opts = UpdraftPlus_Options::get_updraft_option('updraft_onedrive');
3425
- if (!is_array($opts)) $opts = array();
 
 
 
 
 
 
 
 
 
 
 
 
3426
  if (!is_array($onedrive)) return $opts;
3427
- $old_client_id = empty($opts['clientid']) ? '' : $opts['clientid'];
3428
- $now_client_id = empty($onedrive['clientid']) ? '' : $onedrive['clientid'];
3429
- if (!empty($opts['refresh_token']) && $old_client_id != $now_client_id) {
3430
- unset($opts['refresh_token']);
3431
- unset($opts['tokensecret']);
3432
- unset($opts['ownername']);
3433
  }
3434
- foreach ($onedrive as $key => $value) {
3435
- if ('folder' == $key) $value = trim(str_replace('\\', '/', $value), '/');
3436
- $opts[$key] = ('clientid' == $key || 'secret' == $key) ? trim($value) : $value;
 
 
 
 
 
 
 
 
 
 
 
3437
  }
3438
  return $opts;
3439
  }
3440
-
3441
- // This is a WordPress options filter
 
 
 
 
3442
  public function azure_checkchange($azure) {
3443
- $opts = UpdraftPlus_Options::get_updraft_option('updraft_azure');
3444
- if (!is_array($opts)) $opts = array();
 
 
 
 
 
 
 
 
 
 
 
3445
  if (!is_array($azure)) return $opts;
3446
- foreach ($azure as $key => $value) {
3447
- if ('folder' == $key) $value = trim(str_replace('\\', '/', $value), '/');
3448
- // Only lower-case containers are permitted - enforce this
3449
- if ('container' == $key) $value = strtolower($value);
3450
- $opts[$key] = ('key' == $key || 'account_name' == $key) ? trim($value) : $value;
3451
- // Convert one likely misunderstanding of the format to enter the account name in
3452
- if ('account_name' == $key && preg_match('#^https?://(.*)\.blob\.core\.windows#i', $opts['account_name'], $matches)) {
3453
- $opts['account_name'] = $matches[1];
 
 
 
 
 
 
 
3454
  }
3455
  }
3456
  return $opts;
3457
  }
3458
 
3459
 
3460
- // Acts as a WordPress options filter
 
 
 
 
 
3461
  public function googledrive_checkchange($google) {
3462
 
3463
  // Get the current options (and possibly update them to the new format)
@@ -3503,32 +3589,59 @@ class UpdraftPlus {
3503
  return $opts;
3504
  }
3505
 
3506
- // Acts as a WordPress options filter
 
 
 
 
 
3507
  public function googlecloud_checkchange($google) {
3508
- $opts = UpdraftPlus_Options::get_updraft_option('updraft_googlecloud');
3509
- if (!is_array($google)) return $opts;
3510
-
3511
- $old_token = (empty($opts['token'])) ? '' : $opts['token'];
3512
- $old_client_id = (empty($opts['clientid'])) ? '' : $opts['clientid'];
3513
- $old_client_secret = (empty($opts['secret'])) ? '' : $opts['secret'];
3514
 
3515
- if($old_client_id == $google['clientid'] && $old_client_secret == $google['secret']){
3516
- $google['token'] = $old_token;
 
 
 
 
 
 
3517
  }
3518
- if (!empty($opts['token']) && $old_client_id != $google['clientid']) {
3519
- add_action('http_request_args', array($this, 'modify_http_options'));
3520
- UpdraftPlus_Addons_RemoteStorage_googlecloud::gcloud_auth_revoke(false);
3521
- remove_action('http_request_args', array($this, 'modify_http_options'));
3522
- $google['token'] = '';
3523
- unset($opts['ownername']);
3524
  }
3525
- foreach ($google as $key => $value) {
3526
- // Trim spaces - I got support requests from users who didn't spot the spaces they introduced when copy/pasting
3527
- $opts[$key] = ('clientid' == $key || 'secret' == $key) ? trim($value) : $value;
3528
- if ($key == 'bucket_location') $opts[$key] = trim(strtolower($value));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3529
  }
3530
 
3531
- return $google;
3532
  }
3533
 
3534
  public function ftp_sanitise($ftp) {
@@ -3545,7 +3658,12 @@ class UpdraftPlus {
3545
  return $s3;
3546
  }
3547
 
3548
- // Acts as a WordPress options filter
 
 
 
 
 
3549
  public function dropbox_checkchange($dropbox) {
3550
 
3551
  // Get the current options (and possibly update them to the new format)
@@ -3569,6 +3687,7 @@ class UpdraftPlus {
3569
  if (!isset($dropbox['settings'][$instance_id])) unset($opts['settings'][$instance_id]);
3570
  }
3571
 
 
3572
  if (!empty($dropbox['settings'])) {
3573
 
3574
  foreach ($dropbox['settings'] as $instance_id => $storage_options) {
@@ -3794,49 +3913,80 @@ class UpdraftPlus {
3794
  return ($input > 0) ? min($input, 9999) : 1;
3795
  }
3796
 
3797
- // This is used as a WordPress options filter
3798
- public function construct_webdav_url($input) {
 
 
 
 
 
 
 
3799
 
3800
- if (isset($input['webdav'])) {
3801
-
3802
- $url = null;
3803
- $slash = "/";
3804
- $host = "";
3805
- $colon = "";
3806
- $port_colon = "";
3807
-
3808
- if ((80 == $input['port'] && 'webdav' == $input['webdav']) || (443 == $input['port'] && 'webdavs' == $input['webdav'])) {
3809
- $input['port'] = '';
3810
- }
3811
-
3812
- if ('/' == substr($input['path'], 0, 1)){
3813
- $slash = "";
3814
- }
3815
-
3816
- if (false === strpos($input['host'],"@")){
3817
- $host = "@";
3818
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3819
 
3820
- if ('' != $input['user'] && '' != $input['pass']){
3821
- $colon = ":";
3822
- }
3823
 
3824
- if ('' != $input['host'] && '' != $input['port']){
3825
- $port_colon = ":";
3826
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3827
 
3828
- if (!empty($input['url']) && 'http' == strtolower(substr($input['url'], 0, 4))) {
3829
- $input['url'] = 'webdav'.substr($input['url'], 4);
3830
- } elseif ('' != $input['user'] && '' != $input['pass']) {
3831
- $input['url'] = $input['webdav'] . urlencode($input['user']) . $colon . urlencode($input['pass']) . $host . urlencode($input['host']) . $port_colon . $input['port'] . $slash . $input['path'];
3832
- } else {
3833
- $input['url'] = $input['webdav'] . urlencode($input['host']) . $port_colon . $input['port'] . $slash . $input['path'];
 
 
 
 
3834
  }
3835
-
3836
- // array_splice($input, 1);
3837
  }
3838
 
3839
- return array('url' => $input['url']);
3840
  }
3841
 
3842
  public function just_one_email($input, $required = false) {
@@ -4264,7 +4414,7 @@ CREATE TABLE $wpdb->signups (
4264
  // N.B. updraft_backup_history is not included here, as we don't want that wiped
4265
  return array('updraft_autobackup_default', 'updraft_dropbox', 'updraft_googledrive', 'updraftplus_tmp_googledrive_access_token', 'updraftplus_dismissedautobackup', 'dismissed_general_notices_until', 'dismissed_season_notices_until', 'updraftplus_dismissedexpiry', 'updraftplus_dismisseddashnotice', 'updraft_interval', 'updraft_interval_increments', 'updraft_interval_database', 'updraft_retain', 'updraft_retain_db', 'updraft_encryptionphrase', 'updraft_service', 'updraft_googledrive_clientid', 'updraft_googledrive_secret', 'updraft_googledrive_remotepath', 'updraft_ftp', 'updraft_server_address', 'updraft_dir', 'updraft_email', 'updraft_delete_local', 'updraft_debug_mode', 'updraft_include_plugins', 'updraft_include_themes', 'updraft_include_uploads', 'updraft_include_others', 'updraft_include_wpcore', 'updraft_include_wpcore_exclude', 'updraft_include_more', 'updraft_include_blogs', 'updraft_include_mu-plugins',
4266
  'updraft_include_others_exclude', 'updraft_include_uploads_exclude', 'updraft_lastmessage', 'updraft_googledrive_token', 'updraft_dropboxtk_request_token', 'updraft_dropboxtk_access_token', 'updraft_adminlocking', 'updraft_updraftvault', 'updraft_remotesites', 'updraft_migrator_localkeys', 'updraft_central_localkeys', 'updraft_retain_extrarules', 'updraft_googlecloud', 'updraft_include_more_path', 'updraft_split_every', 'updraft_ssl_nossl', 'updraft_backupdb_nonwp', 'updraft_extradbs', 'updraft_combine_jobs_around',
4267
- 'updraft_last_backup', 'updraft_starttime_files', 'updraft_starttime_db', 'updraft_startday_db', 'updraft_startday_files', 'updraft_sftp_settings', 'updraft_s3', 'updraft_s3generic', 'updraft_dreamhost', 'updraft_s3generic_login', 'updraft_s3generic_pass', 'updraft_s3generic_remote_path', 'updraft_s3generic_endpoint', 'updraft_webdav_settings', 'updraft_openstack', 'updraft_onedrive', 'updraft_azure', 'updraft_cloudfiles', 'updraft_cloudfiles_user', 'updraft_cloudfiles_apikey', 'updraft_cloudfiles_path', 'updraft_cloudfiles_authurl', 'updraft_ssl_useservercerts', 'updraft_ssl_disableverify', 'updraft_s3_login', 'updraft_s3_pass', 'updraft_s3_remote_path', 'updraft_dreamobjects_login', 'updraft_dreamobjects_pass', 'updraft_dreamobjects_remote_path', 'updraft_dreamobjects', 'updraft_report_warningsonly', 'updraft_report_wholebackup', 'updraft_log_syslog', 'updraft_extradatabases');
4268
  }
4269
 
4270
  /**
107
  public function itsec_scheduled_external_backup($x) { return (!wp_next_scheduled('updraft_backup')) ? false : true; }
108
  public function itsec_external_backup_link($x) { return UpdraftPlus_Options::admin_page_url().'?page=updraftplus'; }
109
 
110
+ /**
111
+ * This method will disconnect UpdraftVault accounts.
112
+ * @return Array - returns the saved options if an error is encountered.
113
+ */
114
  public function wp_loaded_vault_disconnect() {
115
+ $opts = $this->update_remote_storage_options_format('updraftvault');
116
+
117
+ if (is_wp_error($opts)) {
118
+ if ('recursion' !== $opts->get_error_code()) {
119
+ $msg = "UpdraftVault (".$opts->get_error_code()."): ".$opts->get_error_message();
120
+ $this->log($msg);
121
+ error_log("UpdraftPlus: $msg");
122
+ }
123
+ // The saved options had a problem; so, return the new ones
124
+ return $opts;
125
+ } elseif (!empty($opts['settings'])) {
126
+
127
+ foreach ($opts['settings'] as $instance_id => $storage_options) {
128
+ if (!empty($storage_options['token']) && $storage_options['token']) {
129
+ $site_id = $this->siteid();
130
+ $hash = hash('sha256', $site_id.':::'.$storage_options['token']);
131
+ if ($hash == $_POST['reset_hash']) {
132
+ $this->log('This site has been remotely disconnected from UpdraftPlus Vault');
133
+ require_once(UPDRAFTPLUS_DIR.'/methods/updraftvault.php');
134
+ $vault = new UpdraftPlus_BackupModule_updraftvault();
135
+ $vault->ajax_vault_disconnect();
136
+ // Die, as the vault method has already sent output
137
+ die;
138
+ } else {
139
+ $this->log('An invalid request was received to disconnect this site from UpdraftPlus Vault');
140
+ }
141
+ }
142
+ echo json_encode(array('disconnected' => 0));
143
  }
144
  }
 
145
  die;
146
  }
147
 
240
  $current_setting = UpdraftPlus_Options::get_updraft_option($method_key, array());
241
 
242
  if (!is_array($current_setting) && false !== $current_setting) return new WP_Error('format_unrecognised', 'Settings format not recognised', array('method' => $method, 'current_setting' => $current_setting));
243
+
244
  // Already converted?
245
  if (isset($current_setting['version'])) return $current_setting;
246
 
247
+ $new_setting = $this->wrap_remote_storage_options($current_setting);
 
 
 
 
 
 
 
 
 
248
 
249
  $already_active = true;
250
  $updated = UpdraftPlus_Options::update_updraft_option($method_key, $new_setting);
258
 
259
  }
260
 
261
+ /**
262
+ * This method will update the old style remote storage options to the new style (Apr 2017) if the user has imported a old style version of settings
263
+ *
264
+ * @param Array $options - The remote storage options settings array
265
+ * @return Array - The updated remote storage options settings array
266
+ */
267
+ public function wrap_remote_storage_options($options) {
268
+ // Already converted?
269
+ if (isset($options['version'])) return $options;
270
+
271
+ // Cryptographic randomness not required. The prefix helps avoid potential for type-juggling issues.
272
+ $uuid = 's-'.md5(rand().uniqid().microtime(true));
273
+
274
+ $new_setting = array(
275
+ 'version' => 1,
276
+ );
277
+
278
+ if (!is_array($options)) $options = array();
279
+
280
+ $new_setting['settings'] = array($uuid => $options);
281
+
282
+ return $new_setting;
283
+ }
284
+
285
  // Returns the number of bytes free, if it can be detected; otherwise, false
286
  // Presently, we only detect CPanel. If you know of others, then feel free to contribute!
287
  public function get_hosting_disk_quota_free() {
3452
  return $interval;
3453
  }
3454
 
3455
+ /**
3456
+ * Acts as a WordPress options filter
3457
+ *
3458
+ * @param Array $onedrive - An array of OneDrive options
3459
+ * @return Array - the returned array can either be the set of updated OneDrive settings or a WordPress error array
3460
+ */
3461
  public function onedrive_checkchange($onedrive) {
3462
+
3463
+ // Get the current options (and possibly update them to the new format)
3464
+ $opts = $this->update_remote_storage_options_format('onedrive');
3465
+
3466
+ if (is_wp_error($opts)) {
3467
+ if ('recursion' !== $opts->get_error_code()) {
3468
+ $msg = "OneDrive (".$opts->get_error_code()."): ".$opts->get_error_message();
3469
+ $this->log($msg);
3470
+ error_log("UpdraftPlus: $msg");
3471
+ }
3472
+ // The saved options had a problem; so, return the new ones
3473
+ return $onedrive;
3474
+ }
3475
+
3476
  if (!is_array($onedrive)) return $opts;
3477
+
3478
+ // Remove instances that no longer exist
3479
+ foreach ($opts['settings'] as $instance_id => $storage_options) {
3480
+ if (!isset($onedrive['settings'][$instance_id])) unset($opts['settings'][$instance_id]);
 
 
3481
  }
3482
+
3483
+ foreach ($onedrive['settings'] as $instance_id => $storage_options) {
3484
+ $old_client_id = empty($opts['settings'][$instance_id]['clientid']) ? '' : $opts['settings'][$instance_id]['clientid'];
3485
+ $now_client_id = empty($storage_options['clientid']) ? '' : $storage_options['clientid'];
3486
+ if (!empty($opts['settings'][$instance_id]['refresh_token']) && $old_client_id != $now_client_id) {
3487
+ unset($opts['settings'][$instance_id]['refresh_token']);
3488
+ unset($opts['settings'][$instance_id]['tokensecret']);
3489
+ unset($opts['settings'][$instance_id]['ownername']);
3490
+ }
3491
+
3492
+ foreach ($storage_options as $key => $value) {
3493
+ if ('folder' == $key) $value = trim(str_replace('\\', '/', $value), '/');
3494
+ $opts['settings'][$instance_id][$key] = ('clientid' == $key || 'secret' == $key) ? trim($value) : $value;
3495
+ }
3496
  }
3497
  return $opts;
3498
  }
3499
+
3500
+ /**
3501
+ * Acts as a WordPress options filter
3502
+ * @param Array $azure an array of Azure options
3503
+ * @return Array - the returned array can either be the set of updated Azure settings or a WordPress error array
3504
+ */
3505
  public function azure_checkchange($azure) {
3506
+ // Get the current options (and possibly update them to the new format)
3507
+ $opts = $this->update_remote_storage_options_format('azure');
3508
+
3509
+ if (is_wp_error($opts)) {
3510
+ if ('recursion' !== $opts->get_error_code()) {
3511
+ $msg = "Azure (".$opts->get_error_code()."): ".$opts->get_error_message();
3512
+ $this->log($msg);
3513
+ error_log("UpdraftPlus: $msg");
3514
+ }
3515
+ // The saved options had a problem; so, return the new ones
3516
+ return $azure;
3517
+ }
3518
+
3519
  if (!is_array($azure)) return $opts;
3520
+
3521
+ // Remove instances that no longer exist
3522
+ foreach ($opts['settings'] as $instance_id => $storage_options) {
3523
+ if (!isset($azure['settings'][$instance_id])) unset($opts['settings'][$instance_id]);
3524
+ }
3525
+ foreach ($azure['settings'] as $instance_id => $storage_options) {
3526
+ foreach ($storage_options as $key => $value) {
3527
+ if ('folder' == $key) $value = trim(str_replace('\\', '/', $value), '/');
3528
+ // Only lower-case containers are permitted - enforce this
3529
+ if ('container' == $key) $value = strtolower($value);
3530
+ $opts['settings'][$instance_id][$key] = ('key' == $key || 'account_name' == $key) ? trim($value) : $value;
3531
+ // Convert one likely misunderstanding of the format to enter the account name in
3532
+ if ('account_name' == $key && preg_match('#^https?://(.*)\.blob\.core\.windows#i', $opts['settings'][$instance_id]['account_name'], $matches)) {
3533
+ $opts['settings'][$instance_id]['account_name'] = $matches[1];
3534
+ }
3535
  }
3536
  }
3537
  return $opts;
3538
  }
3539
 
3540
 
3541
+ /**
3542
+ * Acts as a WordPress options filter
3543
+ *
3544
+ * @param Array $google - An array of Google Drive options
3545
+ * @return Array - the returned array can either be the set of updated Google Drive settings or a WordPress error array
3546
+ */
3547
  public function googledrive_checkchange($google) {
3548
 
3549
  // Get the current options (and possibly update them to the new format)
3589
  return $opts;
3590
  }
3591
 
3592
+ /**
3593
+ * Acts as a WordPress options filter
3594
+ *
3595
+ * @param Array $google - An array of Google Cloud options
3596
+ * @return Array - the returned array can either be the set of updated Google Cloud settings or a WordPress error array
3597
+ */
3598
  public function googlecloud_checkchange($google) {
3599
+
3600
+ // Get the current options (and possibly update them to the new format)
3601
+ $opts = $this->update_remote_storage_options_format('googlecloud');
 
 
 
3602
 
3603
+ if (is_wp_error($opts)) {
3604
+ if ('recursion' !== $opts->get_error_code()) {
3605
+ $msg = "Google Cloud (".$opts->get_error_code()."): ".$opts->get_error_message();
3606
+ $this->log($msg);
3607
+ error_log("UpdraftPlus: $msg");
3608
+ }
3609
+ // The saved options had a problem; so, return the new ones
3610
+ return $google;
3611
  }
3612
+
3613
+ if (!is_array($google)) return $opts;
3614
+
3615
+ // Remove instances that no longer exist
3616
+ foreach ($opts['settings'] as $instance_id => $storage_options) {
3617
+ if (!isset($google['settings'][$instance_id])) unset($opts['settings'][$instance_id]);
3618
  }
3619
+
3620
+ foreach ($google['settings'] as $instance_id => $storage_options) {
3621
+ $old_token = (empty($opts['settings'][$instance_id]['token'])) ? '' : $opts['settings'][$instance_id]['token'];
3622
+ $old_client_id = (empty($opts['settings'][$instance_id]['clientid'])) ? '' : $opts['settings'][$instance_id]['clientid'];
3623
+ $old_client_secret = (empty($opts['settings'][$instance_id]['secret'])) ? '' : $opts['settings'][$instance_id]['secret'];
3624
+
3625
+ if($old_client_id == $google['settings'][$instance_id]['clientid'] && $old_client_secret == $google['settings'][$instance_id]['secret']){
3626
+ $google['settings'][$instance_id]['token'] = $old_token;
3627
+ }
3628
+ if (!empty($opts['settings'][$instance_id]['token']) && $old_client_id != $google['settings'][$instance_id]['clientid']) {
3629
+ require_once(UPDRAFTPLUS_DIR.'/methods/googlecloud.php');
3630
+ add_action('http_request_args', array($this, 'modify_http_options'));
3631
+ $googlecloud = new UpdraftPlus_BackupModule_googlecloud();
3632
+ $googlecloud->gcloud_auth_revoke(false);
3633
+ remove_action('http_request_args', array($this, 'modify_http_options'));
3634
+ $opts['settings'][$instance_id]['token'] = '';
3635
+ unset($opts['settings'][$instance_id]['ownername']);
3636
+ }
3637
+ foreach ($storage_options as $key => $value) {
3638
+ // Trim spaces - I got support requests from users who didn't spot the spaces they introduced when copy/pasting
3639
+ $opts['settings'][$instance_id][$key] = ('clientid' == $key || 'secret' == $key) ? trim($value) : $value;
3640
+ if ($key == 'bucket_location') $opts['settings'][$instance_id][$key] = trim(strtolower($value));
3641
+ }
3642
  }
3643
 
3644
+ return $opts;
3645
  }
3646
 
3647
  public function ftp_sanitise($ftp) {
3658
  return $s3;
3659
  }
3660
 
3661
+ /**
3662
+ * Acts as a WordPress options filter
3663
+ *
3664
+ * @param Array $dropbox - An array of Dropbox options
3665
+ * @return Array - the returned array can either be the set of updated Dropbox settings or a WordPress error array
3666
+ */
3667
  public function dropbox_checkchange($dropbox) {
3668
 
3669
  // Get the current options (and possibly update them to the new format)
3687
  if (!isset($dropbox['settings'][$instance_id])) unset($opts['settings'][$instance_id]);
3688
  }
3689
 
3690
+ // Dropbox has a special case where the settings could be empty so we should check for this before
3691
  if (!empty($dropbox['settings'])) {
3692
 
3693
  foreach ($dropbox['settings'] as $instance_id => $storage_options) {
3913
  return ($input > 0) ? min($input, 9999) : 1;
3914
  }
3915
 
3916
+ /**
3917
+ * Acts as a WordPress options filter
3918
+ *
3919
+ * @param Array $webdav - An array of WebDAV options
3920
+ * @return Array - the returned array can either be the set of updated WebDAV settings or a WordPress error array
3921
+ */
3922
+ public function construct_webdav_url($webdav) {
3923
+ // Get the current options (and possibly update them to the new format)
3924
+ $opts = $this->update_remote_storage_options_format('webdav');
3925
 
3926
+ if (is_wp_error($opts)) {
3927
+ if ('recursion' !== $opts->get_error_code()) {
3928
+ $msg = "WebDAV (".$opts->get_error_code()."): ".$opts->get_error_message();
3929
+ $this->log($msg);
3930
+ error_log("UpdraftPlus: $msg");
 
 
 
 
 
 
 
 
 
 
 
 
 
3931
  }
3932
+ // The saved options had a problem; so, return the new ones
3933
+ return $webdav;
3934
+ }
3935
+
3936
+ // If the input is not as expected, then return the current options
3937
+ if (!is_array($webdav)) return $opts;
3938
+
3939
+ // Remove instances that no longer exist
3940
+ foreach ($opts['settings'] as $instance_id => $storage_options) {
3941
+ if (!isset($webdav['settings'][$instance_id])) unset($opts['settings'][$instance_id]);
3942
+ }
3943
+
3944
+ // WebDAV has a special case where the settings could be empty so we should check for this before proceeding
3945
+ if (!empty($webdav['settings'])) {
3946
 
3947
+ foreach ($webdav['settings'] as $instance_id => $storage_options) {
3948
+ if (isset($storage_options['webdav'])) {
 
3949
 
3950
+ $url = null;
3951
+ $slash = "/";
3952
+ $host = "";
3953
+ $colon = "";
3954
+ $port_colon = "";
3955
+
3956
+ if ((80 == $storage_options['port'] && 'webdav' == $storage_options['webdav']) || (443 == $storage_options['port'] && 'webdavs' == $storage_options['webdav'])) {
3957
+ $storage_options['port'] = '';
3958
+ }
3959
+
3960
+ if ('/' == substr($storage_options['path'], 0, 1)){
3961
+ $slash = "";
3962
+ }
3963
+
3964
+ if (false === strpos($storage_options['host'],"@")) {
3965
+ $host = "@";
3966
+ }
3967
+
3968
+ if ('' != $storage_options['user'] && '' != $storage_options['pass']) {
3969
+ $colon = ":";
3970
+ }
3971
+
3972
+ if ('' != $storage_options['host'] && '' != $storage_options['port']) {
3973
+ $port_colon = ":";
3974
+ }
3975
 
3976
+ if (!empty($storage_options['url']) && 'http' == strtolower(substr($storage_options['url'], 0, 4))) {
3977
+ $storage_options['url'] = 'webdav'.substr($storage_options['url'], 4);
3978
+ } elseif ('' != $storage_options['user'] && '' != $storage_options['pass']) {
3979
+ $storage_options['url'] = $storage_options['webdav'].urlencode($storage_options['user']).$colon.urlencode($storage_options['pass']).$host.urlencode($storage_options['host']).$port_colon.$storage_options['port'].$slash.$storage_options['path'];
3980
+ } else {
3981
+ $storage_options['url'] = $storage_options['webdav'].urlencode($storage_options['host']).$port_colon.$storage_options['port'].$slash.$storage_options['path'];
3982
+ }
3983
+
3984
+ $opts['settings'][$instance_id]['url'] = $storage_options['url'];
3985
+ }
3986
  }
 
 
3987
  }
3988
 
3989
+ return $opts;
3990
  }
3991
 
3992
  public function just_one_email($input, $required = false) {
4414
  // N.B. updraft_backup_history is not included here, as we don't want that wiped
4415
  return array('updraft_autobackup_default', 'updraft_dropbox', 'updraft_googledrive', 'updraftplus_tmp_googledrive_access_token', 'updraftplus_dismissedautobackup', 'dismissed_general_notices_until', 'dismissed_season_notices_until', 'updraftplus_dismissedexpiry', 'updraftplus_dismisseddashnotice', 'updraft_interval', 'updraft_interval_increments', 'updraft_interval_database', 'updraft_retain', 'updraft_retain_db', 'updraft_encryptionphrase', 'updraft_service', 'updraft_googledrive_clientid', 'updraft_googledrive_secret', 'updraft_googledrive_remotepath', 'updraft_ftp', 'updraft_server_address', 'updraft_dir', 'updraft_email', 'updraft_delete_local', 'updraft_debug_mode', 'updraft_include_plugins', 'updraft_include_themes', 'updraft_include_uploads', 'updraft_include_others', 'updraft_include_wpcore', 'updraft_include_wpcore_exclude', 'updraft_include_more', 'updraft_include_blogs', 'updraft_include_mu-plugins',
4416
  'updraft_include_others_exclude', 'updraft_include_uploads_exclude', 'updraft_lastmessage', 'updraft_googledrive_token', 'updraft_dropboxtk_request_token', 'updraft_dropboxtk_access_token', 'updraft_adminlocking', 'updraft_updraftvault', 'updraft_remotesites', 'updraft_migrator_localkeys', 'updraft_central_localkeys', 'updraft_retain_extrarules', 'updraft_googlecloud', 'updraft_include_more_path', 'updraft_split_every', 'updraft_ssl_nossl', 'updraft_backupdb_nonwp', 'updraft_extradbs', 'updraft_combine_jobs_around',
4417
+ 'updraft_last_backup', 'updraft_starttime_files', 'updraft_starttime_db', 'updraft_startday_db', 'updraft_startday_files', 'updraft_sftp', 'updraft_s3', 'updraft_s3generic', 'updraft_dreamhost', 'updraft_s3generic_login', 'updraft_s3generic_pass', 'updraft_s3generic_remote_path', 'updraft_s3generic_endpoint', 'updraft_webdav', 'updraft_openstack', 'updraft_onedrive', 'updraft_azure', 'updraft_cloudfiles', 'updraft_cloudfiles_user', 'updraft_cloudfiles_apikey', 'updraft_cloudfiles_path', 'updraft_cloudfiles_authurl', 'updraft_ssl_useservercerts', 'updraft_ssl_disableverify', 'updraft_s3_login', 'updraft_s3_pass', 'updraft_s3_remote_path', 'updraft_dreamobjects_login', 'updraft_dreamobjects_pass', 'updraft_dreamobjects_remote_path', 'updraft_dreamobjects', 'updraft_report_warningsonly', 'updraft_report_wholebackup', 'updraft_log_syslog', 'updraft_extradatabases');
4418
  }
4419
 
4420
  /**
css/admin.css CHANGED
@@ -212,6 +212,27 @@
212
  margin-right: 0px;
213
  }
214
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
215
  /* End Main Buttons */
216
 
217
  /* End of common elements */
212
  margin-right: 0px;
213
  }
214
 
215
+ .stored_local {
216
+ border-radius: 5px;
217
+ background-color: #007FE7;
218
+ padding: 3px 5px 5px 5px;
219
+ color: #ffffff;
220
+ font-size: 75%;
221
+ }
222
+
223
+ .form-table td.updraft_existingbackup_date {
224
+ padding-bottom: 5px;
225
+ }
226
+
227
+ .stored_icon {
228
+ height: 1.3em;
229
+ position: relative;
230
+ top: 0.2em;
231
+ }
232
+
233
+ .backup_date_label .clear-right {
234
+ clear: right;
235
+ }
236
  /* End Main Buttons */
237
 
238
  /* End of common elements */
includes/cacert.pem CHANGED
@@ -4126,4 +4126,453 @@ DwKTACdyxYvRVB9dSsNAl35VpnzBMwQUAR1JIGkLGZOdblgi90AMRgwjY/M50n92Uaf0yKHxDHYi
4126
  I0ZSKS3io0EHVmmY0gUJvGnHWmHNj4FgFU2A3ZDifcRQ8ow7bkrHxuaAKzyBvBGAFhAn1/DNP3nM
4127
  cyrDflOR1m749fPH0FFNjkulW+YZFzvWgQncItzujrnEj1PhZ7szuIgVRs/taTX/dQ1G885x4cVr
4128
  hkIGuUE=
4129
- -----END CERTIFICATE-----
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4126
  I0ZSKS3io0EHVmmY0gUJvGnHWmHNj4FgFU2A3ZDifcRQ8ow7bkrHxuaAKzyBvBGAFhAn1/DNP3nM
4127
  cyrDflOR1m749fPH0FFNjkulW+YZFzvWgQncItzujrnEj1PhZ7szuIgVRs/taTX/dQ1G885x4cVr
4128
  hkIGuUE=
4129
+ -----END CERTIFICATE-----
4130
+
4131
+ OISTE WISeKey Global Root GB CA
4132
+ ===============================
4133
+ -----BEGIN CERTIFICATE-----
4134
+ MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBtMQswCQYDVQQG
4135
+ EwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl
4136
+ ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAw
4137
+ MzJaFw0zOTEyMDExNTEwMzFaMG0xCzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYD
4138
+ VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEds
4139
+ b2JhbCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3HEokKtaX
4140
+ scriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGxWuR51jIjK+FTzJlFXHtP
4141
+ rby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk
4142
+ 9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNku7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4o
4143
+ Qnc/nSMbsrY9gBQHTC5P99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvg
4144
+ GUpuuy9rM2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB
4145
+ /zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZI
4146
+ hvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrghcViXfa43FK8+5/ea4n32cZiZBKpD
4147
+ dHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0
4148
+ VQreUGdNZtGn//3ZwLWoo4rOZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEui
4149
+ HZeeevJuQHHfaPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic
4150
+ Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM=
4151
+ -----END CERTIFICATE-----
4152
+
4153
+ Certification Authority of WoSign G2
4154
+ ====================================
4155
+ -----BEGIN CERTIFICATE-----
4156
+ MIIDfDCCAmSgAwIBAgIQayXaioidfLwPBbOxemFFRDANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQG
4157
+ EwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxLTArBgNVBAMTJENlcnRpZmljYXRpb24g
4158
+ QXV0aG9yaXR5IG9mIFdvU2lnbiBHMjAeFw0xNDExMDgwMDU4NThaFw00NDExMDgwMDU4NThaMFgx
4159
+ CzAJBgNVBAYTAkNOMRowGAYDVQQKExFXb1NpZ24gQ0EgTGltaXRlZDEtMCsGA1UEAxMkQ2VydGlm
4160
+ aWNhdGlvbiBBdXRob3JpdHkgb2YgV29TaWduIEcyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
4161
+ CgKCAQEAvsXEoCKASU+/2YcRxlPhuw+9YH+v9oIOH9ywjj2X4FA8jzrvZjtFB5sg+OPXJYY1kBai
4162
+ XW8wGQiHC38Gsp1ij96vkqVg1CuAmlI/9ZqD6TRay9nVYlzmDuDfBpgOgHzKtB0TiGsOqCR3A9Du
4163
+ W/PKaZE1OVbFbeP3PU9ekzgkyhjpJMuSA93MHD0JcOQg5PGurLtzaaNjOg9FD6FKmsLRY6zLEPg9
4164
+ 5k4ot+vElbGs/V6r+kHLXZ1L3PR8du9nfwB6jdKgGlxNIuG12t12s9R23164i5jIFFTMaxeSt+BK
4165
+ v0mUYQs4kI9dJGwlezt52eJ+na2fmKEG/HgUYFf47oB3sQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMC
4166
+ AQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU+mCp62XF3RYUCE4MD42b4Pdkr2cwDQYJKoZI
4167
+ hvcNAQELBQADggEBAFfDejaCnI2Y4qtAqkePx6db7XznPWZaOzG73/MWM5H8fHulwqZm46qwtyeY
4168
+ P0nXYGdnPzZPSsvxFPpahygc7Y9BMsaV+X3avXtbwrAh449G3CE4Q3RM+zD4F3LBMvzIkRfEzFg3
4169
+ TgvMWvchNSiDbGAtROtSjFA9tWwS1/oJu2yySrHFieT801LYYRf+epSEj3m2M1m6D8QL4nCgS3gu
4170
+ +sif/a+RZQp4OBXllxcU3fngLDT4ONCEIgDAFFEYKwLcMFrw6AF8NTojrwjkr6qOKEJJLvD1mTS+
4171
+ 7Q9LGOHSJDy7XUe3IfKN0QqZjuNuPq1w4I+5ysxugTH2e5x6eeRncRg=
4172
+ -----END CERTIFICATE-----
4173
+
4174
+ CA WoSign ECC Root
4175
+ ==================
4176
+ -----BEGIN CERTIFICATE-----
4177
+ MIICCTCCAY+gAwIBAgIQaEpYcIBr8I8C+vbe6LCQkDAKBggqhkjOPQQDAzBGMQswCQYDVQQGEwJD
4178
+ TjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxGzAZBgNVBAMTEkNBIFdvU2lnbiBFQ0MgUm9v
4179
+ dDAeFw0xNDExMDgwMDU4NThaFw00NDExMDgwMDU4NThaMEYxCzAJBgNVBAYTAkNOMRowGAYDVQQK
4180
+ ExFXb1NpZ24gQ0EgTGltaXRlZDEbMBkGA1UEAxMSQ0EgV29TaWduIEVDQyBSb290MHYwEAYHKoZI
4181
+ zj0CAQYFK4EEACIDYgAE4f2OuEMkq5Z7hcK6C62N4DrjJLnSsb6IOsq/Srj57ywvr1FQPEd1bPiU
4182
+ t5v8KB7FVMxjnRZLU8HnIKvNrCXSf4/CwVqCXjCLelTOA7WRf6qU0NGKSMyCBSah1VES1ns2o0Iw
4183
+ QDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUqv3VWqP2h4syhf3R
4184
+ MluARZPzA7gwCgYIKoZIzj0EAwMDaAAwZQIxAOSkhLCB1T2wdKyUpOgOPQB0TKGXa/kNUTyh2Tv0
4185
+ Daupn75OcsqF1NnstTJFGG+rrQIwfcf3aWMvoeGY7xMQ0Xk/0f7qO3/eVvSQsRUR2LIiFdAvwyYu
4186
+ a/GRspBl9JrmkO5K
4187
+ -----END CERTIFICATE-----
4188
+
4189
+ SZAFIR ROOT CA2
4190
+ ===============
4191
+ -----BEGIN CERTIFICATE-----
4192
+ MIIDcjCCAlqgAwIBAgIUPopdB+xV0jLVt+O2XwHrLdzk1uQwDQYJKoZIhvcNAQELBQAwUTELMAkG
4193
+ A1UEBhMCUEwxKDAmBgNVBAoMH0tyYWpvd2EgSXpiYSBSb3psaWN6ZW5pb3dhIFMuQS4xGDAWBgNV
4194
+ BAMMD1NaQUZJUiBST09UIENBMjAeFw0xNTEwMTkwNzQzMzBaFw0zNTEwMTkwNzQzMzBaMFExCzAJ
4195
+ BgNVBAYTAlBMMSgwJgYDVQQKDB9LcmFqb3dhIEl6YmEgUm96bGljemVuaW93YSBTLkEuMRgwFgYD
4196
+ VQQDDA9TWkFGSVIgUk9PVCBDQTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3vD5Q
4197
+ qEvNQLXOYeeWyrSh2gwisPq1e3YAd4wLz32ohswmUeQgPYUM1ljj5/QqGJ3a0a4m7utT3PSQ1hNK
4198
+ DJA8w/Ta0o4NkjrcsbH/ON7Dui1fgLkCvUqdGw+0w8LBZwPd3BucPbOw3gAeqDRHu5rr/gsUvTaE
4199
+ 2g0gv/pby6kWIK05YO4vdbbnl5z5Pv1+TW9NL++IDWr63fE9biCloBK0TXC5ztdyO4mTp4CEHCdJ
4200
+ ckm1/zuVnsHMyAHs6A6KCpbns6aH5db5BSsNl0BwPLqsdVqc1U2dAgrSS5tmS0YHF2Wtn2yIANwi
4201
+ ieDhZNRnvDF5YTy7ykHNXGoAyDw4jlivAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0P
4202
+ AQH/BAQDAgEGMB0GA1UdDgQWBBQuFqlKGLXLzPVvUPMjX/hd56zwyDANBgkqhkiG9w0BAQsFAAOC
4203
+ AQEAtXP4A9xZWx126aMqe5Aosk3AM0+qmrHUuOQn/6mWmc5G4G18TKI4pAZw8PRBEew/R40/cof5
4204
+ O/2kbytTAOD/OblqBw7rHRz2onKQy4I9EYKL0rufKq8h5mOGnXkZ7/e7DDWQw4rtTw/1zBLZpD67
4205
+ oPwglV9PJi8RI4NOdQcPv5vRtB3pEAT+ymCPoky4rc/hkA/NrgrHXXu3UNLUYfrVFdvXn4dRVOul
4206
+ 4+vJhaAlIDf7js4MNIThPIGyd05DpYhfhmehPea0XGG2Ptv+tyjFogeutcrKjSoS75ftwjCkySp6
4207
+ +/NNIxuZMzSgLvWpCz/UXeHPhJ/iGcJfitYgHuNztw==
4208
+ -----END CERTIFICATE-----
4209
+
4210
+ Certum Trusted Network CA 2
4211
+ ===========================
4212
+ -----BEGIN CERTIFICATE-----
4213
+ MIIF0jCCA7qgAwIBAgIQIdbQSk8lD8kyN/yqXhKN6TANBgkqhkiG9w0BAQ0FADCBgDELMAkGA1UE
4214
+ BhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNVBAsTHkNlcnR1
4215
+ bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29y
4216
+ ayBDQSAyMCIYDzIwMTExMDA2MDgzOTU2WhgPMjA0NjEwMDYwODM5NTZaMIGAMQswCQYDVQQGEwJQ
4217
+ TDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENl
4218
+ cnRpZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENB
4219
+ IDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC9+Xj45tWADGSdhhuWZGc/IjoedQF9
4220
+ 7/tcZ4zJzFxrqZHmuULlIEub2pt7uZld2ZuAS9eEQCsn0+i6MLs+CRqnSZXvK0AkwpfHp+6bJe+o
4221
+ CgCXhVqqndwpyeI1B+twTUrWwbNWuKFBOJvR+zF/j+Bf4bE/D44WSWDXBo0Y+aomEKsq09DRZ40b
4222
+ Rr5HMNUuctHFY9rnY3lEfktjJImGLjQ/KUxSiyqnwOKRKIm5wFv5HdnnJ63/mgKXwcZQkpsCLL2p
4223
+ uTRZCr+ESv/f/rOf69me4Jgj7KZrdxYq28ytOxykh9xGc14ZYmhFV+SQgkK7QtbwYeDBoz1mo130
4224
+ GO6IyY0XRSmZMnUCMe4pJshrAua1YkV/NxVaI2iJ1D7eTiew8EAMvE0Xy02isx7QBlrd9pPPV3WZ
4225
+ 9fqGGmd4s7+W/jTcvedSVuWz5XV710GRBdxdaeOVDUO5/IOWOZV7bIBaTxNyxtd9KXpEulKkKtVB
4226
+ Rgkg/iKgtlswjbyJDNXXcPiHUv3a76xRLgezTv7QCdpw75j6VuZt27VXS9zlLCUVyJ4ueE742pye
4227
+ hizKV/Ma5ciSixqClnrDvFASadgOWkaLOusm+iPJtrCBvkIApPjW/jAux9JG9uWOdf3yzLnQh1vM
4228
+ BhBgu4M1t15n3kfsmUjxpKEV/q2MYo45VU85FrmxY53/twIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
4229
+ AQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZI
4230
+ hvcNAQENBQADggIBAHGlDs7k6b8/ONWJWsQCYftMxRQXLYtPU2sQF/xlhMcQSZDe28cmk4gmb3DW
4231
+ Al45oPePq5a1pRNcgRRtDoGCERuKTsZPpd1iHkTfCVn0W3cLN+mLIMb4Ck4uWBzrM9DPhmDJ2vuA
4232
+ L55MYIR4PSFk1vtBHxgP58l1cb29XN40hz5BsA72udY/CROWFC/emh1auVbONTqwX3BNXuMp8SMo
4233
+ clm2q8KMZiYcdywmdjWLKKdpoPk79SPdhRB0yZADVpHnr7pH1BKXESLjokmUbOe3lEu6LaTaM4tM
4234
+ pkT/WjzGHWTYtTHkpjx6qFcL2+1hGsvxznN3Y6SHb0xRONbkX8eftoEq5IVIeVheO/jbAoJnwTnb
4235
+ w3RLPTYe+SmTiGhbqEQZIfCn6IENLOiTNrQ3ssqwGyZ6miUfmpqAnksqP/ujmv5zMnHCnsZy4Ypo
4236
+ J/HkD7TETKVhk/iXEAcqMCWpuchxuO9ozC1+9eB+D4Kob7a6bINDd82Kkhehnlt4Fj1F4jNy3eFm
4237
+ ypnTycUm/Q1oBEauttmbjL4ZvrHG8hnjXALKLNhvSgfZyTXaQHXyxKcZb55CEJh15pWLYLztxRLX
4238
+ is7VmFxWlgPF7ncGNf/P5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7
4239
+ zAYspsbiDrW5viSP
4240
+ -----END CERTIFICATE-----
4241
+
4242
+ Hellenic Academic and Research Institutions RootCA 2015
4243
+ =======================================================
4244
+ -----BEGIN CERTIFICATE-----
4245
+ MIIGCzCCA/OgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcT
4246
+ BkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0
4247
+ aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNl
4248
+ YXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIwMTUwHhcNMTUwNzA3MTAxMTIxWhcNNDAwNjMwMTAx
4249
+ MTIxWjCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMg
4250
+ QWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNV
4251
+ BAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIw
4252
+ MTUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDC+Kk/G4n8PDwEXT2QNrCROnk8Zlrv
4253
+ bTkBSRq0t89/TSNTt5AA4xMqKKYx8ZEA4yjsriFBzh/a/X0SWwGDD7mwX5nh8hKDgE0GPt+sr+eh
4254
+ iGsxr/CL0BgzuNtFajT0AoAkKAoCFZVedioNmToUW/bLy1O8E00BiDeUJRtCvCLYjqOWXjrZMts+
4255
+ 6PAQZe104S+nfK8nNLspfZu2zwnI5dMK/IhlZXQK3HMcXM1AsRzUtoSMTFDPaI6oWa7CJ06CojXd
4256
+ FPQf/7J31Ycvqm59JCfnxssm5uX+Zwdj2EUN3TpZZTlYepKZcj2chF6IIbjV9Cz82XBST3i4vTwr
4257
+ i5WY9bPRaM8gFH5MXF/ni+X1NYEZN9cRCLdmvtNKzoNXADrDgfgXy5I2XdGj2HUb4Ysn6npIQf1F
4258
+ GQatJ5lOwXBH3bWfgVMS5bGMSF0xQxfjjMZ6Y5ZLKTBOhE5iGV48zpeQpX8B653g+IuJ3SWYPZK2
4259
+ fu/Z8VFRfS0myGlZYeCsargqNhEEelC9MoS+L9xy1dcdFkfkR2YgP/SWxa+OAXqlD3pk9Q0Yh9mu
4260
+ iNX6hME6wGkoLfINaFGq46V3xqSQDqE3izEjR8EJCOtu93ib14L8hCCZSRm2Ekax+0VVFqmjZayc
4261
+ Bw/qa9wfLgZy7IaIEuQt218FL+TwA9MmM+eAws1CoRc0CwIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
4262
+ AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUcRVnyMjJvXVdctA4GGqd83EkVAswDQYJKoZI
4263
+ hvcNAQELBQADggIBAHW7bVRLqhBYRjTyYtcWNl0IXtVsyIe9tC5G8jH4fOpCtZMWVdyhDBKg2mF+
4264
+ D1hYc2Ryx+hFjtyp8iY/xnmMsVMIM4GwVhO+5lFc2JsKT0ucVlMC6U/2DWDqTUJV6HwbISHTGzrM
4265
+ d/K4kPFox/la/vot9L/J9UUbzjgQKjeKeaO04wlshYaT/4mWJ3iBj2fjRnRUjtkNaeJK9E10A/+y
4266
+ d+2VZ5fkscWrv2oj6NSU4kQoYsRL4vDY4ilrGnB+JGGTe08DMiUNRSQrlrRGar9KC/eaj8GsGsVn
4267
+ 82800vpzY4zvFrCopEYq+OsS7HK07/grfoxSwIuEVPkvPuNVqNxmsdnhX9izjFk0WaSrT2y7Hxjb
4268
+ davYy5LNlDhhDgcGH0tGEPEVvo2FXDtKK4F5D7Rpn0lQl033DlZdwJVqwjbDG2jJ9SrcR5q+ss7F
4269
+ Jej6A7na+RZukYT1HCjI/CbM1xyQVqdfbzoEvM14iQuODy+jqk+iGxI9FghAD/FGTNeqewjBCvVt
4270
+ J94Cj8rDtSvK6evIIVM4pcw72Hc3MKJP2W/R8kCtQXoXxdZKNYm3QdV8hn9VTYNKpXMgwDqvkPGa
4271
+ JI7ZjnHKe7iG2rKPmT4dEw0SEe7Uq/DpFXYC5ODfqiAeW2GFZECpkJcNrVPSWh2HagCXZWK0vm9q
4272
+ p/UsQu0yrbYhnr68
4273
+ -----END CERTIFICATE-----
4274
+
4275
+ Hellenic Academic and Research Institutions ECC RootCA 2015
4276
+ ===========================================================
4277
+ -----BEGIN CERTIFICATE-----
4278
+ MIICwzCCAkqgAwIBAgIBADAKBggqhkjOPQQDAjCBqjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0
4279
+ aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9u
4280
+ cyBDZXJ0LiBBdXRob3JpdHkxRDBCBgNVBAMTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJj
4281
+ aCBJbnN0aXR1dGlvbnMgRUNDIFJvb3RDQSAyMDE1MB4XDTE1MDcwNzEwMzcxMloXDTQwMDYzMDEw
4282
+ MzcxMlowgaoxCzAJBgNVBAYTAkdSMQ8wDQYDVQQHEwZBdGhlbnMxRDBCBgNVBAoTO0hlbGxlbmlj
4283
+ IEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUQwQgYD
4284
+ VQQDEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIEVDQyBSb290
4285
+ Q0EgMjAxNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJKgQehLgoRc4vgxEZmGZE4JJS+dQS8KrjVP
4286
+ dJWyUWRrjWvmP3CV8AVER6ZyOFB2lQJajq4onvktTpnvLEhvTCUp6NFxW98dwXU3tNf6e3pCnGoK
4287
+ Vlp8aQuqgAkkbH7BRqNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O
4288
+ BBYEFLQiC4KZJAEOnLvkDv2/+5cgk5kqMAoGCCqGSM49BAMCA2cAMGQCMGfOFmI4oqxiRaeplSTA
4289
+ GiecMjvAwNW6qef4BENThe5SId6d9SWDPp5YSy/XZxMOIQIwBeF1Ad5o7SofTUwJCA3sS61kFyjn
4290
+ dc5FZXIhF8siQQ6ME5g4mlRtm8rifOoCWCKR
4291
+ -----END CERTIFICATE-----
4292
+
4293
+ Certplus Root CA G1
4294
+ ===================
4295
+ -----BEGIN CERTIFICATE-----
4296
+ MIIFazCCA1OgAwIBAgISESBVg+QtPlRWhS2DN7cs3EYRMA0GCSqGSIb3DQEBDQUAMD4xCzAJBgNV
4297
+ BAYTAkZSMREwDwYDVQQKDAhDZXJ0cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMTAe
4298
+ Fw0xNDA1MjYwMDAwMDBaFw0zODAxMTUwMDAwMDBaMD4xCzAJBgNVBAYTAkZSMREwDwYDVQQKDAhD
4299
+ ZXJ0cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMTCCAiIwDQYJKoZIhvcNAQEBBQAD
4300
+ ggIPADCCAgoCggIBANpQh7bauKk+nWT6VjOaVj0W5QOVsjQcmm1iBdTYj+eJZJ+622SLZOZ5KmHN
4301
+ r49aiZFluVj8tANfkT8tEBXgfs+8/H9DZ6itXjYj2JizTfNDnjl8KvzsiNWI7nC9hRYt6kuJPKNx
4302
+ Qv4c/dMcLRC4hlTqQ7jbxofaqK6AJc96Jh2qkbBIb6613p7Y1/oA/caP0FG7Yn2ksYyy/yARujVj
4303
+ BYZHYEMzkPZHogNPlk2dT8Hq6pyi/jQu3rfKG3akt62f6ajUeD94/vI4CTYd0hYCyOwqaK/1jpTv
4304
+ LRN6HkJKHRUxrgwEV/xhc/MxVoYxgKDEEW4wduOU8F8ExKyHcomYxZ3MVwia9Az8fXoFOvpHgDm2
4305
+ z4QTd28n6v+WZxcIbekN1iNQMLAVdBM+5S//Ds3EC0pd8NgAM0lm66EYfFkuPSi5YXHLtaW6uOrc
4306
+ 4nBvCGrch2c0798wct3zyT8j/zXhviEpIDCB5BmlIOklynMxdCm+4kLV87ImZsdo/Rmz5yCTmehd
4307
+ 4F6H50boJZwKKSTUzViGUkAksnsPmBIgJPaQbEfIDbsYIC7Z/fyL8inqh3SV4EJQeIQEQWGw9CEj
4308
+ jy3LKCHyamz0GqbFFLQ3ZU+V/YDI+HLlJWvEYLF7bY5KinPOWftwenMGE9nTdDckQQoRb5fc5+R+
4309
+ ob0V8rqHDz1oihYHAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0G
4310
+ A1UdDgQWBBSowcCbkahDFXxdBie0KlHYlwuBsTAfBgNVHSMEGDAWgBSowcCbkahDFXxdBie0KlHY
4311
+ lwuBsTANBgkqhkiG9w0BAQ0FAAOCAgEAnFZvAX7RvUz1isbwJh/k4DgYzDLDKTudQSk0YcbX8ACh
4312
+ 66Ryj5QXvBMsdbRX7gp8CXrc1cqh0DQT+Hern+X+2B50ioUHj3/MeXrKls3N/U/7/SMNkPX0XtPG
4313
+ YX2eEeAC7gkE2Qfdpoq3DIMku4NQkv5gdRE+2J2winq14J2by5BSS7CTKtQ+FjPlnsZlFT5kOwQ/
4314
+ 2wyPX1wdaR+v8+khjPPvl/aatxm2hHSco1S1cE5j2FddUyGbQJJD+tZ3VTNPZNX70Cxqjm0lpu+F
4315
+ 6ALEUz65noe8zDUa3qHpimOHZR4RKttjd5cUvpoUmRGywO6wT/gUITJDT5+rosuoD6o7BlXGEilX
4316
+ CNQ314cnrUlZp5GrRHpejXDbl85IULFzk/bwg2D5zfHhMf1bfHEhYxQUqq/F3pN+aLHsIqKqkHWe
4317
+ tUNy6mSjhEv9DKgma3GX7lZjZuhCVPnHHd/Qj1vfyDBviP4NxDMcU6ij/UgQ8uQKTuEVV/xuZDDC
4318
+ VRHc6qnNSlSsKWNEz0pAoNZoWRsz+e86i9sgktxChL8Bq4fA1SCC28a5g4VCXA9DO2pJNdWY9BW/
4319
+ +mGBDAkgGNLQFwzLSABQ6XaCjGTXOqAHVcweMcDvOrRl++O/QmueD6i9a5jc2NvLi6Td11n0bt3+
4320
+ qsOR0C5CB8AMTVPNJLFMWx5R9N/pkvo=
4321
+ -----END CERTIFICATE-----
4322
+
4323
+ Certplus Root CA G2
4324
+ ===================
4325
+ -----BEGIN CERTIFICATE-----
4326
+ MIICHDCCAaKgAwIBAgISESDZkc6uo+jF5//pAq/Pc7xVMAoGCCqGSM49BAMDMD4xCzAJBgNVBAYT
4327
+ AkZSMREwDwYDVQQKDAhDZXJ0cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMjAeFw0x
4328
+ NDA1MjYwMDAwMDBaFw0zODAxMTUwMDAwMDBaMD4xCzAJBgNVBAYTAkZSMREwDwYDVQQKDAhDZXJ0
4329
+ cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMjB2MBAGByqGSM49AgEGBSuBBAAiA2IA
4330
+ BM0PW1aC3/BFGtat93nwHcmsltaeTpwftEIRyoa/bfuFo8XlGVzX7qY/aWfYeOKmycTbLXku54uN
4331
+ Am8xIk0G42ByRZ0OQneezs/lf4WbGOT8zC5y0xaTTsqZY1yhBSpsBqNjMGEwDgYDVR0PAQH/BAQD
4332
+ AgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNqDYwJ5jtpMxjwjFNiPwyCrKGBZMB8GA1Ud
4333
+ IwQYMBaAFNqDYwJ5jtpMxjwjFNiPwyCrKGBZMAoGCCqGSM49BAMDA2gAMGUCMHD+sAvZ94OX7PNV
4334
+ HdTcswYO/jOYnYs5kGuUIe22113WTNchp+e/IQ8rzfcq3IUHnQIxAIYUFuXcsGXCwI4Un78kFmjl
4335
+ vPl5adytRSv3tjFzzAalU5ORGpOucGpnutee5WEaXw==
4336
+ -----END CERTIFICATE-----
4337
+
4338
+ OpenTrust Root CA G1
4339
+ ====================
4340
+ -----BEGIN CERTIFICATE-----
4341
+ MIIFbzCCA1egAwIBAgISESCzkFU5fX82bWTCp59rY45nMA0GCSqGSIb3DQEBCwUAMEAxCzAJBgNV
4342
+ BAYTAkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9wZW5UcnVzdCBSb290IENBIEcx
4343
+ MB4XDTE0MDUyNjA4NDU1MFoXDTM4MDExNTAwMDAwMFowQDELMAkGA1UEBhMCRlIxEjAQBgNVBAoM
4344
+ CU9wZW5UcnVzdDEdMBsGA1UEAwwUT3BlblRydXN0IFJvb3QgQ0EgRzEwggIiMA0GCSqGSIb3DQEB
4345
+ AQUAA4ICDwAwggIKAoICAQD4eUbalsUwXopxAy1wpLuwxQjczeY1wICkES3d5oeuXT2R0odsN7fa
4346
+ Yp6bwiTXj/HbpqbfRm9RpnHLPhsxZ2L3EVs0J9V5ToybWL0iEA1cJwzdMOWo010hOHQX/uMftk87
4347
+ ay3bfWAfjH1MBcLrARYVmBSO0ZB3Ij/swjm4eTrwSSTilZHcYTSSjFR077F9jAHiOH3BX2pfJLKO
4348
+ YheteSCtqx234LSWSE9mQxAGFiQD4eCcjsZGT44ameGPuY4zbGneWK2gDqdkVBFpRGZPTBKnjix9
4349
+ xNRbxQA0MMHZmf4yzgeEtE7NCv82TWLxp2NX5Ntqp66/K7nJ5rInieV+mhxNaMbBGN4zK1FGSxyO
4350
+ 9z0M+Yo0FMT7MzUj8czxKselu7Cizv5Ta01BG2Yospb6p64KTrk5M0ScdMGTHPjgniQlQ/GbI4Kq
4351
+ 3ywgsNw2TgOzfALU5nsaqocTvz6hdLubDuHAk5/XpGbKuxs74zD0M1mKB3IDVedzagMxbm+WG+Oi
4352
+ n6+Sx+31QrclTDsTBM8clq8cIqPQqwWyTBIjUtz9GVsnnB47ev1CI9sjgBPwvFEVVJSmdz7QdFG9
4353
+ URQIOTfLHzSpMJ1ShC5VkLG631UAC9hWLbFJSXKAqWLXwPYYEQRVzXR7z2FwefR7LFxckvzluFqr
4354
+ TJOVoSfupb7PcSNCupt2LQIDAQABo2MwYTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
4355
+ /zAdBgNVHQ4EFgQUl0YhVyE12jZVx/PxN3DlCPaTKbYwHwYDVR0jBBgwFoAUl0YhVyE12jZVx/Px
4356
+ N3DlCPaTKbYwDQYJKoZIhvcNAQELBQADggIBAB3dAmB84DWn5ph76kTOZ0BP8pNuZtQ5iSas000E
4357
+ PLuHIT839HEl2ku6q5aCgZG27dmxpGWX4m9kWaSW7mDKHyP7Rbr/jyTwyqkxf3kfgLMtMrpkZ2Cv
4358
+ uVnN35pJ06iCsfmYlIrM4LvgBBuZYLFGZdwIorJGnkSI6pN+VxbSFXJfLkur1J1juONI5f6ELlgK
4359
+ n0Md/rcYkoZDSw6cMoYsYPXpSOqV7XAp8dUv/TW0V8/bhUiZucJvbI/NeJWsZCj9VrDDb8O+WVLh
4360
+ X4SPgPL0DTatdrOjteFkdjpY3H1PXlZs5VVZV6Xf8YpmMIzUUmI4d7S+KNfKNsSbBfD4Fdvb8e80
4361
+ nR14SohWZ25g/4/Ii+GOvUKpMwpZQhISKvqxnUOOBZuZ2mKtVzazHbYNeS2WuOvyDEsMpZTGMKcm
4362
+ GS3tTAZQMPH9WD25SxdfGbRqhFS0OE85og2WaMMolP3tLR9Ka0OWLpABEPs4poEL0L9109S5zvE/
4363
+ bw4cHjdx5RiHdRk/ULlepEU0rbDK5uUTdg8xFKmOLZTW1YVNcxVPS/KyPu1svf0OnWZzsD2097+o
4364
+ 4BGkxK51CUpjAEggpsadCwmKtODmzj7HPiY46SvepghJAwSQiumPv+i2tCqjI40cHLI5kqiPAlxA
4365
+ OXXUc0ECd97N4EOH1uS6SsNsEn/+KuYj1oxx
4366
+ -----END CERTIFICATE-----
4367
+
4368
+ OpenTrust Root CA G2
4369
+ ====================
4370
+ -----BEGIN CERTIFICATE-----
4371
+ MIIFbzCCA1egAwIBAgISESChaRu/vbm9UpaPI+hIvyYRMA0GCSqGSIb3DQEBDQUAMEAxCzAJBgNV
4372
+ BAYTAkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9wZW5UcnVzdCBSb290IENBIEcy
4373
+ MB4XDTE0MDUyNjAwMDAwMFoXDTM4MDExNTAwMDAwMFowQDELMAkGA1UEBhMCRlIxEjAQBgNVBAoM
4374
+ CU9wZW5UcnVzdDEdMBsGA1UEAwwUT3BlblRydXN0IFJvb3QgQ0EgRzIwggIiMA0GCSqGSIb3DQEB
4375
+ AQUAA4ICDwAwggIKAoICAQDMtlelM5QQgTJT32F+D3Y5z1zCU3UdSXqWON2ic2rxb95eolq5cSG+
4376
+ Ntmh/LzubKh8NBpxGuga2F8ORAbtp+Dz0mEL4DKiltE48MLaARf85KxP6O6JHnSrT78eCbY2albz
4377
+ 4e6WiWYkBuTNQjpK3eCasMSCRbP+yatcfD7J6xcvDH1urqWPyKwlCm/61UWY0jUJ9gNDlP7ZvyCV
4378
+ eYCYitmJNbtRG6Q3ffyZO6v/v6wNj0OxmXsWEH4db0fEFY8ElggGQgT4hNYdvJGmQr5J1WqIP7wt
4379
+ UdGejeBSzFfdNTVY27SPJIjki9/ca1TSgSuyzpJLHB9G+h3Ykst2Z7UJmQnlrBcUVXDGPKBWCgOz
4380
+ 3GIZ38i1MH/1PCZ1Eb3XG7OHngevZXHloM8apwkQHZOJZlvoPGIytbU6bumFAYueQ4xncyhZW+vj
4381
+ 3CzMpSZyYhK05pyDRPZRpOLAeiRXyg6lPzq1O4vldu5w5pLeFlwoW5cZJ5L+epJUzpM5ChaHvGOz
4382
+ 9bGTXOBut9Dq+WIyiET7vycotjCVXRIouZW+j1MY5aIYFuJWpLIsEPUdN6b4t/bQWVyJ98LVtZR0
4383
+ 0dX+G7bw5tYee9I8y6jj9RjzIR9u701oBnstXW5DiabA+aC/gh7PU3+06yzbXfZqfUAkBXKJOAGT
4384
+ y3HCOV0GEfZvePg3DTmEJwIDAQABo2MwYTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
4385
+ /zAdBgNVHQ4EFgQUajn6QiL35okATV59M4PLuG53hq8wHwYDVR0jBBgwFoAUajn6QiL35okATV59
4386
+ M4PLuG53hq8wDQYJKoZIhvcNAQENBQADggIBAJjLq0A85TMCl38th6aP1F5Kr7ge57tx+4BkJamz
4387
+ Gj5oXScmp7oq4fBXgwpkTx4idBvpkF/wrM//T2h6OKQQbA2xx6R3gBi2oihEdqc0nXGEL8pZ0keI
4388
+ mUEiyTCYYW49qKgFbdEfwFFEVn8nNQLdXpgKQuswv42hm1GqO+qTRmTFAHneIWv2V6CG1wZy7HBG
4389
+ S4tz3aAhdT7cHcCP009zHIXZ/n9iyJVvttN7jLpTwm+bREx50B1ws9efAvSyB7DH5fitIw6mVskp
4390
+ EndI2S9G/Tvw/HRwkqWOOAgfZDC2t0v7NqwQjqBSM2OdAzVWxWm9xiNaJ5T2pBL4LTM8oValX9YZ
4391
+ 6e18CL13zSdkzJTaTkZQh+D5wVOAHrut+0dSixv9ovneDiK3PTNZbNTe9ZUGMg1RGUFcPk8G97kr
4392
+ gCf2o6p6fAbhQ8MTOWIaNr3gKC6UAuQpLmBVrkA9sHSSXvAgZJY/X0VdiLWK2gKgW0VU3jg9CcCo
4393
+ SmVGFvyqv1ROTVu+OEO3KMqLM6oaJbolXCkvW0pujOotnCr2BXbgd5eAiN1nE28daCSLT7d0geX0
4394
+ YJ96Vdc+N9oWaz53rK4YcJUIeSkDiv7BO7M/Gg+kO14fWKGVyasvc0rQLW6aWQ9VGHgtPFGml4vm
4395
+ u7JwqkwR3v98KzfUetF3NI/n+UL3PIEMS1IK
4396
+ -----END CERTIFICATE-----
4397
+
4398
+ OpenTrust Root CA G3
4399
+ ====================
4400
+ -----BEGIN CERTIFICATE-----
4401
+ MIICITCCAaagAwIBAgISESDm+Ez8JLC+BUCs2oMbNGA/MAoGCCqGSM49BAMDMEAxCzAJBgNVBAYT
4402
+ AkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9wZW5UcnVzdCBSb290IENBIEczMB4X
4403
+ DTE0MDUyNjAwMDAwMFoXDTM4MDExNTAwMDAwMFowQDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCU9w
4404
+ ZW5UcnVzdDEdMBsGA1UEAwwUT3BlblRydXN0IFJvb3QgQ0EgRzMwdjAQBgcqhkjOPQIBBgUrgQQA
4405
+ IgNiAARK7liuTcpm3gY6oxH84Bjwbhy6LTAMidnW7ptzg6kjFYwvWYpa3RTqnVkrQ7cG7DK2uu5B
4406
+ ta1doYXM6h0UZqNnfkbilPPntlahFVmhTzeXuSIevRHr9LIfXsMUmuXZl5mjYzBhMA4GA1UdDwEB
4407
+ /wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRHd8MUi2I5DMlv4VBN0BBY3JWIbTAf
4408
+ BgNVHSMEGDAWgBRHd8MUi2I5DMlv4VBN0BBY3JWIbTAKBggqhkjOPQQDAwNpADBmAjEAj6jcnboM
4409
+ BBf6Fek9LykBl7+BFjNAk2z8+e2AcG+qj9uEwov1NcoG3GRvaBbhj5G5AjEA2Euly8LQCGzpGPta
4410
+ 3U1fJAuwACEl74+nBCZx4nxp5V2a+EEfOzmTk51V6s2N8fvB
4411
+ -----END CERTIFICATE-----
4412
+
4413
+ ISRG Root X1
4414
+ ============
4415
+ -----BEGIN CERTIFICATE-----
4416
+ MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAwTzELMAkGA1UE
4417
+ BhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2VhcmNoIEdyb3VwMRUwEwYDVQQD
4418
+ EwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQG
4419
+ EwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMT
4420
+ DElTUkcgUm9vdCBYMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54r
4421
+ Vygch77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+0TM8ukj1
4422
+ 3Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6UA5/TR5d8mUgjU+g4rk8K
4423
+ b4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sWT8KOEUt+zwvo/7V3LvSye0rgTBIlDHCN
4424
+ Aymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyHB5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ
4425
+ 4Q7e2RCOFvu396j3x+UCB5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf
4426
+ 1b0SHzUvKBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWnOlFu
4427
+ hjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTnjh8BCNAw1FtxNrQH
4428
+ usEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbwqHyGO0aoSCqI3Haadr8faqU9GY/r
4429
+ OPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CIrU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4G
4430
+ A1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY
4431
+ 9umbbjANBgkqhkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL
4432
+ ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ3BebYhtF8GaV
4433
+ 0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KKNFtY2PwByVS5uCbMiogziUwt
4434
+ hDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJw
4435
+ TdwJx4nLCgdNbOhdjsnvzqvHu7UrTkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nx
4436
+ e5AW0wdeRlN8NwdCjNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZA
4437
+ JzVcoyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq4RgqsahD
4438
+ YVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPAmRGunUHBcnWEvgJBQl9n
4439
+ JEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57demyPxgcYxn/eR44/KJ4EBs+lVDR3veyJ
4440
+ m+kXQ99b21/+jh5Xos1AnX5iItreGCc=
4441
+ -----END CERTIFICATE-----
4442
+
4443
+ AC RAIZ FNMT-RCM
4444
+ ================
4445
+ -----BEGIN CERTIFICATE-----
4446
+ MIIFgzCCA2ugAwIBAgIPXZONMGc2yAYdGsdUhGkHMA0GCSqGSIb3DQEBCwUAMDsxCzAJBgNVBAYT
4447
+ AkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTAeFw0wODEw
4448
+ MjkxNTU5NTZaFw0zMDAxMDEwMDAwMDBaMDsxCzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJD
4449
+ TTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC
4450
+ ggIBALpxgHpMhm5/yBNtwMZ9HACXjywMI7sQmkCpGreHiPibVmr75nuOi5KOpyVdWRHbNi63URcf
4451
+ qQgfBBckWKo3Shjf5TnUV/3XwSyRAZHiItQDwFj8d0fsjz50Q7qsNI1NOHZnjrDIbzAzWHFctPVr
4452
+ btQBULgTfmxKo0nRIBnuvMApGGWn3v7v3QqQIecaZ5JCEJhfTzC8PhxFtBDXaEAUwED653cXeuYL
4453
+ j2VbPNmaUtu1vZ5Gzz3rkQUCwJaydkxNEJY7kvqcfw+Z374jNUUeAlz+taibmSXaXvMiwzn15Cou
4454
+ 08YfxGyqxRxqAQVKL9LFwag0Jl1mpdICIfkYtwb1TplvqKtMUejPUBjFd8g5CSxJkjKZqLsXF3mw
4455
+ WsXmo8RZZUc1g16p6DULmbvkzSDGm0oGObVo/CK67lWMK07q87Hj/LaZmtVC+nFNCM+HHmpxffnT
4456
+ tOmlcYF7wk5HlqX2doWjKI/pgG6BU6VtX7hI+cL5NqYuSf+4lsKMB7ObiFj86xsc3i1w4peSMKGJ
4457
+ 47xVqCfWS+2QrYv6YyVZLag13cqXM7zlzced0ezvXg5KkAYmY6252TUtB7p2ZSysV4999AeU14EC
4458
+ ll2jB0nVetBX+RvnU0Z1qrB5QstocQjpYL05ac70r8NWQMetUqIJ5G+GR4of6ygnXYMgrwTJbFaa
4459
+ i0b1AgMBAAGjgYMwgYAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE
4460
+ FPd9xf3E6Jobd2Sn9R2gzL+HYJptMD4GA1UdIAQ3MDUwMwYEVR0gADArMCkGCCsGAQUFBwIBFh1o
4461
+ dHRwOi8vd3d3LmNlcnQuZm5tdC5lcy9kcGNzLzANBgkqhkiG9w0BAQsFAAOCAgEAB5BK3/MjTvDD
4462
+ nFFlm5wioooMhfNzKWtN/gHiqQxjAb8EZ6WdmF/9ARP67Jpi6Yb+tmLSbkyU+8B1RXxlDPiyN8+s
4463
+ D8+Nb/kZ94/sHvJwnvDKuO+3/3Y3dlv2bojzr2IyIpMNOmqOFGYMLVN0V2Ue1bLdI4E7pWYjJ2cJ
4464
+ j+F3qkPNZVEI7VFY/uY5+ctHhKQV8Xa7pO6kO8Rf77IzlhEYt8llvhjho6Tc+hj507wTmzl6NLrT
4465
+ Qfv6MooqtyuGC2mDOL7Nii4LcK2NJpLuHvUBKwrZ1pebbuCoGRw6IYsMHkCtA+fdZn71uSANA+iW
4466
+ +YJF1DngoABd15jmfZ5nc8OaKveri6E6FO80vFIOiZiaBECEHX5FaZNXzuvO+FB8TxxuBEOb+dY7
4467
+ Ixjp6o7RTUaN8Tvkasq6+yO3m/qZASlaWFot4/nUbQ4mrcFuNLwy+AwF+mWj2zs3gyLp1txyM/1d
4468
+ 8iC9djwj2ij3+RvrWWTV3F9yfiD8zYm1kGdNYno/Tq0dwzn+evQoFt9B9kiABdcPUXmsEKvU7ANm
4469
+ 5mqwujGSQkBqvjrTcuFqN1W8rB2Vt2lh8kORdOag0wokRqEIr9baRRmW1FMdW4R58MD3R++Lj8UG
4470
+ rp1MYp3/RgT408m2ECVAdf4WqslKYIYvuu8wd+RU4riEmViAqhOLUTpPSPaLtrM=
4471
+ -----END CERTIFICATE-----
4472
+
4473
+ Amazon Root CA 1
4474
+ ================
4475
+ -----BEGIN CERTIFICATE-----
4476
+ MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsFADA5MQswCQYD
4477
+ VQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAxMB4XDTE1
4478
+ MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpv
4479
+ bjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
4480
+ ggEBALJ4gHHKeNXjca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgH
4481
+ FzZM9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qwIFAGbHrQ
4482
+ gLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6VOujw5H5SNz/0egwLX0t
4483
+ dHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L93FcXmn/6pUCyziKrlA4b9v7LWIbxcce
4484
+ VOF34GfID5yHI9Y/QCB/IIDEgEw+OyQmjgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB
4485
+ /zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3
4486
+ DQEBCwUAA4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDIU5PM
4487
+ CCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUsN+gDS63pYaACbvXy
4488
+ 8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vvo/ufQJVtMVT8QtPHRh8jrdkPSHCa
4489
+ 2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2
4490
+ xJNDd2ZhwLnoQdeXeGADbkpyrqXRfboQnoZsG4q5WTP468SQvvG5
4491
+ -----END CERTIFICATE-----
4492
+
4493
+ Amazon Root CA 2
4494
+ ================
4495
+ -----BEGIN CERTIFICATE-----
4496
+ MIIFQTCCAymgAwIBAgITBmyf0pY1hp8KD+WGePhbJruKNzANBgkqhkiG9w0BAQwFADA5MQswCQYD
4497
+ VQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAyMB4XDTE1
4498
+ MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpv
4499
+ bjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC
4500
+ ggIBAK2Wny2cSkxKgXlRmeyKy2tgURO8TW0G/LAIjd0ZEGrHJgw12MBvIITplLGbhQPDW9tK6Mj4
4501
+ kHbZW0/jTOgGNk3Mmqw9DJArktQGGWCsN0R5hYGCrVo34A3MnaZMUnbqQ523BNFQ9lXg1dKmSYXp
4502
+ N+nKfq5clU1Imj+uIFptiJXZNLhSGkOQsL9sBbm2eLfq0OQ6PBJTYv9K8nu+NQWpEjTj82R0Yiw9
4503
+ AElaKP4yRLuH3WUnAnE72kr3H9rN9yFVkE8P7K6C4Z9r2UXTu/Bfh+08LDmG2j/e7HJV63mjrdvd
4504
+ fLC6HM783k81ds8P+HgfajZRRidhW+mez/CiVX18JYpvL7TFz4QuK/0NURBs+18bvBt+xa47mAEx
4505
+ kv8LV/SasrlX6avvDXbR8O70zoan4G7ptGmh32n2M8ZpLpcTnqWHsFcQgTfJU7O7f/aS0ZzQGPSS
4506
+ btqDT6ZjmUyl+17vIWR6IF9sZIUVyzfpYgwLKhbcAS4y2j5L9Z469hdAlO+ekQiG+r5jqFoz7Mt0
4507
+ Q5X5bGlSNscpb/xVA1wf+5+9R+vnSUeVC06JIglJ4PVhHvG/LopyboBZ/1c6+XUyo05f7O0oYtlN
4508
+ c/LMgRdg7c3r3NunysV+Ar3yVAhU/bQtCSwXVEqY0VThUWcI0u1ufm8/0i2BWSlmy5A5lREedCf+
4509
+ 3euvAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSw
4510
+ DPBMMPQFWAJI/TPlUq9LhONmUjANBgkqhkiG9w0BAQwFAAOCAgEAqqiAjw54o+Ci1M3m9Zh6O+oA
4511
+ A7CXDpO8Wqj2LIxyh6mx/H9z/WNxeKWHWc8w4Q0QshNabYL1auaAn6AFC2jkR2vHat+2/XcycuUY
4512
+ +gn0oJMsXdKMdYV2ZZAMA3m3MSNjrXiDCYZohMr/+c8mmpJ5581LxedhpxfL86kSk5Nrp+gvU5LE
4513
+ YFiwzAJRGFuFjWJZY7attN6a+yb3ACfAXVU3dJnJUH/jWS5E4ywl7uxMMne0nxrpS10gxdr9HIcW
4514
+ xkPo1LsmmkVwXqkLN1PiRnsn/eBG8om3zEK2yygmbtmlyTrIQRNg91CMFa6ybRoVGld45pIq2WWQ
4515
+ gj9sAq+uEjonljYE1x2igGOpm/HlurR8FLBOybEfdF849lHqm/osohHUqS0nGkWxr7JOcQ3AWEbW
4516
+ aQbLU8uz/mtBzUF+fUwPfHJ5elnNXkoOrJupmHN5fLT0zLm4BwyydFy4x2+IoZCn9Kr5v2c69BoV
4517
+ Yh63n749sSmvZ6ES8lgQGVMDMBu4Gon2nL2XA46jCfMdiyHxtN/kHNGfZQIG6lzWE7OE76KlXIx3
4518
+ KadowGuuQNKotOrN8I1LOJwZmhsoVLiJkO/KdYE+HvJkJMcYr07/R54H9jVlpNMKVv/1F2Rs76gi
4519
+ JUmTtt8AF9pYfl3uxRuw0dFfIRDH+fO6AgonB8Xx1sfT4PsJYGw=
4520
+ -----END CERTIFICATE-----
4521
+
4522
+ Amazon Root CA 3
4523
+ ================
4524
+ -----BEGIN CERTIFICATE-----
4525
+ MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5MQswCQYDVQQG
4526
+ EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAzMB4XDTE1MDUy
4527
+ NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ
4528
+ MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZB
4529
+ f8ANm+gBG1bG8lKlui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjr
4530
+ Zt6jQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSrttvXBp43
4531
+ rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkrBqWTrBqYaGFy+uGh0Psc
4532
+ eGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteMYyRIHN8wfdVoOw==
4533
+ -----END CERTIFICATE-----
4534
+
4535
+ Amazon Root CA 4
4536
+ ================
4537
+ -----BEGIN CERTIFICATE-----
4538
+ MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5MQswCQYDVQQG
4539
+ EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSA0MB4XDTE1MDUy
4540
+ NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ
4541
+ MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN
4542
+ /sGKe0uoe0ZLY7Bi9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri
4543
+ 83BkM6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV
4544
+ HQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WBMAoGCCqGSM49BAMDA2gA
4545
+ MGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlwCkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1
4546
+ AE47xDqUEpHJWEadIRNyp4iciuRMStuW1KyLa2tJElMzrdfkviT8tQp21KW8EA==
4547
+ -----END CERTIFICATE-----
4548
+
4549
+ LuxTrust Global Root 2
4550
+ ======================
4551
+ -----BEGIN CERTIFICATE-----
4552
+ MIIFwzCCA6ugAwIBAgIUCn6m30tEntpqJIWe5rgV0xZ/u7EwDQYJKoZIhvcNAQELBQAwRjELMAkG
4553
+ A1UEBhMCTFUxFjAUBgNVBAoMDUx1eFRydXN0IFMuQS4xHzAdBgNVBAMMFkx1eFRydXN0IEdsb2Jh
4554
+ bCBSb290IDIwHhcNMTUwMzA1MTMyMTU3WhcNMzUwMzA1MTMyMTU3WjBGMQswCQYDVQQGEwJMVTEW
4555
+ MBQGA1UECgwNTHV4VHJ1c3QgUy5BLjEfMB0GA1UEAwwWTHV4VHJ1c3QgR2xvYmFsIFJvb3QgMjCC
4556
+ AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANeFl78RmOnwYoNMPIf5U2o3C/IPPIfOb9wm
4557
+ Kb3FibrJgz337spbxm1Jc7TJRqMbNBM/wYlFV/TZsfs2ZUv7COJIcRHIbjuend+JZTemhfY7RBi2
4558
+ xjcwYkSSl2l9QjAk5A0MiWtj3sXh306pFGxT4GHO9hcvHTy95iJMHZP1EMShduxq3sVs35a0VkBC
4559
+ wGKSMKEtFZSg0iAGCW5qbeXrt77U8PEVfIvmTroTzEsnXpk8F12PgX8zPU/TPxvsXD/wPEx1bvKm
4560
+ 1Z3aLQdjAsZy6ZS8TEmVT4hSyNvoaYL4zDRbIvCGp4m9SAptZoFtyMhk+wHh9OHe2Z7d21vUKpkm
4561
+ FRseTJIpgp7VkoGSQXAZ96Tlk0u8d2cx3Rz9MXANF5kM+Qw5GSoXtTBxVdUPrljhPS80m8+f9niF
4562
+ wpN6cj5mj5wWEWCPnolvZ77gR1o7DJpni89Gxq44o/KnvObWhWszJHAiS8sIm7vI+AIpHb4gDEa/
4563
+ a4ebsypmQjVGbKq6rfmYe+lQVRQxv7HaLe2ArWgk+2mr2HETMOZns4dA/Yl+8kPREd8vZS9kzl8U
4564
+ ubG/Mb2HeFpZZYiq/FkySIbWTLkpS5XTdvN3JW1CHDiDTf2jX5t/Lax5Gw5CMZdjpPuKadUiDTSQ
4565
+ MC6otOBttpSsvItO13D8xTiOZCXhTTmQzsmHhFhxAgMBAAGjgagwgaUwDwYDVR0TAQH/BAUwAwEB
4566
+ /zBCBgNVHSAEOzA5MDcGByuBKwEBAQowLDAqBggrBgEFBQcCARYeaHR0cHM6Ly9yZXBvc2l0b3J5
4567
+ Lmx1eHRydXN0Lmx1MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBT/GCh2+UgFLKGu8SsbK7JT
4568
+ +Et8szAdBgNVHQ4EFgQU/xgodvlIBSyhrvErGyuyU/hLfLMwDQYJKoZIhvcNAQELBQADggIBAGoZ
4569
+ FO1uecEsh9QNcH7X9njJCwROxLHOk3D+sFTAMs2ZMGQXvw/l4jP9BzZAcg4atmpZ1gDlaCDdLnIN
4570
+ H2pkMSCEfUmmWjfrRcmF9dTHF5kH5ptV5AzoqbTOjFu1EVzPig4N1qx3gf4ynCSecs5U89BvolbW
4571
+ 7MM3LGVYvlcAGvI1+ut7MV3CwRI9loGIlonBWVx65n9wNOeD4rHh4bhY79SV5GCc8JaXcozrhAIu
4572
+ ZY+kt9J/Z93I055cqqmkoCUUBpvsT34tC38ddfEz2O3OuHVtPlu5mB0xDVbYQw8wkbIEa91WvpWA
4573
+ VWe+2M2D2RjuLg+GLZKecBPs3lHJQ3gCpU3I+V/EkVhGFndadKpAvAefMLmx9xIX3eP/JEAdemrR
4574
+ TxgKqpAd60Ae36EeRJIQmvKN4dFLRp7oRUKX6kWZ8+xm1QL68qZKJKrezrnK+T+Tb/mjuuqlPpmt
4575
+ /f97mfVl7vBZKGfXkJWkE4SphMHozs51k2MavDzq1WQfLSoSOcbDWjLtR5EWDrw4wVDej8oqkDQc
4576
+ 7kGUnF4ZLvhFSZl0kbAEb+MEWrGrKqv+x9CWttrhSmQGbmBNvUJO/3jaJMobtNeWOWyu8Q6qp31I
4577
+ iyBMz2TWuJdGsE7RKlY6oJO9r4Ak4Ap+58rVyuiFVdw2KuGUaJPHZnJED4AhMmwlxyOAgwrr
4578
+ -----END CERTIFICATE-----
includes/class-commands.php CHANGED
@@ -188,6 +188,7 @@ class UpdraftPlus_Commands {
188
  return array(
189
  'settings' => $output,
190
  'meta' => apply_filters('updraftplus_get_settings_meta', array()),
 
191
  );
192
 
193
  }
188
  return array(
189
  'settings' => $output,
190
  'meta' => apply_filters('updraftplus_get_settings_meta', array()),
191
+ 'updraftplus_version' => $updraftplus->version,
192
  );
193
 
194
  }
includes/jquery.serializeJSON/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ MIT License
2
+
3
+ Copyright (c) 2017 Mario Izquierdo
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
includes/jquery.serializeJSON/jquery.serializejson.js ADDED
@@ -0,0 +1,340 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ SerializeJSON jQuery plugin.
3
+ https://github.com/marioizquierdo/jquery.serializeJSON
4
+ version 2.8.1 (Dec, 2016)
5
+
6
+ Copyright (c) 2012, 2017 Mario Izquierdo
7
+ Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
8
+ and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
9
+ */
10
+ (function (factory) {
11
+ if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module.
12
+ define(['jquery'], factory);
13
+ } else if (typeof exports === 'object') { // Node/CommonJS
14
+ var jQuery = require('jquery');
15
+ module.exports = factory(jQuery);
16
+ } else { // Browser globals (zepto supported)
17
+ factory(window.jQuery || window.Zepto || window.$); // Zepto supported on browsers as well
18
+ }
19
+
20
+ }(function ($) {
21
+ "use strict";
22
+
23
+ // jQuery('form').serializeJSON()
24
+ $.fn.serializeJSON = function (options) {
25
+ var f, $form, opts, formAsArray, serializedObject, name, value, parsedValue, _obj, nameWithNoType, type, keys, skipFalsy;
26
+ f = $.serializeJSON;
27
+ $form = this; // NOTE: the set of matched elements is most likely a form, but it could also be a group of inputs
28
+ opts = f.setupOpts(options); // calculate values for options {parseNumbers, parseBoolens, parseNulls, ...} with defaults
29
+
30
+ // Use native `serializeArray` function to get an array of {name, value} objects.
31
+ formAsArray = $form.serializeArray();
32
+ f.readCheckboxUncheckedValues(formAsArray, opts, $form); // add objects to the array from unchecked checkboxes if needed
33
+
34
+ // Convert the formAsArray into a serializedObject with nested keys
35
+ serializedObject = {};
36
+ $.each(formAsArray, function (i, obj) {
37
+ name = obj.name; // original input name
38
+ value = obj.value; // input value
39
+ _obj = f.extractTypeAndNameWithNoType(name);
40
+ nameWithNoType = _obj.nameWithNoType; // input name with no type (i.e. "foo:string" => "foo")
41
+ type = _obj.type; // type defined from the input name in :type colon notation
42
+ if (!type) type = f.attrFromInputWithName($form, name, 'data-value-type');
43
+ f.validateType(name, type, opts); // make sure that the type is one of the valid types if defined
44
+
45
+ if (type !== 'skip') { // ignore inputs with type 'skip'
46
+ keys = f.splitInputNameIntoKeysArray(nameWithNoType);
47
+ parsedValue = f.parseValue(value, name, type, opts); // convert to string, number, boolean, null or customType
48
+
49
+ skipFalsy = !parsedValue && f.shouldSkipFalsy($form, name, nameWithNoType, type, opts); // ignore falsy inputs if specified
50
+ if (!skipFalsy) {
51
+ f.deepSet(serializedObject, keys, parsedValue, opts);
52
+ }
53
+ }
54
+ });
55
+ return serializedObject;
56
+ };
57
+
58
+ // Use $.serializeJSON as namespace for the auxiliar functions
59
+ // and to define defaults
60
+ $.serializeJSON = {
61
+
62
+ defaultOptions: {
63
+ checkboxUncheckedValue: undefined, // to include that value for unchecked checkboxes (instead of ignoring them)
64
+
65
+ parseNumbers: false, // convert values like "1", "-2.33" to 1, -2.33
66
+ parseBooleans: false, // convert "true", "false" to true, false
67
+ parseNulls: false, // convert "null" to null
68
+ parseAll: false, // all of the above
69
+ parseWithFunction: null, // to use custom parser, a function like: function(val){ return parsed_val; }
70
+
71
+ skipFalsyValuesForTypes: [], // skip serialization of falsy values for listed value types
72
+ skipFalsyValuesForFields: [], // skip serialization of falsy values for listed field names
73
+
74
+ customTypes: {}, // override defaultTypes
75
+ defaultTypes: {
76
+ "string": function(str) { return String(str); },
77
+ "number": function(str) { return Number(str); },
78
+ "boolean": function(str) { var falses = ["false", "null", "undefined", "", "0"]; return falses.indexOf(str) === -1; },
79
+ "null": function(str) { var falses = ["false", "null", "undefined", "", "0"]; return falses.indexOf(str) === -1 ? str : null; },
80
+ "array": function(str) { return JSON.parse(str); },
81
+ "object": function(str) { return JSON.parse(str); },
82
+ "auto": function(str) { return $.serializeJSON.parseValue(str, null, null, {parseNumbers: true, parseBooleans: true, parseNulls: true}); }, // try again with something like "parseAll"
83
+ "skip": null // skip is a special type that makes it easy to ignore elements
84
+ },
85
+
86
+ useIntKeysAsArrayIndex: false // name="foo[2]" value="v" => {foo: [null, null, "v"]}, instead of {foo: ["2": "v"]}
87
+ },
88
+
89
+ // Merge option defaults into the options
90
+ setupOpts: function(options) {
91
+ var opt, validOpts, defaultOptions, optWithDefault, parseAll, f;
92
+ f = $.serializeJSON;
93
+
94
+ if (options == null) { options = {}; } // options ||= {}
95
+ defaultOptions = f.defaultOptions || {}; // defaultOptions
96
+
97
+ // Make sure that the user didn't misspell an option
98
+ validOpts = ['checkboxUncheckedValue', 'parseNumbers', 'parseBooleans', 'parseNulls', 'parseAll', 'parseWithFunction', 'skipFalsyValuesForTypes', 'skipFalsyValuesForFields', 'customTypes', 'defaultTypes', 'useIntKeysAsArrayIndex']; // re-define because the user may override the defaultOptions
99
+ for (opt in options) {
100
+ if (validOpts.indexOf(opt) === -1) {
101
+ throw new Error("serializeJSON ERROR: invalid option '" + opt + "'. Please use one of " + validOpts.join(', '));
102
+ }
103
+ }
104
+
105
+ // Helper to get the default value for this option if none is specified by the user
106
+ optWithDefault = function(key) { return (options[key] !== false) && (options[key] !== '') && (options[key] || defaultOptions[key]); };
107
+
108
+ // Return computed options (opts to be used in the rest of the script)
109
+ parseAll = optWithDefault('parseAll');
110
+ return {
111
+ checkboxUncheckedValue: optWithDefault('checkboxUncheckedValue'),
112
+
113
+ parseNumbers: parseAll || optWithDefault('parseNumbers'),
114
+ parseBooleans: parseAll || optWithDefault('parseBooleans'),
115
+ parseNulls: parseAll || optWithDefault('parseNulls'),
116
+ parseWithFunction: optWithDefault('parseWithFunction'),
117
+
118
+ skipFalsyValuesForTypes: optWithDefault('skipFalsyValuesForTypes'),
119
+ skipFalsyValuesForFields: optWithDefault('skipFalsyValuesForFields'),
120
+ typeFunctions: $.extend({}, optWithDefault('defaultTypes'), optWithDefault('customTypes')),
121
+
122
+ useIntKeysAsArrayIndex: optWithDefault('useIntKeysAsArrayIndex')
123
+ };
124
+ },
125
+
126
+ // Given a string, apply the type or the relevant "parse" options, to return the parsed value
127
+ parseValue: function(valStr, inputName, type, opts) {
128
+ var f, parsedVal;
129
+ f = $.serializeJSON;
130
+ parsedVal = valStr; // if no parsing is needed, the returned value will be the same
131
+
132
+ if (opts.typeFunctions && type && opts.typeFunctions[type]) { // use a type if available
133
+ parsedVal = opts.typeFunctions[type](valStr);
134
+ } else if (opts.parseNumbers && f.isNumeric(valStr)) { // auto: number
135
+ parsedVal = Number(valStr);
136
+ } else if (opts.parseBooleans && (valStr === "true" || valStr === "false")) { // auto: boolean
137
+ parsedVal = (valStr === "true");
138
+ } else if (opts.parseNulls && valStr == "null") { // auto: null
139
+ parsedVal = null;
140
+ }
141
+ if (opts.parseWithFunction && !type) { // custom parse function (apply after previous parsing options, but not if there's a specific type)
142
+ parsedVal = opts.parseWithFunction(parsedVal, inputName);
143
+ }
144
+
145
+ return parsedVal;
146
+ },
147
+
148
+ isObject: function(obj) { return obj === Object(obj); }, // is it an Object?
149
+ isUndefined: function(obj) { return obj === void 0; }, // safe check for undefined values
150
+ isValidArrayIndex: function(val) { return /^[0-9]+$/.test(String(val)); }, // 1,2,3,4 ... are valid array indexes
151
+ isNumeric: function(obj) { return obj - parseFloat(obj) >= 0; }, // taken from jQuery.isNumeric implementation. Not using jQuery.isNumeric to support old jQuery and Zepto versions
152
+
153
+ optionKeys: function(obj) { if (Object.keys) { return Object.keys(obj); } else { var key, keys = []; for(key in obj){ keys.push(key); } return keys;} }, // polyfill Object.keys to get option keys in IE<9
154
+
155
+
156
+ // Fill the formAsArray object with values for the unchecked checkbox inputs,
157
+ // using the same format as the jquery.serializeArray function.
158
+ // The value of the unchecked values is determined from the opts.checkboxUncheckedValue
159
+ // and/or the data-unchecked-value attribute of the inputs.
160
+ readCheckboxUncheckedValues: function (formAsArray, opts, $form) {
161
+ var selector, $uncheckedCheckboxes, $el, uncheckedValue, f, name;
162
+ if (opts == null) { opts = {}; }
163
+ f = $.serializeJSON;
164
+
165
+ selector = 'input[type=checkbox][name]:not(:checked):not([disabled])';
166
+ $uncheckedCheckboxes = $form.find(selector).add($form.filter(selector));
167
+ $uncheckedCheckboxes.each(function (i, el) {
168
+ // Check data attr first, then the option
169
+ $el = $(el);
170
+ uncheckedValue = $el.attr('data-unchecked-value');
171
+ if (uncheckedValue == null) {
172
+ uncheckedValue = opts.checkboxUncheckedValue;
173
+ }
174
+
175
+ // If there's an uncheckedValue, push it into the serialized formAsArray
176
+ if (uncheckedValue != null) {
177
+ if (el.name && el.name.indexOf("[][") !== -1) { // identify a non-supported
178
+ throw new Error("serializeJSON ERROR: checkbox unchecked values are not supported on nested arrays of objects like '"+el.name+"'. See https://github.com/marioizquierdo/jquery.serializeJSON/issues/67");
179
+ }
180
+ formAsArray.push({name: el.name, value: uncheckedValue});
181
+ }
182
+ });
183
+ },
184
+
185
+ // Returns and object with properties {name_without_type, type} from a given name.
186
+ // The type is null if none specified. Example:
187
+ // "foo" => {nameWithNoType: "foo", type: null}
188
+ // "foo:boolean" => {nameWithNoType: "foo", type: "boolean"}
189
+ // "foo[bar]:null" => {nameWithNoType: "foo[bar]", type: "null"}
190
+ extractTypeAndNameWithNoType: function(name) {
191
+ var match;
192
+ if (match = name.match(/(.*):([^:]+)$/)) {
193
+ return {nameWithNoType: match[1], type: match[2]};
194
+ } else {
195
+ return {nameWithNoType: name, type: null};
196
+ }
197
+ },
198
+
199
+
200
+ // Check if this input should be skipped when it has a falsy value,
201
+ // depending on the options to skip values by name or type, and the data-skip-falsy attribute.
202
+ shouldSkipFalsy: function($form, name, nameWithNoType, type, opts) {
203
+ var f = $.serializeJSON;
204
+
205
+ var skipFromDataAttr = f.attrFromInputWithName($form, name, 'data-skip-falsy');
206
+ if (skipFromDataAttr != null) {
207
+ return skipFromDataAttr !== 'false'; // any value is true, except if explicitly using 'false'
208
+ }
209
+
210
+ var optForFields = opts.skipFalsyValuesForFields;
211
+ if (optForFields && (optForFields.indexOf(nameWithNoType) !== -1 || optForFields.indexOf(name) !== -1)) {
212
+ return true;
213
+ }
214
+
215
+ var optForTypes = opts.skipFalsyValuesForTypes;
216
+ if (type == null) type = 'string'; // assume fields with no type are targeted as string
217
+ if (optForTypes && optForTypes.indexOf(type) !== -1) {
218
+ return true
219
+ }
220
+
221
+ return false;
222
+ },
223
+
224
+ // Finds the first input in $form with this name, and get the given attr from it.
225
+ // Returns undefined if no input or no attribute was found.
226
+ attrFromInputWithName: function($form, name, attrName) {
227
+ var escapedName, selector, $input, attrValue;
228
+ escapedName = name.replace(/(:|\.|\[|\]|\s)/g,'\\$1'); // every non-standard character need to be escaped by \\
229
+ selector = '[name="' + escapedName + '"]';
230
+ $input = $form.find(selector).add($form.filter(selector)); // NOTE: this returns only the first $input element if multiple are matched with the same name (i.e. an "array[]"). So, arrays with different element types specified through the data-value-type attr is not supported.
231
+ return $input.attr(attrName);
232
+ },
233
+
234
+ // Raise an error if the type is not recognized.
235
+ validateType: function(name, type, opts) {
236
+ var validTypes, f;
237
+ f = $.serializeJSON;
238
+ validTypes = f.optionKeys(opts ? opts.typeFunctions : f.defaultOptions.defaultTypes);
239
+ if (!type || validTypes.indexOf(type) !== -1) {
240
+ return true;
241
+ } else {
242
+ throw new Error("serializeJSON ERROR: Invalid type " + type + " found in input name '" + name + "', please use one of " + validTypes.join(', '));
243
+ }
244
+ },
245
+
246
+
247
+ // Split the input name in programatically readable keys.
248
+ // Examples:
249
+ // "foo" => ['foo']
250
+ // "[foo]" => ['foo']
251
+ // "foo[inn][bar]" => ['foo', 'inn', 'bar']
252
+ // "foo[inn[bar]]" => ['foo', 'inn', 'bar']
253
+ // "foo[inn][arr][0]" => ['foo', 'inn', 'arr', '0']
254
+ // "arr[][val]" => ['arr', '', 'val']
255
+ splitInputNameIntoKeysArray: function(nameWithNoType) {
256
+ var keys, f;
257
+ f = $.serializeJSON;
258
+ keys = nameWithNoType.split('['); // split string into array
259
+ keys = $.map(keys, function (key) { return key.replace(/\]/g, ''); }); // remove closing brackets
260
+ if (keys[0] === '') { keys.shift(); } // ensure no opening bracket ("[foo][inn]" should be same as "foo[inn]")
261
+ return keys;
262
+ },
263
+
264
+ // Set a value in an object or array, using multiple keys to set in a nested object or array:
265
+ //
266
+ // deepSet(obj, ['foo'], v) // obj['foo'] = v
267
+ // deepSet(obj, ['foo', 'inn'], v) // obj['foo']['inn'] = v // Create the inner obj['foo'] object, if needed
268
+ // deepSet(obj, ['foo', 'inn', '123'], v) // obj['foo']['arr']['123'] = v //
269
+ //
270
+ // deepSet(obj, ['0'], v) // obj['0'] = v
271
+ // deepSet(arr, ['0'], v, {useIntKeysAsArrayIndex: true}) // arr[0] = v
272
+ // deepSet(arr, [''], v) // arr.push(v)
273
+ // deepSet(obj, ['arr', ''], v) // obj['arr'].push(v)
274
+ //
275
+ // arr = [];
276
+ // deepSet(arr, ['', v] // arr => [v]
277
+ // deepSet(arr, ['', 'foo'], v) // arr => [v, {foo: v}]
278
+ // deepSet(arr, ['', 'bar'], v) // arr => [v, {foo: v, bar: v}]
279
+ // deepSet(arr, ['', 'bar'], v) // arr => [v, {foo: v, bar: v}, {bar: v}]
280
+ //
281
+ deepSet: function (o, keys, value, opts) {
282
+ var key, nextKey, tail, lastIdx, lastVal, f;
283
+ if (opts == null) { opts = {}; }
284
+ f = $.serializeJSON;
285
+ if (f.isUndefined(o)) { throw new Error("ArgumentError: param 'o' expected to be an object or array, found undefined"); }
286
+ if (!keys || keys.length === 0) { throw new Error("ArgumentError: param 'keys' expected to be an array with least one element"); }
287
+
288
+ key = keys[0];
289
+
290
+ // Only one key, then it's not a deepSet, just assign the value.
291
+ if (keys.length === 1) {
292
+ if (key === '') {
293
+ o.push(value); // '' is used to push values into the array (assume o is an array)
294
+ } else {
295
+ o[key] = value; // other keys can be used as object keys or array indexes
296
+ }
297
+
298
+ // With more keys is a deepSet. Apply recursively.
299
+ } else {
300
+ nextKey = keys[1];
301
+
302
+ // '' is used to push values into the array,
303
+ // with nextKey, set the value into the same object, in object[nextKey].
304
+ // Covers the case of ['', 'foo'] and ['', 'var'] to push the object {foo, var}, and the case of nested arrays.
305
+ if (key === '') {
306
+ lastIdx = o.length - 1; // asume o is array
307
+ lastVal = o[lastIdx];
308
+ if (f.isObject(lastVal) && (f.isUndefined(lastVal[nextKey]) || keys.length > 2)) { // if nextKey is not present in the last object element, or there are more keys to deep set
309
+ key = lastIdx; // then set the new value in the same object element
310
+ } else {
311
+ key = lastIdx + 1; // otherwise, point to set the next index in the array
312
+ }
313
+ }
314
+
315
+ // '' is used to push values into the array "array[]"
316
+ if (nextKey === '') {
317
+ if (f.isUndefined(o[key]) || !$.isArray(o[key])) {
318
+ o[key] = []; // define (or override) as array to push values
319
+ }
320
+ } else {
321
+ if (opts.useIntKeysAsArrayIndex && f.isValidArrayIndex(nextKey)) { // if 1, 2, 3 ... then use an array, where nextKey is the index
322
+ if (f.isUndefined(o[key]) || !$.isArray(o[key])) {
323
+ o[key] = []; // define (or override) as array, to insert values using int keys as array indexes
324
+ }
325
+ } else { // for anything else, use an object, where nextKey is going to be the attribute name
326
+ if (f.isUndefined(o[key]) || !f.isObject(o[key])) {
327
+ o[key] = {}; // define (or override) as object, to set nested properties
328
+ }
329
+ }
330
+ }
331
+
332
+ // Recursively set the inner object
333
+ tail = keys.slice(1);
334
+ f.deepSet(o[key], tail, value, opts);
335
+ }
336
+ }
337
+
338
+ };
339
+
340
+ }));
includes/jquery.serializeJSON/jquery.serializejson.min.js ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ SerializeJSON jQuery plugin.
3
+ https://github.com/marioizquierdo/jquery.serializeJSON
4
+ version 2.8.1 (Dec, 2016)
5
+
6
+ Copyright (c) 2012, 2017 Mario Izquierdo
7
+ Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
8
+ and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
9
+ */
10
+ !function(a){if("function"==typeof define&&define.amd)define(["jquery"],a);else if("object"==typeof exports){var b=require("jquery");module.exports=a(b)}else a(window.jQuery||window.Zepto||window.$)}(function(a){"use strict";a.fn.serializeJSON=function(b){var c,d,e,f,g,h,i,j,k,l,m,n,o;return c=a.serializeJSON,d=this,e=c.setupOpts(b),f=d.serializeArray(),c.readCheckboxUncheckedValues(f,e,d),g={},a.each(f,function(a,b){h=b.name,i=b.value,k=c.extractTypeAndNameWithNoType(h),l=k.nameWithNoType,m=k.type,m||(m=c.attrFromInputWithName(d,h,"data-value-type")),c.validateType(h,m,e),"skip"!==m&&(n=c.splitInputNameIntoKeysArray(l),j=c.parseValue(i,h,m,e),o=!j&&c.shouldSkipFalsy(d,h,l,m,e),o||c.deepSet(g,n,j,e))}),g},a.serializeJSON={defaultOptions:{checkboxUncheckedValue:void 0,parseNumbers:!1,parseBooleans:!1,parseNulls:!1,parseAll:!1,parseWithFunction:null,skipFalsyValuesForTypes:[],skipFalsyValuesForFields:[],customTypes:{},defaultTypes:{string:function(a){return String(a)},number:function(a){return Number(a)},boolean:function(a){var b=["false","null","undefined","","0"];return b.indexOf(a)===-1},null:function(a){var b=["false","null","undefined","","0"];return b.indexOf(a)===-1?a:null},array:function(a){return JSON.parse(a)},object:function(a){return JSON.parse(a)},auto:function(b){return a.serializeJSON.parseValue(b,null,null,{parseNumbers:!0,parseBooleans:!0,parseNulls:!0})},skip:null},useIntKeysAsArrayIndex:!1},setupOpts:function(b){var c,d,e,f,g,h;h=a.serializeJSON,null==b&&(b={}),e=h.defaultOptions||{},d=["checkboxUncheckedValue","parseNumbers","parseBooleans","parseNulls","parseAll","parseWithFunction","skipFalsyValuesForTypes","skipFalsyValuesForFields","customTypes","defaultTypes","useIntKeysAsArrayIndex"];for(c in b)if(d.indexOf(c)===-1)throw new Error("serializeJSON ERROR: invalid option '"+c+"'. Please use one of "+d.join(", "));return f=function(a){return b[a]!==!1&&""!==b[a]&&(b[a]||e[a])},g=f("parseAll"),{checkboxUncheckedValue:f("checkboxUncheckedValue"),parseNumbers:g||f("parseNumbers"),parseBooleans:g||f("parseBooleans"),parseNulls:g||f("parseNulls"),parseWithFunction:f("parseWithFunction"),skipFalsyValuesForTypes:f("skipFalsyValuesForTypes"),skipFalsyValuesForFields:f("skipFalsyValuesForFields"),typeFunctions:a.extend({},f("defaultTypes"),f("customTypes")),useIntKeysAsArrayIndex:f("useIntKeysAsArrayIndex")}},parseValue:function(b,c,d,e){var f,g;return f=a.serializeJSON,g=b,e.typeFunctions&&d&&e.typeFunctions[d]?g=e.typeFunctions[d](b):e.parseNumbers&&f.isNumeric(b)?g=Number(b):!e.parseBooleans||"true"!==b&&"false"!==b?e.parseNulls&&"null"==b&&(g=null):g="true"===b,e.parseWithFunction&&!d&&(g=e.parseWithFunction(g,c)),g},isObject:function(a){return a===Object(a)},isUndefined:function(a){return void 0===a},isValidArrayIndex:function(a){return/^[0-9]+$/.test(String(a))},isNumeric:function(a){return a-parseFloat(a)>=0},optionKeys:function(a){if(Object.keys)return Object.keys(a);var b,c=[];for(b in a)c.push(b);return c},readCheckboxUncheckedValues:function(b,c,d){var e,f,g,h,i;null==c&&(c={}),i=a.serializeJSON,e="input[type=checkbox][name]:not(:checked):not([disabled])",f=d.find(e).add(d.filter(e)),f.each(function(d,e){if(g=a(e),h=g.attr("data-unchecked-value"),null==h&&(h=c.checkboxUncheckedValue),null!=h){if(e.name&&e.name.indexOf("[][")!==-1)throw new Error("serializeJSON ERROR: checkbox unchecked values are not supported on nested arrays of objects like '"+e.name+"'. See https://github.com/marioizquierdo/jquery.serializeJSON/issues/67");b.push({name:e.name,value:h})}})},extractTypeAndNameWithNoType:function(a){var b;return(b=a.match(/(.*):([^:]+)$/))?{nameWithNoType:b[1],type:b[2]}:{nameWithNoType:a,type:null}},shouldSkipFalsy:function(b,c,d,e,f){var g=a.serializeJSON,h=g.attrFromInputWithName(b,c,"data-skip-falsy");if(null!=h)return"false"!==h;var i=f.skipFalsyValuesForFields;if(i&&(i.indexOf(d)!==-1||i.indexOf(c)!==-1))return!0;var j=f.skipFalsyValuesForTypes;return null==e&&(e="string"),!(!j||j.indexOf(e)===-1)},attrFromInputWithName:function(a,b,c){var d,e,f;return d=b.replace(/(:|\.|\[|\]|\s)/g,"\\$1"),e='[name="'+d+'"]',f=a.find(e).add(a.filter(e)),f.attr(c)},validateType:function(b,c,d){var e,f;if(f=a.serializeJSON,e=f.optionKeys(d?d.typeFunctions:f.defaultOptions.defaultTypes),c&&e.indexOf(c)===-1)throw new Error("serializeJSON ERROR: Invalid type "+c+" found in input name '"+b+"', please use one of "+e.join(", "));return!0},splitInputNameIntoKeysArray:function(b){var c,d;return d=a.serializeJSON,c=b.split("["),c=a.map(c,function(a){return a.replace(/\]/g,"")}),""===c[0]&&c.shift(),c},deepSet:function(b,c,d,e){var f,g,h,i,j,k;if(null==e&&(e={}),k=a.serializeJSON,k.isUndefined(b))throw new Error("ArgumentError: param 'o' expected to be an object or array, found undefined");if(!c||0===c.length)throw new Error("ArgumentError: param 'keys' expected to be an array with least one element");f=c[0],1===c.length?""===f?b.push(d):b[f]=d:(g=c[1],""===f&&(i=b.length-1,j=b[i],f=k.isObject(j)&&(k.isUndefined(j[g])||c.length>2)?i:i+1),""===g?!k.isUndefined(b[f])&&a.isArray(b[f])||(b[f]=[]):e.useIntKeysAsArrayIndex&&k.isValidArrayIndex(g)?!k.isUndefined(b[f])&&a.isArray(b[f])||(b[f]=[]):!k.isUndefined(b[f])&&k.isObject(b[f])||(b[f]={}),h=c.slice(1),k.deepSet(b[f],h,d,e))}}});
includes/jstree/jstree.js ADDED
@@ -0,0 +1,8305 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*globals jQuery, define, module, exports, require, window, document, postMessage */
2
+ (function (factory) {
3
+ "use strict";
4
+ if (typeof define === 'function' && define.amd) {
5
+ define(['jquery'], factory);
6
+ }
7
+ else if(typeof module !== 'undefined' && module.exports) {
8
+ module.exports = factory(require('jquery'));
9
+ }
10
+ else {
11
+ factory(jQuery);
12
+ }
13
+ }(function ($, undefined) {
14
+ "use strict";
15
+ /*!
16
+ * jsTree 3.3.3
17
+ * http://jstree.com/
18
+ *
19
+ * Copyright (c) 2014 Ivan Bozhanov (http://vakata.com)
20
+ *
21
+ * Licensed same as jquery - under the terms of the MIT License
22
+ * http://www.opensource.org/licenses/mit-license.php
23
+ */
24
+ /*!
25
+ * if using jslint please allow for the jQuery global and use following options:
26
+ * jslint: loopfunc: true, browser: true, ass: true, bitwise: true, continue: true, nomen: true, plusplus: true, regexp: true, unparam: true, todo: true, white: true
27
+ */
28
+ /*jshint -W083 */
29
+
30
+ // prevent another load? maybe there is a better way?
31
+ if($.jstree) {
32
+ return;
33
+ }
34
+
35
+ /**
36
+ * ### jsTree core functionality
37
+ */
38
+
39
+ // internal variables
40
+ var instance_counter = 0,
41
+ ccp_node = false,
42
+ ccp_mode = false,
43
+ ccp_inst = false,
44
+ themes_loaded = [],
45
+ src = $('script:last').attr('src'),
46
+ document = window.document; // local variable is always faster to access then a global
47
+
48
+ /**
49
+ * holds all jstree related functions and variables, including the actual class and methods to create, access and manipulate instances.
50
+ * @name $.jstree
51
+ */
52
+ $.jstree = {
53
+ /**
54
+ * specifies the jstree version in use
55
+ * @name $.jstree.version
56
+ */
57
+ version : '3.3.3',
58
+ /**
59
+ * holds all the default options used when creating new instances
60
+ * @name $.jstree.defaults
61
+ */
62
+ defaults : {
63
+ /**
64
+ * configure which plugins will be active on an instance. Should be an array of strings, where each element is a plugin name. The default is `[]`
65
+ * @name $.jstree.defaults.plugins
66
+ */
67
+ plugins : []
68
+ },
69
+ /**
70
+ * stores all loaded jstree plugins (used internally)
71
+ * @name $.jstree.plugins
72
+ */
73
+ plugins : {},
74
+ path : src && src.indexOf('/') !== -1 ? src.replace(/\/[^\/]+$/,'') : '',
75
+ idregex : /[\\:&!^|()\[\]<>@*'+~#";.,=\- \/${}%?`]/g,
76
+ root : '#'
77
+ };
78
+
79
+ /**
80
+ * creates a jstree instance
81
+ * @name $.jstree.create(el [, options])
82
+ * @param {DOMElement|jQuery|String} el the element to create the instance on, can be jQuery extended or a selector
83
+ * @param {Object} options options for this instance (extends `$.jstree.defaults`)
84
+ * @return {jsTree} the new instance
85
+ */
86
+ $.jstree.create = function (el, options) {
87
+ var tmp = new $.jstree.core(++instance_counter),
88
+ opt = options;
89
+ options = $.extend(true, {}, $.jstree.defaults, options);
90
+ if(opt && opt.plugins) {
91
+ options.plugins = opt.plugins;
92
+ }
93
+ $.each(options.plugins, function (i, k) {
94
+ if(i !== 'core') {
95
+ tmp = tmp.plugin(k, options[k]);
96
+ }
97
+ });
98
+ $(el).data('jstree', tmp);
99
+ tmp.init(el, options);
100
+ return tmp;
101
+ };
102
+ /**
103
+ * remove all traces of jstree from the DOM and destroy all instances
104
+ * @name $.jstree.destroy()
105
+ */
106
+ $.jstree.destroy = function () {
107
+ $('.jstree:jstree').jstree('destroy');
108
+ $(document).off('.jstree');
109
+ };
110
+ /**
111
+ * the jstree class constructor, used only internally
112
+ * @private
113
+ * @name $.jstree.core(id)
114
+ * @param {Number} id this instance's index
115
+ */
116
+ $.jstree.core = function (id) {
117
+ this._id = id;
118
+ this._cnt = 0;
119
+ this._wrk = null;
120
+ this._data = {
121
+ core : {
122
+ themes : {
123
+ name : false,
124
+ dots : false,
125
+ icons : false,
126
+ ellipsis : false
127
+ },
128
+ selected : [],
129
+ last_error : {},
130
+ working : false,
131
+ worker_queue : [],
132
+ focused : null
133
+ }
134
+ };
135
+ };
136
+ /**
137
+ * get a reference to an existing instance
138
+ *
139
+ * __Examples__
140
+ *
141
+ * // provided a container with an ID of "tree", and a nested node with an ID of "branch"
142
+ * // all of there will return the same instance
143
+ * $.jstree.reference('tree');
144
+ * $.jstree.reference('#tree');
145
+ * $.jstree.reference($('#tree'));
146
+ * $.jstree.reference(document.getElementByID('tree'));
147
+ * $.jstree.reference('branch');
148
+ * $.jstree.reference('#branch');
149
+ * $.jstree.reference($('#branch'));
150
+ * $.jstree.reference(document.getElementByID('branch'));
151
+ *
152
+ * @name $.jstree.reference(needle)
153
+ * @param {DOMElement|jQuery|String} needle
154
+ * @return {jsTree|null} the instance or `null` if not found
155
+ */
156
+ $.jstree.reference = function (needle) {
157
+ var tmp = null,
158
+ obj = null;
159
+ if(needle && needle.id && (!needle.tagName || !needle.nodeType)) { needle = needle.id; }
160
+
161
+ if(!obj || !obj.length) {
162
+ try { obj = $(needle); } catch (ignore) { }
163
+ }
164
+ if(!obj || !obj.length) {
165
+ try { obj = $('#' + needle.replace($.jstree.idregex,'\\$&')); } catch (ignore) { }
166
+ }
167
+ if(obj && obj.length && (obj = obj.closest('.jstree')).length && (obj = obj.data('jstree'))) {
168
+ tmp = obj;
169
+ }
170
+ else {
171
+ $('.jstree').each(function () {
172
+ var inst = $(this).data('jstree');
173
+ if(inst && inst._model.data[needle]) {
174
+ tmp = inst;
175
+ return false;
176
+ }
177
+ });
178
+ }
179
+ return tmp;
180
+ };
181
+ /**
182
+ * Create an instance, get an instance or invoke a command on a instance.
183
+ *
184
+ * If there is no instance associated with the current node a new one is created and `arg` is used to extend `$.jstree.defaults` for this new instance. There would be no return value (chaining is not broken).
185
+ *
186
+ * If there is an existing instance and `arg` is a string the command specified by `arg` is executed on the instance, with any additional arguments passed to the function. If the function returns a value it will be returned (chaining could break depending on function).
187
+ *
188
+ * If there is an existing instance and `arg` is not a string the instance itself is returned (similar to `$.jstree.reference`).
189
+ *
190
+ * In any other case - nothing is returned and chaining is not broken.
191
+ *
192
+ * __Examples__
193
+ *
194
+ * $('#tree1').jstree(); // creates an instance
195
+ * $('#tree2').jstree({ plugins : [] }); // create an instance with some options
196
+ * $('#tree1').jstree('open_node', '#branch_1'); // call a method on an existing instance, passing additional arguments
197
+ * $('#tree2').jstree(); // get an existing instance (or create an instance)
198
+ * $('#tree2').jstree(true); // get an existing instance (will not create new instance)
199
+ * $('#branch_1').jstree().select_node('#branch_1'); // get an instance (using a nested element and call a method)
200
+ *
201
+ * @name $().jstree([arg])
202
+ * @param {String|Object} arg
203
+ * @return {Mixed}
204
+ */
205
+ $.fn.jstree = function (arg) {
206
+ // check for string argument
207
+ var is_method = (typeof arg === 'string'),
208
+ args = Array.prototype.slice.call(arguments, 1),
209
+ result = null;
210
+ if(arg === true && !this.length) { return false; }
211
+ this.each(function () {
212
+ // get the instance (if there is one) and method (if it exists)
213
+ var instance = $.jstree.reference(this),
214
+ method = is_method && instance ? instance[arg] : null;
215
+ // if calling a method, and method is available - execute on the instance
216
+ result = is_method && method ?
217
+ method.apply(instance, args) :
218
+ null;
219
+ // if there is no instance and no method is being called - create one
220
+ if(!instance && !is_method && (arg === undefined || $.isPlainObject(arg))) {
221
+ $.jstree.create(this, arg);
222
+ }
223
+ // if there is an instance and no method is called - return the instance
224
+ if( (instance && !is_method) || arg === true ) {
225
+ result = instance || false;
226
+ }
227
+ // if there was a method call which returned a result - break and return the value
228
+ if(result !== null && result !== undefined) {
229
+ return false;
230
+ }
231
+ });
232
+ // if there was a method call with a valid return value - return that, otherwise continue the chain
233
+ return result !== null && result !== undefined ?
234
+ result : this;
235
+ };
236
+ /**
237
+ * used to find elements containing an instance
238
+ *
239
+ * __Examples__
240
+ *
241
+ * $('div:jstree').each(function () {
242
+ * $(this).jstree('destroy');
243
+ * });
244
+ *
245
+ * @name $(':jstree')
246
+ * @return {jQuery}
247
+ */
248
+ $.expr.pseudos.jstree = $.expr.createPseudo(function(search) {
249
+ return function(a) {
250
+ return $(a).hasClass('jstree') &&
251
+ $(a).data('jstree') !== undefined;
252
+ };
253
+ });
254
+
255
+ /**
256
+ * stores all defaults for the core
257
+ * @name $.jstree.defaults.core
258
+ */
259
+ $.jstree.defaults.core = {
260
+ /**
261
+ * data configuration
262
+ *
263
+ * If left as `false` the HTML inside the jstree container element is used to populate the tree (that should be an unordered list with list items).
264
+ *
265
+ * You can also pass in a HTML string or a JSON array here.
266
+ *
267
+ * It is possible to pass in a standard jQuery-like AJAX config and jstree will automatically determine if the response is JSON or HTML and use that to populate the tree.
268
+ * In addition to the standard jQuery ajax options here you can suppy functions for `data` and `url`, the functions will be run in the current instance's scope and a param will be passed indicating which node is being loaded, the return value of those functions will be used.
269
+ *
270
+ * The last option is to specify a function, that function will receive the node being loaded as argument and a second param which is a function which should be called with the result.
271
+ *
272
+ * __Examples__
273
+ *
274
+ * // AJAX
275
+ * $('#tree').jstree({
276
+ * 'core' : {
277
+ * 'data' : {
278
+ * 'url' : '/get/children/',
279
+ * 'data' : function (node) {
280
+ * return { 'id' : node.id };
281
+ * }
282
+ * }
283
+ * });
284
+ *
285
+ * // direct data
286
+ * $('#tree').jstree({
287
+ * 'core' : {
288
+ * 'data' : [
289
+ * 'Simple root node',
290
+ * {
291
+ * 'id' : 'node_2',
292
+ * 'text' : 'Root node with options',
293
+ * 'state' : { 'opened' : true, 'selected' : true },
294
+ * 'children' : [ { 'text' : 'Child 1' }, 'Child 2']
295
+ * }
296
+ * ]
297
+ * }
298
+ * });
299
+ *
300
+ * // function
301
+ * $('#tree').jstree({
302
+ * 'core' : {
303
+ * 'data' : function (obj, callback) {
304
+ * callback.call(this, ['Root 1', 'Root 2']);
305
+ * }
306
+ * });
307
+ *
308
+ * @name $.jstree.defaults.core.data
309
+ */
310
+ data : false,
311
+ /**
312
+ * configure the various strings used throughout the tree
313
+ *
314
+ * You can use an object where the key is the string you need to replace and the value is your replacement.
315
+ * Another option is to specify a function which will be called with an argument of the needed string and should return the replacement.
316
+ * If left as `false` no replacement is made.
317
+ *
318
+ * __Examples__
319
+ *
320
+ * $('#tree').jstree({
321
+ * 'core' : {
322
+ * 'strings' : {
323
+ * 'Loading ...' : 'Please wait ...'
324
+ * }
325
+ * }
326
+ * });
327
+ *
328
+ * @name $.jstree.defaults.core.strings
329
+ */
330
+ strings : false,
331
+ /**
332
+ * determines what happens when a user tries to modify the structure of the tree
333
+ * If left as `false` all operations like create, rename, delete, move or copy are prevented.
334
+ * You can set this to `true` to allow all interactions or use a function to have better control.
335
+ *
336
+ * __Examples__
337
+ *
338
+ * $('#tree').jstree({
339
+ * 'core' : {
340
+ * 'check_callback' : function (operation, node, node_parent, node_position, more) {
341
+ * // operation can be 'create_node', 'rename_node', 'delete_node', 'move_node' or 'copy_node'
342
+ * // in case of 'rename_node' node_position is filled with the new node name
343
+ * return operation === 'rename_node' ? true : false;
344
+ * }
345
+ * }
346
+ * });
347
+ *
348
+ * @name $.jstree.defaults.core.check_callback
349
+ */
350
+ check_callback : false,
351
+ /**
352
+ * a callback called with a single object parameter in the instance's scope when something goes wrong (operation prevented, ajax failed, etc)
353
+ * @name $.jstree.defaults.core.error
354
+ */
355
+ error : $.noop,
356
+ /**
357
+ * the open / close animation duration in milliseconds - set this to `false` to disable the animation (default is `200`)
358
+ * @name $.jstree.defaults.core.animation
359
+ */
360
+ animation : 200,
361
+ /**
362
+ * a boolean indicating if multiple nodes can be selected
363
+ * @name $.jstree.defaults.core.multiple
364
+ */
365
+ multiple : true,
366
+ /**
367
+ * theme configuration object
368
+ * @name $.jstree.defaults.core.themes
369
+ */
370
+ themes : {
371
+ /**
372
+ * the name of the theme to use (if left as `false` the default theme is used)
373
+ * @name $.jstree.defaults.core.themes.name
374
+ */
375
+ name : false,
376
+ /**
377
+ * the URL of the theme's CSS file, leave this as `false` if you have manually included the theme CSS (recommended). You can set this to `true` too which will try to autoload the theme.
378
+ * @name $.jstree.defaults.core.themes.url
379
+ */
380
+ url : false,
381
+ /**
382
+ * the location of all jstree themes - only used if `url` is set to `true`
383
+ * @name $.jstree.defaults.core.themes.dir
384
+ */
385
+ dir : false,
386
+ /**
387
+ * a boolean indicating if connecting dots are shown
388
+ * @name $.jstree.defaults.core.themes.dots
389
+ */
390
+ dots : true,
391
+ /**
392
+ * a boolean indicating if node icons are shown
393
+ * @name $.jstree.defaults.core.themes.icons
394
+ */
395
+ icons : true,
396
+ /**
397
+ * a boolean indicating if node ellipsis should be shown - this only works with a fixed with on the container
398
+ * @name $.jstree.defaults.core.themes.ellipsis
399
+ */
400
+ ellipsis : false,
401
+ /**
402
+ * a boolean indicating if the tree background is striped
403
+ * @name $.jstree.defaults.core.themes.stripes
404
+ */
405
+ stripes : false,
406
+ /**
407
+ * a string (or boolean `false`) specifying the theme variant to use (if the theme supports variants)
408
+ * @name $.jstree.defaults.core.themes.variant
409
+ */
410
+ variant : false,
411
+ /**
412
+ * a boolean specifying if a reponsive version of the theme should kick in on smaller screens (if the theme supports it). Defaults to `false`.
413
+ * @name $.jstree.defaults.core.themes.responsive
414
+ */
415
+ responsive : false
416
+ },
417
+ /**
418
+ * if left as `true` all parents of all selected nodes will be opened once the tree loads (so that all selected nodes are visible to the user)
419
+ * @name $.jstree.defaults.core.expand_selected_onload
420
+ */
421
+ expand_selected_onload : true,
422
+ /**
423
+ * if left as `true` web workers will be used to parse incoming JSON data where possible, so that the UI will not be blocked by large requests. Workers are however about 30% slower. Defaults to `true`
424
+ * @name $.jstree.defaults.core.worker
425
+ */
426
+ worker : true,
427
+ /**
428
+ * Force node text to plain text (and escape HTML). Defaults to `false`
429
+ * @name $.jstree.defaults.core.force_text
430
+ */
431
+ force_text : false,
432
+ /**
433
+ * Should the node should be toggled if the text is double clicked . Defaults to `true`
434
+ * @name $.jstree.defaults.core.dblclick_toggle
435
+ */
436
+ dblclick_toggle : true
437
+ };
438
+ $.jstree.core.prototype = {
439
+ /**
440
+ * used to decorate an instance with a plugin. Used internally.
441
+ * @private
442
+ * @name plugin(deco [, opts])
443
+ * @param {String} deco the plugin to decorate with
444
+ * @param {Object} opts options for the plugin
445
+ * @return {jsTree}
446
+ */
447
+ plugin : function (deco, opts) {
448
+ var Child = $.jstree.plugins[deco];
449
+ if(Child) {
450
+ this._data[deco] = {};
451
+ Child.prototype = this;
452
+ return new Child(opts, this);
453
+ }
454
+ return this;
455
+ },
456
+ /**
457
+ * initialize the instance. Used internally.
458
+ * @private
459
+ * @name init(el, optons)
460
+ * @param {DOMElement|jQuery|String} el the element we are transforming
461
+ * @param {Object} options options for this instance
462
+ * @trigger init.jstree, loading.jstree, loaded.jstree, ready.jstree, changed.jstree
463
+ */
464
+ init : function (el, options) {
465
+ this._model = {
466
+ data : {},
467
+ changed : [],
468
+ force_full_redraw : false,
469
+ redraw_timeout : false,
470
+ default_state : {
471
+ loaded : true,
472
+ opened : false,
473
+ selected : false,
474
+ disabled : false
475
+ }
476
+ };
477
+ this._model.data[$.jstree.root] = {
478
+ id : $.jstree.root,
479
+ parent : null,
480
+ parents : [],
481
+ children : [],
482
+ children_d : [],
483
+ state : { loaded : false }
484
+ };
485
+
486
+ this.element = $(el).addClass('jstree jstree-' + this._id);
487
+ this.settings = options;
488
+
489
+ this._data.core.ready = false;
490
+ this._data.core.loaded = false;
491
+ this._data.core.rtl = (this.element.css("direction") === "rtl");
492
+ this.element[this._data.core.rtl ? 'addClass' : 'removeClass']("jstree-rtl");
493
+ this.element.attr('role','tree');
494
+ if(this.settings.core.multiple) {
495
+ this.element.attr('aria-multiselectable', true);
496
+ }
497
+ if(!this.element.attr('tabindex')) {
498
+ this.element.attr('tabindex','0');
499
+ }
500
+
501
+ this.bind();
502
+ /**
503
+ * triggered after all events are bound
504
+ * @event
505
+ * @name init.jstree
506
+ */
507
+ this.trigger("init");
508
+
509
+ this._data.core.original_container_html = this.element.find(" > ul > li").clone(true);
510
+ this._data.core.original_container_html
511
+ .find("li").addBack()
512
+ .contents().filter(function() {
513
+ return this.nodeType === 3 && (!this.nodeValue || /^\s+$/.test(this.nodeValue));
514
+ })
515
+ .remove();
516
+ this.element.html("<"+"ul class='jstree-container-ul jstree-children' role='group'><"+"li id='j"+this._id+"_loading' class='jstree-initial-node jstree-loading jstree-leaf jstree-last' role='tree-item'><i class='jstree-icon jstree-ocl'></i><"+"a class='jstree-anchor' href='#'><i class='jstree-icon jstree-themeicon-hidden'></i>" + this.get_string("Loading ...") + "</a></li></ul>");
517
+ this.element.attr('aria-activedescendant','j' + this._id + '_loading');
518
+ this._data.core.li_height = this.get_container_ul().children("li").first().height() || 24;
519
+ this._data.core.node = this._create_prototype_node();
520
+ /**
521
+ * triggered after the loading text is shown and before loading starts
522
+ * @event
523
+ * @name loading.jstree
524
+ */
525
+ this.trigger("loading");
526
+ this.load_node($.jstree.root);
527
+ },
528
+ /**
529
+ * destroy an instance
530
+ * @name destroy()
531
+ * @param {Boolean} keep_html if not set to `true` the container will be emptied, otherwise the current DOM elements will be kept intact
532
+ */
533
+ destroy : function (keep_html) {
534
+ if(this._wrk) {
535
+ try {
536
+ window.URL.revokeObjectURL(this._wrk);
537
+ this._wrk = null;
538
+ }
539
+ catch (ignore) { }
540
+ }
541
+ if(!keep_html) { this.element.empty(); }
542
+ this.teardown();
543
+ },
544
+ /**
545
+ * Create prototype node
546
+ */
547
+ _create_prototype_node : function () {
548
+ var _node = document.createElement('LI'), _temp1, _temp2;
549
+ _node.setAttribute('role', 'treeitem');
550
+ _temp1 = document.createElement('I');
551
+ _temp1.className = 'jstree-icon jstree-ocl';
552
+ _temp1.setAttribute('role', 'presentation');
553
+ _node.appendChild(_temp1);
554
+ _temp1 = document.createElement('A');
555
+ _temp1.className = 'jstree-anchor';
556
+ _temp1.setAttribute('href','#');
557
+ _temp1.setAttribute('tabindex','-1');
558
+ _temp2 = document.createElement('I');
559
+ _temp2.className = 'jstree-icon jstree-themeicon';
560
+ _temp2.setAttribute('role', 'presentation');
561
+ _temp1.appendChild(_temp2);
562
+ _node.appendChild(_temp1);
563
+ _temp1 = _temp2 = null;
564
+
565
+ return _node;
566
+ },
567
+ /**
568
+ * part of the destroying of an instance. Used internally.
569
+ * @private
570
+ * @name teardown()
571
+ */
572
+ teardown : function () {
573
+ this.unbind();
574
+ this.element
575
+ .removeClass('jstree')
576
+ .removeData('jstree')
577
+ .find("[class^='jstree']")
578
+ .addBack()
579
+ .attr("class", function () { return this.className.replace(/jstree[^ ]*|$/ig,''); });
580
+ this.element = null;
581
+ },
582
+ /**
583
+ * bind all events. Used internally.
584
+ * @private
585
+ * @name bind()
586
+ */
587
+ bind : function () {
588
+ var word = '',
589
+ tout = null,
590
+ was_click = 0;
591
+ this.element
592
+ .on("dblclick.jstree", function (e) {
593
+ if(e.target.tagName && e.target.tagName.toLowerCase() === "input") { return true; }
594
+ if(document.selection && document.selection.empty) {
595
+ document.selection.empty();
596
+ }
597
+ else {
598
+ if(window.getSelection) {
599
+ var sel = window.getSelection();
600
+ try {
601
+ sel.removeAllRanges();
602
+ sel.collapse();
603
+ } catch (ignore) { }
604
+ }
605
+ }
606
+ })
607
+ .on("mousedown.jstree", $.proxy(function (e) {
608
+ if(e.target === this.element[0]) {
609
+ e.preventDefault(); // prevent losing focus when clicking scroll arrows (FF, Chrome)
610
+ was_click = +(new Date()); // ie does not allow to prevent losing focus
611
+ }
612
+ }, this))
613
+ .on("mousedown.jstree", ".jstree-ocl", function (e) {
614
+ e.preventDefault(); // prevent any node inside from losing focus when clicking the open/close icon
615
+ })
616
+ .on("click.jstree", ".jstree-ocl", $.proxy(function (e) {
617
+ this.toggle_node(e.target);
618
+ }, this))
619
+ .on("dblclick.jstree", ".jstree-anchor", $.proxy(function (e) {
620
+ if(e.target.tagName && e.target.tagName.toLowerCase() === "input") { return true; }
621
+ if(this.settings.core.dblclick_toggle) {
622
+ this.toggle_node(e.target);
623
+ }
624
+ }, this))
625
+ .on("click.jstree", ".jstree-anchor", $.proxy(function (e) {
626
+ e.preventDefault();
627
+ if(e.currentTarget !== document.activeElement) { $(e.currentTarget).focus(); }
628
+ this.activate_node(e.currentTarget, e);
629
+ }, this))
630
+ .on('keydown.jstree', '.jstree-anchor', $.proxy(function (e) {
631
+ if(e.target.tagName && e.target.tagName.toLowerCase() === "input") { return true; }
632
+ if(e.which !== 32 && e.which !== 13 && (e.shiftKey || e.ctrlKey || e.altKey || e.metaKey)) { return true; }
633
+ var o = null;
634
+ if(this._data.core.rtl) {
635
+ if(e.which === 37) { e.which = 39; }
636
+ else if(e.which === 39) { e.which = 37; }
637
+ }
638
+ switch(e.which) {
639
+ case 32: // aria defines space only with Ctrl
640
+ if(e.ctrlKey) {
641
+ e.type = "click";
642
+ $(e.currentTarget).trigger(e);
643
+ }
644
+ break;
645
+ case 13: // enter
646
+ e.type = "click";
647
+ $(e.currentTarget).trigger(e);
648
+ break;
649
+ case 37: // left
650
+ e.preventDefault();
651
+ if(this.is_open(e.currentTarget)) {
652
+ this.close_node(e.currentTarget);
653
+ }
654
+ else {
655
+ o = this.get_parent(e.currentTarget);
656
+ if(o && o.id !== $.jstree.root) { this.get_node(o, true).children('.jstree-anchor').focus(); }
657
+ }
658
+ break;
659
+ case 38: // up
660
+ e.preventDefault();
661
+ o = this.get_prev_dom(e.currentTarget);
662
+ if(o && o.length) { o.children('.jstree-anchor').focus(); }
663
+ break;
664
+ case 39: // right
665
+ e.preventDefault();
666
+ if(this.is_closed(e.currentTarget)) {
667
+ this.open_node(e.currentTarget, function (o) { this.get_node(o, true).children('.jstree-anchor').focus(); });
668
+ }
669
+ else if (this.is_open(e.currentTarget)) {
670
+ o = this.get_node(e.currentTarget, true).children('.jstree-children')[0];
671
+ if(o) { $(this._firstChild(o)).children('.jstree-anchor').focus(); }
672
+ }
673
+ break;
674
+ case 40: // down
675
+ e.preventDefault();
676
+ o = this.get_next_dom(e.currentTarget);
677
+ if(o && o.length) { o.children('.jstree-anchor').focus(); }
678
+ break;
679
+ case 106: // aria defines * on numpad as open_all - not very common
680
+ this.open_all();
681
+ break;
682
+ case 36: // home
683
+ e.preventDefault();
684
+ o = this._firstChild(this.get_container_ul()[0]);
685
+ if(o) { $(o).children('.jstree-anchor').filter(':visible').focus(); }
686
+ break;
687
+ case 35: // end
688
+ e.preventDefault();
689
+ this.element.find('.jstree-anchor').filter(':visible').last().focus();
690
+ break;
691
+ case 113: // f2 - safe to include - if check_callback is false it will fail
692
+ e.preventDefault();
693
+ this.edit(e.currentTarget);
694
+ break;
695
+ default:
696
+ break;
697
+ /*!
698
+ // delete
699
+ case 46:
700
+ e.preventDefault();
701
+ o = this.get_node(e.currentTarget);
702
+ if(o && o.id && o.id !== $.jstree.root) {
703
+ o = this.is_selected(o) ? this.get_selected() : o;
704
+ this.delete_node(o);
705
+ }
706
+ break;
707
+
708
+ */
709
+ }
710
+ }, this))
711
+ .on("load_node.jstree", $.proxy(function (e, data) {
712
+ if(data.status) {
713
+ if(data.node.id === $.jstree.root && !this._data.core.loaded) {
714
+ this._data.core.loaded = true;
715
+ if(this._firstChild(this.get_container_ul()[0])) {
716
+ this.element.attr('aria-activedescendant',this._firstChild(this.get_container_ul()[0]).id);
717
+ }
718
+ /**
719
+ * triggered after the root node is loaded for the first time
720
+ * @event
721
+ * @name loaded.jstree
722
+ */
723
+ this.trigger("loaded");
724
+ }
725
+ if(!this._data.core.ready) {
726
+ setTimeout($.proxy(function() {
727
+ if(this.element && !this.get_container_ul().find('.jstree-loading').length) {
728
+ this._data.core.ready = true;
729
+ if(this._data.core.selected.length) {
730
+ if(this.settings.core.expand_selected_onload) {
731
+ var tmp = [], i, j;
732
+ for(i = 0, j = this._data.core.selected.length; i < j; i++) {
733
+ tmp = tmp.concat(this._model.data[this._data.core.selected[i]].parents);
734
+ }
735
+ tmp = $.vakata.array_unique(tmp);
736
+ for(i = 0, j = tmp.length; i < j; i++) {
737
+ this.open_node(tmp[i], false, 0);
738
+ }
739
+ }
740
+ this.trigger('changed', { 'action' : 'ready', 'selected' : this._data.core.selected });
741
+ }
742
+ /**
743
+ * triggered after all nodes are finished loading
744
+ * @event
745
+ * @name ready.jstree
746
+ */
747
+ this.trigger("ready");
748
+ }
749
+ }, this), 0);
750
+ }
751
+ }
752
+ }, this))
753
+ // quick searching when the tree is focused
754
+ .on('keypress.jstree', $.proxy(function (e) {
755
+ if(e.target.tagName && e.target.tagName.toLowerCase() === "input") { return true; }
756
+ if(tout) { clearTimeout(tout); }
757
+ tout = setTimeout(function () {
758
+ word = '';
759
+ }, 500);
760
+
761
+ var chr = String.fromCharCode(e.which).toLowerCase(),
762
+ col = this.element.find('.jstree-anchor').filter(':visible'),
763
+ ind = col.index(document.activeElement) || 0,
764
+ end = false;
765
+ word += chr;
766
+
767
+ // match for whole word from current node down (including the current node)
768
+ if(word.length > 1) {
769
+ col.slice(ind).each($.proxy(function (i, v) {
770
+ if($(v).text().toLowerCase().indexOf(word) === 0) {
771
+ $(v).focus();
772
+ end = true;
773
+ return false;
774
+ }
775
+ }, this));
776
+ if(end) { return; }
777
+
778
+ // match for whole word from the beginning of the tree
779
+ col.slice(0, ind).each($.proxy(function (i, v) {
780
+ if($(v).text().toLowerCase().indexOf(word) === 0) {
781
+ $(v).focus();
782
+ end = true;
783
+ return false;
784
+ }
785
+ }, this));
786
+ if(end) { return; }
787
+ }
788
+ // list nodes that start with that letter (only if word consists of a single char)
789
+ if(new RegExp('^' + chr.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&') + '+$').test(word)) {
790
+ // search for the next node starting with that letter
791
+ col.slice(ind + 1).each($.proxy(function (i, v) {
792
+ if($(v).text().toLowerCase().charAt(0) === chr) {
793
+ $(v).focus();
794
+ end = true;
795
+ return false;
796
+ }
797
+ }, this));
798
+ if(end) { return; }
799
+
800
+ // search from the beginning
801
+ col.slice(0, ind + 1).each($.proxy(function (i, v) {
802
+ if($(v).text().toLowerCase().charAt(0) === chr) {
803
+ $(v).focus();
804
+ end = true;
805
+ return false;
806
+ }
807
+ }, this));
808
+ if(end) { return; }
809
+ }
810
+ }, this))
811
+ // THEME RELATED
812
+ .on("init.jstree", $.proxy(function () {
813
+ var s = this.settings.core.themes;
814
+ this._data.core.themes.dots = s.dots;
815
+ this._data.core.themes.stripes = s.stripes;
816
+ this._data.core.themes.icons = s.icons;
817
+ this._data.core.themes.ellipsis = s.ellipsis;
818
+ this.set_theme(s.name || "default", s.url);
819
+ this.set_theme_variant(s.variant);
820
+ }, this))
821
+ .on("loading.jstree", $.proxy(function () {
822
+ this[ this._data.core.themes.dots ? "show_dots" : "hide_dots" ]();
823
+ this[ this._data.core.themes.icons ? "show_icons" : "hide_icons" ]();
824
+ this[ this._data.core.themes.stripes ? "show_stripes" : "hide_stripes" ]();
825
+ this[ this._data.core.themes.ellipsis ? "show_ellipsis" : "hide_ellipsis" ]();
826
+ }, this))
827
+ .on('blur.jstree', '.jstree-anchor', $.proxy(function (e) {
828
+ this._data.core.focused = null;
829
+ $(e.currentTarget).filter('.jstree-hovered').mouseleave();
830
+ this.element.attr('tabindex', '0');
831
+ }, this))
832
+ .on('focus.jstree', '.jstree-anchor', $.proxy(function (e) {
833
+ var tmp = this.get_node(e.currentTarget);
834
+ if(tmp && tmp.id) {
835
+ this._data.core.focused = tmp.id;
836
+ }
837
+ this.element.find('.jstree-hovered').not(e.currentTarget).mouseleave();
838
+ $(e.currentTarget).mouseenter();
839
+ this.element.attr('tabindex', '-1');
840
+ }, this))
841
+ .on('focus.jstree', $.proxy(function () {
842
+ if(+(new Date()) - was_click > 500 && !this._data.core.focused) {
843
+ was_click = 0;
844
+ var act = this.get_node(this.element.attr('aria-activedescendant'), true);
845
+ if(act) {
846
+ act.find('> .jstree-anchor').focus();
847
+ }
848
+ }
849
+ }, this))
850
+ .on('mouseenter.jstree', '.jstree-anchor', $.proxy(function (e) {
851
+ this.hover_node(e.currentTarget);
852
+ }, this))
853
+ .on('mouseleave.jstree', '.jstree-anchor', $.proxy(function (e) {
854
+ this.dehover_node(e.currentTarget);
855
+ }, this));
856
+ },
857
+ /**
858
+ * part of the destroying of an instance. Used internally.
859
+ * @private
860
+ * @name unbind()
861
+ */
862
+ unbind : function () {
863
+ this.element.off('.jstree');
864
+ $(document).off('.jstree-' + this._id);
865
+ },
866
+ /**
867
+ * trigger an event. Used internally.
868
+ * @private
869
+ * @name trigger(ev [, data])
870
+ * @param {String} ev the name of the event to trigger
871
+ * @param {Object} data additional data to pass with the event
872
+ */
873
+ trigger : function (ev, data) {
874
+ if(!data) {
875
+ data = {};
876
+ }
877
+ data.instance = this;
878
+ this.element.triggerHandler(ev.replace('.jstree','') + '.jstree', data);
879
+ },
880
+ /**
881
+ * returns the jQuery extended instance container
882
+ * @name get_container()
883
+ * @return {jQuery}
884
+ */
885
+ get_container : function () {
886
+ return this.element;
887
+ },
888
+ /**
889
+ * returns the jQuery extended main UL node inside the instance container. Used internally.
890
+ * @private
891
+ * @name get_container_ul()
892
+ * @return {jQuery}
893
+ */
894
+ get_container_ul : function () {
895
+ return this.element.children(".jstree-children").first();
896
+ },
897
+ /**
898
+ * gets string replacements (localization). Used internally.
899
+ * @private
900
+ * @name get_string(key)
901
+ * @param {String} key
902
+ * @return {String}
903
+ */
904
+ get_string : function (key) {
905
+ var a = this.settings.core.strings;
906
+ if($.isFunction(a)) { return a.call(this, key); }
907
+ if(a && a[key]) { return a[key]; }
908
+ return key;
909
+ },
910
+ /**
911
+ * gets the first child of a DOM node. Used internally.
912
+ * @private
913
+ * @name _firstChild(dom)
914
+ * @param {DOMElement} dom
915
+ * @return {DOMElement}
916
+ */
917
+ _firstChild : function (dom) {
918
+ dom = dom ? dom.firstChild : null;
919
+ while(dom !== null && dom.nodeType !== 1) {
920
+ dom = dom.nextSibling;
921
+ }
922
+ return dom;
923
+ },
924
+ /**
925
+ * gets the next sibling of a DOM node. Used internally.
926
+ * @private
927
+ * @name _nextSibling(dom)
928
+ * @param {DOMElement} dom
929
+ * @return {DOMElement}
930
+ */
931
+ _nextSibling : function (dom) {
932
+ dom = dom ? dom.nextSibling : null;
933
+ while(dom !== null && dom.nodeType !== 1) {
934
+ dom = dom.nextSibling;
935
+ }
936
+ return dom;
937
+ },
938
+ /**
939
+ * gets the previous sibling of a DOM node. Used internally.
940
+ * @private
941
+ * @name _previousSibling(dom)
942
+ * @param {DOMElement} dom
943
+ * @return {DOMElement}
944
+ */
945
+ _previousSibling : function (dom) {
946
+ dom = dom ? dom.previousSibling : null;
947
+ while(dom !== null && dom.nodeType !== 1) {
948
+ dom = dom.previousSibling;
949
+ }
950
+ return dom;
951
+ },
952
+ /**
953
+ * get the JSON representation of a node (or the actual jQuery extended DOM node) by using any input (child DOM element, ID string, selector, etc)
954
+ * @name get_node(obj [, as_dom])
955
+ * @param {mixed} obj
956
+ * @param {Boolean} as_dom
957
+ * @return {Object|jQuery}
958
+ */
959
+ get_node : function (obj, as_dom) {
960
+ if(obj && obj.id) {
961
+ obj = obj.id;
962
+ }
963
+ var dom;
964
+ try {
965
+ if(this._model.data[obj]) {
966
+ obj = this._model.data[obj];
967
+ }
968
+ else if(typeof obj === "string" && this._model.data[obj.replace(/^#/, '')]) {
969
+ obj = this._model.data[obj.replace(/^#/, '')];
970
+ }
971
+ else if(typeof obj === "string" && (dom = $('#' + obj.replace($.jstree.idregex,'\\$&'), this.element)).length && this._model.data[dom.closest('.jstree-node').attr('id')]) {
972
+ obj = this._model.data[dom.closest('.jstree-node').attr('id')];
973
+ }
974
+ else if((dom = $(obj, this.element)).length && this._model.data[dom.closest('.jstree-node').attr('id')]) {
975
+ obj = this._model.data[dom.closest('.jstree-node').attr('id')];
976
+ }
977
+ else if((dom = $(obj, this.element)).length && dom.hasClass('jstree')) {
978
+ obj = this._model.data[$.jstree.root];
979
+ }
980
+ else {
981
+ return false;
982
+ }
983
+
984
+ if(as_dom) {
985
+ obj = obj.id === $.jstree.root ? this.element : $('#' + obj.id.replace($.jstree.idregex,'\\$&'), this.element);
986
+ }
987
+ return obj;
988
+ } catch (ex) { return false; }
989
+ },
990
+ /**
991
+ * get the path to a node, either consisting of node texts, or of node IDs, optionally glued together (otherwise an array)
992
+ * @name get_path(obj [, glue, ids])
993
+ * @param {mixed} obj the node
994
+ * @param {String} glue if you want the path as a string - pass the glue here (for example '/'), if a falsy value is supplied here, an array is returned
995
+ * @param {Boolean} ids if set to true build the path using ID, otherwise node text is used
996
+ * @return {mixed}
997
+ */
998
+ get_path : function (obj, glue, ids) {
999
+ obj = obj.parents ? obj : this.get_node(obj);
1000
+ if(!obj || obj.id === $.jstree.root || !obj.parents) {
1001
+ return false;
1002
+ }
1003
+ var i, j, p = [];
1004
+ p.push(ids ? obj.id : obj.text);
1005
+ for(i = 0, j = obj.parents.length; i < j; i++) {
1006
+ p.push(ids ? obj.parents[i] : this.get_text(obj.parents[i]));
1007
+ }
1008
+ p = p.reverse().slice(1);
1009
+ return glue ? p.join(glue) : p;
1010
+ },
1011
+ /**
1012
+ * get the next visible node that is below the `obj` node. If `strict` is set to `true` only sibling nodes are returned.
1013
+ * @name get_next_dom(obj [, strict])
1014
+ * @param {mixed} obj
1015
+ * @param {Boolean} strict
1016
+ * @return {jQuery}
1017
+ */
1018
+ get_next_dom : function (obj, strict) {
1019
+ var tmp;
1020
+ obj = this.get_node(obj, true);
1021
+ if(obj[0] === this.element[0]) {
1022
+ tmp = this._firstChild(this.get_container_ul()[0]);
1023
+ while (tmp && tmp.offsetHeight === 0) {
1024
+ tmp = this._nextSibling(tmp);
1025
+ }
1026
+ return tmp ? $(tmp) : false;
1027
+ }
1028
+ if(!obj || !obj.length) {
1029
+ return false;
1030
+ }
1031
+ if(strict) {
1032
+ tmp = obj[0];
1033
+ do {
1034
+ tmp = this._nextSibling(tmp);
1035
+ } while (tmp && tmp.offsetHeight === 0);
1036
+ return tmp ? $(tmp) : false;
1037
+ }
1038
+ if(obj.hasClass("jstree-open")) {
1039
+ tmp = this._firstChild(obj.children('.jstree-children')[0]);
1040
+ while (tmp && tmp.offsetHeight === 0) {
1041
+ tmp = this._nextSibling(tmp);
1042
+ }
1043
+ if(tmp !== null) {
1044
+ return $(tmp);
1045
+ }
1046
+ }
1047
+ tmp = obj[0];
1048
+ do {
1049
+ tmp = this._nextSibling(tmp);
1050
+ } while (tmp && tmp.offsetHeight === 0);
1051
+ if(tmp !== null) {
1052
+ return $(tmp);
1053
+ }
1054
+ return obj.parentsUntil(".jstree",".jstree-node").nextAll(".jstree-node:visible").first();
1055
+ },
1056
+ /**
1057
+ * get the previous visible node that is above the `obj` node. If `strict` is set to `true` only sibling nodes are returned.
1058
+ * @name get_prev_dom(obj [, strict])
1059
+ * @param {mixed} obj
1060
+ * @param {Boolean} strict
1061
+ * @return {jQuery}
1062
+ */
1063
+ get_prev_dom : function (obj, strict) {
1064
+ var tmp;
1065
+ obj = this.get_node(obj, true);
1066
+ if(obj[0] === this.element[0]) {
1067
+ tmp = this.get_container_ul()[0].lastChild;
1068
+ while (tmp && tmp.offsetHeight === 0) {
1069
+ tmp = this._previousSibling(tmp);
1070
+ }
1071
+ return tmp ? $(tmp) : false;
1072
+ }
1073
+ if(!obj || !obj.length) {
1074
+ return false;
1075
+ }
1076
+ if(strict) {
1077
+ tmp = obj[0];
1078
+ do {
1079
+ tmp = this._previousSibling(tmp);
1080
+ } while (tmp && tmp.offsetHeight === 0);
1081
+ return tmp ? $(tmp) : false;
1082
+ }
1083
+ tmp = obj[0];
1084
+ do {
1085
+ tmp = this._previousSibling(tmp);
1086
+ } while (tmp && tmp.offsetHeight === 0);
1087
+ if(tmp !== null) {
1088
+ obj = $(tmp);
1089
+ while(obj.hasClass("jstree-open")) {
1090
+ obj = obj.children(".jstree-children").first().children(".jstree-node:visible:last");
1091
+ }
1092
+ return obj;
1093
+ }
1094
+ tmp = obj[0].parentNode.parentNode;
1095
+ return tmp && tmp.className && tmp.className.indexOf('jstree-node') !== -1 ? $(tmp) : false;
1096
+ },
1097
+ /**
1098
+ * get the parent ID of a node
1099
+ * @name get_parent(obj)
1100
+ * @param {mixed} obj
1101
+ * @return {String}
1102
+ */
1103
+ get_parent : function (obj) {
1104
+ obj = this.get_node(obj);
1105
+ if(!obj || obj.id === $.jstree.root) {
1106
+ return false;
1107
+ }
1108
+ return obj.parent;
1109
+ },
1110
+ /**
1111
+ * get a jQuery collection of all the children of a node (node must be rendered)
1112
+ * @name get_children_dom(obj)
1113
+ * @param {mixed} obj
1114
+ * @return {jQuery}
1115
+ */
1116
+ get_children_dom : function (obj) {
1117
+ obj = this.get_node(obj, true);
1118
+ if(obj[0] === this.element[0]) {
1119
+ return this.get_container_ul().children(".jstree-node");
1120
+ }
1121
+ if(!obj || !obj.length) {
1122
+ return false;
1123
+ }
1124
+ return obj.children(".jstree-children").children(".jstree-node");
1125
+ },
1126
+ /**
1127
+ * checks if a node has children
1128
+ * @name is_parent(obj)
1129
+ * @param {mixed} obj
1130
+ * @return {Boolean}
1131
+ */
1132
+ is_parent : function (obj) {
1133
+ obj = this.get_node(obj);
1134
+ return obj && (obj.state.loaded === false || obj.children.length > 0);
1135
+ },
1136
+ /**
1137
+ * checks if a node is loaded (its children are available)
1138
+ * @name is_loaded(obj)
1139
+ * @param {mixed} obj
1140
+ * @return {Boolean}
1141
+ */
1142
+ is_loaded : function (obj) {
1143
+ obj = this.get_node(obj);
1144
+ return obj && obj.state.loaded;
1145
+ },
1146
+ /**
1147
+ * check if a node is currently loading (fetching children)
1148
+ * @name is_loading(obj)
1149
+ * @param {mixed} obj
1150
+ * @return {Boolean}
1151
+ */
1152
+ is_loading : function (obj) {
1153
+ obj = this.get_node(obj);
1154
+ return obj && obj.state && obj.state.loading;
1155
+ },
1156
+ /**
1157
+ * check if a node is opened
1158
+ * @name is_open(obj)
1159
+ * @param {mixed} obj
1160
+ * @return {Boolean}
1161
+ */
1162
+ is_open : function (obj) {
1163
+ obj = this.get_node(obj);
1164
+ return obj && obj.state.opened;
1165
+ },
1166
+ /**
1167
+ * check if a node is in a closed state
1168
+ * @name is_closed(obj)
1169
+ * @param {mixed} obj
1170
+ * @return {Boolean}
1171
+ */
1172
+ is_closed : function (obj) {
1173
+ obj = this.get_node(obj);
1174
+ return obj && this.is_parent(obj) && !obj.state.opened;
1175
+ },
1176
+ /**
1177
+ * check if a node has no children
1178
+ * @name is_leaf(obj)
1179
+ * @param {mixed} obj
1180
+ * @return {Boolean}
1181
+ */
1182
+ is_leaf : function (obj) {
1183
+ return !this.is_parent(obj);
1184
+ },
1185
+ /**
1186
+ * loads a node (fetches its children using the `core.data` setting). Multiple nodes can be passed to by using an array.
1187
+ * @name load_node(obj [, callback])
1188
+ * @param {mixed} obj
1189
+ * @param {function} callback a function to be executed once loading is complete, the function is executed in the instance's scope and receives two arguments - the node and a boolean status
1190
+ * @return {Boolean}
1191
+ * @trigger load_node.jstree
1192
+ */
1193
+ load_node : function (obj, callback) {
1194
+ var k, l, i, j, c;
1195
+ if($.isArray(obj)) {
1196
+ this._load_nodes(obj.slice(), callback);
1197
+ return true;
1198
+ }
1199
+ obj = this.get_node(obj);
1200
+ if(!obj) {
1201
+ if(callback) { callback.call(this, obj, false); }
1202
+ return false;
1203
+ }
1204
+ // if(obj.state.loading) { } // the node is already loading - just wait for it to load and invoke callback? but if called implicitly it should be loaded again?
1205
+ if(obj.state.loaded) {
1206
+ obj.state.loaded = false;
1207
+ for(i = 0, j = obj.parents.length; i < j; i++) {
1208
+ this._model.data[obj.parents[i]].children_d = $.vakata.array_filter(this._model.data[obj.parents[i]].children_d, function (v) {
1209
+ return $.inArray(v, obj.children_d) === -1;
1210
+ });
1211
+ }
1212
+ for(k = 0, l = obj.children_d.length; k < l; k++) {
1213
+ if(this._model.data[obj.children_d[k]].state.selected) {
1214
+ c = true;
1215
+ }
1216
+ delete this._model.data[obj.children_d[k]];
1217
+ }
1218
+ if (c) {
1219
+ this._data.core.selected = $.vakata.array_filter(this._data.core.selected, function (v) {
1220
+ return $.inArray(v, obj.children_d) === -1;
1221
+ });
1222
+ }
1223
+ obj.children = [];
1224
+ obj.children_d = [];
1225
+ if(c) {
1226
+ this.trigger('changed', { 'action' : 'load_node', 'node' : obj, 'selected' : this._data.core.selected });
1227
+ }
1228
+ }
1229
+ obj.state.failed = false;
1230
+ obj.state.loading = true;
1231
+ this.get_node(obj, true).addClass("jstree-loading").attr('aria-busy',true);
1232
+ this._load_node(obj, $.proxy(function (status) {
1233
+ obj = this._model.data[obj.id];
1234
+ obj.state.loading = false;
1235
+ obj.state.loaded = status;
1236
+ obj.state.failed = !obj.state.loaded;
1237
+ var dom = this.get_node(obj, true), i = 0, j = 0, m = this._model.data, has_children = false;
1238
+ for(i = 0, j = obj.children.length; i < j; i++) {
1239
+ if(m[obj.children[i]] && !m[obj.children[i]].state.hidden) {
1240
+ has_children = true;
1241
+ break;
1242
+ }
1243
+ }
1244
+ if(obj.state.loaded && dom && dom.length) {
1245
+ dom.removeClass('jstree-closed jstree-open jstree-leaf');
1246
+ if (!has_children) {
1247
+ dom.addClass('jstree-leaf');
1248
+ }
1249
+ else {
1250
+ if (obj.id !== '#') {
1251
+ dom.addClass(obj.state.opened ? 'jstree-open' : 'jstree-closed');
1252
+ }
1253
+ }
1254
+ }
1255
+ dom.removeClass("jstree-loading").attr('aria-busy',false);
1256
+ /**
1257
+ * triggered after a node is loaded
1258
+ * @event
1259
+ * @name load_node.jstree
1260
+ * @param {Object} node the node that was loading
1261
+ * @param {Boolean} status was the node loaded successfully
1262
+ */
1263
+ this.trigger('load_node', { "node" : obj, "status" : status });
1264
+ if(callback) {
1265
+ callback.call(this, obj, status);
1266
+ }
1267
+ }, this));
1268
+ return true;
1269
+ },
1270
+ /**
1271
+ * load an array of nodes (will also load unavailable nodes as soon as the appear in the structure). Used internally.
1272
+ * @private
1273
+ * @name _load_nodes(nodes [, callback])
1274
+ * @param {array} nodes
1275
+ * @param {function} callback a function to be executed once loading is complete, the function is executed in the instance's scope and receives one argument - the array passed to _load_nodes
1276
+ */
1277
+ _load_nodes : function (nodes, callback, is_callback, force_reload) {
1278
+ var r = true,
1279
+ c = function () { this._load_nodes(nodes, callback, true); },
1280
+ m = this._model.data, i, j, tmp = [];
1281
+ for(i = 0, j = nodes.length; i < j; i++) {
1282
+ if(m[nodes[i]] && ( (!m[nodes[i]].state.loaded && !m[nodes[i]].state.failed) || (!is_callback && force_reload) )) {
1283
+ if(!this.is_loading(nodes[i])) {
1284
+ this.load_node(nodes[i], c);
1285
+ }
1286
+ r = false;
1287
+ }
1288
+ }
1289
+ if(r) {
1290
+ for(i = 0, j = nodes.length; i < j; i++) {
1291
+ if(m[nodes[i]] && m[nodes[i]].state.loaded) {
1292
+ tmp.push(nodes[i]);
1293
+ }
1294
+ }
1295
+ if(callback && !callback.done) {
1296
+ callback.call(this, tmp);
1297
+ callback.done = true;
1298
+ }
1299
+ }
1300
+ },
1301
+ /**
1302
+ * loads all unloaded nodes
1303
+ * @name load_all([obj, callback])
1304
+ * @param {mixed} obj the node to load recursively, omit to load all nodes in the tree
1305
+ * @param {function} callback a function to be executed once loading all the nodes is complete,
1306
+ * @trigger load_all.jstree
1307
+ */
1308
+ load_all : function (obj, callback) {
1309
+ if(!obj) { obj = $.jstree.root; }
1310
+ obj = this.get_node(obj);
1311
+ if(!obj) { return false; }
1312
+ var to_load = [],
1313
+ m = this._model.data,
1314
+ c = m[obj.id].children_d,
1315
+ i, j;
1316
+ if(obj.state && !obj.state.loaded) {
1317
+ to_load.push(obj.id);
1318
+ }
1319
+ for(i = 0, j = c.length; i < j; i++) {
1320
+ if(m[c[i]] && m[c[i]].state && !m[c[i]].state.loaded) {
1321
+ to_load.push(c[i]);
1322
+ }
1323
+ }
1324
+ if(to_load.length) {
1325
+ this._load_nodes(to_load, function () {
1326
+ this.load_all(obj, callback);
1327
+ });
1328
+ }
1329
+ else {
1330
+ /**
1331
+ * triggered after a load_all call completes
1332
+ * @event
1333
+ * @name load_all.jstree
1334
+ * @param {Object} node the recursively loaded node
1335
+ */
1336
+ if(callback) { callback.call(this, obj); }
1337
+ this.trigger('load_all', { "node" : obj });
1338
+ }
1339
+ },
1340
+ /**
1341
+ * handles the actual loading of a node. Used only internally.
1342
+ * @private
1343
+ * @name _load_node(obj [, callback])
1344
+ * @param {mixed} obj
1345
+ * @param {function} callback a function to be executed once loading is complete, the function is executed in the instance's scope and receives one argument - a boolean status
1346
+ * @return {Boolean}
1347
+ */
1348
+ _load_node : function (obj, callback) {
1349
+ var s = this.settings.core.data, t;
1350
+ var notTextOrCommentNode = function notTextOrCommentNode () {
1351
+ return this.nodeType !== 3 && this.nodeType !== 8;
1352
+ };
1353
+ // use original HTML
1354
+ if(!s) {
1355
+ if(obj.id === $.jstree.root) {
1356
+ return this._append_html_data(obj, this._data.core.original_container_html.clone(true), function (status) {
1357
+ callback.call(this, status);
1358
+ });
1359
+ }
1360
+ else {
1361
+ return callback.call(this, false);
1362
+ }
1363
+ // return callback.call(this, obj.id === $.jstree.root ? this._append_html_data(obj, this._data.core.original_container_html.clone(true)) : false);
1364
+ }
1365
+ if($.isFunction(s)) {
1366
+ return s.call(this, obj, $.proxy(function (d) {
1367
+ if(d === false) {
1368
+ callback.call(this, false);
1369
+ }
1370
+ else {
1371
+ this[typeof d === 'string' ? '_append_html_data' : '_append_json_data'](obj, typeof d === 'string' ? $($.parseHTML(d)).filter(notTextOrCommentNode) : d, function (status) {
1372
+ callback.call(this, status);
1373
+ });
1374
+ }
1375
+ // return d === false ? callback.call(this, false) : callback.call(this, this[typeof d === 'string' ? '_append_html_data' : '_append_json_data'](obj, typeof d === 'string' ? $(d) : d));
1376
+ }, this));
1377
+ }
1378
+ if(typeof s === 'object') {
1379
+ if(s.url) {
1380
+ s = $.extend(true, {}, s);
1381
+ if($.isFunction(s.url)) {
1382
+ s.url = s.url.call(this, obj);
1383
+ }
1384
+ if($.isFunction(s.data)) {
1385
+ s.data = s.data.call(this, obj);
1386
+ }
1387
+ return $.ajax(s)
1388
+ .done($.proxy(function (d,t,x) {
1389
+ var type = x.getResponseHeader('Content-Type');
1390
+ if((type && type.indexOf('json') !== -1) || typeof d === "object") {
1391
+ return this._append_json_data(obj, d, function (status) { callback.call(this, status); });
1392
+ //return callback.call(this, this._append_json_data(obj, d));
1393
+ }
1394
+ if((type && type.indexOf('html') !== -1) || typeof d === "string") {
1395
+ return this._append_html_data(obj, $($.parseHTML(d)).filter(notTextOrCommentNode), function (status) { callback.call(this, status); });
1396
+ // return callback.call(this, this._append_html_data(obj, $(d)));
1397
+ }
1398
+ this._data.core.last_error = { 'error' : 'ajax', 'plugin' : 'core', 'id' : 'core_04', 'reason' : 'Could not load node', 'data' : JSON.stringify({ 'id' : obj.id, 'xhr' : x }) };
1399
+ this.settings.core.error.call(this, this._data.core.last_error);
1400
+ return callback.call(this, false);
1401
+ }, this))
1402
+ .fail($.proxy(function (f) {
1403
+ callback.call(this, false);
1404
+ this._data.core.last_error = { 'error' : 'ajax', 'plugin' : 'core', 'id' : 'core_04', 'reason' : 'Could not load node', 'data' : JSON.stringify({ 'id' : obj.id, 'xhr' : f }) };
1405
+ this.settings.core.error.call(this, this._data.core.last_error);
1406
+ }, this));
1407
+ }
1408
+ t = ($.isArray(s) || $.isPlainObject(s)) ? JSON.parse(JSON.stringify(s)) : s;
1409
+ if(obj.id === $.jstree.root) {
1410
+ return this._append_json_data(obj, t, function (status) {
1411
+ callback.call(this, status);
1412
+ });
1413
+ }
1414
+ else {
1415
+ this._data.core.last_error = { 'error' : 'nodata', 'plugin' : 'core', 'id' : 'core_05', 'reason' : 'Could not load node', 'data' : JSON.stringify({ 'id' : obj.id }) };
1416
+ this.settings.core.error.call(this, this._data.core.last_error);
1417
+ return callback.call(this, false);
1418
+ }
1419
+ //return callback.call(this, (obj.id === $.jstree.root ? this._append_json_data(obj, t) : false) );
1420
+ }
1421
+ if(typeof s === 'string') {
1422
+ if(obj.id === $.jstree.root) {
1423
+ return this._append_html_data(obj, $($.parseHTML(s)).filter(notTextOrCommentNode), function (status) {
1424
+ callback.call(this, status);
1425
+ });
1426
+ }
1427
+ else {
1428
+ this._data.core.last_error = { 'error' : 'nodata', 'plugin' : 'core', 'id' : 'core_06', 'reason' : 'Could not load node', 'data' : JSON.stringify({ 'id' : obj.id }) };
1429
+ this.settings.core.error.call(this, this._data.core.last_error);
1430
+ return callback.call(this, false);
1431
+ }
1432
+ //return callback.call(this, (obj.id === $.jstree.root ? this._append_html_data(obj, $(s)) : false) );
1433
+ }
1434
+ return callback.call(this, false);
1435
+ },
1436
+ /**
1437
+ * adds a node to the list of nodes to redraw. Used only internally.
1438
+ * @private
1439
+ * @name _node_changed(obj [, callback])
1440
+ * @param {mixed} obj
1441
+ */
1442
+ _node_changed : function (obj) {
1443
+ obj = this.get_node(obj);
1444
+ if(obj) {
1445
+ this._model.changed.push(obj.id);
1446
+ }
1447
+ },
1448
+ /**
1449
+ * appends HTML content to the tree. Used internally.
1450
+ * @private
1451
+ * @name _append_html_data(obj, data)
1452
+ * @param {mixed} obj the node to append to
1453
+ * @param {String} data the HTML string to parse and append
1454
+ * @trigger model.jstree, changed.jstree
1455
+ */
1456
+ _append_html_data : function (dom, data, cb) {
1457
+ dom = this.get_node(dom);
1458
+ dom.children = [];
1459
+ dom.children_d = [];
1460
+ var dat = data.is('ul') ? data.children() : data,
1461
+ par = dom.id,
1462
+ chd = [],
1463
+ dpc = [],
1464
+ m = this._model.data,
1465
+ p = m[par],
1466
+ s = this._data.core.selected.length,
1467
+ tmp, i, j;
1468
+ dat.each($.proxy(function (i, v) {
1469
+ tmp = this._parse_model_from_html($(v), par, p.parents.concat());
1470
+ if(tmp) {
1471
+ chd.push(tmp);
1472
+ dpc.push(tmp);
1473
+ if(m[tmp].children_d.length) {
1474
+ dpc = dpc.concat(m[tmp].children_d);
1475
+ }
1476
+ }
1477
+ }, this));
1478
+ p.children = chd;
1479
+ p.children_d = dpc;
1480
+ for(i = 0, j = p.parents.length; i < j; i++) {
1481
+ m[p.parents[i]].children_d = m[p.parents[i]].children_d.concat(dpc);
1482
+ }
1483
+ /**
1484
+ * triggered when new data is inserted to the tree model
1485
+ * @event
1486
+ * @name model.jstree
1487
+ * @param {Array} nodes an array of node IDs
1488
+ * @param {String} parent the parent ID of the nodes
1489
+ */
1490
+ this.trigger('model', { "nodes" : dpc, 'parent' : par });
1491
+ if(par !== $.jstree.root) {
1492
+ this._node_changed(par);
1493
+ this.redraw();
1494
+ }
1495
+ else {
1496
+ this.get_container_ul().children('.jstree-initial-node').remove();
1497
+ this.redraw(true);
1498
+ }
1499
+ if(this._data.core.selected.length !== s) {
1500
+ this.trigger('changed', { 'action' : 'model', 'selected' : this._data.core.selected });
1501
+ }
1502
+ cb.call(this, true);
1503
+ },
1504
+ /**
1505
+ * appends JSON content to the tree. Used internally.
1506
+ * @private
1507
+ * @name _append_json_data(obj, data)
1508
+ * @param {mixed} obj the node to append to
1509
+ * @param {String} data the JSON object to parse and append
1510
+ * @param {Boolean} force_processing internal param - do not set
1511
+ * @trigger model.jstree, changed.jstree
1512
+ */
1513
+ _append_json_data : function (dom, data, cb, force_processing) {
1514
+ if(this.element === null) { return; }
1515
+ dom = this.get_node(dom);
1516
+ dom.children = [];
1517
+ dom.children_d = [];
1518
+ // *%$@!!!
1519
+ if(data.d) {
1520
+ data = data.d;
1521
+ if(typeof data === "string") {
1522
+ data = JSON.parse(data);
1523
+ }
1524
+ }
1525
+ if(!$.isArray(data)) { data = [data]; }
1526
+ var w = null,
1527
+ args = {
1528
+ 'df' : this._model.default_state,
1529
+ 'dat' : data,
1530
+ 'par' : dom.id,
1531
+ 'm' : this._model.data,
1532
+ 't_id' : this._id,
1533
+ 't_cnt' : this._cnt,
1534
+ 'sel' : this._data.core.selected
1535
+ },
1536
+ func = function (data, undefined) {
1537
+ if(data.data) { data = data.data; }
1538
+ var dat = data.dat,
1539
+ par = data.par,
1540
+ chd = [],
1541
+ dpc = [],
1542
+ add = [],
1543
+ df = data.df,
1544
+ t_id = data.t_id,
1545
+ t_cnt = data.t_cnt,
1546
+ m = data.m,
1547
+ p = m[par],
1548
+ sel = data.sel,
1549
+ tmp, i, j, rslt,
1550
+ parse_flat = function (d, p, ps) {
1551
+ if(!ps) { ps = []; }
1552
+ else { ps = ps.concat(); }
1553
+ if(p) { ps.unshift(p); }
1554
+ var tid = d.id.toString(),
1555
+ i, j, c, e,
1556
+ tmp = {
1557
+ id : tid,
1558
+ text : d.text || '',
1559
+ icon : d.icon !== undefined ? d.icon : true,
1560
+ parent : p,
1561
+ parents : ps,
1562
+ children : d.children || [],
1563
+ children_d : d.children_d || [],
1564
+ data : d.data,
1565
+ state : { },
1566
+ li_attr : { id : false },
1567
+ a_attr : { href : '#' },
1568
+ original : false
1569
+ };
1570
+ for(i in df) {
1571
+ if(df.hasOwnProperty(i)) {
1572
+ tmp.state[i] = df[i];
1573
+ }
1574
+ }
1575
+ if(d && d.data && d.data.jstree && d.data.jstree.icon) {
1576
+ tmp.icon = d.data.jstree.icon;
1577
+ }
1578
+ if(tmp.icon === undefined || tmp.icon === null || tmp.icon === "") {
1579
+ tmp.icon = true;
1580
+ }
1581
+ if(d && d.data) {
1582
+ tmp.data = d.data;
1583
+ if(d.data.jstree) {
1584
+ for(i in d.data.jstree) {
1585
+ if(d.data.jstree.hasOwnProperty(i)) {
1586
+ tmp.state[i] = d.data.jstree[i];
1587
+ }
1588
+ }
1589
+ }
1590
+ }
1591
+ if(d && typeof d.state === 'object') {
1592
+ for (i in d.state) {
1593
+ if(d.state.hasOwnProperty(i)) {
1594
+ tmp.state[i] = d.state[i];
1595
+ }
1596
+ }
1597
+ }
1598
+ if(d && typeof d.li_attr === 'object') {
1599
+ for (i in d.li_attr) {
1600
+ if(d.li_attr.hasOwnProperty(i)) {
1601
+ tmp.li_attr[i] = d.li_attr[i];
1602
+ }
1603
+ }
1604
+ }
1605
+ if(!tmp.li_attr.id) {
1606
+ tmp.li_attr.id = tid;
1607
+ }
1608
+ if(d && typeof d.a_attr === 'object') {
1609
+ for (i in d.a_attr) {
1610
+ if(d.a_attr.hasOwnProperty(i)) {
1611
+ tmp.a_attr[i] = d.a_attr[i];
1612
+ }
1613
+ }
1614
+ }
1615
+ if(d && d.children && d.children === true) {
1616
+ tmp.state.loaded = false;
1617
+ tmp.children = [];
1618
+ tmp.children_d = [];
1619
+ }
1620
+ m[tmp.id] = tmp;
1621
+ for(i = 0, j = tmp.children.length; i < j; i++) {
1622
+ c = parse_flat(m[tmp.children[i]], tmp.id, ps);
1623
+ e = m[c];
1624
+ tmp.children_d.push(c);
1625
+ if(e.children_d.length) {
1626
+ tmp.children_d = tmp.children_d.concat(e.children_d);
1627
+ }
1628
+ }
1629
+ delete d.data;
1630
+ delete d.children;
1631
+ m[tmp.id].original = d;
1632
+ if(tmp.state.selected) {
1633
+ add.push(tmp.id);
1634
+ }
1635
+ return tmp.id;
1636
+ },
1637
+ parse_nest = function (d, p, ps) {
1638
+ if(!ps) { ps = []; }
1639
+ else { ps = ps.concat(); }
1640
+ if(p) { ps.unshift(p); }
1641
+ var tid = false, i, j, c, e, tmp;
1642
+ do {
1643
+ tid = 'j' + t_id + '_' + (++t_cnt);
1644
+ } while(m[tid]);
1645
+
1646
+ tmp = {
1647
+ id : false,
1648
+ text : typeof d === 'string' ? d : '',
1649
+ icon : typeof d === 'object' && d.icon !== undefined ? d.icon : true,
1650
+ parent : p,
1651
+ parents : ps,
1652
+ children : [],
1653
+ children_d : [],
1654
+ data : null,
1655
+ state : { },
1656
+ li_attr : { id : false },
1657
+ a_attr : { href : '#' },
1658
+ original : false
1659
+ };
1660
+ for(i in df) {
1661
+ if(df.hasOwnProperty(i)) {
1662
+ tmp.state[i] = df[i];
1663
+ }
1664
+ }
1665
+ if(d && d.id) { tmp.id = d.id.toString(); }
1666
+ if(d && d.text) { tmp.text = d.text; }
1667
+ if(d && d.data && d.data.jstree && d.data.jstree.icon) {
1668
+ tmp.icon = d.data.jstree.icon;
1669
+ }
1670
+ if(tmp.icon === undefined || tmp.icon === null || tmp.icon === "") {
1671
+ tmp.icon = true;
1672
+ }
1673
+ if(d && d.data) {
1674
+ tmp.data = d.data;
1675
+ if(d.data.jstree) {
1676
+ for(i in d.data.jstree) {
1677
+ if(d.data.jstree.hasOwnProperty(i)) {
1678
+ tmp.state[i] = d.data.jstree[i];
1679
+ }
1680
+ }
1681
+ }
1682
+ }
1683
+ if(d && typeof d.state === 'object') {
1684
+ for (i in d.state) {
1685
+ if(d.state.hasOwnProperty(i)) {
1686
+ tmp.state[i] = d.state[i];
1687
+ }
1688
+ }
1689
+ }
1690
+ if(d && typeof d.li_attr === 'object') {
1691
+ for (i in d.li_attr) {
1692
+ if(d.li_attr.hasOwnProperty(i)) {
1693
+ tmp.li_attr[i] = d.li_attr[i];
1694
+ }
1695
+ }
1696
+ }
1697
+ if(tmp.li_attr.id && !tmp.id) {
1698
+ tmp.id = tmp.li_attr.id.toString();
1699
+ }
1700
+ if(!tmp.id) {
1701
+ tmp.id = tid;
1702
+ }
1703
+ if(!tmp.li_attr.id) {
1704
+ tmp.li_attr.id = tmp.id;
1705
+ }
1706
+ if(d && typeof d.a_attr === 'object') {
1707
+ for (i in d.a_attr) {
1708
+ if(d.a_attr.hasOwnProperty(i)) {
1709
+ tmp.a_attr[i] = d.a_attr[i];
1710
+ }
1711
+ }
1712
+ }
1713
+ if(d && d.children && d.children.length) {
1714
+ for(i = 0, j = d.children.length; i < j; i++) {
1715
+ c = parse_nest(d.children[i], tmp.id, ps);
1716
+ e = m[c];
1717
+ tmp.children.push(c);
1718
+ if(e.children_d.length) {
1719
+ tmp.children_d = tmp.children_d.concat(e.children_d);
1720
+ }
1721
+ }
1722
+ tmp.children_d = tmp.children_d.concat(tmp.children);
1723
+ }
1724
+ if(d && d.children && d.children === true) {
1725
+ tmp.state.loaded = false;
1726
+ tmp.children = [];
1727
+ tmp.children_d = [];
1728
+ }
1729
+ delete d.data;
1730
+ delete d.children;
1731
+ tmp.original = d;
1732
+ m[tmp.id] = tmp;
1733
+ if(tmp.state.selected) {
1734
+ add.push(tmp.id);
1735
+ }
1736
+ return tmp.id;
1737
+ };
1738
+
1739
+ if(dat.length && dat[0].id !== undefined && dat[0].parent !== undefined) {
1740
+ // Flat JSON support (for easy import from DB):
1741
+ // 1) convert to object (foreach)
1742
+ for(i = 0, j = dat.length; i < j; i++) {
1743
+ if(!dat[i].children) {
1744
+ dat[i].children = [];
1745
+ }
1746
+ m[dat[i].id.toString()] = dat[i];
1747
+ }
1748
+ // 2) populate children (foreach)
1749
+ for(i = 0, j = dat.length; i < j; i++) {
1750
+ m[dat[i].parent.toString()].children.push(dat[i].id.toString());
1751
+ // populate parent.children_d
1752
+ p.children_d.push(dat[i].id.toString());
1753
+ }
1754
+ // 3) normalize && populate parents and children_d with recursion
1755
+ for(i = 0, j = p.children.length; i < j; i++) {
1756
+ tmp = parse_flat(m[p.children[i]], par, p.parents.concat());
1757
+ dpc.push(tmp);
1758
+ if(m[tmp].children_d.length) {
1759
+ dpc = dpc.concat(m[tmp].children_d);
1760
+ }
1761
+ }
1762
+ for(i = 0, j = p.parents.length; i < j; i++) {
1763
+ m[p.parents[i]].children_d = m[p.parents[i]].children_d.concat(dpc);
1764
+ }
1765
+ // ?) three_state selection - p.state.selected && t - (if three_state foreach(dat => ch) -> foreach(parents) if(parent.selected) child.selected = true;
1766
+ rslt = {
1767
+ 'cnt' : t_cnt,
1768
+ 'mod' : m,
1769
+ 'sel' : sel,
1770
+ 'par' : par,
1771
+ 'dpc' : dpc,
1772
+ 'add' : add
1773
+ };
1774
+ }
1775
+ else {
1776
+ for(i = 0, j = dat.length; i < j; i++) {
1777
+ tmp = parse_nest(dat[i], par, p.parents.concat());
1778
+ if(tmp) {
1779
+ chd.push(tmp);
1780
+ dpc.push(tmp);
1781
+ if(m[tmp].children_d.length) {
1782
+ dpc = dpc.concat(m[tmp].children_d);
1783
+ }
1784
+ }
1785
+ }
1786
+ p.children = chd;
1787
+ p.children_d = dpc;
1788
+ for(i = 0, j = p.parents.length; i < j; i++) {
1789
+ m[p.parents[i]].children_d = m[p.parents[i]].children_d.concat(dpc);
1790
+ }
1791
+ rslt = {
1792
+ 'cnt' : t_cnt,
1793
+ 'mod' : m,
1794
+ 'sel' : sel,
1795
+ 'par' : par,
1796
+ 'dpc' : dpc,
1797
+ 'add' : add
1798
+ };
1799
+ }
1800
+ if(typeof window === 'undefined' || typeof window.document === 'undefined') {
1801
+ postMessage(rslt);
1802
+ }
1803
+ else {
1804
+ return rslt;
1805
+ }
1806
+ },
1807
+ rslt = function (rslt, worker) {
1808
+ if(this.element === null) { return; }
1809
+ this._cnt = rslt.cnt;
1810
+ var i, m = this._model.data;
1811
+ for (i in m) {
1812
+ if (m.hasOwnProperty(i) && m[i].state && m[i].state.loading && rslt.mod[i]) {
1813
+ rslt.mod[i].state.loading = true;
1814
+ }
1815
+ }
1816
+ this._model.data = rslt.mod; // breaks the reference in load_node - careful
1817
+
1818
+ if(worker) {
1819
+ var j, a = rslt.add, r = rslt.sel, s = this._data.core.selected.slice();
1820
+ m = this._model.data;
1821
+ // if selection was changed while calculating in worker
1822
+ if(r.length !== s.length || $.vakata.array_unique(r.concat(s)).length !== r.length) {
1823
+ // deselect nodes that are no longer selected
1824
+ for(i = 0, j = r.length; i < j; i++) {
1825
+ if($.inArray(r[i], a) === -1 && $.inArray(r[i], s) === -1) {
1826
+ m[r[i]].state.selected = false;
1827
+ }
1828
+ }
1829
+ // select nodes that were selected in the mean time
1830
+ for(i = 0, j = s.length; i < j; i++) {
1831
+ if($.inArray(s[i], r) === -1) {
1832
+ m[s[i]].state.selected = true;
1833
+ }
1834
+ }
1835
+ }
1836
+ }
1837
+ if(rslt.add.length) {
1838
+ this._data.core.selected = this._data.core.selected.concat(rslt.add);
1839
+ }
1840
+
1841
+ this.trigger('model', { "nodes" : rslt.dpc, 'parent' : rslt.par });
1842
+
1843
+ if(rslt.par !== $.jstree.root) {
1844
+ this._node_changed(rslt.par);
1845
+ this.redraw();
1846
+ }
1847
+ else {
1848
+ // this.get_container_ul().children('.jstree-initial-node').remove();
1849
+ this.redraw(true);
1850
+ }
1851
+ if(rslt.add.length) {
1852
+ this.trigger('changed', { 'action' : 'model', 'selected' : this._data.core.selected });
1853
+ }
1854
+ cb.call(this, true);
1855
+ };
1856
+ if(this.settings.core.worker && window.Blob && window.URL && window.Worker) {
1857
+ try {
1858
+ if(this._wrk === null) {
1859
+ this._wrk = window.URL.createObjectURL(
1860
+ new window.Blob(
1861
+ ['self.onmessage = ' + func.toString()],
1862
+ {type:"text/javascript"}
1863
+ )
1864
+ );
1865
+ }
1866
+ if(!this._data.core.working || force_processing) {
1867
+ this._data.core.working = true;
1868
+ w = new window.Worker(this._wrk);
1869
+ w.onmessage = $.proxy(function (e) {
1870
+ rslt.call(this, e.data, true);
1871
+ try { w.terminate(); w = null; } catch(ignore) { }
1872
+ if(this._data.core.worker_queue.length) {
1873
+ this._append_json_data.apply(this, this._data.core.worker_queue.shift());
1874
+ }
1875
+ else {
1876
+ this._data.core.working = false;
1877
+ }
1878
+ }, this);
1879
+ if(!args.par) {
1880
+ if(this._data.core.worker_queue.length) {
1881
+ this._append_json_data.apply(this, this._data.core.worker_queue.shift());
1882
+ }
1883
+ else {
1884
+ this._data.core.working = false;
1885
+ }
1886
+ }
1887
+ else {
1888
+ w.postMessage(args);
1889
+ }
1890
+ }
1891
+ else {
1892
+ this._data.core.worker_queue.push([dom, data, cb, true]);
1893
+ }
1894
+ }
1895
+ catch(e) {
1896
+ rslt.call(this, func(args), false);
1897
+ if(this._data.core.worker_queue.length) {
1898
+ this._append_json_data.apply(this, this._data.core.worker_queue.shift());
1899
+ }
1900
+ else {
1901
+ this._data.core.working = false;
1902
+ }
1903
+ }
1904
+ }
1905
+ else {
1906
+ rslt.call(this, func(args), false);
1907
+ }
1908
+ },
1909
+ /**
1910
+ * parses a node from a jQuery object and appends them to the in memory tree model. Used internally.
1911
+ * @private
1912
+ * @name _parse_model_from_html(d [, p, ps])
1913
+ * @param {jQuery} d the jQuery object to parse
1914
+ * @param {String} p the parent ID
1915
+ * @param {Array} ps list of all parents
1916
+ * @return {String} the ID of the object added to the model
1917
+ */
1918
+ _parse_model_from_html : function (d, p, ps) {
1919
+ if(!ps) { ps = []; }
1920
+ else { ps = [].concat(ps); }
1921
+ if(p) { ps.unshift(p); }
1922
+ var c, e, m = this._model.data,
1923
+ data = {
1924
+ id : false,
1925
+ text : false,
1926
+ icon : true,
1927
+ parent : p,
1928
+ parents : ps,
1929
+ children : [],
1930
+ children_d : [],
1931
+ data : null,
1932
+ state : { },
1933
+ li_attr : { id : false },
1934
+ a_attr : { href : '#' },
1935
+ original : false
1936
+ }, i, tmp, tid;
1937
+ for(i in this._model.default_state) {
1938
+ if(this._model.default_state.hasOwnProperty(i)) {
1939
+ data.state[i] = this._model.default_state[i];
1940
+ }
1941
+ }
1942
+ tmp = $.vakata.attributes(d, true);
1943
+ $.each(tmp, function (i, v) {
1944
+ v = $.trim(v);
1945
+ if(!v.length) { return true; }
1946
+ data.li_attr[i] = v;
1947
+ if(i === 'id') {
1948
+ data.id = v.toString();
1949
+ }
1950
+ });
1951
+ tmp = d.children('a').first();
1952
+ if(tmp.length) {
1953
+ tmp = $.vakata.attributes(tmp, true);
1954
+ $.each(tmp, function (i, v) {
1955
+ v = $.trim(v);
1956
+ if(v.length) {
1957
+ data.a_attr[i] = v;
1958
+ }
1959
+ });
1960
+ }
1961
+ tmp = d.children("a").first().length ? d.children("a").first().clone() : d.clone();
1962
+ tmp.children("ins, i, ul").remove();
1963
+ tmp = tmp.html();
1964
+ tmp = $('<div />').html(tmp);
1965
+ data.text = this.settings.core.force_text ? tmp.text() : tmp.html();
1966
+ tmp = d.data();
1967
+ data.data = tmp ? $.extend(true, {}, tmp) : null;
1968
+ data.state.opened = d.hasClass('jstree-open');
1969
+ data.state.selected = d.children('a').hasClass('jstree-clicked');
1970
+ data.state.disabled = d.children('a').hasClass('jstree-disabled');
1971
+ if(data.data && data.data.jstree) {
1972
+ for(i in data.data.jstree) {
1973
+ if(data.data.jstree.hasOwnProperty(i)) {
1974
+ data.state[i] = data.data.jstree[i];
1975
+ }
1976
+ }
1977
+ }
1978
+ tmp = d.children("a").children(".jstree-themeicon");
1979
+ if(tmp.length) {
1980
+ data.icon = tmp.hasClass('jstree-themeicon-hidden') ? false : tmp.attr('rel');
1981
+ }
1982
+ if(data.state.icon !== undefined) {
1983
+ data.icon = data.state.icon;
1984
+ }
1985
+ if(data.icon === undefined || data.icon === null || data.icon === "") {
1986
+ data.icon = true;
1987
+ }
1988
+ tmp = d.children("ul").children("li");
1989
+ do {
1990
+ tid = 'j' + this._id + '_' + (++this._cnt);
1991
+ } while(m[tid]);
1992
+ data.id = data.li_attr.id ? data.li_attr.id.toString() : tid;
1993
+ if(tmp.length) {
1994
+ tmp.each($.proxy(function (i, v) {
1995
+ c = this._parse_model_from_html($(v), data.id, ps);
1996
+ e = this._model.data[c];
1997
+ data.children.push(c);
1998
+ if(e.children_d.length) {
1999
+ data.children_d = data.children_d.concat(e.children_d);
2000
+ }
2001
+ }, this));
2002
+ data.children_d = data.children_d.concat(data.children);
2003
+ }
2004
+ else {
2005
+ if(d.hasClass('jstree-closed')) {
2006
+ data.state.loaded = false;
2007
+ }
2008
+ }
2009
+ if(data.li_attr['class']) {
2010
+ data.li_attr['class'] = data.li_attr['class'].replace('jstree-closed','').replace('jstree-open','');
2011
+ }
2012
+ if(data.a_attr['class']) {
2013
+ data.a_attr['class'] = data.a_attr['class'].replace('jstree-clicked','').replace('jstree-disabled','');
2014
+ }
2015
+ m[data.id] = data;
2016
+ if(data.state.selected) {
2017
+ this._data.core.selected.push(data.id);
2018
+ }
2019
+ return data.id;
2020
+ },
2021
+ /**
2022
+ * parses a node from a JSON object (used when dealing with flat data, which has no nesting of children, but has id and parent properties) and appends it to the in memory tree model. Used internally.
2023
+ * @private
2024
+ * @name _parse_model_from_flat_json(d [, p, ps])
2025
+ * @param {Object} d the JSON object to parse
2026
+ * @param {String} p the parent ID
2027
+ * @param {Array} ps list of all parents
2028
+ * @return {String} the ID of the object added to the model
2029
+ */
2030
+ _parse_model_from_flat_json : function (d, p, ps) {
2031
+ if(!ps) { ps = []; }
2032
+ else { ps = ps.concat(); }
2033
+ if(p) { ps.unshift(p); }
2034
+ var tid = d.id.toString(),
2035
+ m = this._model.data,
2036
+ df = this._model.default_state,
2037
+ i, j, c, e,
2038
+ tmp = {
2039
+ id : tid,
2040
+ text : d.text || '',
2041
+ icon : d.icon !== undefined ? d.icon : true,
2042
+ parent : p,
2043
+ parents : ps,
2044
+ children : d.children || [],
2045
+ children_d : d.children_d || [],
2046
+ data : d.data,
2047
+ state : { },
2048
+ li_attr : { id : false },
2049
+ a_attr : { href : '#' },
2050
+ original : false
2051
+ };
2052
+ for(i in df) {
2053
+ if(df.hasOwnProperty(i)) {
2054
+ tmp.state[i] = df[i];
2055
+ }
2056
+ }
2057
+ if(d && d.data && d.data.jstree && d.data.jstree.icon) {
2058
+ tmp.icon = d.data.jstree.icon;
2059
+ }
2060
+ if(tmp.icon === undefined || tmp.icon === null || tmp.icon === "") {
2061
+ tmp.icon = true;
2062
+ }
2063
+ if(d && d.data) {
2064
+ tmp.data = d.data;
2065
+ if(d.data.jstree) {
2066
+ for(i in d.data.jstree) {
2067
+ if(d.data.jstree.hasOwnProperty(i)) {
2068
+ tmp.state[i] = d.data.jstree[i];
2069
+ }
2070
+ }
2071
+ }
2072
+ }
2073
+ if(d && typeof d.state === 'object') {
2074
+ for (i in d.state) {
2075
+ if(d.state.hasOwnProperty(i)) {
2076
+ tmp.state[i] = d.state[i];
2077
+ }
2078
+ }
2079
+ }
2080
+ if(d && typeof d.li_attr === 'object') {
2081
+ for (i in d.li_attr) {
2082
+ if(d.li_attr.hasOwnProperty(i)) {
2083
+ tmp.li_attr[i] = d.li_attr[i];
2084
+ }
2085
+ }
2086
+ }
2087
+ if(!tmp.li_attr.id) {
2088
+ tmp.li_attr.id = tid;
2089
+ }
2090
+ if(d && typeof d.a_attr === 'object') {
2091
+ for (i in d.a_attr) {
2092
+ if(d.a_attr.hasOwnProperty(i)) {
2093
+ tmp.a_attr[i] = d.a_attr[i];
2094
+ }
2095
+ }
2096
+ }
2097
+ if(d && d.children && d.children === true) {
2098
+ tmp.state.loaded = false;
2099
+ tmp.children = [];
2100
+ tmp.children_d = [];
2101
+ }
2102
+ m[tmp.id] = tmp;
2103
+ for(i = 0, j = tmp.children.length; i < j; i++) {
2104
+ c = this._parse_model_from_flat_json(m[tmp.children[i]], tmp.id, ps);
2105
+ e = m[c];
2106
+ tmp.children_d.push(c);
2107
+ if(e.children_d.length) {
2108
+ tmp.children_d = tmp.children_d.concat(e.children_d);
2109
+ }
2110
+ }
2111
+ delete d.data;
2112
+ delete d.children;
2113
+ m[tmp.id].original = d;
2114
+ if(tmp.state.selected) {
2115
+ this._data.core.selected.push(tmp.id);
2116
+ }
2117
+ return tmp.id;
2118
+ },
2119
+ /**
2120
+ * parses a node from a JSON object and appends it to the in memory tree model. Used internally.
2121
+ * @private
2122
+ * @name _parse_model_from_json(d [, p, ps])
2123
+ * @param {Object} d the JSON object to parse
2124
+ * @param {String} p the parent ID
2125
+ * @param {Array} ps list of all parents
2126
+ * @return {String} the ID of the object added to the model
2127
+ */
2128
+ _parse_model_from_json : function (d, p, ps) {
2129
+ if(!ps) { ps = []; }
2130
+ else { ps = ps.concat(); }
2131
+ if(p) { ps.unshift(p); }
2132
+ var tid = false, i, j, c, e, m = this._model.data, df = this._model.default_state, tmp;
2133
+ do {
2134
+ tid = 'j' + this._id + '_' + (++this._cnt);
2135
+ } while(m[tid]);
2136
+
2137
+ tmp = {
2138
+ id : false,
2139
+ text : typeof d === 'string' ? d : '',
2140
+ icon : typeof d === 'object' && d.icon !== undefined ? d.icon : true,
2141
+ parent : p,
2142
+ parents : ps,
2143
+ children : [],
2144
+ children_d : [],
2145
+ data : null,
2146
+ state : { },
2147
+ li_attr : { id : false },
2148
+ a_attr : { href : '#' },
2149
+ original : false
2150
+ };
2151
+ for(i in df) {
2152
+ if(df.hasOwnProperty(i)) {
2153
+ tmp.state[i] = df[i];
2154
+ }
2155
+ }
2156
+ if(d && d.id) { tmp.id = d.id.toString(); }
2157
+ if(d && d.text) { tmp.text = d.text; }
2158
+ if(d && d.data && d.data.jstree && d.data.jstree.icon) {
2159
+ tmp.icon = d.data.jstree.icon;
2160
+ }
2161
+ if(tmp.icon === undefined || tmp.icon === null || tmp.icon === "") {
2162
+ tmp.icon = true;
2163
+ }
2164
+ if(d && d.data) {
2165
+ tmp.data = d.data;
2166
+ if(d.data.jstree) {
2167
+ for(i in d.data.jstree) {
2168
+ if(d.data.jstree.hasOwnProperty(i)) {
2169
+ tmp.state[i] = d.data.jstree[i];
2170
+ }
2171
+ }
2172
+ }
2173
+ }
2174
+ if(d && typeof d.state === 'object') {
2175
+ for (i in d.state) {
2176
+ if(d.state.hasOwnProperty(i)) {
2177
+ tmp.state[i] = d.state[i];
2178
+ }
2179
+ }
2180
+ }
2181
+ if(d && typeof d.li_attr === 'object') {
2182
+ for (i in d.li_attr) {
2183
+ if(d.li_attr.hasOwnProperty(i)) {
2184
+ tmp.li_attr[i] = d.li_attr[i];
2185
+ }
2186
+ }
2187
+ }
2188
+ if(tmp.li_attr.id && !tmp.id) {
2189
+ tmp.id = tmp.li_attr.id.toString();
2190
+ }
2191
+ if(!tmp.id) {
2192
+ tmp.id = tid;
2193
+ }
2194
+ if(!tmp.li_attr.id) {
2195
+ tmp.li_attr.id = tmp.id;
2196
+ }
2197
+ if(d && typeof d.a_attr === 'object') {
2198
+ for (i in d.a_attr) {
2199
+ if(d.a_attr.hasOwnProperty(i)) {
2200
+ tmp.a_attr[i] = d.a_attr[i];
2201
+ }
2202
+ }
2203
+ }
2204
+ if(d && d.children && d.children.length) {
2205
+ for(i = 0, j = d.children.length; i < j; i++) {
2206
+ c = this._parse_model_from_json(d.children[i], tmp.id, ps);
2207
+ e = m[c];
2208
+ tmp.children.push(c);
2209
+ if(e.children_d.length) {
2210
+ tmp.children_d = tmp.children_d.concat(e.children_d);
2211
+ }
2212
+ }
2213
+ tmp.children_d = tmp.children_d.concat(tmp.children);
2214
+ }
2215
+ if(d && d.children && d.children === true) {
2216
+ tmp.state.loaded = false;
2217
+ tmp.children = [];
2218
+ tmp.children_d = [];
2219
+ }
2220
+ delete d.data;
2221
+ delete d.children;
2222
+ tmp.original = d;
2223
+ m[tmp.id] = tmp;
2224
+ if(tmp.state.selected) {
2225
+ this._data.core.selected.push(tmp.id);
2226
+ }
2227
+ return tmp.id;
2228
+ },
2229
+ /**
2230
+ * redraws all nodes that need to be redrawn. Used internally.
2231
+ * @private
2232
+ * @name _redraw()
2233
+ * @trigger redraw.jstree
2234
+ */
2235
+ _redraw : function () {
2236
+ var nodes = this._model.force_full_redraw ? this._model.data[$.jstree.root].children.concat([]) : this._model.changed.concat([]),
2237
+ f = document.createElement('UL'), tmp, i, j, fe = this._data.core.focused;
2238
+ for(i = 0, j = nodes.length; i < j; i++) {
2239
+ tmp = this.redraw_node(nodes[i], true, this._model.force_full_redraw);
2240
+ if(tmp && this._model.force_full_redraw) {
2241
+ f.appendChild(tmp);
2242
+ }
2243
+ }
2244
+ if(this._model.force_full_redraw) {
2245
+ f.className = this.get_container_ul()[0].className;
2246
+ f.setAttribute('role','group');
2247
+ this.element.empty().append(f);
2248
+ //this.get_container_ul()[0].appendChild(f);
2249
+ }
2250
+ if(fe !== null) {
2251
+ tmp = this.get_node(fe, true);
2252
+ if(tmp && tmp.length && tmp.children('.jstree-anchor')[0] !== document.activeElement) {
2253
+ tmp.children('.jstree-anchor').focus();
2254
+ }
2255
+ else {
2256
+ this._data.core.focused = null;
2257
+ }
2258
+ }
2259
+ this._model.force_full_redraw = false;
2260
+ this._model.changed = [];
2261
+ /**
2262
+ * triggered after nodes are redrawn
2263
+ * @event
2264
+ * @name redraw.jstree
2265
+ * @param {array} nodes the redrawn nodes
2266
+ */
2267
+ this.trigger('redraw', { "nodes" : nodes });
2268
+ },
2269
+ /**
2270
+ * redraws all nodes that need to be redrawn or optionally - the whole tree
2271
+ * @name redraw([full])
2272
+ * @param {Boolean} full if set to `true` all nodes are redrawn.
2273
+ */
2274
+ redraw : function (full) {
2275
+ if(full) {
2276
+ this._model.force_full_redraw = true;
2277
+ }
2278
+ //if(this._model.redraw_timeout) {
2279
+ // clearTimeout(this._model.redraw_timeout);
2280
+ //}
2281
+ //this._model.redraw_timeout = setTimeout($.proxy(this._redraw, this),0);
2282
+ this._redraw();
2283
+ },
2284
+ /**
2285
+ * redraws a single node's children. Used internally.
2286
+ * @private
2287
+ * @name draw_children(node)
2288
+ * @param {mixed} node the node whose children will be redrawn
2289
+ */
2290
+ draw_children : function (node) {
2291
+ var obj = this.get_node(node),
2292
+ i = false,
2293
+ j = false,
2294
+ k = false,
2295
+ d = document;
2296
+ if(!obj) { return false; }
2297
+ if(obj.id === $.jstree.root) { return this.redraw(true); }
2298
+ node = this.get_node(node, true);
2299
+ if(!node || !node.length) { return false; } // TODO: quick toggle
2300
+
2301
+ node.children('.jstree-children').remove();
2302
+ node = node[0];
2303
+ if(obj.children.length && obj.state.loaded) {
2304
+ k = d.createElement('UL');
2305
+ k.setAttribute('role', 'group');
2306
+ k.className = 'jstree-children';
2307
+ for(i = 0, j = obj.children.length; i < j; i++) {
2308
+ k.appendChild(this.redraw_node(obj.children[i], true, true));
2309
+ }
2310
+ node.appendChild(k);
2311
+ }
2312
+ },
2313
+ /**
2314
+ * redraws a single node. Used internally.
2315
+ * @private
2316
+ * @name redraw_node(node, deep, is_callback, force_render)
2317
+ * @param {mixed} node the node to redraw
2318
+ * @param {Boolean} deep should child nodes be redrawn too
2319
+ * @param {Boolean} is_callback is this a recursion call
2320
+ * @param {Boolean} force_render should children of closed parents be drawn anyway
2321
+ */
2322
+ redraw_node : function (node, deep, is_callback, force_render) {
2323
+ var obj = this.get_node(node),
2324
+ par = false,
2325
+ ind = false,
2326
+ old = false,
2327
+ i = false,
2328
+ j = false,
2329
+ k = false,
2330
+ c = '',
2331
+ d = document,
2332
+ m = this._model.data,
2333
+ f = false,
2334
+ s = false,
2335
+ tmp = null,
2336
+ t = 0,
2337
+ l = 0,
2338
+ has_children = false,
2339
+ last_sibling = false;
2340
+ if(!obj) { return false; }
2341
+ if(obj.id === $.jstree.root) { return this.redraw(true); }
2342
+ deep = deep || obj.children.length === 0;
2343
+ node = !document.querySelector ? document.getElementById(obj.id) : this.element[0].querySelector('#' + ("0123456789".indexOf(obj.id[0]) !== -1 ? '\\3' + obj.id[0] + ' ' + obj.id.substr(1).replace($.jstree.idregex,'\\$&') : obj.id.replace($.jstree.idregex,'\\$&')) ); //, this.element);
2344
+ if(!node) {
2345
+ deep = true;
2346
+ //node = d.createElement('LI');
2347
+ if(!is_callback) {
2348
+ par = obj.parent !== $.jstree.root ? $('#' + obj.parent.replace($.jstree.idregex,'\\$&'), this.element)[0] : null;
2349
+ if(par !== null && (!par || !m[obj.parent].state.opened)) {
2350
+ return false;
2351
+ }
2352
+ ind = $.inArray(obj.id, par === null ? m[$.jstree.root].children : m[obj.parent].children);
2353
+ }
2354
+ }
2355
+ else {
2356
+ node = $(node);
2357
+ if(!is_callback) {
2358
+ par = node.parent().parent()[0];
2359
+ if(par === this.element[0]) {
2360
+ par = null;
2361
+ }
2362
+ ind = node.index();
2363
+ }
2364
+ // m[obj.id].data = node.data(); // use only node's data, no need to touch jquery storage
2365
+ if(!deep && obj.children.length && !node.children('.jstree-children').length) {
2366
+ deep = true;
2367
+ }
2368
+ if(!deep) {
2369
+ old = node.children('.jstree-children')[0];
2370
+ }
2371
+ f = node.children('.jstree-anchor')[0] === document.activeElement;
2372
+ node.remove();
2373
+ //node = d.createElement('LI');
2374
+ //node = node[0];
2375
+ }
2376
+ node = this._data.core.node.cloneNode(true);
2377
+ // node is DOM, deep is boolean
2378
+
2379
+ c = 'jstree-node ';
2380
+ for(i in obj.li_attr) {
2381
+ if(obj.li_attr.hasOwnProperty(i)) {
2382
+ if(i === 'id') { continue; }
2383
+ if(i !== 'class') {
2384
+ node.setAttribute(i, obj.li_attr[i]);
2385
+ }
2386
+ else {
2387
+ c += obj.li_attr[i];
2388
+ }
2389
+ }
2390
+ }
2391
+ if(!obj.a_attr.id) {
2392
+ obj.a_attr.id = obj.id + '_anchor';
2393
+ }
2394
+ node.setAttribute('aria-selected', !!obj.state.selected);
2395
+ node.setAttribute('aria-level', obj.parents.length);
2396
+ node.setAttribute('aria-labelledby', obj.a_attr.id);
2397
+ if(obj.state.disabled) {
2398
+ node.setAttribute('aria-disabled', true);
2399
+ }
2400
+
2401
+ for(i = 0, j = obj.children.length; i < j; i++) {
2402
+ if(!m[obj.children[i]].state.hidden) {
2403
+ has_children = true;
2404
+ break;
2405
+ }
2406
+ }
2407
+ if(obj.parent !== null && m[obj.parent] && !obj.state.hidden) {
2408
+ i = $.inArray(obj.id, m[obj.parent].children);
2409
+ last_sibling = obj.id;
2410
+ if(i !== -1) {
2411
+ i++;
2412
+ for(j = m[obj.parent].children.length; i < j; i++) {
2413
+ if(!m[m[obj.parent].children[i]].state.hidden) {
2414
+ last_sibling = m[obj.parent].children[i];
2415
+ }
2416
+ if(last_sibling !== obj.id) {
2417
+ break;
2418
+ }
2419
+ }
2420
+ }
2421
+ }
2422
+
2423
+ if(obj.state.hidden) {
2424
+ c += ' jstree-hidden';
2425
+ }
2426
+ if(obj.state.loaded && !has_children) {
2427
+ c += ' jstree-leaf';
2428
+ }
2429
+ else {
2430
+ c += obj.state.opened && obj.state.loaded ? ' jstree-open' : ' jstree-closed';
2431
+ node.setAttribute('aria-expanded', (obj.state.opened && obj.state.loaded) );
2432
+ }
2433
+ if(last_sibling === obj.id) {
2434
+ c += ' jstree-last';
2435
+ }
2436
+ node.id = obj.id;
2437
+ node.className = c;
2438
+ c = ( obj.state.selected ? ' jstree-clicked' : '') + ( obj.state.disabled ? ' jstree-disabled' : '');
2439
+ for(j in obj.a_attr) {
2440
+ if(obj.a_attr.hasOwnProperty(j)) {
2441
+ if(j === 'href' && obj.a_attr[j] === '#') { continue; }
2442
+ if(j !== 'class') {
2443
+ node.childNodes[1].setAttribute(j, obj.a_attr[j]);
2444
+ }
2445
+ else {
2446
+ c += ' ' + obj.a_attr[j];
2447
+ }
2448
+ }
2449
+ }
2450
+ if(c.length) {
2451
+ node.childNodes[1].className = 'jstree-anchor ' + c;
2452
+ }
2453
+ if((obj.icon && obj.icon !== true) || obj.icon === false) {
2454
+ if(obj.icon === false) {
2455
+ node.childNodes[1].childNodes[0].className += ' jstree-themeicon-hidden';
2456
+ }
2457
+ else if(obj.icon.indexOf('/') === -1 && obj.icon.indexOf('.') === -1) {
2458
+ node.childNodes[1].childNodes[0].className += ' ' + obj.icon + ' jstree-themeicon-custom';
2459
+ }
2460
+ else {
2461
+ node.childNodes[1].childNodes[0].style.backgroundImage = 'url("'+obj.icon+'")';
2462
+ node.childNodes[1].childNodes[0].style.backgroundPosition = 'center center';
2463
+ node.childNodes[1].childNodes[0].style.backgroundSize = 'auto';
2464
+ node.childNodes[1].childNodes[0].className += ' jstree-themeicon-custom';
2465
+ }
2466
+ }
2467
+
2468
+ if(this.settings.core.force_text) {
2469
+ node.childNodes[1].appendChild(d.createTextNode(obj.text));
2470
+ }
2471
+ else {
2472
+ node.childNodes[1].innerHTML += obj.text;
2473
+ }
2474
+
2475
+
2476
+ if(deep && obj.children.length && (obj.state.opened || force_render) && obj.state.loaded) {
2477
+ k = d.createElement('UL');
2478
+ k.setAttribute('role', 'group');
2479
+ k.className = 'jstree-children';
2480
+ for(i = 0, j = obj.children.length; i < j; i++) {
2481
+ k.appendChild(this.redraw_node(obj.children[i], deep, true));
2482
+ }
2483
+ node.appendChild(k);
2484
+ }
2485
+ if(old) {
2486
+ node.appendChild(old);
2487
+ }
2488
+ if(!is_callback) {
2489
+ // append back using par / ind
2490
+ if(!par) {
2491
+ par = this.element[0];
2492
+ }
2493
+ for(i = 0, j = par.childNodes.length; i < j; i++) {
2494
+ if(par.childNodes[i] && par.childNodes[i].className && par.childNodes[i].className.indexOf('jstree-children') !== -1) {
2495
+ tmp = par.childNodes[i];
2496
+ break;
2497
+ }
2498
+ }
2499
+ if(!tmp) {
2500
+ tmp = d.createElement('UL');
2501
+ tmp.setAttribute('role', 'group');
2502
+ tmp.className = 'jstree-children';
2503
+ par.appendChild(tmp);
2504
+ }
2505
+ par = tmp;
2506
+
2507
+ if(ind < par.childNodes.length) {
2508
+ par.insertBefore(node, par.childNodes[ind]);
2509
+ }
2510
+ else {
2511
+ par.appendChild(node);
2512
+ }
2513
+ if(f) {
2514
+ t = this.element[0].scrollTop;
2515
+ l = this.element[0].scrollLeft;
2516
+ node.childNodes[1].focus();
2517
+ this.element[0].scrollTop = t;
2518
+ this.element[0].scrollLeft = l;
2519
+ }
2520
+ }
2521
+ if(obj.state.opened && !obj.state.loaded) {
2522
+ obj.state.opened = false;
2523
+ setTimeout($.proxy(function () {
2524
+ this.open_node(obj.id, false, 0);
2525
+ }, this), 0);
2526
+ }
2527
+ return node;
2528
+ },
2529
+ /**
2530
+ * opens a node, revaling its children. If the node is not loaded it will be loaded and opened once ready.
2531
+ * @name open_node(obj [, callback, animation])
2532
+ * @param {mixed} obj the node to open
2533
+ * @param {Function} callback a function to execute once the node is opened
2534
+ * @param {Number} animation the animation duration in milliseconds when opening the node (overrides the `core.animation` setting). Use `false` for no animation.
2535
+ * @trigger open_node.jstree, after_open.jstree, before_open.jstree
2536
+ */
2537
+ open_node : function (obj, callback, animation) {
2538
+ var t1, t2, d, t;
2539
+ if($.isArray(obj)) {
2540
+ obj = obj.slice();
2541
+ for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
2542
+ this.open_node(obj[t1], callback, animation);
2543
+ }
2544
+ return true;
2545
+ }
2546
+ obj = this.get_node(obj);
2547
+ if(!obj || obj.id === $.jstree.root) {
2548
+ return false;
2549
+ }
2550
+ animation = animation === undefined ? this.settings.core.animation : animation;
2551
+ if(!this.is_closed(obj)) {
2552
+ if(callback) {
2553
+ callback.call(this, obj, false);
2554
+ }
2555
+ return false;
2556
+ }
2557
+ if(!this.is_loaded(obj)) {
2558
+ if(this.is_loading(obj)) {
2559
+ return setTimeout($.proxy(function () {
2560
+ this.open_node(obj, callback, animation);
2561
+ }, this), 500);
2562
+ }
2563
+ this.load_node(obj, function (o, ok) {
2564
+ return ok ? this.open_node(o, callback, animation) : (callback ? callback.call(this, o, false) : false);
2565
+ });
2566
+ }
2567
+ else {
2568
+ d = this.get_node(obj, true);
2569
+ t = this;
2570
+ if(d.length) {
2571
+ if(animation && d.children(".jstree-children").length) {
2572
+ d.children(".jstree-children").stop(true, true);
2573
+ }
2574
+ if(obj.children.length && !this._firstChild(d.children('.jstree-children')[0])) {
2575
+ this.draw_children(obj);
2576
+ //d = this.get_node(obj, true);
2577
+ }
2578
+ if(!animation) {
2579
+ this.trigger('before_open', { "node" : obj });
2580
+ d[0].className = d[0].className.replace('jstree-closed', 'jstree-open');
2581
+ d[0].setAttribute("aria-expanded", true);
2582
+ }
2583
+ else {
2584
+ this.trigger('before_open', { "node" : obj });
2585
+ d
2586
+ .children(".jstree-children").css("display","none").end()
2587
+ .removeClass("jstree-closed").addClass("jstree-open").attr("aria-expanded", true)
2588
+ .children(".jstree-children").stop(true, true)
2589
+ .slideDown(animation, function () {
2590
+ this.style.display = "";
2591
+ if (t.element) {
2592
+ t.trigger("after_open", { "node" : obj });
2593
+ }
2594
+ });
2595
+ }
2596
+ }
2597
+ obj.state.opened = true;
2598
+ if(callback) {
2599
+ callback.call(this, obj, true);
2600
+ }
2601
+ if(!d.length) {
2602
+ /**
2603
+ * triggered when a node is about to be opened (if the node is supposed to be in the DOM, it will be, but it won't be visible yet)
2604
+ * @event
2605
+ * @name before_open.jstree
2606
+ * @param {Object} node the opened node
2607
+ */
2608
+ this.trigger('before_open', { "node" : obj });
2609
+ }
2610
+ /**
2611
+ * triggered when a node is opened (if there is an animation it will not be completed yet)
2612
+ * @event
2613
+ * @name open_node.jstree
2614
+ * @param {Object} node the opened node
2615
+ */
2616
+ this.trigger('open_node', { "node" : obj });
2617
+ if(!animation || !d.length) {
2618
+ /**
2619
+ * triggered when a node is opened and the animation is complete
2620
+ * @event
2621
+ * @name after_open.jstree
2622
+ * @param {Object} node the opened node
2623
+ */
2624
+ this.trigger("after_open", { "node" : obj });
2625
+ }
2626
+ return true;
2627
+ }
2628
+ },
2629
+ /**
2630
+ * opens every parent of a node (node should be loaded)
2631
+ * @name _open_to(obj)
2632
+ * @param {mixed} obj the node to reveal
2633
+ * @private
2634
+ */
2635
+ _open_to : function (obj) {
2636
+ obj = this.get_node(obj);
2637
+ if(!obj || obj.id === $.jstree.root) {
2638
+ return false;
2639
+ }
2640
+ var i, j, p = obj.parents;
2641
+ for(i = 0, j = p.length; i < j; i+=1) {
2642
+ if(i !== $.jstree.root) {
2643
+ this.open_node(p[i], false, 0);
2644
+ }
2645
+ }
2646
+ return $('#' + obj.id.replace($.jstree.idregex,'\\$&'), this.element);
2647
+ },
2648
+ /**
2649
+ * closes a node, hiding its children
2650
+ * @name close_node(obj [, animation])
2651
+ * @param {mixed} obj the node to close
2652
+ * @param {Number} animation the animation duration in milliseconds when closing the node (overrides the `core.animation` setting). Use `false` for no animation.
2653
+ * @trigger close_node.jstree, after_close.jstree
2654
+ */
2655
+ close_node : function (obj, animation) {
2656
+ var t1, t2, t, d;
2657
+ if($.isArray(obj)) {
2658
+ obj = obj.slice();
2659
+ for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
2660
+ this.close_node(obj[t1], animation);
2661
+ }
2662
+ return true;
2663
+ }
2664
+ obj = this.get_node(obj);
2665
+ if(!obj || obj.id === $.jstree.root) {
2666
+ return false;
2667
+ }
2668
+ if(this.is_closed(obj)) {
2669
+ return false;
2670
+ }
2671
+ animation = animation === undefined ? this.settings.core.animation : animation;
2672
+ t = this;
2673
+ d = this.get_node(obj, true);
2674
+
2675
+ obj.state.opened = false;
2676
+ /**
2677
+ * triggered when a node is closed (if there is an animation it will not be complete yet)
2678
+ * @event
2679
+ * @name close_node.jstree
2680
+ * @param {Object} node the closed node
2681
+ */
2682
+ this.trigger('close_node',{ "node" : obj });
2683
+ if(!d.length) {
2684
+ /**
2685
+ * triggered when a node is closed and the animation is complete
2686
+ * @event
2687
+ * @name after_close.jstree
2688
+ * @param {Object} node the closed node
2689
+ */
2690
+ this.trigger("after_close", { "node" : obj });
2691
+ }
2692
+ else {
2693
+ if(!animation) {
2694
+ d[0].className = d[0].className.replace('jstree-open', 'jstree-closed');
2695
+ d.attr("aria-expanded", false).children('.jstree-children').remove();
2696
+ this.trigger("after_close", { "node" : obj });
2697
+ }
2698
+ else {
2699
+ d
2700
+ .children(".jstree-children").attr("style","display:block !important").end()
2701
+ .removeClass("jstree-open").addClass("jstree-closed").attr("aria-expanded", false)
2702
+ .children(".jstree-children").stop(true, true).slideUp(animation, function () {
2703
+ this.style.display = "";
2704
+ d.children('.jstree-children').remove();
2705
+ if (t.element) {
2706
+ t.trigger("after_close", { "node" : obj });
2707
+ }
2708
+ });
2709
+ }
2710
+ }
2711
+ },
2712
+ /**
2713
+ * toggles a node - closing it if it is open, opening it if it is closed
2714
+ * @name toggle_node(obj)
2715
+ * @param {mixed} obj the node to toggle
2716
+ */
2717
+ toggle_node : function (obj) {
2718
+ var t1, t2;
2719
+ if($.isArray(obj)) {
2720
+ obj = obj.slice();
2721
+ for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
2722
+ this.toggle_node(obj[t1]);
2723
+ }
2724
+ return true;
2725
+ }
2726
+ if(this.is_closed(obj)) {
2727
+ return this.open_node(obj);
2728
+ }
2729
+ if(this.is_open(obj)) {
2730
+ return this.close_node(obj);
2731
+ }
2732
+ },
2733
+ /**
2734
+ * opens all nodes within a node (or the tree), revaling their children. If the node is not loaded it will be loaded and opened once ready.
2735
+ * @name open_all([obj, animation, original_obj])
2736
+ * @param {mixed} obj the node to open recursively, omit to open all nodes in the tree
2737
+ * @param {Number} animation the animation duration in milliseconds when opening the nodes, the default is no animation
2738
+ * @param {jQuery} reference to the node that started the process (internal use)
2739
+ * @trigger open_all.jstree
2740
+ */
2741
+ open_all : function (obj, animation, original_obj) {
2742
+ if(!obj) { obj = $.jstree.root; }
2743
+ obj = this.get_node(obj);
2744
+ if(!obj) { return false; }
2745
+ var dom = obj.id === $.jstree.root ? this.get_container_ul() : this.get_node(obj, true), i, j, _this;
2746
+ if(!dom.length) {
2747
+ for(i = 0, j = obj.children_d.length; i < j; i++) {
2748
+ if(this.is_closed(this._model.data[obj.children_d[i]])) {
2749
+ this._model.data[obj.children_d[i]].state.opened = true;
2750
+ }
2751
+ }
2752
+ return this.trigger('open_all', { "node" : obj });
2753
+ }
2754
+ original_obj = original_obj || dom;
2755
+ _this = this;
2756
+ dom = this.is_closed(obj) ? dom.find('.jstree-closed').addBack() : dom.find('.jstree-closed');
2757
+ dom.each(function () {
2758
+ _this.open_node(
2759
+ this,
2760
+ function(node, status) { if(status && this.is_parent(node)) { this.open_all(node, animation, original_obj); } },
2761
+ animation || 0
2762
+ );
2763
+ });
2764
+ if(original_obj.find('.jstree-closed').length === 0) {
2765
+ /**
2766
+ * triggered when an `open_all` call completes
2767
+ * @event
2768
+ * @name open_all.jstree
2769
+ * @param {Object} node the opened node
2770
+ */
2771
+ this.trigger('open_all', { "node" : this.get_node(original_obj) });
2772
+ }
2773
+ },
2774
+ /**
2775
+ * closes all nodes within a node (or the tree), revaling their children
2776
+ * @name close_all([obj, animation])
2777
+ * @param {mixed} obj the node to close recursively, omit to close all nodes in the tree
2778
+ * @param {Number} animation the animation duration in milliseconds when closing the nodes, the default is no animation
2779
+ * @trigger close_all.jstree
2780
+ */
2781
+ close_all : function (obj, animation) {
2782
+ if(!obj) { obj = $.jstree.root; }
2783
+ obj = this.get_node(obj);
2784
+ if(!obj) { return false; }
2785
+ var dom = obj.id === $.jstree.root ? this.get_container_ul() : this.get_node(obj, true),
2786
+ _this = this, i, j;
2787
+ if(dom.length) {
2788
+ dom = this.is_open(obj) ? dom.find('.jstree-open').addBack() : dom.find('.jstree-open');
2789
+ $(dom.get().reverse()).each(function () { _this.close_node(this, animation || 0); });
2790
+ }
2791
+ for(i = 0, j = obj.children_d.length; i < j; i++) {
2792
+ this._model.data[obj.children_d[i]].state.opened = false;
2793
+ }
2794
+ /**
2795
+ * triggered when an `close_all` call completes
2796
+ * @event
2797
+ * @name close_all.jstree
2798
+ * @param {Object} node the closed node
2799
+ */
2800
+ this.trigger('close_all', { "node" : obj });
2801
+ },
2802
+ /**
2803
+ * checks if a node is disabled (not selectable)
2804
+ * @name is_disabled(obj)
2805
+ * @param {mixed} obj
2806
+ * @return {Boolean}
2807
+ */
2808
+ is_disabled : function (obj) {
2809
+ obj = this.get_node(obj);
2810
+ return obj && obj.state && obj.state.disabled;
2811
+ },
2812
+ /**
2813
+ * enables a node - so that it can be selected
2814
+ * @name enable_node(obj)
2815
+ * @param {mixed} obj the node to enable
2816
+ * @trigger enable_node.jstree
2817
+ */
2818
+ enable_node : function (obj) {
2819
+ var t1, t2;
2820
+ if($.isArray(obj)) {
2821
+ obj = obj.slice();
2822
+ for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
2823
+ this.enable_node(obj[t1]);
2824
+ }
2825
+ return true;
2826
+ }
2827
+ obj = this.get_node(obj);
2828
+ if(!obj || obj.id === $.jstree.root) {
2829
+ return false;
2830
+ }
2831
+ obj.state.disabled = false;
2832
+ this.get_node(obj,true).children('.jstree-anchor').removeClass('jstree-disabled').attr('aria-disabled', false);
2833
+ /**
2834
+ * triggered when an node is enabled
2835
+ * @event
2836
+ * @name enable_node.jstree
2837
+ * @param {Object} node the enabled node
2838
+ */
2839
+ this.trigger('enable_node', { 'node' : obj });
2840
+ },
2841
+ /**
2842
+ * disables a node - so that it can not be selected
2843
+ * @name disable_node(obj)
2844
+ * @param {mixed} obj the node to disable
2845
+ * @trigger disable_node.jstree
2846
+ */
2847
+ disable_node : function (obj) {
2848
+ var t1, t2;
2849
+ if($.isArray(obj)) {
2850
+ obj = obj.slice();
2851
+ for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
2852
+ this.disable_node(obj[t1]);
2853
+ }
2854
+ return true;
2855
+ }
2856
+ obj = this.get_node(obj);
2857
+ if(!obj || obj.id === $.jstree.root) {
2858
+ return false;
2859
+ }
2860
+ obj.state.disabled = true;
2861
+ this.get_node(obj,true).children('.jstree-anchor').addClass('jstree-disabled').attr('aria-disabled', true);
2862
+ /**
2863
+ * triggered when an node is disabled
2864
+ * @event
2865
+ * @name disable_node.jstree
2866
+ * @param {Object} node the disabled node
2867
+ */
2868
+ this.trigger('disable_node', { 'node' : obj });
2869
+ },
2870
+ /**
2871
+ * determines if a node is hidden
2872
+ * @name is_hidden(obj)
2873
+ * @param {mixed} obj the node
2874
+ */
2875
+ is_hidden : function (obj) {
2876
+ obj = this.get_node(obj);
2877
+ return obj.state.hidden === true;
2878
+ },
2879
+ /**
2880
+ * hides a node - it is still in the structure but will not be visible
2881
+ * @name hide_node(obj)
2882
+ * @param {mixed} obj the node to hide
2883
+ * @param {Boolean} skip_redraw internal parameter controlling if redraw is called
2884
+ * @trigger hide_node.jstree
2885
+ */
2886
+ hide_node : function (obj, skip_redraw) {
2887
+ var t1, t2;
2888
+ if($.isArray(obj)) {
2889
+ obj = obj.slice();
2890
+ for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
2891
+ this.hide_node(obj[t1], true);
2892
+ }
2893
+ if (!skip_redraw) {
2894
+ this.redraw();
2895
+ }
2896
+ return true;
2897
+ }
2898
+ obj = this.get_node(obj);
2899
+ if(!obj || obj.id === $.jstree.root) {
2900
+ return false;
2901
+ }
2902
+ if(!obj.state.hidden) {
2903
+ obj.state.hidden = true;
2904
+ this._node_changed(obj.parent);
2905
+ if(!skip_redraw) {
2906
+ this.redraw();
2907
+ }
2908
+ /**
2909
+ * triggered when an node is hidden
2910
+ * @event
2911
+ * @name hide_node.jstree
2912
+ * @param {Object} node the hidden node
2913
+ */
2914
+ this.trigger('hide_node', { 'node' : obj });
2915
+ }
2916
+ },
2917
+ /**
2918
+ * shows a node
2919
+ * @name show_node(obj)
2920
+ * @param {mixed} obj the node to show
2921
+ * @param {Boolean} skip_redraw internal parameter controlling if redraw is called
2922
+ * @trigger show_node.jstree
2923
+ */
2924
+ show_node : function (obj, skip_redraw) {
2925
+ var t1, t2;
2926
+ if($.isArray(obj)) {
2927
+ obj = obj.slice();
2928
+ for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
2929
+ this.show_node(obj[t1], true);
2930
+ }
2931
+ if (!skip_redraw) {
2932
+ this.redraw();
2933
+ }
2934
+ return true;
2935
+ }
2936
+ obj = this.get_node(obj);
2937
+ if(!obj || obj.id === $.jstree.root) {
2938
+ return false;
2939
+ }
2940
+ if(obj.state.hidden) {
2941
+ obj.state.hidden = false;
2942
+ this._node_changed(obj.parent);
2943
+ if(!skip_redraw) {
2944
+ this.redraw();
2945
+ }
2946
+ /**
2947
+ * triggered when an node is shown
2948
+ * @event
2949
+ * @name show_node.jstree
2950
+ * @param {Object} node the shown node
2951
+ */
2952
+ this.trigger('show_node', { 'node' : obj });
2953
+ }
2954
+ },
2955
+ /**
2956
+ * hides all nodes
2957
+ * @name hide_all()
2958
+ * @trigger hide_all.jstree
2959
+ */
2960
+ hide_all : function (skip_redraw) {
2961
+ var i, m = this._model.data, ids = [];
2962
+ for(i in m) {
2963
+ if(m.hasOwnProperty(i) && i !== $.jstree.root && !m[i].state.hidden) {
2964
+ m[i].state.hidden = true;
2965
+ ids.push(i);
2966
+ }
2967
+ }
2968
+ this._model.force_full_redraw = true;
2969
+ if(!skip_redraw) {
2970
+ this.redraw();
2971
+ }
2972
+ /**
2973
+ * triggered when all nodes are hidden
2974
+ * @event
2975
+ * @name hide_all.jstree
2976
+ * @param {Array} nodes the IDs of all hidden nodes
2977
+ */
2978
+ this.trigger('hide_all', { 'nodes' : ids });
2979
+ return ids;
2980
+ },
2981
+ /**
2982
+ * shows all nodes
2983
+ * @name show_all()
2984
+ * @trigger show_all.jstree
2985
+ */
2986
+ show_all : function (skip_redraw) {
2987
+ var i, m = this._model.data, ids = [];
2988
+ for(i in m) {
2989
+ if(m.hasOwnProperty(i) && i !== $.jstree.root && m[i].state.hidden) {
2990
+ m[i].state.hidden = false;
2991
+ ids.push(i);
2992
+ }
2993
+ }
2994
+ this._model.force_full_redraw = true;
2995
+ if(!skip_redraw) {
2996
+ this.redraw();
2997
+ }
2998
+ /**
2999
+ * triggered when all nodes are shown
3000
+ * @event
3001
+ * @name show_all.jstree
3002
+ * @param {Array} nodes the IDs of all shown nodes
3003
+ */
3004
+ this.trigger('show_all', { 'nodes' : ids });
3005
+ return ids;
3006
+ },
3007
+ /**
3008
+ * called when a node is selected by the user. Used internally.
3009
+ * @private
3010
+ * @name activate_node(obj, e)
3011
+ * @param {mixed} obj the node
3012
+ * @param {Object} e the related event
3013
+ * @trigger activate_node.jstree, changed.jstree
3014
+ */
3015
+ activate_node : function (obj, e) {
3016
+ if(this.is_disabled(obj)) {
3017
+ return false;
3018
+ }
3019
+ if(!e || typeof e !== 'object') {
3020
+ e = {};
3021
+ }
3022
+
3023
+ // ensure last_clicked is still in the DOM, make it fresh (maybe it was moved?) and make sure it is still selected, if not - make last_clicked the last selected node
3024
+ this._data.core.last_clicked = this._data.core.last_clicked && this._data.core.last_clicked.id !== undefined ? this.get_node(this._data.core.last_clicked.id) : null;
3025
+ if(this._data.core.last_clicked && !this._data.core.last_clicked.state.selected) { this._data.core.last_clicked = null; }
3026
+ if(!this._data.core.last_clicked && this._data.core.selected.length) { this._data.core.last_clicked = this.get_node(this._data.core.selected[this._data.core.selected.length - 1]); }
3027
+
3028
+ if(!this.settings.core.multiple || (!e.metaKey && !e.ctrlKey && !e.shiftKey) || (e.shiftKey && (!this._data.core.last_clicked || !this.get_parent(obj) || this.get_parent(obj) !== this._data.core.last_clicked.parent ) )) {
3029
+ if(!this.settings.core.multiple && (e.metaKey || e.ctrlKey || e.shiftKey) && this.is_selected(obj)) {
3030
+ this.deselect_node(obj, false, e);
3031
+ }
3032
+ else {
3033
+ this.deselect_all(true);
3034
+ this.select_node(obj, false, false, e);
3035
+ this._data.core.last_clicked = this.get_node(obj);
3036
+ }
3037
+ }
3038
+ else {
3039
+ if(e.shiftKey) {
3040
+ var o = this.get_node(obj).id,
3041
+ l = this._data.core.last_clicked.id,
3042
+ p = this.get_node(this._data.core.last_clicked.parent).children,
3043
+ c = false,
3044
+ i, j;
3045
+ for(i = 0, j = p.length; i < j; i += 1) {
3046
+ // separate IFs work whem o and l are the same
3047
+ if(p[i] === o) {
3048
+ c = !c;
3049
+ }
3050
+ if(p[i] === l) {
3051
+ c = !c;
3052
+ }
3053
+ if(!this.is_disabled(p[i]) && (c || p[i] === o || p[i] === l)) {
3054
+ if (!this.is_hidden(p[i])) {
3055
+ this.select_node(p[i], true, false, e);
3056
+ }
3057
+ }
3058
+ else {
3059
+ this.deselect_node(p[i], true, e);
3060
+ }
3061
+ }
3062
+ this.trigger('changed', { 'action' : 'select_node', 'node' : this.get_node(obj), 'selected' : this._data.core.selected, 'event' : e });
3063
+ }
3064
+ else {
3065
+ if(!this.is_selected(obj)) {
3066
+ this.select_node(obj, false, false, e);
3067
+ }
3068
+ else {
3069
+ this.deselect_node(obj, false, e);
3070
+ }
3071
+ }
3072
+ }
3073
+ /**
3074
+ * triggered when an node is clicked or intercated with by the user
3075
+ * @event
3076
+ * @name activate_node.jstree
3077
+ * @param {Object} node
3078
+ * @param {Object} event the ooriginal event (if any) which triggered the call (may be an empty object)
3079
+ */
3080
+ this.trigger('activate_node', { 'node' : this.get_node(obj), 'event' : e });
3081
+ },
3082
+ /**
3083
+ * applies the hover state on a node, called when a node is hovered by the user. Used internally.
3084
+ * @private
3085
+ * @name hover_node(obj)
3086
+ * @param {mixed} obj
3087
+ * @trigger hover_node.jstree
3088
+ */
3089
+ hover_node : function (obj) {
3090
+ obj = this.get_node(obj, true);
3091
+ if(!obj || !obj.length || obj.children('.jstree-hovered').length) {
3092
+ return false;
3093
+ }
3094
+ var o = this.element.find('.jstree-hovered'), t = this.element;
3095
+ if(o && o.length) { this.dehover_node(o); }
3096
+
3097
+ obj.children('.jstree-anchor').addClass('jstree-hovered');
3098
+ /**
3099
+ * triggered when an node is hovered
3100
+ * @event
3101
+ * @name hover_node.jstree
3102
+ * @param {Object} node
3103
+ */
3104
+ this.trigger('hover_node', { 'node' : this.get_node(obj) });
3105
+ setTimeout(function () { t.attr('aria-activedescendant', obj[0].id); }, 0);
3106
+ },
3107
+ /**
3108
+ * removes the hover state from a nodecalled when a node is no longer hovered by the user. Used internally.
3109
+ * @private
3110
+ * @name dehover_node(obj)
3111
+ * @param {mixed} obj
3112
+ * @trigger dehover_node.jstree
3113
+ */
3114
+ dehover_node : function (obj) {
3115
+ obj = this.get_node(obj, true);
3116
+ if(!obj || !obj.length || !obj.children('.jstree-hovered').length) {
3117
+ return false;
3118
+ }
3119
+ obj.children('.jstree-anchor').removeClass('jstree-hovered');
3120
+ /**
3121
+ * triggered when an node is no longer hovered
3122
+ * @event
3123
+ * @name dehover_node.jstree
3124
+ * @param {Object} node
3125
+ */
3126
+ this.trigger('dehover_node', { 'node' : this.get_node(obj) });
3127
+ },
3128
+ /**
3129
+ * select a node
3130
+ * @name select_node(obj [, supress_event, prevent_open])
3131
+ * @param {mixed} obj an array can be used to select multiple nodes
3132
+ * @param {Boolean} supress_event if set to `true` the `changed.jstree` event won't be triggered
3133
+ * @param {Boolean} prevent_open if set to `true` parents of the selected node won't be opened
3134
+ * @trigger select_node.jstree, changed.jstree
3135
+ */
3136
+ select_node : function (obj, supress_event, prevent_open, e) {
3137
+ var dom, t1, t2, th;
3138
+ if($.isArray(obj)) {
3139
+ obj = obj.slice();
3140
+ for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
3141
+ this.select_node(obj[t1], supress_event, prevent_open, e);
3142
+ }
3143
+ return true;
3144
+ }
3145
+ obj = this.get_node(obj);
3146
+ if(!obj || obj.id === $.jstree.root) {
3147
+ return false;
3148
+ }
3149
+ dom = this.get_node(obj, true);
3150
+ if(!obj.state.selected) {
3151
+ obj.state.selected = true;
3152
+ this._data.core.selected.push(obj.id);
3153
+ if(!prevent_open) {
3154
+ dom = this._open_to(obj);
3155
+ }
3156
+ if(dom && dom.length) {
3157
+ dom.attr('aria-selected', true).children('.jstree-anchor').addClass('jstree-clicked');
3158
+ }
3159
+ /**
3160
+ * triggered when an node is selected
3161
+ * @event
3162
+ * @name select_node.jstree
3163
+ * @param {Object} node
3164
+ * @param {Array} selected the current selection
3165
+ * @param {Object} event the event (if any) that triggered this select_node
3166
+ */
3167
+ this.trigger('select_node', { 'node' : obj, 'selected' : this._data.core.selected, 'event' : e });
3168
+ if(!supress_event) {
3169
+ /**
3170
+ * triggered when selection changes
3171
+ * @event
3172
+ * @name changed.jstree
3173
+ * @param {Object} node
3174
+ * @param {Object} action the action that caused the selection to change
3175
+ * @param {Array} selected the current selection
3176
+ * @param {Object} event the event (if any) that triggered this changed event
3177
+ */
3178
+ this.trigger('changed', { 'action' : 'select_node', 'node' : obj, 'selected' : this._data.core.selected, 'event' : e });
3179
+ }
3180
+ }
3181
+ },
3182
+ /**
3183
+ * deselect a node
3184
+ * @name deselect_node(obj [, supress_event])
3185
+ * @param {mixed} obj an array can be used to deselect multiple nodes
3186
+ * @param {Boolean} supress_event if set to `true` the `changed.jstree` event won't be triggered
3187
+ * @trigger deselect_node.jstree, changed.jstree
3188
+ */
3189
+ deselect_node : function (obj, supress_event, e) {
3190
+ var t1, t2, dom;
3191
+ if($.isArray(obj)) {
3192
+ obj = obj.slice();
3193
+ for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
3194
+ this.deselect_node(obj[t1], supress_event, e);
3195
+ }
3196
+ return true;
3197
+ }
3198
+ obj = this.get_node(obj);
3199
+ if(!obj || obj.id === $.jstree.root) {
3200
+ return false;
3201
+ }
3202
+ dom = this.get_node(obj, true);
3203
+ if(obj.state.selected) {
3204
+ obj.state.selected = false;
3205
+ this._data.core.selected = $.vakata.array_remove_item(this._data.core.selected, obj.id);
3206
+ if(dom.length) {
3207
+ dom.attr('aria-selected', false).children('.jstree-anchor').removeClass('jstree-clicked');
3208
+ }
3209
+ /**
3210
+ * triggered when an node is deselected
3211
+ * @event
3212
+ * @name deselect_node.jstree
3213
+ * @param {Object} node
3214
+ * @param {Array} selected the current selection
3215
+ * @param {Object} event the event (if any) that triggered this deselect_node
3216
+ */
3217
+ this.trigger('deselect_node', { 'node' : obj, 'selected' : this._data.core.selected, 'event' : e });
3218
+ if(!supress_event) {
3219
+ this.trigger('changed', { 'action' : 'deselect_node', 'node' : obj, 'selected' : this._data.core.selected, 'event' : e });
3220
+ }
3221
+ }
3222
+ },
3223
+ /**
3224
+ * select all nodes in the tree
3225
+ * @name select_all([supress_event])
3226
+ * @param {Boolean} supress_event if set to `true` the `changed.jstree` event won't be triggered
3227
+ * @trigger select_all.jstree, changed.jstree
3228
+ */
3229
+ select_all : function (supress_event) {
3230
+ var tmp = this._data.core.selected.concat([]), i, j;
3231
+ this._data.core.selected = this._model.data[$.jstree.root].children_d.concat();
3232
+ for(i = 0, j = this._data.core.selected.length; i < j; i++) {
3233
+ if(this._model.data[this._data.core.selected[i]]) {
3234
+ this._model.data[this._data.core.selected[i]].state.selected = true;
3235
+ }
3236
+ }
3237
+ this.redraw(true);
3238
+ /**
3239
+ * triggered when all nodes are selected
3240
+ * @event
3241
+ * @name select_all.jstree
3242
+ * @param {Array} selected the current selection
3243
+ */
3244
+ this.trigger('select_all', { 'selected' : this._data.core.selected });
3245
+ if(!supress_event) {
3246
+ this.trigger('changed', { 'action' : 'select_all', 'selected' : this._data.core.selected, 'old_selection' : tmp });
3247
+ }
3248
+ },
3249
+ /**
3250
+ * deselect all selected nodes
3251
+ * @name deselect_all([supress_event])
3252
+ * @param {Boolean} supress_event if set to `true` the `changed.jstree` event won't be triggered
3253
+ * @trigger deselect_all.jstree, changed.jstree
3254
+ */
3255
+ deselect_all : function (supress_event) {
3256
+ var tmp = this._data.core.selected.concat([]), i, j;
3257
+ for(i = 0, j = this._data.core.selected.length; i < j; i++) {
3258
+ if(this._model.data[this._data.core.selected[i]]) {
3259
+ this._model.data[this._data.core.selected[i]].state.selected = false;
3260
+ }
3261
+ }
3262
+ this._data.core.selected = [];
3263
+ this.element.find('.jstree-clicked').removeClass('jstree-clicked').parent().attr('aria-selected', false);
3264
+ /**
3265
+ * triggered when all nodes are deselected
3266
+ * @event
3267
+ * @name deselect_all.jstree
3268
+ * @param {Object} node the previous selection
3269
+ * @param {Array} selected the current selection
3270
+ */
3271
+ this.trigger('deselect_all', { 'selected' : this._data.core.selected, 'node' : tmp });
3272
+ if(!supress_event) {
3273
+ this.trigger('changed', { 'action' : 'deselect_all', 'selected' : this._data.core.selected, 'old_selection' : tmp });
3274
+ }
3275
+ },
3276
+ /**
3277
+ * checks if a node is selected
3278
+ * @name is_selected(obj)
3279
+ * @param {mixed} obj
3280
+ * @return {Boolean}
3281
+ */
3282
+ is_selected : function (obj) {
3283
+ obj = this.get_node(obj);
3284
+ if(!obj || obj.id === $.jstree.root) {
3285
+ return false;
3286
+ }
3287
+ return obj.state.selected;
3288
+ },
3289
+ /**
3290
+ * get an array of all selected nodes
3291
+ * @name get_selected([full])
3292
+ * @param {mixed} full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned
3293
+ * @return {Array}
3294
+ */
3295
+ get_selected : function (full) {
3296
+ return full ? $.map(this._data.core.selected, $.proxy(function (i) { return this.get_node(i); }, this)) : this._data.core.selected.slice();
3297
+ },
3298
+ /**
3299
+ * get an array of all top level selected nodes (ignoring children of selected nodes)
3300
+ * @name get_top_selected([full])
3301
+ * @param {mixed} full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned
3302
+ * @return {Array}
3303
+ */
3304
+ get_top_selected : function (full) {
3305
+ var tmp = this.get_selected(true),
3306
+ obj = {}, i, j, k, l;
3307
+ for(i = 0, j = tmp.length; i < j; i++) {
3308
+ obj[tmp[i].id] = tmp[i];
3309
+ }
3310
+ for(i = 0, j = tmp.length; i < j; i++) {
3311
+ for(k = 0, l = tmp[i].children_d.length; k < l; k++) {
3312
+ if(obj[tmp[i].children_d[k]]) {
3313
+ delete obj[tmp[i].children_d[k]];
3314
+ }
3315
+ }
3316
+ }
3317
+ tmp = [];
3318
+ for(i in obj) {
3319
+ if(obj.hasOwnProperty(i)) {
3320
+ tmp.push(i);
3321
+ }
3322
+ }
3323
+ return full ? $.map(tmp, $.proxy(function (i) { return this.get_node(i); }, this)) : tmp;
3324
+ },
3325
+ /**
3326
+ * get an array of all bottom level selected nodes (ignoring selected parents)
3327
+ * @name get_bottom_selected([full])
3328
+ * @param {mixed} full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned
3329
+ * @return {Array}
3330
+ */
3331
+ get_bottom_selected : function (full) {
3332
+ var tmp = this.get_selected(true),
3333
+ obj = [], i, j;
3334
+ for(i = 0, j = tmp.length; i < j; i++) {
3335
+ if(!tmp[i].children.length) {
3336
+ obj.push(tmp[i].id);
3337
+ }
3338
+ }
3339
+ return full ? $.map(obj, $.proxy(function (i) { return this.get_node(i); }, this)) : obj;
3340
+ },
3341
+ /**
3342
+ * gets the current state of the tree so that it can be restored later with `set_state(state)`. Used internally.
3343
+ * @name get_state()
3344
+ * @private
3345
+ * @return {Object}
3346
+ */
3347
+ get_state : function () {
3348
+ var state = {
3349
+ 'core' : {
3350
+ 'open' : [],
3351
+ 'scroll' : {
3352
+ 'left' : this.element.scrollLeft(),
3353
+ 'top' : this.element.scrollTop()
3354
+ },
3355
+ /*!
3356
+ 'themes' : {
3357
+ 'name' : this.get_theme(),
3358
+ 'icons' : this._data.core.themes.icons,
3359
+ 'dots' : this._data.core.themes.dots
3360
+ },
3361
+ */
3362
+ 'selected' : []
3363
+ }
3364
+ }, i;
3365
+ for(i in this._model.data) {
3366
+ if(this._model.data.hasOwnProperty(i)) {
3367
+ if(i !== $.jstree.root) {
3368
+ if(this._model.data[i].state.opened) {
3369
+ state.core.open.push(i);
3370
+ }
3371
+ if(this._model.data[i].state.selected) {
3372
+ state.core.selected.push(i);
3373
+ }
3374
+ }
3375
+ }
3376
+ }
3377
+ return state;
3378
+ },
3379
+ /**
3380
+ * sets the state of the tree. Used internally.
3381
+ * @name set_state(state [, callback])
3382
+ * @private
3383
+ * @param {Object} state the state to restore. Keep in mind this object is passed by reference and jstree will modify it.
3384
+ * @param {Function} callback an optional function to execute once the state is restored.
3385
+ * @trigger set_state.jstree
3386
+ */
3387
+ set_state : function (state, callback) {
3388
+ if(state) {
3389
+ if(state.core) {
3390
+ var res, n, t, _this, i;
3391
+ if(state.core.open) {
3392
+ if(!$.isArray(state.core.open) || !state.core.open.length) {
3393
+ delete state.core.open;
3394
+ this.set_state(state, callback);
3395
+ }
3396
+ else {
3397
+ this._load_nodes(state.core.open, function (nodes) {
3398
+ this.open_node(nodes, false, 0);
3399
+ delete state.core.open;
3400
+ this.set_state(state, callback);
3401
+ });
3402
+ }
3403
+ return false;
3404
+ }
3405
+ if(state.core.scroll) {
3406
+ if(state.core.scroll && state.core.scroll.left !== undefined) {
3407
+ this.element.scrollLeft(state.core.scroll.left);
3408
+ }
3409
+ if(state.core.scroll && state.core.scroll.top !== undefined) {
3410
+ this.element.scrollTop(state.core.scroll.top);
3411
+ }
3412
+ delete state.core.scroll;
3413
+ this.set_state(state, callback);
3414
+ return false;
3415
+ }
3416
+ if(state.core.selected) {
3417
+ _this = this;
3418
+ this.deselect_all();
3419
+ $.each(state.core.selected, function (i, v) {
3420
+ _this.select_node(v, false, true);
3421
+ });
3422
+ delete state.core.selected;
3423
+ this.set_state(state, callback);
3424
+ return false;
3425
+ }
3426
+ for(i in state) {
3427
+ if(state.hasOwnProperty(i) && i !== "core" && $.inArray(i, this.settings.plugins) === -1) {
3428
+ delete state[i];
3429
+ }
3430
+ }
3431
+ if($.isEmptyObject(state.core)) {
3432
+ delete state.core;
3433
+ this.set_state(state, callback);
3434
+ return false;
3435
+ }
3436
+ }
3437
+ if($.isEmptyObject(state)) {
3438
+ state = null;
3439
+ if(callback) { callback.call(this); }
3440
+ /**
3441
+ * triggered when a `set_state` call completes
3442
+ * @event
3443
+ * @name set_state.jstree
3444
+ */
3445
+ this.trigger('set_state');
3446
+ return false;
3447
+ }
3448
+ return true;
3449
+ }
3450
+ return false;
3451
+ },
3452
+ /**
3453
+ * refreshes the tree - all nodes are reloaded with calls to `load_node`.
3454
+ * @name refresh()
3455
+ * @param {Boolean} skip_loading an option to skip showing the loading indicator
3456
+ * @param {Mixed} forget_state if set to `true` state will not be reapplied, if set to a function (receiving the current state as argument) the result of that function will be used as state
3457
+ * @trigger refresh.jstree
3458
+ */
3459
+ refresh : function (skip_loading, forget_state) {
3460
+ this._data.core.state = forget_state === true ? {} : this.get_state();
3461
+ if(forget_state && $.isFunction(forget_state)) { this._data.core.state = forget_state.call(this, this._data.core.state); }
3462
+ this._cnt = 0;
3463
+ this._model.data = {};
3464
+ this._model.data[$.jstree.root] = {
3465
+ id : $.jstree.root,
3466
+ parent : null,
3467
+ parents : [],
3468
+ children : [],
3469
+ children_d : [],
3470
+ state : { loaded : false }
3471
+ };
3472
+ this._data.core.selected = [];
3473
+ this._data.core.last_clicked = null;
3474
+ this._data.core.focused = null;
3475
+
3476
+ var c = this.get_container_ul()[0].className;
3477
+ if(!skip_loading) {
3478
+ this.element.html("<"+"ul class='"+c+"' role='group'><"+"li class='jstree-initial-node jstree-loading jstree-leaf jstree-last' role='treeitem' id='j"+this._id+"_loading'><i class='jstree-icon jstree-ocl'></i><"+"a class='jstree-anchor' href='#'><i class='jstree-icon jstree-themeicon-hidden'></i>" + this.get_string("Loading ...") + "</a></li></ul>");
3479
+ this.element.attr('aria-activedescendant','j'+this._id+'_loading');
3480
+ }
3481
+ this.load_node($.jstree.root, function (o, s) {
3482
+ if(s) {
3483
+ this.get_container_ul()[0].className = c;
3484
+ if(this._firstChild(this.get_container_ul()[0])) {
3485
+ this.element.attr('aria-activedescendant',this._firstChild(this.get_container_ul()[0]).id);
3486
+ }
3487
+ this.set_state($.extend(true, {}, this._data.core.state), function () {
3488
+ /**
3489
+ * triggered when a `refresh` call completes
3490
+ * @event
3491
+ * @name refresh.jstree
3492
+ */
3493
+ this.trigger('refresh');
3494
+ });
3495
+ }
3496
+ this._data.core.state = null;
3497
+ });
3498
+ },
3499
+ /**
3500
+ * refreshes a node in the tree (reload its children) all opened nodes inside that node are reloaded with calls to `load_node`.
3501
+ * @name refresh_node(obj)
3502
+ * @param {mixed} obj the node
3503
+ * @trigger refresh_node.jstree
3504
+ */
3505
+ refresh_node : function (obj) {
3506
+ obj = this.get_node(obj);
3507
+ if(!obj || obj.id === $.jstree.root) { return false; }
3508
+ var opened = [], to_load = [], s = this._data.core.selected.concat([]);
3509
+ to_load.push(obj.id);
3510
+ if(obj.state.opened === true) { opened.push(obj.id); }
3511
+ this.get_node(obj, true).find('.jstree-open').each(function() { to_load.push(this.id); opened.push(this.id); });
3512
+ this._load_nodes(to_load, $.proxy(function (nodes) {
3513
+ this.open_node(opened, false, 0);
3514
+ this.select_node(s);
3515
+ /**
3516
+ * triggered when a node is refreshed
3517
+ * @event
3518
+ * @name refresh_node.jstree
3519
+ * @param {Object} node - the refreshed node
3520
+ * @param {Array} nodes - an array of the IDs of the nodes that were reloaded
3521
+ */
3522
+ this.trigger('refresh_node', { 'node' : obj, 'nodes' : nodes });
3523
+ }, this), false, true);
3524
+ },
3525
+ /**
3526
+ * set (change) the ID of a node
3527
+ * @name set_id(obj, id)
3528
+ * @param {mixed} obj the node
3529
+ * @param {String} id the new ID
3530
+ * @return {Boolean}
3531
+ * @trigger set_id.jstree
3532
+ */
3533
+ set_id : function (obj, id) {
3534
+ obj = this.get_node(obj);
3535
+ if(!obj || obj.id === $.jstree.root) { return false; }
3536
+ var i, j, m = this._model.data, old = obj.id;
3537
+ id = id.toString();
3538
+ // update parents (replace current ID with new one in children and children_d)
3539
+ m[obj.parent].children[$.inArray(obj.id, m[obj.parent].children)] = id;
3540
+ for(i = 0, j = obj.parents.length; i < j; i++) {
3541
+ m[obj.parents[i]].children_d[$.inArray(obj.id, m[obj.parents[i]].children_d)] = id;
3542
+ }
3543
+ // update children (replace current ID with new one in parent and parents)
3544
+ for(i = 0, j = obj.children.length; i < j; i++) {
3545
+ m[obj.children[i]].parent = id;
3546
+ }
3547
+ for(i = 0, j = obj.children_d.length; i < j; i++) {
3548
+ m[obj.children_d[i]].parents[$.inArray(obj.id, m[obj.children_d[i]].parents)] = id;
3549
+ }
3550
+ i = $.inArray(obj.id, this._data.core.selected);
3551
+ if(i !== -1) { this._data.core.selected[i] = id; }
3552
+ // update model and obj itself (obj.id, this._model.data[KEY])
3553
+ i = this.get_node(obj.id, true);
3554
+ if(i) {
3555
+ i.attr('id', id); //.children('.jstree-anchor').attr('id', id + '_anchor').end().attr('aria-labelledby', id + '_anchor');
3556
+ if(this.element.attr('aria-activedescendant') === obj.id) {
3557
+ this.element.attr('aria-activedescendant', id);
3558
+ }
3559
+ }
3560
+ delete m[obj.id];
3561
+ obj.id = id;
3562
+ obj.li_attr.id = id;
3563
+ m[id] = obj;
3564
+ /**
3565
+ * triggered when a node id value is changed
3566
+ * @event
3567
+ * @name set_id.jstree
3568
+ * @param {Object} node
3569
+ * @param {String} old the old id
3570
+ */
3571
+ this.trigger('set_id',{ "node" : obj, "new" : obj.id, "old" : old });
3572
+ return true;
3573
+ },
3574
+ /**
3575
+ * get the text value of a node
3576
+ * @name get_text(obj)
3577
+ * @param {mixed} obj the node
3578
+ * @return {String}
3579
+ */
3580
+ get_text : function (obj) {
3581
+ obj = this.get_node(obj);
3582
+ return (!obj || obj.id === $.jstree.root) ? false : obj.text;
3583
+ },
3584
+ /**
3585
+ * set the text value of a node. Used internally, please use `rename_node(obj, val)`.
3586
+ * @private
3587
+ * @name set_text(obj, val)
3588
+ * @param {mixed} obj the node, you can pass an array to set the text on multiple nodes
3589
+ * @param {String} val the new text value
3590
+ * @return {Boolean}
3591
+ * @trigger set_text.jstree
3592
+ */
3593
+ set_text : function (obj, val) {
3594
+ var t1, t2;
3595
+ if($.isArray(obj)) {
3596
+ obj = obj.slice();
3597
+ for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
3598
+ this.set_text(obj[t1], val);
3599
+ }
3600
+ return true;
3601
+ }
3602
+ obj = this.get_node(obj);
3603
+ if(!obj || obj.id === $.jstree.root) { return false; }
3604
+ obj.text = val;
3605
+ if(this.get_node(obj, true).length) {
3606
+ this.redraw_node(obj.id);
3607
+ }
3608
+ /**
3609
+ * triggered when a node text value is changed
3610
+ * @event
3611
+ * @name set_text.jstree
3612
+ * @param {Object} obj
3613
+ * @param {String} text the new value
3614
+ */
3615
+ this.trigger('set_text',{ "obj" : obj, "text" : val });
3616
+ return true;
3617
+ },
3618
+ /**
3619
+ * gets a JSON representation of a node (or the whole tree)
3620
+ * @name get_json([obj, options])
3621
+ * @param {mixed} obj
3622
+ * @param {Object} options
3623
+ * @param {Boolean} options.no_state do not return state information
3624
+ * @param {Boolean} options.no_id do not return ID
3625
+ * @param {Boolean} options.no_children do not include children
3626
+ * @param {Boolean} options.no_data do not include node data
3627
+ * @param {Boolean} options.no_li_attr do not include LI attributes
3628
+ * @param {Boolean} options.no_a_attr do not include A attributes
3629
+ * @param {Boolean} options.flat return flat JSON instead of nested
3630
+ * @return {Object}
3631
+ */
3632
+ get_json : function (obj, options, flat) {
3633
+ obj = this.get_node(obj || $.jstree.root);
3634
+ if(!obj) { return false; }
3635
+ if(options && options.flat && !flat) { flat = []; }
3636
+ var tmp = {
3637
+ 'id' : obj.id,
3638
+ 'text' : obj.text,
3639
+ 'icon' : this.get_icon(obj),
3640
+ 'li_attr' : $.extend(true, {}, obj.li_attr),
3641
+ 'a_attr' : $.extend(true, {}, obj.a_attr),
3642
+ 'state' : {},
3643
+ 'data' : options && options.no_data ? false : $.extend(true, {}, obj.data)
3644
+ //( this.get_node(obj, true).length ? this.get_node(obj, true).data() : obj.data ),
3645
+ }, i, j;
3646
+ if(options && options.flat) {
3647
+ tmp.parent = obj.parent;
3648
+ }
3649
+ else {
3650
+ tmp.children = [];
3651
+ }
3652
+ if(!options || !options.no_state) {
3653
+ for(i in obj.state) {
3654
+ if(obj.state.hasOwnProperty(i)) {
3655
+ tmp.state[i] = obj.state[i];
3656
+ }
3657
+ }
3658
+ } else {
3659
+ delete tmp.state;
3660
+ }
3661
+ if(options && options.no_li_attr) {
3662
+ delete tmp.li_attr;
3663
+ }
3664
+ if(options && options.no_a_attr) {
3665
+ delete tmp.a_attr;
3666
+ }
3667
+ if(options && options.no_id) {
3668
+ delete tmp.id;
3669
+ if(tmp.li_attr && tmp.li_attr.id) {
3670
+ delete tmp.li_attr.id;
3671
+ }
3672
+ if(tmp.a_attr && tmp.a_attr.id) {
3673
+ delete tmp.a_attr.id;
3674
+ }
3675
+ }
3676
+ if(options && options.flat && obj.id !== $.jstree.root) {
3677
+ flat.push(tmp);
3678
+ }
3679
+ if(!options || !options.no_children) {
3680
+ for(i = 0, j = obj.children.length; i < j; i++) {
3681
+ if(options && options.flat) {
3682
+ this.get_json(obj.children[i], options, flat);
3683
+ }
3684
+ else {
3685
+ tmp.children.push(this.get_json(obj.children[i], options));
3686
+ }
3687
+ }
3688
+ }
3689
+ return options && options.flat ? flat : (obj.id === $.jstree.root ? tmp.children : tmp);
3690
+ },
3691
+ /**
3692
+ * create a new node (do not confuse with load_node)
3693
+ * @name create_node([par, node, pos, callback, is_loaded])
3694
+ * @param {mixed} par the parent node (to create a root node use either "#" (string) or `null`)
3695
+ * @param {mixed} node the data for the new node (a valid JSON object, or a simple string with the name)
3696
+ * @param {mixed} pos the index at which to insert the node, "first" and "last" are also supported, default is "last"
3697
+ * @param {Function} callback a function to be called once the node is created
3698
+ * @param {Boolean} is_loaded internal argument indicating if the parent node was succesfully loaded
3699
+ * @return {String} the ID of the newly create node
3700
+ * @trigger model.jstree, create_node.jstree
3701
+ */
3702
+ create_node : function (par, node, pos, callback, is_loaded) {
3703
+ if(par === null) { par = $.jstree.root; }
3704
+ par = this.get_node(par);
3705
+ if(!par) { return false; }
3706
+ pos = pos === undefined ? "last" : pos;
3707
+ if(!pos.toString().match(/^(before|after)$/) && !is_loaded && !this.is_loaded(par)) {
3708
+ return this.load_node(par, function () { this.create_node(par, node, pos, callback, true); });
3709
+ }
3710
+ if(!node) { node = { "text" : this.get_string('New node') }; }
3711
+ if(typeof node === "string") { node = { "text" : node }; }
3712
+ if(node.text === undefined) { node.text = this.get_string('New node'); }
3713
+ var tmp, dpc, i, j;
3714
+
3715
+ if(par.id === $.jstree.root) {
3716
+ if(pos === "before") { pos = "first"; }
3717
+ if(pos === "after") { pos = "last"; }
3718
+ }
3719
+ switch(pos) {
3720
+ case "before":
3721
+ tmp = this.get_node(par.parent);
3722
+ pos = $.inArray(par.id, tmp.children);
3723
+ par = tmp;
3724
+ break;
3725
+ case "after" :
3726
+ tmp = this.get_node(par.parent);
3727
+ pos = $.inArray(par.id, tmp.children) + 1;
3728
+ par = tmp;
3729
+ break;
3730
+ case "inside":
3731
+ case "first":
3732
+ pos = 0;
3733
+ break;
3734
+ case "last":
3735
+ pos = par.children.length;
3736
+ break;
3737
+ default:
3738
+ if(!pos) { pos = 0; }
3739
+ break;
3740
+ }
3741
+ if(pos > par.children.length) { pos = par.children.length; }
3742
+ if(!node.id) { node.id = true; }
3743
+ if(!this.check("create_node", node, par, pos)) {
3744
+ this.settings.core.error.call(this, this._data.core.last_error);
3745
+ return false;
3746
+ }
3747
+ if(node.id === true) { delete node.id; }
3748
+ node = this._parse_model_from_json(node, par.id, par.parents.concat());
3749
+ if(!node) { return false; }
3750
+ tmp = this.get_node(node);
3751
+ dpc = [];
3752
+ dpc.push(node);
3753
+ dpc = dpc.concat(tmp.children_d);
3754
+ this.trigger('model', { "nodes" : dpc, "parent" : par.id });
3755
+
3756
+ par.children_d = par.children_d.concat(dpc);
3757
+ for(i = 0, j = par.parents.length; i < j; i++) {
3758
+ this._model.data[par.parents[i]].children_d = this._model.data[par.parents[i]].children_d.concat(dpc);
3759
+ }
3760
+ node = tmp;
3761
+ tmp = [];
3762
+ for(i = 0, j = par.children.length; i < j; i++) {
3763
+ tmp[i >= pos ? i+1 : i] = par.children[i];
3764
+ }
3765
+ tmp[pos] = node.id;
3766
+ par.children = tmp;
3767
+
3768
+ this.redraw_node(par, true);
3769
+ if(callback) { callback.call(this, this.get_node(node)); }
3770
+ /**
3771
+ * triggered when a node is created
3772
+ * @event
3773
+ * @name create_node.jstree
3774
+ * @param {Object} node
3775
+ * @param {String} parent the parent's ID
3776
+ * @param {Number} position the position of the new node among the parent's children
3777
+ */
3778
+ this.trigger('create_node', { "node" : this.get_node(node), "parent" : par.id, "position" : pos });
3779
+ return node.id;
3780
+ },
3781
+ /**
3782
+ * set the text value of a node
3783
+ * @name rename_node(obj, val)
3784
+ * @param {mixed} obj the node, you can pass an array to rename multiple nodes to the same name
3785
+ * @param {String} val the new text value
3786
+ * @return {Boolean}
3787
+ * @trigger rename_node.jstree
3788
+ */
3789
+ rename_node : function (obj, val) {
3790
+ var t1, t2, old;
3791
+ if($.isArray(obj)) {
3792
+ obj = obj.slice();
3793
+ for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
3794
+ this.rename_node(obj[t1], val);
3795
+ }
3796
+ return true;
3797
+ }
3798
+ obj = this.get_node(obj);
3799
+ if(!obj || obj.id === $.jstree.root) { return false; }
3800
+ old = obj.text;
3801
+ if(!this.check("rename_node", obj, this.get_parent(obj), val)) {
3802
+ this.settings.core.error.call(this, this._data.core.last_error);
3803
+ return false;
3804
+ }
3805
+ this.set_text(obj, val); // .apply(this, Array.prototype.slice.call(arguments))
3806
+ /**
3807
+ * triggered when a node is renamed
3808
+ * @event
3809
+ * @name rename_node.jstree
3810
+ * @param {Object} node
3811
+ * @param {String} text the new value
3812
+ * @param {String} old the old value
3813
+ */
3814
+ this.trigger('rename_node', { "node" : obj, "text" : val, "old" : old });
3815
+ return true;
3816
+ },
3817
+ /**
3818
+ * remove a node
3819
+ * @name delete_node(obj)
3820
+ * @param {mixed} obj the node, you can pass an array to delete multiple nodes
3821
+ * @return {Boolean}
3822
+ * @trigger delete_node.jstree, changed.jstree
3823
+ */
3824
+ delete_node : function (obj) {
3825
+ var t1, t2, par, pos, tmp, i, j, k, l, c, top, lft;
3826
+ if($.isArray(obj)) {
3827
+ obj = obj.slice();
3828
+ for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
3829
+ this.delete_node(obj[t1]);
3830
+ }
3831
+ return true;
3832
+ }
3833
+ obj = this.get_node(obj);
3834
+ if(!obj || obj.id === $.jstree.root) { return false; }
3835
+ par = this.get_node(obj.parent);
3836
+ pos = $.inArray(obj.id, par.children);
3837
+ c = false;
3838
+ if(!this.check("delete_node", obj, par, pos)) {
3839
+ this.settings.core.error.call(this, this._data.core.last_error);
3840
+ return false;
3841
+ }
3842
+ if(pos !== -1) {
3843
+ par.children = $.vakata.array_remove(par.children, pos);
3844
+ }
3845
+ tmp = obj.children_d.concat([]);
3846
+ tmp.push(obj.id);
3847
+ for(i = 0, j = obj.parents.length; i < j; i++) {
3848
+ this._model.data[obj.parents[i]].children_d = $.vakata.array_filter(this._model.data[obj.parents[i]].children_d, function (v) {
3849
+ return $.inArray(v, tmp) === -1;
3850
+ });
3851
+ }
3852
+ for(k = 0, l = tmp.length; k < l; k++) {
3853
+ if(this._model.data[tmp[k]].state.selected) {
3854
+ c = true;
3855
+ break;
3856
+ }
3857
+ }
3858
+ if (c) {
3859
+ this._data.core.selected = $.vakata.array_filter(this._data.core.selected, function (v) {
3860
+ return $.inArray(v, tmp) === -1;
3861
+ });
3862
+ }
3863
+ /**
3864
+ * triggered when a node is deleted
3865
+ * @event
3866
+ * @name delete_node.jstree
3867
+ * @param {Object} node
3868
+ * @param {String} parent the parent's ID
3869
+ */
3870
+ this.trigger('delete_node', { "node" : obj, "parent" : par.id });
3871
+ if(c) {
3872
+ this.trigger('changed', { 'action' : 'delete_node', 'node' : obj, 'selected' : this._data.core.selected, 'parent' : par.id });
3873
+ }
3874
+ for(k = 0, l = tmp.length; k < l; k++) {
3875
+ delete this._model.data[tmp[k]];
3876
+ }
3877
+ if($.inArray(this._data.core.focused, tmp) !== -1) {
3878
+ this._data.core.focused = null;
3879
+ top = this.element[0].scrollTop;
3880
+ lft = this.element[0].scrollLeft;
3881
+ if(par.id === $.jstree.root) {
3882
+ if (this._model.data[$.jstree.root].children[0]) {
3883
+ this.get_node(this._model.data[$.jstree.root].children[0], true).children('.jstree-anchor').focus();
3884
+ }
3885
+ }
3886
+ else {
3887
+ this.get_node(par, true).children('.jstree-anchor').focus();
3888
+ }
3889
+ this.element[0].scrollTop = top;
3890
+ this.element[0].scrollLeft = lft;
3891
+ }
3892
+ this.redraw_node(par, true);
3893
+ return true;
3894
+ },
3895
+ /**
3896
+ * check if an operation is premitted on the tree. Used internally.
3897
+ * @private
3898
+ * @name check(chk, obj, par, pos)
3899
+ * @param {String} chk the operation to check, can be "create_node", "rename_node", "delete_node", "copy_node" or "move_node"
3900
+ * @param {mixed} obj the node
3901
+ * @param {mixed} par the parent
3902
+ * @param {mixed} pos the position to insert at, or if "rename_node" - the new name
3903
+ * @param {mixed} more some various additional information, for example if a "move_node" operations is triggered by DND this will be the hovered node
3904
+ * @return {Boolean}
3905
+ */
3906
+ check : function (chk, obj, par, pos, more) {
3907
+ obj = obj && obj.id ? obj : this.get_node(obj);
3908
+ par = par && par.id ? par : this.get_node(par);
3909
+ var tmp = chk.match(/^move_node|copy_node|create_node$/i) ? par : obj,
3910
+ chc = this.settings.core.check_callback;
3911
+ if(chk === "move_node" || chk === "copy_node") {
3912
+ if((!more || !more.is_multi) && (obj.id === par.id || (chk === "move_node" && $.inArray(obj.id, par.children) === pos) || $.inArray(par.id, obj.children_d) !== -1)) {
3913
+ this._data.core.last_error = { 'error' : 'check', 'plugin' : 'core', 'id' : 'core_01', 'reason' : 'Moving parent inside child', 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
3914
+ return false;
3915
+ }
3916
+ }
3917
+ if(tmp && tmp.data) { tmp = tmp.data; }
3918
+ if(tmp && tmp.functions && (tmp.functions[chk] === false || tmp.functions[chk] === true)) {
3919
+ if(tmp.functions[chk] === false) {
3920
+ this._data.core.last_error = { 'error' : 'check', 'plugin' : 'core', 'id' : 'core_02', 'reason' : 'Node data prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
3921
+ }
3922
+ return tmp.functions[chk];
3923
+ }
3924
+ if(chc === false || ($.isFunction(chc) && chc.call(this, chk, obj, par, pos, more) === false) || (chc && chc[chk] === false)) {
3925
+ this._data.core.last_error = { 'error' : 'check', 'plugin' : 'core', 'id' : 'core_03', 'reason' : 'User config for core.check_callback prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
3926
+ return false;
3927
+ }
3928
+ return true;
3929
+ },
3930
+ /**
3931
+ * get the last error
3932
+ * @name last_error()
3933
+ * @return {Object}
3934
+ */
3935
+ last_error : function () {
3936
+ return this._data.core.last_error;
3937
+ },
3938
+ /**
3939
+ * move a node to a new parent
3940
+ * @name move_node(obj, par [, pos, callback, is_loaded])
3941
+ * @param {mixed} obj the node to move, pass an array to move multiple nodes
3942
+ * @param {mixed} par the new parent
3943
+ * @param {mixed} pos the position to insert at (besides integer values, "first" and "last" are supported, as well as "before" and "after"), defaults to integer `0`
3944
+ * @param {function} callback a function to call once the move is completed, receives 3 arguments - the node, the new parent and the position
3945
+ * @param {Boolean} is_loaded internal parameter indicating if the parent node has been loaded
3946
+ * @param {Boolean} skip_redraw internal parameter indicating if the tree should be redrawn
3947
+ * @param {Boolean} instance internal parameter indicating if the node comes from another instance
3948
+ * @trigger move_node.jstree
3949
+ */
3950
+ move_node : function (obj, par, pos, callback, is_loaded, skip_redraw, origin) {
3951
+ var t1, t2, old_par, old_pos, new_par, old_ins, is_multi, dpc, tmp, i, j, k, l, p;
3952
+
3953
+ par = this.get_node(par);
3954
+ pos = pos === undefined ? 0 : pos;
3955
+ if(!par) { return false; }
3956
+ if(!pos.toString().match(/^(before|after)$/) && !is_loaded && !this.is_loaded(par)) {
3957
+ return this.load_node(par, function () { this.move_node(obj, par, pos, callback, true, false, origin); });
3958
+ }
3959
+
3960
+ if($.isArray(obj)) {
3961
+ if(obj.length === 1) {
3962
+ obj = obj[0];
3963
+ }
3964
+ else {
3965
+ //obj = obj.slice();
3966
+ for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
3967
+ if((tmp = this.move_node(obj[t1], par, pos, callback, is_loaded, false, origin))) {
3968
+ par = tmp;
3969
+ pos = "after";
3970
+ }
3971
+ }
3972
+ this.redraw();
3973
+ return true;
3974
+ }
3975
+ }
3976
+ obj = obj && obj.id ? obj : this.get_node(obj);
3977
+
3978
+ if(!obj || obj.id === $.jstree.root) { return false; }
3979
+
3980
+ old_par = (obj.parent || $.jstree.root).toString();
3981
+ new_par = (!pos.toString().match(/^(before|after)$/) || par.id === $.jstree.root) ? par : this.get_node(par.parent);
3982
+ old_ins = origin ? origin : (this._model.data[obj.id] ? this : $.jstree.reference(obj.id));
3983
+ is_multi = !old_ins || !old_ins._id || (this._id !== old_ins._id);
3984
+ old_pos = old_ins && old_ins._id && old_par && old_ins._model.data[old_par] && old_ins._model.data[old_par].children ? $.inArray(obj.id, old_ins._model.data[old_par].children) : -1;
3985
+ if(old_ins && old_ins._id) {
3986
+ obj = old_ins._model.data[obj.id];
3987
+ }
3988
+
3989
+ if(is_multi) {
3990
+ if((tmp = this.copy_node(obj, par, pos, callback, is_loaded, false, origin))) {
3991
+ if(old_ins) { old_ins.delete_node(obj); }
3992
+ return tmp;
3993
+ }
3994
+ return false;
3995
+ }
3996
+ //var m = this._model.data;
3997
+ if(par.id === $.jstree.root) {
3998
+ if(pos === "before") { pos = "first"; }
3999
+ if(pos === "after") { pos = "last"; }
4000
+ }
4001
+ switch(pos) {
4002
+ case "before":
4003
+ pos = $.inArray(par.id, new_par.children);
4004
+ break;
4005
+ case "after" :
4006
+ pos = $.inArray(par.id, new_par.children) + 1;
4007
+ break;
4008
+ case "inside":
4009
+ case "first":
4010
+ pos = 0;
4011
+ break;
4012
+ case "last":
4013
+ pos = new_par.children.length;
4014
+ break;
4015
+ default:
4016
+ if(!pos) { pos = 0; }
4017
+ break;
4018
+ }
4019
+ if(pos > new_par.children.length) { pos = new_par.children.length; }
4020
+ if(!this.check("move_node", obj, new_par, pos, { 'core' : true, 'origin' : origin, 'is_multi' : (old_ins && old_ins._id && old_ins._id !== this._id), 'is_foreign' : (!old_ins || !old_ins._id) })) {
4021
+ this.settings.core.error.call(this, this._data.core.last_error);
4022
+ return false;
4023
+ }
4024
+ if(obj.parent === new_par.id) {
4025
+ dpc = new_par.children.concat();
4026
+ tmp = $.inArray(obj.id, dpc);
4027
+ if(tmp !== -1) {
4028
+ dpc = $.vakata.array_remove(dpc, tmp);
4029
+ if(pos > tmp) { pos--; }
4030
+ }
4031
+ tmp = [];
4032
+ for(i = 0, j = dpc.length; i < j; i++) {
4033
+ tmp[i >= pos ? i+1 : i] = dpc[i];
4034
+ }
4035
+ tmp[pos] = obj.id;
4036
+ new_par.children = tmp;
4037
+ this._node_changed(new_par.id);
4038
+ this.redraw(new_par.id === $.jstree.root);
4039
+ }
4040
+ else {
4041
+ // clean old parent and up
4042
+ tmp = obj.children_d.concat();
4043
+ tmp.push(obj.id);
4044
+ for(i = 0, j = obj.parents.length; i < j; i++) {
4045
+ dpc = [];
4046
+ p = old_ins._model.data[obj.parents[i]].children_d;
4047
+ for(k = 0, l = p.length; k < l; k++) {
4048
+ if($.inArray(p[k], tmp) === -1) {
4049
+ dpc.push(p[k]);
4050
+ }
4051
+ }
4052
+ old_ins._model.data[obj.parents[i]].children_d = dpc;
4053
+ }
4054
+ old_ins._model.data[old_par].children = $.vakata.array_remove_item(old_ins._model.data[old_par].children, obj.id);
4055
+
4056
+ // insert into new parent and up
4057
+ for(i = 0, j = new_par.parents.length; i < j; i++) {
4058
+ this._model.data[new_par.parents[i]].children_d = this._model.data[new_par.parents[i]].children_d.concat(tmp);
4059
+ }
4060
+ dpc = [];
4061
+ for(i = 0, j = new_par.children.length; i < j; i++) {
4062
+ dpc[i >= pos ? i+1 : i] = new_par.children[i];
4063
+ }
4064
+ dpc[pos] = obj.id;
4065
+ new_par.children = dpc;
4066
+ new_par.children_d.push(obj.id);
4067
+ new_par.children_d = new_par.children_d.concat(obj.children_d);
4068
+
4069
+ // update object
4070
+ obj.parent = new_par.id;
4071
+ tmp = new_par.parents.concat();
4072
+ tmp.unshift(new_par.id);
4073
+ p = obj.parents.length;
4074
+ obj.parents = tmp;
4075
+
4076
+ // update object children
4077
+ tmp = tmp.concat();
4078
+ for(i = 0, j = obj.children_d.length; i < j; i++) {
4079
+ this._model.data[obj.children_d[i]].parents = this._model.data[obj.children_d[i]].parents.slice(0,p*-1);
4080
+ Array.prototype.push.apply(this._model.data[obj.children_d[i]].parents, tmp);
4081
+ }
4082
+
4083
+ if(old_par === $.jstree.root || new_par.id === $.jstree.root) {
4084
+ this._model.force_full_redraw = true;
4085
+ }
4086
+ if(!this._model.force_full_redraw) {
4087
+ this._node_changed(old_par);
4088
+ this._node_changed(new_par.id);
4089
+ }
4090
+ if(!skip_redraw) {
4091
+ this.redraw();
4092
+ }
4093
+ }
4094
+ if(callback) { callback.call(this, obj, new_par, pos); }
4095
+ /**
4096
+ * triggered when a node is moved
4097
+ * @event
4098
+ * @name move_node.jstree
4099
+ * @param {Object} node
4100
+ * @param {String} parent the parent's ID
4101
+ * @param {Number} position the position of the node among the parent's children
4102
+ * @param {String} old_parent the old parent of the node
4103
+ * @param {Number} old_position the old position of the node
4104
+ * @param {Boolean} is_multi do the node and new parent belong to different instances
4105
+ * @param {jsTree} old_instance the instance the node came from
4106
+ * @param {jsTree} new_instance the instance of the new parent
4107
+ */
4108
+ this.trigger('move_node', { "node" : obj, "parent" : new_par.id, "position" : pos, "old_parent" : old_par, "old_position" : old_pos, 'is_multi' : (old_ins && old_ins._id && old_ins._id !== this._id), 'is_foreign' : (!old_ins || !old_ins._id), 'old_instance' : old_ins, 'new_instance' : this });
4109
+ return obj.id;
4110
+ },
4111
+ /**
4112
+ * copy a node to a new parent
4113
+ * @name copy_node(obj, par [, pos, callback, is_loaded])
4114
+ * @param {mixed} obj the node to copy, pass an array to copy multiple nodes
4115
+ * @param {mixed} par the new parent
4116
+ * @param {mixed} pos the position to insert at (besides integer values, "first" and "last" are supported, as well as "before" and "after"), defaults to integer `0`
4117
+ * @param {function} callback a function to call once the move is completed, receives 3 arguments - the node, the new parent and the position
4118
+ * @param {Boolean} is_loaded internal parameter indicating if the parent node has been loaded
4119
+ * @param {Boolean} skip_redraw internal parameter indicating if the tree should be redrawn
4120
+ * @param {Boolean} instance internal parameter indicating if the node comes from another instance
4121
+ * @trigger model.jstree copy_node.jstree
4122
+ */
4123
+ copy_node : function (obj, par, pos, callback, is_loaded, skip_redraw, origin) {
4124
+ var t1, t2, dpc, tmp, i, j, node, old_par, new_par, old_ins, is_multi;
4125
+
4126
+ par = this.get_node(par);
4127
+ pos = pos === undefined ? 0 : pos;
4128
+ if(!par) { return false; }
4129
+ if(!pos.toString().match(/^(before|after)$/) && !is_loaded && !this.is_loaded(par)) {
4130
+ return this.load_node(par, function () { this.copy_node(obj, par, pos, callback, true, false, origin); });
4131
+ }
4132
+
4133
+ if($.isArray(obj)) {
4134
+ if(obj.length === 1) {
4135
+ obj = obj[0];
4136
+ }
4137
+ else {
4138
+ //obj = obj.slice();
4139
+ for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
4140
+ if((tmp = this.copy_node(obj[t1], par, pos, callback, is_loaded, true, origin))) {
4141
+ par = tmp;
4142
+ pos = "after";
4143
+ }
4144
+ }
4145
+ this.redraw();
4146
+ return true;
4147
+ }
4148
+ }
4149
+ obj = obj && obj.id ? obj : this.get_node(obj);
4150
+ if(!obj || obj.id === $.jstree.root) { return false; }
4151
+
4152
+ old_par = (obj.parent || $.jstree.root).toString();
4153
+ new_par = (!pos.toString().match(/^(before|after)$/) || par.id === $.jstree.root) ? par : this.get_node(par.parent);
4154
+ old_ins = origin ? origin : (this._model.data[obj.id] ? this : $.jstree.reference(obj.id));
4155
+ is_multi = !old_ins || !old_ins._id || (this._id !== old_ins._id);
4156
+
4157
+ if(old_ins && old_ins._id) {
4158
+ obj = old_ins._model.data[obj.id];
4159
+ }
4160
+
4161
+ if(par.id === $.jstree.root) {
4162
+ if(pos === "before") { pos = "first"; }
4163
+ if(pos === "after") { pos = "last"; }
4164
+ }
4165
+ switch(pos) {
4166
+ case "before":
4167
+ pos = $.inArray(par.id, new_par.children);
4168
+ break;
4169
+ case "after" :
4170
+ pos = $.inArray(par.id, new_par.children) + 1;
4171
+ break;
4172
+ case "inside":
4173
+ case "first":
4174
+ pos = 0;
4175
+ break;
4176
+ case "last":
4177
+ pos = new_par.children.length;
4178
+ break;
4179
+ default:
4180
+ if(!pos) { pos = 0; }
4181
+ break;
4182
+ }
4183
+ if(pos > new_par.children.length) { pos = new_par.children.length; }
4184
+ if(!this.check("copy_node", obj, new_par, pos, { 'core' : true, 'origin' : origin, 'is_multi' : (old_ins && old_ins._id && old_ins._id !== this._id), 'is_foreign' : (!old_ins || !old_ins._id) })) {
4185
+ this.settings.core.error.call(this, this._data.core.last_error);
4186
+ return false;
4187
+ }
4188
+ node = old_ins ? old_ins.get_json(obj, { no_id : true, no_data : true, no_state : true }) : obj;
4189
+ if(!node) { return false; }
4190
+ if(node.id === true) { delete node.id; }
4191
+ node = this._parse_model_from_json(node, new_par.id, new_par.parents.concat());
4192
+ if(!node) { return false; }
4193
+ tmp = this.get_node(node);
4194
+ if(obj && obj.state && obj.state.loaded === false) { tmp.state.loaded = false; }
4195
+ dpc = [];
4196
+ dpc.push(node);
4197
+ dpc = dpc.concat(tmp.children_d);
4198
+ this.trigger('model', { "nodes" : dpc, "parent" : new_par.id });
4199
+
4200
+ // insert into new parent and up
4201
+ for(i = 0, j = new_par.parents.length; i < j; i++) {
4202
+ this._model.data[new_par.parents[i]].children_d = this._model.data[new_par.parents[i]].children_d.concat(dpc);
4203
+ }
4204
+ dpc = [];
4205
+ for(i = 0, j = new_par.children.length; i < j; i++) {
4206
+ dpc[i >= pos ? i+1 : i] = new_par.children[i];
4207
+ }
4208
+ dpc[pos] = tmp.id;
4209
+ new_par.children = dpc;
4210
+ new_par.children_d.push(tmp.id);
4211
+ new_par.children_d = new_par.children_d.concat(tmp.children_d);
4212
+
4213
+ if(new_par.id === $.jstree.root) {
4214
+ this._model.force_full_redraw = true;
4215
+ }
4216
+ if(!this._model.force_full_redraw) {
4217
+ this._node_changed(new_par.id);
4218
+ }
4219
+ if(!skip_redraw) {
4220
+ this.redraw(new_par.id === $.jstree.root);
4221
+ }
4222
+ if(callback) { callback.call(this, tmp, new_par, pos); }
4223
+ /**
4224
+ * triggered when a node is copied
4225
+ * @event
4226
+ * @name copy_node.jstree
4227
+ * @param {Object} node the copied node
4228
+ * @param {Object} original the original node
4229
+ * @param {String} parent the parent's ID
4230
+ * @param {Number} position the position of the node among the parent's children
4231
+ * @param {String} old_parent the old parent of the node
4232
+ * @param {Number} old_position the position of the original node
4233
+ * @param {Boolean} is_multi do the node and new parent belong to different instances
4234
+ * @param {jsTree} old_instance the instance the node came from
4235
+ * @param {jsTree} new_instance the instance of the new parent
4236
+ */
4237
+ this.trigger('copy_node', { "node" : tmp, "original" : obj, "parent" : new_par.id, "position" : pos, "old_parent" : old_par, "old_position" : old_ins && old_ins._id && old_par && old_ins._model.data[old_par] && old_ins._model.data[old_par].children ? $.inArray(obj.id, old_ins._model.data[old_par].children) : -1,'is_multi' : (old_ins && old_ins._id && old_ins._id !== this._id), 'is_foreign' : (!old_ins || !old_ins._id), 'old_instance' : old_ins, 'new_instance' : this });
4238
+ return tmp.id;
4239
+ },
4240
+ /**
4241
+ * cut a node (a later call to `paste(obj)` would move the node)
4242
+ * @name cut(obj)
4243
+ * @param {mixed} obj multiple objects can be passed using an array
4244
+ * @trigger cut.jstree
4245
+ */
4246
+ cut : function (obj) {
4247
+ if(!obj) { obj = this._data.core.selected.concat(); }
4248
+ if(!$.isArray(obj)) { obj = [obj]; }
4249
+ if(!obj.length) { return false; }
4250
+ var tmp = [], o, t1, t2;
4251
+ for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
4252
+ o = this.get_node(obj[t1]);
4253
+ if(o && o.id && o.id !== $.jstree.root) { tmp.push(o); }
4254
+ }
4255
+ if(!tmp.length) { return false; }
4256
+ ccp_node = tmp;
4257
+ ccp_inst = this;
4258
+ ccp_mode = 'move_node';
4259
+ /**
4260
+ * triggered when nodes are added to the buffer for moving
4261
+ * @event
4262
+ * @name cut.jstree
4263
+ * @param {Array} node
4264
+ */
4265
+ this.trigger('cut', { "node" : obj });
4266
+ },
4267
+ /**
4268
+ * copy a node (a later call to `paste(obj)` would copy the node)
4269
+ * @name copy(obj)
4270
+ * @param {mixed} obj multiple objects can be passed using an array
4271
+ * @trigger copy.jstree
4272
+ */
4273
+ copy : function (obj) {
4274
+ if(!obj) { obj = this._data.core.selected.concat(); }
4275
+ if(!$.isArray(obj)) { obj = [obj]; }
4276
+ if(!obj.length) { return false; }
4277
+ var tmp = [], o, t1, t2;
4278
+ for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
4279
+ o = this.get_node(obj[t1]);
4280
+ if(o && o.id && o.id !== $.jstree.root) { tmp.push(o); }
4281
+ }
4282
+ if(!tmp.length) { return false; }
4283
+ ccp_node = tmp;
4284
+ ccp_inst = this;
4285
+ ccp_mode = 'copy_node';
4286
+ /**
4287
+ * triggered when nodes are added to the buffer for copying
4288
+ * @event
4289
+ * @name copy.jstree
4290
+ * @param {Array} node
4291
+ */
4292
+ this.trigger('copy', { "node" : obj });
4293
+ },
4294
+ /**
4295
+ * get the current buffer (any nodes that are waiting for a paste operation)
4296
+ * @name get_buffer()
4297
+ * @return {Object} an object consisting of `mode` ("copy_node" or "move_node"), `node` (an array of objects) and `inst` (the instance)
4298
+ */
4299
+ get_buffer : function () {
4300
+ return { 'mode' : ccp_mode, 'node' : ccp_node, 'inst' : ccp_inst };
4301
+ },
4302
+ /**
4303
+ * check if there is something in the buffer to paste
4304
+ * @name can_paste()
4305
+ * @return {Boolean}
4306
+ */
4307
+ can_paste : function () {
4308
+ return ccp_mode !== false && ccp_node !== false; // && ccp_inst._model.data[ccp_node];
4309
+ },
4310
+ /**
4311
+ * copy or move the previously cut or copied nodes to a new parent
4312
+ * @name paste(obj [, pos])
4313
+ * @param {mixed} obj the new parent
4314
+ * @param {mixed} pos the position to insert at (besides integer, "first" and "last" are supported), defaults to integer `0`
4315
+ * @trigger paste.jstree
4316
+ */
4317
+ paste : function (obj, pos) {
4318
+ obj = this.get_node(obj);
4319
+ if(!obj || !ccp_mode || !ccp_mode.match(/^(copy_node|move_node)$/) || !ccp_node) { return false; }
4320
+ if(this[ccp_mode](ccp_node, obj, pos, false, false, false, ccp_inst)) {
4321
+ /**
4322
+ * triggered when paste is invoked
4323
+ * @event
4324
+ * @name paste.jstree
4325
+ * @param {String} parent the ID of the receiving node
4326
+ * @param {Array} node the nodes in the buffer
4327
+ * @param {String} mode the performed operation - "copy_node" or "move_node"
4328
+ */
4329
+ this.trigger('paste', { "parent" : obj.id, "node" : ccp_node, "mode" : ccp_mode });
4330
+ }
4331
+ ccp_node = false;
4332
+ ccp_mode = false;
4333
+ ccp_inst = false;
4334
+ },
4335
+ /**
4336
+ * clear the buffer of previously copied or cut nodes
4337
+ * @name clear_buffer()
4338
+ * @trigger clear_buffer.jstree
4339
+ */
4340
+ clear_buffer : function () {
4341
+ ccp_node = false;
4342
+ ccp_mode = false;
4343
+ ccp_inst = false;
4344
+ /**
4345
+ * triggered when the copy / cut buffer is cleared
4346
+ * @event
4347
+ * @name clear_buffer.jstree
4348
+ */
4349
+ this.trigger('clear_buffer');
4350
+ },
4351
+ /**
4352
+ * put a node in edit mode (input field to rename the node)
4353
+ * @name edit(obj [, default_text, callback])
4354
+ * @param {mixed} obj
4355
+ * @param {String} default_text the text to populate the input with (if omitted or set to a non-string value the node's text value is used)
4356
+ * @param {Function} callback a function to be called once the text box is blurred, it is called in the instance's scope and receives the node, a status parameter (true if the rename is successful, false otherwise) and a boolean indicating if the user cancelled the edit. You can access the node's title using .text
4357
+ */
4358
+ edit : function (obj, default_text, callback) {
4359
+ var rtl, w, a, s, t, h1, h2, fn, tmp, cancel = false;
4360
+ obj = this.get_node(obj);
4361
+ if(!obj) { return false; }
4362
+ if(this.settings.core.check_callback === false) {
4363
+ this._data.core.last_error = { 'error' : 'check', 'plugin' : 'core', 'id' : 'core_07', 'reason' : 'Could not edit node because of check_callback' };
4364
+ this.settings.core.error.call(this, this._data.core.last_error);
4365
+ return false;
4366
+ }
4367
+ tmp = obj;
4368
+ default_text = typeof default_text === 'string' ? default_text : obj.text;
4369
+ this.set_text(obj, "");
4370
+ obj = this._open_to(obj);
4371
+ tmp.text = default_text;
4372
+
4373
+ rtl = this._data.core.rtl;
4374
+ w = this.element.width();
4375
+ this._data.core.focused = tmp.id;
4376
+ a = obj.children('.jstree-anchor').focus();
4377
+ s = $('<span>');
4378
+ /*!
4379
+ oi = obj.children("i:visible"),
4380
+ ai = a.children("i:visible"),
4381
+ w1 = oi.width() * oi.length,
4382
+ w2 = ai.width() * ai.length,
4383
+ */
4384
+ t = default_text;
4385
+ h1 = $("<"+"div />", { css : { "position" : "absolute", "top" : "-200px", "left" : (rtl ? "0px" : "-1000px"), "visibility" : "hidden" } }).appendTo("body");
4386
+ h2 = $("<"+"input />", {
4387
+ "value" : t,
4388
+ "class" : "jstree-rename-input",
4389
+ // "size" : t.length,
4390
+ "css" : {
4391
+ "padding" : "0",
4392
+ "border" : "1px solid silver",
4393
+ "box-sizing" : "border-box",
4394
+ "display" : "inline-block",
4395
+ "height" : (this._data.core.li_height) + "px",
4396
+ "lineHeight" : (this._data.core.li_height) + "px",
4397
+ "width" : "150px" // will be set a bit further down
4398
+ },
4399
+ "blur" : $.proxy(function (e) {
4400
+ e.stopImmediatePropagation();
4401
+ e.preventDefault();
4402
+ var i = s.children(".jstree-rename-input"),
4403
+ v = i.val(),
4404
+ f = this.settings.core.force_text,
4405
+ nv;
4406
+ if(v === "") { v = t; }
4407
+ h1.remove();
4408
+ s.replaceWith(a);
4409
+ s.remove();
4410
+ t = f ? t : $('<div></div>').append($.parseHTML(t)).html();
4411
+ this.set_text(obj, t);
4412
+ nv = !!this.rename_node(obj, f ? $('<div></div>').text(v).text() : $('<div></div>').append($.parseHTML(v)).html());
4413
+ if(!nv) {
4414
+ this.set_text(obj, t); // move this up? and fix #483
4415
+ }
4416
+ this._data.core.focused = tmp.id;
4417
+ setTimeout($.proxy(function () {
4418
+ var node = this.get_node(tmp.id, true);
4419
+ if(node.length) {
4420
+ this._data.core.focused = tmp.id;
4421
+ node.children('.jstree-anchor').focus();
4422
+ }
4423
+ }, this), 0);
4424
+ if(callback) {
4425
+ callback.call(this, tmp, nv, cancel);
4426
+ }
4427
+ h2 = null;
4428
+ }, this),
4429
+ "keydown" : function (e) {
4430
+ var key = e.which;
4431
+ if(key === 27) {
4432
+ cancel = true;
4433
+ this.value = t;
4434
+ }
4435
+ if(key === 27 || key === 13 || key === 37 || key === 38 || key === 39 || key === 40 || key === 32) {
4436
+ e.stopImmediatePropagation();
4437
+ }
4438
+ if(key === 27 || key === 13) {
4439
+ e.preventDefault();
4440
+ this.blur();
4441
+ }
4442
+ },
4443
+ "click" : function (e) { e.stopImmediatePropagation(); },
4444
+ "mousedown" : function (e) { e.stopImmediatePropagation(); },
4445
+ "keyup" : function (e) {
4446
+ h2.width(Math.min(h1.text("pW" + this.value).width(),w));
4447
+ },
4448
+ "keypress" : function(e) {
4449
+ if(e.which === 13) { return false; }
4450
+ }
4451
+ });
4452
+ fn = {
4453
+ fontFamily : a.css('fontFamily') || '',
4454
+ fontSize : a.css('fontSize') || '',
4455
+ fontWeight : a.css('fontWeight') || '',
4456
+ fontStyle : a.css('fontStyle') || '',
4457
+ fontStretch : a.css('fontStretch') || '',
4458
+ fontVariant : a.css('fontVariant') || '',
4459
+ letterSpacing : a.css('letterSpacing') || '',
4460
+ wordSpacing : a.css('wordSpacing') || ''
4461
+ };
4462
+ s.attr('class', a.attr('class')).append(a.contents().clone()).append(h2);
4463
+ a.replaceWith(s);
4464
+ h1.css(fn);
4465
+ h2.css(fn).width(Math.min(h1.text("pW" + h2[0].value).width(),w))[0].select();
4466
+ $(document).one('mousedown.jstree touchstart.jstree dnd_start.vakata', function (e) {
4467
+ if (h2 && e.target !== h2) {
4468
+ $(h2).blur();
4469
+ }
4470
+ });
4471
+ },
4472
+
4473
+
4474
+ /**
4475
+ * changes the theme
4476
+ * @name set_theme(theme_name [, theme_url])
4477
+ * @param {String} theme_name the name of the new theme to apply
4478
+ * @param {mixed} theme_url the location of the CSS file for this theme. Omit or set to `false` if you manually included the file. Set to `true` to autoload from the `core.themes.dir` directory.
4479
+ * @trigger set_theme.jstree
4480
+ */
4481
+ set_theme : function (theme_name, theme_url) {
4482
+ if(!theme_name) { return false; }
4483
+ if(theme_url === true) {
4484
+ var dir = this.settings.core.themes.dir;
4485
+ if(!dir) { dir = $.jstree.path + '/themes'; }
4486
+ theme_url = dir + '/' + theme_name + '/style.css';
4487
+ }
4488
+ if(theme_url && $.inArray(theme_url, themes_loaded) === -1) {
4489
+ $('head').append('<'+'link rel="stylesheet" href="' + theme_url + '" type="text/css" />');
4490
+ themes_loaded.push(theme_url);
4491
+ }
4492
+ if(this._data.core.themes.name) {
4493
+ this.element.removeClass('jstree-' + this._data.core.themes.name);
4494
+ }
4495
+ this._data.core.themes.name = theme_name;
4496
+ this.element.addClass('jstree-' + theme_name);
4497
+ this.element[this.settings.core.themes.responsive ? 'addClass' : 'removeClass' ]('jstree-' + theme_name + '-responsive');
4498
+ /**
4499
+ * triggered when a theme is set
4500
+ * @event
4501
+ * @name set_theme.jstree
4502
+ * @param {String} theme the new theme
4503
+ */
4504
+ this.trigger('set_theme', { 'theme' : theme_name });
4505
+ },
4506
+ /**
4507
+ * gets the name of the currently applied theme name
4508
+ * @name get_theme()
4509
+ * @return {String}
4510
+ */
4511
+ get_theme : function () { return this._data.core.themes.name; },
4512
+ /**
4513
+ * changes the theme variant (if the theme has variants)
4514
+ * @name set_theme_variant(variant_name)
4515
+ * @param {String|Boolean} variant_name the variant to apply (if `false` is used the current variant is removed)
4516
+ */
4517
+ set_theme_variant : function (variant_name) {
4518
+ if(this._data.core.themes.variant) {
4519
+ this.element.removeClass('jstree-' + this._data.core.themes.name + '-' + this._data.core.themes.variant);
4520
+ }
4521
+ this._data.core.themes.variant = variant_name;
4522
+ if(variant_name) {
4523
+ this.element.addClass('jstree-' + this._data.core.themes.name + '-' + this._data.core.themes.variant);
4524
+ }
4525
+ },
4526
+ /**
4527
+ * gets the name of the currently applied theme variant
4528
+ * @name get_theme()
4529
+ * @return {String}
4530
+ */
4531
+ get_theme_variant : function () { return this._data.core.themes.variant; },
4532
+ /**
4533
+ * shows a striped background on the container (if the theme supports it)
4534
+ * @name show_stripes()
4535
+ */
4536
+ show_stripes : function () {
4537
+ this._data.core.themes.stripes = true;
4538
+ this.get_container_ul().addClass("jstree-striped");
4539
+ /**
4540
+ * triggered when stripes are shown
4541
+ * @event
4542
+ * @name show_stripes.jstree
4543
+ */
4544
+ this.trigger('show_stripes');
4545
+ },
4546
+ /**
4547
+ * hides the striped background on the container
4548
+ * @name hide_stripes()
4549
+ */
4550
+ hide_stripes : function () {
4551
+ this._data.core.themes.stripes = false;
4552
+ this.get_container_ul().removeClass("jstree-striped");
4553
+ /**
4554
+ * triggered when stripes are hidden
4555
+ * @event
4556
+ * @name hide_stripes.jstree
4557
+ */
4558
+ this.trigger('hide_stripes');
4559
+ },
4560
+ /**
4561
+ * toggles the striped background on the container
4562
+ * @name toggle_stripes()
4563
+ */
4564
+ toggle_stripes : function () { if(this._data.core.themes.stripes) { this.hide_stripes(); } else { this.show_stripes(); } },
4565
+ /**
4566
+ * shows the connecting dots (if the theme supports it)
4567
+ * @name show_dots()
4568
+ */
4569
+ show_dots : function () {
4570
+ this._data.core.themes.dots = true;
4571
+ this.get_container_ul().removeClass("jstree-no-dots");
4572
+ /**
4573
+ * triggered when dots are shown
4574
+ * @event
4575
+ * @name show_dots.jstree
4576
+ */
4577
+ this.trigger('show_dots');
4578
+ },
4579
+ /**
4580
+ * hides the connecting dots
4581
+ * @name hide_dots()
4582
+ */
4583
+ hide_dots : function () {
4584
+ this._data.core.themes.dots = false;
4585
+ this.get_container_ul().addClass("jstree-no-dots");
4586
+ /**
4587
+ * triggered when dots are hidden
4588
+ * @event
4589
+ * @name hide_dots.jstree
4590
+ */
4591
+ this.trigger('hide_dots');
4592
+ },
4593
+ /**
4594
+ * toggles the connecting dots
4595
+ * @name toggle_dots()
4596
+ */
4597
+ toggle_dots : function () { if(this._data.core.themes.dots) { this.hide_dots(); } else { this.show_dots(); } },
4598
+ /**
4599
+ * show the node icons
4600
+ * @name show_icons()
4601
+ */
4602
+ show_icons : function () {
4603
+ this._data.core.themes.icons = true;
4604
+ this.get_container_ul().removeClass("jstree-no-icons");
4605
+ /**
4606
+ * triggered when icons are shown
4607
+ * @event
4608
+ * @name show_icons.jstree
4609
+ */
4610
+ this.trigger('show_icons');
4611
+ },
4612
+ /**
4613
+ * hide the node icons
4614
+ * @name hide_icons()
4615
+ */
4616
+ hide_icons : function () {
4617
+ this._data.core.themes.icons = false;
4618
+ this.get_container_ul().addClass("jstree-no-icons");
4619
+ /**
4620
+ * triggered when icons are hidden
4621
+ * @event
4622
+ * @name hide_icons.jstree
4623
+ */
4624
+ this.trigger('hide_icons');
4625
+ },
4626
+ /**
4627
+ * toggle the node icons
4628
+ * @name toggle_icons()
4629
+ */
4630
+ toggle_icons : function () { if(this._data.core.themes.icons) { this.hide_icons(); } else { this.show_icons(); } },
4631
+ /**
4632
+ * show the node ellipsis
4633
+ * @name show_icons()
4634
+ */
4635
+ show_ellipsis : function () {
4636
+ this._data.core.themes.ellipsis = true;
4637
+ this.get_container_ul().addClass("jstree-ellipsis");
4638
+ /**
4639
+ * triggered when ellisis is shown
4640
+ * @event
4641
+ * @name show_ellipsis.jstree
4642
+ */
4643
+ this.trigger('show_ellipsis');
4644
+ },
4645
+ /**
4646
+ * hide the node ellipsis
4647
+ * @name hide_ellipsis()
4648
+ */
4649
+ hide_ellipsis : function () {
4650
+ this._data.core.themes.ellipsis = false;
4651
+ this.get_container_ul().removeClass("jstree-ellipsis");
4652
+ /**
4653
+ * triggered when ellisis is hidden
4654
+ * @event
4655
+ * @name hide_ellipsis.jstree
4656
+ */
4657
+ this.trigger('hide_ellipsis');
4658
+ },
4659
+ /**
4660
+ * toggle the node ellipsis
4661
+ * @name toggle_icons()
4662
+ */
4663
+ toggle_ellipsis : function () { if(this._data.core.themes.ellipsis) { this.hide_ellipsis(); } else { this.show_ellipsis(); } },
4664
+ /**
4665
+ * set the node icon for a node
4666
+ * @name set_icon(obj, icon)
4667
+ * @param {mixed} obj
4668
+ * @param {String} icon the new icon - can be a path to an icon or a className, if using an image that is in the current directory use a `./` prefix, otherwise it will be detected as a class
4669
+ */
4670
+ set_icon : function (obj, icon) {
4671
+ var t1, t2, dom, old;
4672
+ if($.isArray(obj)) {
4673
+ obj = obj.slice();
4674
+ for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
4675
+ this.set_icon(obj[t1], icon);
4676
+ }
4677
+ return true;
4678
+ }
4679
+ obj = this.get_node(obj);
4680
+ if(!obj || obj.id === $.jstree.root) { return false; }
4681
+ old = obj.icon;
4682
+ obj.icon = icon === true || icon === null || icon === undefined || icon === '' ? true : icon;
4683
+ dom = this.get_node(obj, true).children(".jstree-anchor").children(".jstree-themeicon");
4684
+ if(icon === false) {
4685
+ this.hide_icon(obj);
4686
+ }
4687
+ else if(icon === true || icon === null || icon === undefined || icon === '') {
4688
+ dom.removeClass('jstree-themeicon-custom ' + old).css("background","").removeAttr("rel");
4689
+ if(old === false) { this.show_icon(obj); }
4690
+ }
4691
+ else if(icon.indexOf("/") === -1 && icon.indexOf(".") === -1) {
4692
+ dom.removeClass(old).css("background","");
4693
+ dom.addClass(icon + ' jstree-themeicon-custom').attr("rel",icon);
4694
+ if(old === false) { this.show_icon(obj); }
4695
+ }
4696
+ else {
4697
+ dom.removeClass(old).css("background","");
4698
+ dom.addClass('jstree-themeicon-custom').css("background", "url('" + icon + "') center center no-repeat").attr("rel",icon);
4699
+ if(old === false) { this.show_icon(obj); }
4700
+ }
4701
+ return true;
4702
+ },
4703
+ /**
4704
+ * get the node icon for a node
4705
+ * @name get_icon(obj)
4706
+ * @param {mixed} obj
4707
+ * @return {String}
4708
+ */
4709
+ get_icon : function (obj) {
4710
+ obj = this.get_node(obj);
4711
+ return (!obj || obj.id === $.jstree.root) ? false : obj.icon;
4712
+ },
4713
+ /**
4714
+ * hide the icon on an individual node
4715
+ * @name hide_icon(obj)
4716
+ * @param {mixed} obj
4717
+ */
4718
+ hide_icon : function (obj) {
4719
+ var t1, t2;
4720
+ if($.isArray(obj)) {
4721
+ obj = obj.slice();
4722
+ for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
4723
+ this.hide_icon(obj[t1]);
4724
+ }
4725
+ return true;
4726
+ }
4727
+ obj = this.get_node(obj);
4728
+ if(!obj || obj === $.jstree.root) { return false; }
4729
+ obj.icon = false;
4730
+ this.get_node(obj, true).children(".jstree-anchor").children(".jstree-themeicon").addClass('jstree-themeicon-hidden');
4731
+ return true;
4732
+ },
4733
+ /**
4734
+ * show the icon on an individual node
4735
+ * @name show_icon(obj)
4736
+ * @param {mixed} obj
4737
+ */
4738
+ show_icon : function (obj) {
4739
+ var t1, t2, dom;
4740
+ if($.isArray(obj)) {
4741
+ obj = obj.slice();
4742
+ for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
4743
+ this.show_icon(obj[t1]);
4744
+ }
4745
+ return true;
4746
+ }
4747
+ obj = this.get_node(obj);
4748
+ if(!obj || obj === $.jstree.root) { return false; }
4749
+ dom = this.get_node(obj, true);
4750
+ obj.icon = dom.length ? dom.children(".jstree-anchor").children(".jstree-themeicon").attr('rel') : true;
4751
+ if(!obj.icon) { obj.icon = true; }
4752
+ dom.children(".jstree-anchor").children(".jstree-themeicon").removeClass('jstree-themeicon-hidden');
4753
+ return true;
4754
+ }
4755
+ };
4756
+
4757
+ // helpers
4758
+ $.vakata = {};
4759
+ // collect attributes
4760
+ $.vakata.attributes = function(node, with_values) {
4761
+ node = $(node)[0];
4762
+ var attr = with_values ? {} : [];
4763
+ if(node && node.attributes) {
4764
+ $.each(node.attributes, function (i, v) {
4765
+ if($.inArray(v.name.toLowerCase(),['style','contenteditable','hasfocus','tabindex']) !== -1) { return; }
4766
+ if(v.value !== null && $.trim(v.value) !== '') {
4767
+ if(with_values) { attr[v.name] = v.value; }
4768
+ else { attr.push(v.name); }
4769
+ }
4770
+ });
4771
+ }
4772
+ return attr;
4773
+ };
4774
+ $.vakata.array_unique = function(array) {
4775
+ var a = [], i, j, l, o = {};
4776
+ for(i = 0, l = array.length; i < l; i++) {
4777
+ if(o[array[i]] === undefined) {
4778
+ a.push(array[i]);
4779
+ o[array[i]] = true;
4780
+ }
4781
+ }
4782
+ return a;
4783
+ };
4784
+ // remove item from array
4785
+ $.vakata.array_remove = function(array, from) {
4786
+ array.splice(from, 1);
4787
+ return array;
4788
+ //var rest = array.slice((to || from) + 1 || array.length);
4789
+ //array.length = from < 0 ? array.length + from : from;
4790
+ //array.push.apply(array, rest);
4791
+ //return array;
4792
+ };
4793
+ // remove item from array
4794
+ $.vakata.array_remove_item = function(array, item) {
4795
+ var tmp = $.inArray(item, array);
4796
+ return tmp !== -1 ? $.vakata.array_remove(array, tmp) : array;
4797
+ };
4798
+ $.vakata.array_filter = function(c,a,b,d,e) {
4799
+ if (c.filter) {
4800
+ return c.filter(a, b);
4801
+ }
4802
+ d=[];
4803
+ for (e in c) {
4804
+ if (~~e+''===e+'' && e>=0 && a.call(b,c[e],+e,c)) {
4805
+ d.push(c[e]);
4806
+ }
4807
+ }
4808
+ return d;
4809
+ };
4810
+
4811
+
4812
+ /**
4813
+ * ### Changed plugin
4814
+ *
4815
+ * This plugin adds more information to the `changed.jstree` event. The new data is contained in the `changed` event data property, and contains a lists of `selected` and `deselected` nodes.
4816
+ */
4817
+
4818
+ $.jstree.plugins.changed = function (options, parent) {
4819
+ var last = [];
4820
+ this.trigger = function (ev, data) {
4821
+ var i, j;
4822
+ if(!data) {
4823
+ data = {};
4824
+ }
4825
+ if(ev.replace('.jstree','') === 'changed') {
4826
+ data.changed = { selected : [], deselected : [] };
4827
+ var tmp = {};
4828
+ for(i = 0, j = last.length; i < j; i++) {
4829
+ tmp[last[i]] = 1;
4830
+ }
4831
+ for(i = 0, j = data.selected.length; i < j; i++) {
4832
+ if(!tmp[data.selected[i]]) {
4833
+ data.changed.selected.push(data.selected[i]);
4834
+ }
4835
+ else {
4836
+ tmp[data.selected[i]] = 2;
4837
+ }
4838
+ }
4839
+ for(i = 0, j = last.length; i < j; i++) {
4840
+ if(tmp[last[i]] === 1) {
4841
+ data.changed.deselected.push(last[i]);
4842
+ }
4843
+ }
4844
+ last = data.selected.slice();
4845
+ }
4846
+ /**
4847
+ * triggered when selection changes (the "changed" plugin enhances the original event with more data)
4848
+ * @event
4849
+ * @name changed.jstree
4850
+ * @param {Object} node
4851
+ * @param {Object} action the action that caused the selection to change
4852
+ * @param {Array} selected the current selection
4853
+ * @param {Object} changed an object containing two properties `selected` and `deselected` - both arrays of node IDs, which were selected or deselected since the last changed event
4854
+ * @param {Object} event the event (if any) that triggered this changed event
4855
+ * @plugin changed
4856
+ */
4857
+ parent.trigger.call(this, ev, data);
4858
+ };
4859
+ this.refresh = function (skip_loading, forget_state) {
4860
+ last = [];
4861
+ return parent.refresh.apply(this, arguments);
4862
+ };
4863
+ };
4864
+
4865
+ /**
4866
+ * ### Checkbox plugin
4867
+ *
4868
+ * This plugin renders checkbox icons in front of each node, making multiple selection much easier.
4869
+ * It also supports tri-state behavior, meaning that if a node has a few of its children checked it will be rendered as undetermined, and state will be propagated up.
4870
+ */
4871
+
4872
+ var _i = document.createElement('I');
4873
+ _i.className = 'jstree-icon jstree-checkbox';
4874
+ _i.setAttribute('role', 'presentation');
4875
+ /**
4876
+ * stores all defaults for the checkbox plugin
4877
+ * @name $.jstree.defaults.checkbox
4878
+ * @plugin checkbox
4879
+ */
4880
+ $.jstree.defaults.checkbox = {
4881
+ /**
4882
+ * a boolean indicating if checkboxes should be visible (can be changed at a later time using `show_checkboxes()` and `hide_checkboxes`). Defaults to `true`.
4883
+ * @name $.jstree.defaults.checkbox.visible
4884
+ * @plugin checkbox
4885
+ */
4886
+ visible : true,
4887
+ /**
4888
+ * a boolean indicating if checkboxes should cascade down and have an undetermined state. Defaults to `true`.
4889
+ * @name $.jstree.defaults.checkbox.three_state
4890
+ * @plugin checkbox
4891
+ */
4892
+ three_state : true,
4893
+ /**
4894
+ * a boolean indicating if clicking anywhere on the node should act as clicking on the checkbox. Defaults to `true`.
4895
+ * @name $.jstree.defaults.checkbox.whole_node
4896
+ * @plugin checkbox
4897
+ */
4898
+ whole_node : true,
4899
+ /**
4900
+ * a boolean indicating if the selected style of a node should be kept, or removed. Defaults to `true`.
4901
+ * @name $.jstree.defaults.checkbox.keep_selected_style
4902
+ * @plugin checkbox
4903
+ */
4904
+ keep_selected_style : true,
4905
+ /**
4906
+ * This setting controls how cascading and undetermined nodes are applied.
4907
+ * If 'up' is in the string - cascading up is enabled, if 'down' is in the string - cascading down is enabled, if 'undetermined' is in the string - undetermined nodes will be used.
4908
+ * If `three_state` is set to `true` this setting is automatically set to 'up+down+undetermined'. Defaults to ''.
4909
+ * @name $.jstree.defaults.checkbox.cascade
4910
+ * @plugin checkbox
4911
+ */
4912
+ cascade : '',
4913
+ /**
4914
+ * This setting controls if checkbox are bound to the general tree selection or to an internal array maintained by the checkbox plugin. Defaults to `true`, only set to `false` if you know exactly what you are doing.
4915
+ * @name $.jstree.defaults.checkbox.tie_selection
4916
+ * @plugin checkbox
4917
+ */
4918
+ tie_selection : true
4919
+ };
4920
+ $.jstree.plugins.checkbox = function (options, parent) {
4921
+ this.bind = function () {
4922
+ parent.bind.call(this);
4923
+ this._data.checkbox.uto = false;
4924
+ this._data.checkbox.selected = [];
4925
+ if(this.settings.checkbox.three_state) {
4926
+ this.settings.checkbox.cascade = 'up+down+undetermined';
4927
+ }
4928
+ this.element
4929
+ .on("init.jstree", $.proxy(function () {
4930
+ this._data.checkbox.visible = this.settings.checkbox.visible;
4931
+ if(!this.settings.checkbox.keep_selected_style) {
4932
+ this.element.addClass('jstree-checkbox-no-clicked');
4933
+ }
4934
+ if(this.settings.checkbox.tie_selection) {
4935
+ this.element.addClass('jstree-checkbox-selection');
4936
+ }
4937
+ }, this))
4938
+ .on("loading.jstree", $.proxy(function () {
4939
+ this[ this._data.checkbox.visible ? 'show_checkboxes' : 'hide_checkboxes' ]();
4940
+ }, this));
4941
+ if(this.settings.checkbox.cascade.indexOf('undetermined') !== -1) {
4942
+ this.element
4943
+ .on('changed.jstree uncheck_node.jstree check_node.jstree uncheck_all.jstree check_all.jstree move_node.jstree copy_node.jstree redraw.jstree open_node.jstree', $.proxy(function () {
4944
+ // only if undetermined is in setting
4945
+ if(this._data.checkbox.uto) { clearTimeout(this._data.checkbox.uto); }
4946
+ this._data.checkbox.uto = setTimeout($.proxy(this._undetermined, this), 50);
4947
+ }, this));
4948
+ }
4949
+ if(!this.settings.checkbox.tie_selection) {
4950
+ this.element
4951
+ .on('model.jstree', $.proxy(function (e, data) {
4952
+ var m = this._model.data,
4953
+ p = m[data.parent],
4954
+ dpc = data.nodes,
4955
+ i, j;
4956
+ for(i = 0, j = dpc.length; i < j; i++) {
4957
+ m[dpc[i]].state.checked = m[dpc[i]].state.checked || (m[dpc[i]].original && m[dpc[i]].original.state && m[dpc[i]].original.state.checked);
4958
+ if(m[dpc[i]].state.checked) {
4959
+ this._data.checkbox.selected.push(dpc[i]);
4960
+ }
4961
+ }
4962
+ }, this));
4963
+ }
4964
+ if(this.settings.checkbox.cascade.indexOf('up') !== -1 || this.settings.checkbox.cascade.indexOf('down') !== -1) {
4965
+ this.element
4966
+ .on('model.jstree', $.proxy(function (e, data) {
4967
+ var m = this._model.data,
4968
+ p = m[data.parent],
4969
+ dpc = data.nodes,
4970
+ chd = [],
4971
+ c, i, j, k, l, tmp, s = this.settings.checkbox.cascade, t = this.settings.checkbox.tie_selection;
4972
+
4973
+ if(s.indexOf('down') !== -1) {
4974
+ // apply down
4975
+ if(p.state[ t ? 'selected' : 'checked' ]) {
4976
+ for(i = 0, j = dpc.length; i < j; i++) {
4977
+ m[dpc[i]].state[ t ? 'selected' : 'checked' ] = true;
4978
+ }
4979
+ this._data[ t ? 'core' : 'checkbox' ].selected = this._data[ t ? 'core' : 'checkbox' ].selected.concat(dpc);
4980
+ }
4981
+ else {
4982
+ for(i = 0, j = dpc.length; i < j; i++) {
4983
+ if(m[dpc[i]].state[ t ? 'selected' : 'checked' ]) {
4984
+ for(k = 0, l = m[dpc[i]].children_d.length; k < l; k++) {
4985
+ m[m[dpc[i]].children_d[k]].state[ t ? 'selected' : 'checked' ] = true;
4986
+ }
4987
+ this._data[ t ? 'core' : 'checkbox' ].selected = this._data[ t ? 'core' : 'checkbox' ].selected.concat(m[dpc[i]].children_d);
4988
+ }
4989
+ }
4990
+ }
4991
+ }
4992
+
4993
+ if(s.indexOf('up') !== -1) {
4994
+ // apply up
4995
+ for(i = 0, j = p.children_d.length; i < j; i++) {
4996
+ if(!m[p.children_d[i]].children.length) {
4997
+ chd.push(m[p.children_d[i]].parent);
4998
+ }
4999
+ }
5000
+ chd = $.vakata.array_unique(chd);
5001
+ for(k = 0, l = chd.length; k < l; k++) {
5002
+ p = m[chd[k]];
5003
+ while(p && p.id !== $.jstree.root) {
5004
+ c = 0;
5005
+ for(i = 0, j = p.children.length; i < j; i++) {
5006
+ c += m[p.children[i]].state[ t ? 'selected' : 'checked' ];
5007
+ }
5008
+ if(c === j) {
5009
+ p.state[ t ? 'selected' : 'checked' ] = true;
5010
+ this._data[ t ? 'core' : 'checkbox' ].selected.push(p.id);
5011
+ tmp = this.get_node(p, true);
5012
+ if(tmp && tmp.length) {
5013
+ tmp.attr('aria-selected', true).children('.jstree-anchor').addClass( t ? 'jstree-clicked' : 'jstree-checked');
5014
+ }
5015
+ }
5016
+ else {
5017
+ break;
5018
+ }
5019
+ p = this.get_node(p.parent);
5020
+ }
5021
+ }
5022
+ }
5023
+
5024
+ this._data[ t ? 'core' : 'checkbox' ].selected = $.vakata.array_unique(this._data[ t ? 'core' : 'checkbox' ].selected);
5025
+ }, this))
5026
+ .on(this.settings.checkbox.tie_selection ? 'select_node.jstree' : 'check_node.jstree', $.proxy(function (e, data) {
5027
+ var obj = data.node,
5028
+ m = this._model.data,
5029
+ par = this.get_node(obj.parent),
5030
+ dom = this.get_node(obj, true),
5031
+ i, j, c, tmp, s = this.settings.checkbox.cascade, t = this.settings.checkbox.tie_selection,
5032
+ sel = {}, cur = this._data[ t ? 'core' : 'checkbox' ].selected;
5033
+
5034
+ for (i = 0, j = cur.length; i < j; i++) {
5035
+ sel[cur[i]] = true;
5036
+ }
5037
+ // apply down
5038
+ if(s.indexOf('down') !== -1) {
5039
+ //this._data[ t ? 'core' : 'checkbox' ].selected = $.vakata.array_unique(this._data[ t ? 'core' : 'checkbox' ].selected.concat(obj.children_d));
5040
+ for(i = 0, j = obj.children_d.length; i < j; i++) {
5041
+ sel[obj.children_d[i]] = true;
5042
+ tmp = m[obj.children_d[i]];
5043
+ tmp.state[ t ? 'selected' : 'checked' ] = true;
5044
+ if(tmp && tmp.original && tmp.original.state && tmp.original.state.undetermined) {
5045
+ tmp.original.state.undetermined = false;
5046
+ }
5047
+ }
5048
+ }
5049
+
5050
+ // apply up
5051
+ if(s.indexOf('up') !== -1) {
5052
+ while(par && par.id !== $.jstree.root) {
5053
+ c = 0;
5054
+ for(i = 0, j = par.children.length; i < j; i++) {
5055
+ c += m[par.children[i]].state[ t ? 'selected' : 'checked' ];
5056
+ }
5057
+ if(c === j) {
5058
+ par.state[ t ? 'selected' : 'checked' ] = true;
5059
+ sel[par.id] = true;
5060
+ //this._data[ t ? 'core' : 'checkbox' ].selected.push(par.id);
5061
+ tmp = this.get_node(par, true);
5062
+ if(tmp && tmp.length) {
5063
+ tmp.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked');
5064
+ }
5065
+ }
5066
+ else {
5067
+ break;
5068
+ }
5069
+ par = this.get_node(par.parent);
5070
+ }
5071
+ }
5072
+
5073
+ cur = [];
5074
+ for (i in sel) {
5075
+ if (sel.hasOwnProperty(i)) {
5076
+ cur.push(i);
5077
+ }
5078
+ }
5079
+ this._data[ t ? 'core' : 'checkbox' ].selected = cur;
5080
+
5081
+ // apply down (process .children separately?)
5082
+ if(s.indexOf('down') !== -1 && dom.length) {
5083
+ dom.find('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked').parent().attr('aria-selected', true);
5084
+ }
5085
+ }, this))
5086
+ .on(this.settings.checkbox.tie_selection ? 'deselect_all.jstree' : 'uncheck_all.jstree', $.proxy(function (e, data) {
5087
+ var obj = this.get_node($.jstree.root),
5088
+ m = this._model.data,
5089
+ i, j, tmp;
5090
+ for(i = 0, j = obj.children_d.length; i < j; i++) {
5091
+ tmp = m[obj.children_d[i]];
5092
+ if(tmp && tmp.original && tmp.original.state && tmp.original.state.undetermined) {
5093
+ tmp.original.state.undetermined = false;
5094
+ }
5095
+ }
5096
+ }, this))
5097
+ .on(this.settings.checkbox.tie_selection ? 'deselect_node.jstree' : 'uncheck_node.jstree', $.proxy(function (e, data) {
5098
+ var obj = data.node,
5099
+ dom = this.get_node(obj, true),
5100
+ i, j, tmp, s = this.settings.checkbox.cascade, t = this.settings.checkbox.tie_selection,
5101
+ cur = this._data[ t ? 'core' : 'checkbox' ].selected, sel = {};
5102
+ if(obj && obj.original && obj.original.state && obj.original.state.undetermined) {
5103
+ obj.original.state.undetermined = false;
5104
+ }
5105
+
5106
+ // apply down
5107
+ if(s.indexOf('down') !== -1) {
5108
+ for(i = 0, j = obj.children_d.length; i < j; i++) {
5109
+ tmp = this._model.data[obj.children_d[i]];
5110
+ tmp.state[ t ? 'selected' : 'checked' ] = false;
5111
+ if(tmp && tmp.original && tmp.original.state && tmp.original.state.undetermined) {
5112
+ tmp.original.state.undetermined = false;
5113
+ }
5114
+ }
5115
+ }
5116
+
5117
+ // apply up
5118
+ if(s.indexOf('up') !== -1) {
5119
+ for(i = 0, j = obj.parents.length; i < j; i++) {
5120
+ tmp = this._model.data[obj.parents[i]];
5121
+ tmp.state[ t ? 'selected' : 'checked' ] = false;
5122
+ if(tmp && tmp.original && tmp.original.state && tmp.original.state.undetermined) {
5123
+ tmp.original.state.undetermined = false;
5124
+ }
5125
+ tmp = this.get_node(obj.parents[i], true);
5126
+ if(tmp && tmp.length) {
5127
+ tmp.attr('aria-selected', false).children('.jstree-anchor').removeClass(t ? 'jstree-clicked' : 'jstree-checked');
5128
+ }
5129
+ }
5130
+ }
5131
+ sel = {};
5132
+ for(i = 0, j = cur.length; i < j; i++) {
5133
+ // apply down + apply up
5134
+ if(
5135
+ (s.indexOf('down') === -1 || $.inArray(cur[i], obj.children_d) === -1) &&
5136
+ (s.indexOf('up') === -1 || $.inArray(cur[i], obj.parents) === -1)
5137
+ ) {
5138
+ sel[cur[i]] = true;
5139
+ }
5140
+ }
5141
+ cur = [];
5142
+ for (i in sel) {
5143
+ if (sel.hasOwnProperty(i)) {
5144
+ cur.push(i);
5145
+ }
5146
+ }
5147
+ this._data[ t ? 'core' : 'checkbox' ].selected = cur;
5148
+
5149
+ // apply down (process .children separately?)
5150
+ if(s.indexOf('down') !== -1 && dom.length) {
5151
+ dom.find('.jstree-anchor').removeClass(t ? 'jstree-clicked' : 'jstree-checked').parent().attr('aria-selected', false);
5152
+ }
5153
+ }, this));
5154
+ }
5155
+ if(this.settings.checkbox.cascade.indexOf('up') !== -1) {
5156
+ this.element
5157
+ .on('delete_node.jstree', $.proxy(function (e, data) {
5158
+ // apply up (whole handler)
5159
+ var p = this.get_node(data.parent),
5160
+ m = this._model.data,
5161
+ i, j, c, tmp, t = this.settings.checkbox.tie_selection;
5162
+ while(p && p.id !== $.jstree.root && !p.state[ t ? 'selected' : 'checked' ]) {
5163
+ c = 0;
5164
+ for(i = 0, j = p.children.length; i < j; i++) {
5165
+ c += m[p.children[i]].state[ t ? 'selected' : 'checked' ];
5166
+ }
5167
+ if(j > 0 && c === j) {
5168
+ p.state[ t ? 'selected' : 'checked' ] = true;
5169
+ this._data[ t ? 'core' : 'checkbox' ].selected.push(p.id);
5170
+ tmp = this.get_node(p, true);
5171
+ if(tmp && tmp.length) {
5172
+ tmp.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked');
5173
+ }
5174
+ }
5175
+ else {
5176
+ break;
5177
+ }
5178
+ p = this.get_node(p.parent);
5179
+ }
5180
+ }, this))
5181
+ .on('move_node.jstree', $.proxy(function (e, data) {
5182
+ // apply up (whole handler)
5183
+ var is_multi = data.is_multi,
5184
+ old_par = data.old_parent,
5185
+ new_par = this.get_node(data.parent),
5186
+ m = this._model.data,
5187
+ p, c, i, j, tmp, t = this.settings.checkbox.tie_selection;
5188
+ if(!is_multi) {
5189
+ p = this.get_node(old_par);
5190
+ while(p && p.id !== $.jstree.root && !p.state[ t ? 'selected' : 'checked' ]) {
5191
+ c = 0;
5192
+ for(i = 0, j = p.children.length; i < j; i++) {
5193
+ c += m[p.children[i]].state[ t ? 'selected' : 'checked' ];
5194
+ }
5195
+ if(j > 0 && c === j) {
5196
+ p.state[ t ? 'selected' : 'checked' ] = true;
5197
+ this._data[ t ? 'core' : 'checkbox' ].selected.push(p.id);
5198
+ tmp = this.get_node(p, true);
5199
+ if(tmp && tmp.length) {
5200
+ tmp.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked');
5201
+ }
5202
+ }
5203
+ else {
5204
+ break;
5205
+ }
5206
+ p = this.get_node(p.parent);
5207
+ }
5208
+ }
5209
+ p = new_par;
5210
+ while(p && p.id !== $.jstree.root) {
5211
+ c = 0;
5212
+ for(i = 0, j = p.children.length; i < j; i++) {
5213
+ c += m[p.children[i]].state[ t ? 'selected' : 'checked' ];
5214
+ }
5215
+ if(c === j) {
5216
+ if(!p.state[ t ? 'selected' : 'checked' ]) {
5217
+ p.state[ t ? 'selected' : 'checked' ] = true;
5218
+ this._data[ t ? 'core' : 'checkbox' ].selected.push(p.id);
5219
+ tmp = this.get_node(p, true);
5220
+ if(tmp && tmp.length) {
5221
+ tmp.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked');
5222
+ }
5223
+ }
5224
+ }
5225
+ else {
5226
+ if(p.state[ t ? 'selected' : 'checked' ]) {
5227
+ p.state[ t ? 'selected' : 'checked' ] = false;
5228
+ this._data[ t ? 'core' : 'checkbox' ].selected = $.vakata.array_remove_item(this._data[ t ? 'core' : 'checkbox' ].selected, p.id);
5229
+ tmp = this.get_node(p, true);
5230
+ if(tmp && tmp.length) {
5231
+ tmp.attr('aria-selected', false).children('.jstree-anchor').removeClass(t ? 'jstree-clicked' : 'jstree-checked');
5232
+ }
5233
+ }
5234
+ else {
5235
+ break;
5236
+ }
5237
+ }
5238
+ p = this.get_node(p.parent);
5239
+ }
5240
+ }, this));
5241
+ }
5242
+ };
5243
+ /**
5244
+ * set the undetermined state where and if necessary. Used internally.
5245
+ * @private
5246
+ * @name _undetermined()
5247
+ * @plugin checkbox
5248
+ */
5249
+ this._undetermined = function () {
5250
+ if(this.element === null) { return; }
5251
+ var i, j, k, l, o = {}, m = this._model.data, t = this.settings.checkbox.tie_selection, s = this._data[ t ? 'core' : 'checkbox' ].selected, p = [], tt = this;
5252
+ for(i = 0, j = s.length; i < j; i++) {
5253
+ if(m[s[i]] && m[s[i]].parents) {
5254
+ for(k = 0, l = m[s[i]].parents.length; k < l; k++) {
5255
+ if(o[m[s[i]].parents[k]] !== undefined) {
5256
+ break;
5257
+ }
5258
+ if(m[s[i]].parents[k] !== $.jstree.root) {
5259
+ o[m[s[i]].parents[k]] = true;
5260
+ p.push(m[s[i]].parents[k]);
5261
+ }
5262
+ }
5263
+ }
5264
+ }
5265
+ // attempt for server side undetermined state
5266
+ this.element.find('.jstree-closed').not(':has(.jstree-children)')
5267
+ .each(function () {
5268
+ var tmp = tt.get_node(this), tmp2;
5269
+ if(!tmp.state.loaded) {
5270
+ if(tmp.original && tmp.original.state && tmp.original.state.undetermined && tmp.original.state.undetermined === true) {
5271
+ if(o[tmp.id] === undefined && tmp.id !== $.jstree.root) {
5272
+ o[tmp.id] = true;
5273
+ p.push(tmp.id);
5274
+ }
5275
+ for(k = 0, l = tmp.parents.length; k < l; k++) {
5276
+ if(o[tmp.parents[k]] === undefined && tmp.parents[k] !== $.jstree.root) {
5277
+ o[tmp.parents[k]] = true;
5278
+ p.push(tmp.parents[k]);
5279
+ }
5280
+ }
5281
+ }
5282
+ }
5283
+ else {
5284
+ for(i = 0, j = tmp.children_d.length; i < j; i++) {
5285
+ tmp2 = m[tmp.children_d[i]];
5286
+ if(!tmp2.state.loaded && tmp2.original && tmp2.original.state && tmp2.original.state.undetermined && tmp2.original.state.undetermined === true) {
5287
+ if(o[tmp2.id] === undefined && tmp2.id !== $.jstree.root) {
5288
+ o[tmp2.id] = true;
5289
+ p.push(tmp2.id);
5290
+ }
5291
+ for(k = 0, l = tmp2.parents.length; k < l; k++) {
5292
+ if(o[tmp2.parents[k]] === undefined && tmp2.parents[k] !== $.jstree.root) {
5293
+ o[tmp2.parents[k]] = true;
5294
+ p.push(tmp2.parents[k]);
5295
+ }
5296
+ }
5297
+ }
5298
+ }
5299
+ }
5300
+ });
5301
+
5302
+ this.element.find('.jstree-undetermined').removeClass('jstree-undetermined');
5303
+ for(i = 0, j = p.length; i < j; i++) {
5304
+ if(!m[p[i]].state[ t ? 'selected' : 'checked' ]) {
5305
+ s = this.get_node(p[i], true);
5306
+ if(s && s.length) {
5307
+ s.children('.jstree-anchor').children('.jstree-checkbox').addClass('jstree-undetermined');
5308
+ }
5309
+ }
5310
+ }
5311
+ };
5312
+ this.redraw_node = function(obj, deep, is_callback, force_render) {
5313
+ obj = parent.redraw_node.apply(this, arguments);
5314
+ if(obj) {
5315
+ var i, j, tmp = null, icon = null;
5316
+ for(i = 0, j = obj.childNodes.length; i < j; i++) {
5317
+ if(obj.childNodes[i] && obj.childNodes[i].className && obj.childNodes[i].className.indexOf("jstree-anchor") !== -1) {
5318
+ tmp = obj.childNodes[i];
5319
+ break;
5320
+ }
5321
+ }
5322
+ if(tmp) {
5323
+ if(!this.settings.checkbox.tie_selection && this._model.data[obj.id].state.checked) { tmp.className += ' jstree-checked'; }
5324
+ icon = _i.cloneNode(false);
5325
+ if(this._model.data[obj.id].state.checkbox_disabled) { icon.className += ' jstree-checkbox-disabled'; }
5326
+ tmp.insertBefore(icon, tmp.childNodes[0]);
5327
+ }
5328
+ }
5329
+ if(!is_callback && this.settings.checkbox.cascade.indexOf('undetermined') !== -1) {
5330
+ if(this._data.checkbox.uto) { clearTimeout(this._data.checkbox.uto); }
5331
+ this._data.checkbox.uto = setTimeout($.proxy(this._undetermined, this), 50);
5332
+ }
5333
+ return obj;
5334
+ };
5335
+ /**
5336
+ * show the node checkbox icons
5337
+ * @name show_checkboxes()
5338
+ * @plugin checkbox
5339
+ */
5340
+ this.show_checkboxes = function () { this._data.core.themes.checkboxes = true; this.get_container_ul().removeClass("jstree-no-checkboxes"); };
5341
+ /**
5342
+ * hide the node checkbox icons
5343
+ * @name hide_checkboxes()
5344
+ * @plugin checkbox
5345
+ */
5346
+ this.hide_checkboxes = function () { this._data.core.themes.checkboxes = false; this.get_container_ul().addClass("jstree-no-checkboxes"); };
5347
+ /**
5348
+ * toggle the node icons
5349
+ * @name toggle_checkboxes()
5350
+ * @plugin checkbox
5351
+ */
5352
+ this.toggle_checkboxes = function () { if(this._data.core.themes.checkboxes) { this.hide_checkboxes(); } else { this.show_checkboxes(); } };
5353
+ /**
5354
+ * checks if a node is in an undetermined state
5355
+ * @name is_undetermined(obj)
5356
+ * @param {mixed} obj
5357
+ * @return {Boolean}
5358
+ */
5359
+ this.is_undetermined = function (obj) {
5360
+ obj = this.get_node(obj);
5361
+ var s = this.settings.checkbox.cascade, i, j, t = this.settings.checkbox.tie_selection, d = this._data[ t ? 'core' : 'checkbox' ].selected, m = this._model.data;
5362
+ if(!obj || obj.state[ t ? 'selected' : 'checked' ] === true || s.indexOf('undetermined') === -1 || (s.indexOf('down') === -1 && s.indexOf('up') === -1)) {
5363
+ return false;
5364
+ }
5365
+ if(!obj.state.loaded && obj.original.state.undetermined === true) {
5366
+ return true;
5367
+ }
5368
+ for(i = 0, j = obj.children_d.length; i < j; i++) {
5369
+ if($.inArray(obj.children_d[i], d) !== -1 || (!m[obj.children_d[i]].state.loaded && m[obj.children_d[i]].original.state.undetermined)) {
5370
+ return true;
5371
+ }
5372
+ }
5373
+ return false;
5374
+ };
5375
+ /**
5376
+ * disable a node's checkbox
5377
+ * @name disable_checkbox(obj)
5378
+ * @param {mixed} obj an array can be used too
5379
+ * @trigger disable_checkbox.jstree
5380
+ * @plugin checkbox
5381
+ */
5382
+ this.disable_checkbox = function (obj) {
5383
+ var t1, t2, dom;
5384
+ if($.isArray(obj)) {
5385
+ obj = obj.slice();
5386
+ for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
5387
+ this.disable_checkbox(obj[t1]);
5388
+ }
5389
+ return true;
5390
+ }
5391
+ obj = this.get_node(obj);
5392
+ if(!obj || obj.id === $.jstree.root) {
5393
+ return false;
5394
+ }
5395
+ dom = this.get_node(obj, true);
5396
+ if(!obj.state.checkbox_disabled) {
5397
+ obj.state.checkbox_disabled = true;
5398
+ if(dom && dom.length) {
5399
+ dom.children('.jstree-anchor').children('.jstree-checkbox').addClass('jstree-checkbox-disabled');
5400
+ }
5401
+ /**
5402
+ * triggered when an node's checkbox is disabled
5403
+ * @event
5404
+ * @name disable_checkbox.jstree
5405
+ * @param {Object} node
5406
+ * @plugin checkbox
5407
+ */
5408
+ this.trigger('disable_checkbox', { 'node' : obj });
5409
+ }
5410
+ };
5411
+ /**
5412
+ * enable a node's checkbox
5413
+ * @name disable_checkbox(obj)
5414
+ * @param {mixed} obj an array can be used too
5415
+ * @trigger enable_checkbox.jstree
5416
+ * @plugin checkbox
5417
+ */
5418
+ this.enable_checkbox = function (obj) {
5419
+ var t1, t2, dom;
5420
+ if($.isArray(obj)) {
5421
+ obj = obj.slice();
5422
+ for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
5423
+ this.enable_checkbox(obj[t1]);
5424
+ }
5425
+ return true;
5426
+ }
5427
+ obj = this.get_node(obj);
5428
+ if(!obj || obj.id === $.jstree.root) {
5429
+ return false;
5430
+ }
5431
+ dom = this.get_node(obj, true);
5432
+ if(obj.state.checkbox_disabled) {
5433
+ obj.state.checkbox_disabled = false;
5434
+ if(dom && dom.length) {
5435
+ dom.children('.jstree-anchor').children('.jstree-checkbox').removeClass('jstree-checkbox-disabled');
5436
+ }
5437
+ /**
5438
+ * triggered when an node's checkbox is enabled
5439
+ * @event
5440
+ * @name enable_checkbox.jstree
5441
+ * @param {Object} node
5442
+ * @plugin checkbox
5443
+ */
5444
+ this.trigger('enable_checkbox', { 'node' : obj });
5445
+ }
5446
+ };
5447
+
5448
+ this.activate_node = function (obj, e) {
5449
+ if($(e.target).hasClass('jstree-checkbox-disabled')) {
5450
+ return false;
5451
+ }
5452
+ if(this.settings.checkbox.tie_selection && (this.settings.checkbox.whole_node || $(e.target).hasClass('jstree-checkbox'))) {
5453
+ e.ctrlKey = true;
5454
+ }
5455
+ if(this.settings.checkbox.tie_selection || (!this.settings.checkbox.whole_node && !$(e.target).hasClass('jstree-checkbox'))) {
5456
+ return parent.activate_node.call(this, obj, e);
5457
+ }
5458
+ if(this.is_disabled(obj)) {
5459
+ return false;
5460
+ }
5461
+ if(this.is_checked(obj)) {
5462
+ this.uncheck_node(obj, e);
5463
+ }
5464
+ else {
5465
+ this.check_node(obj, e);
5466
+ }
5467
+ this.trigger('activate_node', { 'node' : this.get_node(obj) });
5468
+ };
5469
+
5470
+ /**
5471
+ * check a node (only if tie_selection in checkbox settings is false, otherwise select_node will be called internally)
5472
+ * @name check_node(obj)
5473
+ * @param {mixed} obj an array can be used to check multiple nodes
5474
+ * @trigger check_node.jstree
5475
+ * @plugin checkbox
5476
+ */
5477
+ this.check_node = function (obj, e) {
5478
+ if(this.settings.checkbox.tie_selection) { return this.select_node(obj, false, true, e); }
5479
+ var dom, t1, t2, th;
5480
+ if($.isArray(obj)) {
5481
+ obj = obj.slice();
5482
+ for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
5483
+ this.check_node(obj[t1], e);
5484
+ }
5485
+ return true;
5486
+ }
5487
+ obj = this.get_node(obj);
5488
+ if(!obj || obj.id === $.jstree.root) {
5489
+ return false;
5490
+ }
5491
+ dom = this.get_node(obj, true);
5492
+ if(!obj.state.checked) {
5493
+ obj.state.checked = true;
5494
+ this._data.checkbox.selected.push(obj.id);
5495
+ if(dom && dom.length) {
5496
+ dom.children('.jstree-anchor').addClass('jstree-checked');
5497
+ }
5498
+ /**
5499
+ * triggered when an node is checked (only if tie_selection in checkbox settings is false)
5500
+ * @event
5501
+ * @name check_node.jstree
5502
+ * @param {Object} node
5503
+ * @param {Array} selected the current selection
5504
+ * @param {Object} event the event (if any) that triggered this check_node
5505
+ * @plugin checkbox
5506
+ */
5507
+ this.trigger('check_node', { 'node' : obj, 'selected' : this._data.checkbox.selected, 'event' : e });
5508
+ }
5509
+ };
5510
+ /**
5511
+ * uncheck a node (only if tie_selection in checkbox settings is false, otherwise deselect_node will be called internally)
5512
+ * @name uncheck_node(obj)
5513
+ * @param {mixed} obj an array can be used to uncheck multiple nodes
5514
+ * @trigger uncheck_node.jstree
5515
+ * @plugin checkbox
5516
+ */
5517
+ this.uncheck_node = function (obj, e) {
5518
+ if(this.settings.checkbox.tie_selection) { return this.deselect_node(obj, false, e); }
5519
+ var t1, t2, dom;
5520
+ if($.isArray(obj)) {
5521
+ obj = obj.slice();
5522
+ for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
5523
+ this.uncheck_node(obj[t1], e);
5524
+ }
5525
+ return true;
5526
+ }
5527
+ obj = this.get_node(obj);
5528
+ if(!obj || obj.id === $.jstree.root) {
5529
+ return false;
5530
+ }
5531
+ dom = this.get_node(obj, true);
5532
+ if(obj.state.checked) {
5533
+ obj.state.checked = false;
5534
+ this._data.checkbox.selected = $.vakata.array_remove_item(this._data.checkbox.selected, obj.id);
5535
+ if(dom.length) {
5536
+ dom.children('.jstree-anchor').removeClass('jstree-checked');
5537
+ }
5538
+ /**
5539
+ * triggered when an node is unchecked (only if tie_selection in checkbox settings is false)
5540
+ * @event
5541
+ * @name uncheck_node.jstree
5542
+ * @param {Object} node
5543
+ * @param {Array} selected the current selection
5544
+ * @param {Object} event the event (if any) that triggered this uncheck_node
5545
+ * @plugin checkbox
5546
+ */
5547
+ this.trigger('uncheck_node', { 'node' : obj, 'selected' : this._data.checkbox.selected, 'event' : e });
5548
+ }
5549
+ };
5550
+ /**
5551
+ * checks all nodes in the tree (only if tie_selection in checkbox settings is false, otherwise select_all will be called internally)
5552
+ * @name check_all()
5553
+ * @trigger check_all.jstree, changed.jstree
5554
+ * @plugin checkbox
5555
+ */
5556
+ this.check_all = function () {
5557
+ if(this.settings.checkbox.tie_selection) { return this.select_all(); }
5558
+ var tmp = this._data.checkbox.selected.concat([]), i, j;
5559
+ this._data.checkbox.selected = this._model.data[$.jstree.root].children_d.concat();
5560
+ for(i = 0, j = this._data.checkbox.selected.length; i < j; i++) {
5561
+ if(this._model.data[this._data.checkbox.selected[i]]) {
5562
+ this._model.data[this._data.checkbox.selected[i]].state.checked = true;
5563
+ }
5564
+ }
5565
+ this.redraw(true);
5566
+ /**
5567
+ * triggered when all nodes are checked (only if tie_selection in checkbox settings is false)
5568
+ * @event
5569
+ * @name check_all.jstree
5570
+ * @param {Array} selected the current selection
5571
+ * @plugin checkbox
5572
+ */
5573
+ this.trigger('check_all', { 'selected' : this._data.checkbox.selected });
5574
+ };
5575
+ /**
5576
+ * uncheck all checked nodes (only if tie_selection in checkbox settings is false, otherwise deselect_all will be called internally)
5577
+ * @name uncheck_all()
5578
+ * @trigger uncheck_all.jstree
5579
+ * @plugin checkbox
5580
+ */
5581
+ this.uncheck_all = function () {
5582
+ if(this.settings.checkbox.tie_selection) { return this.deselect_all(); }
5583
+ var tmp = this._data.checkbox.selected.concat([]), i, j;
5584
+ for(i = 0, j = this._data.checkbox.selected.length; i < j; i++) {
5585
+ if(this._model.data[this._data.checkbox.selected[i]]) {
5586
+ this._model.data[this._data.checkbox.selected[i]].state.checked = false;
5587
+ }
5588
+ }
5589
+ this._data.checkbox.selected = [];
5590
+ this.element.find('.jstree-checked').removeClass('jstree-checked');
5591
+ /**
5592
+ * triggered when all nodes are unchecked (only if tie_selection in checkbox settings is false)
5593
+ * @event
5594
+ * @name uncheck_all.jstree
5595
+ * @param {Object} node the previous selection
5596
+ * @param {Array} selected the current selection
5597
+ * @plugin checkbox
5598
+ */
5599
+ this.trigger('uncheck_all', { 'selected' : this._data.checkbox.selected, 'node' : tmp });
5600
+ };
5601
+ /**
5602
+ * checks if a node is checked (if tie_selection is on in the settings this function will return the same as is_selected)
5603
+ * @name is_checked(obj)
5604
+ * @param {mixed} obj
5605
+ * @return {Boolean}
5606
+ * @plugin checkbox
5607
+ */
5608
+ this.is_checked = function (obj) {
5609
+ if(this.settings.checkbox.tie_selection) { return this.is_selected(obj); }
5610
+ obj = this.get_node(obj);
5611
+ if(!obj || obj.id === $.jstree.root) { return false; }
5612
+ return obj.state.checked;
5613
+ };
5614
+ /**
5615
+ * get an array of all checked nodes (if tie_selection is on in the settings this function will return the same as get_selected)
5616
+ * @name get_checked([full])
5617
+ * @param {mixed} full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned
5618
+ * @return {Array}
5619
+ * @plugin checkbox
5620
+ */
5621
+ this.get_checked = function (full) {
5622
+ if(this.settings.checkbox.tie_selection) { return this.get_selected(full); }
5623
+ return full ? $.map(this._data.checkbox.selected, $.proxy(function (i) { return this.get_node(i); }, this)) : this._data.checkbox.selected;
5624
+ };
5625
+ /**
5626
+ * get an array of all top level checked nodes (ignoring children of checked nodes) (if tie_selection is on in the settings this function will return the same as get_top_selected)
5627
+ * @name get_top_checked([full])
5628
+ * @param {mixed} full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned
5629
+ * @return {Array}
5630
+ * @plugin checkbox
5631
+ */
5632
+ this.get_top_checked = function (full) {
5633
+ if(this.settings.checkbox.tie_selection) { return this.get_top_selected(full); }
5634
+ var tmp = this.get_checked(true),
5635
+ obj = {}, i, j, k, l;
5636
+ for(i = 0, j = tmp.length; i < j; i++) {
5637
+ obj[tmp[i].id] = tmp[i];
5638
+ }
5639
+ for(i = 0, j = tmp.length; i < j; i++) {
5640
+ for(k = 0, l = tmp[i].children_d.length; k < l; k++) {
5641
+ if(obj[tmp[i].children_d[k]]) {
5642
+ delete obj[tmp[i].children_d[k]];
5643
+ }
5644
+ }
5645
+ }
5646
+ tmp = [];
5647
+ for(i in obj) {
5648
+ if(obj.hasOwnProperty(i)) {
5649
+ tmp.push(i);
5650
+ }
5651
+ }
5652
+ return full ? $.map(tmp, $.proxy(function (i) { return this.get_node(i); }, this)) : tmp;
5653
+ };
5654
+ /**
5655
+ * get an array of all bottom level checked nodes (ignoring selected parents) (if tie_selection is on in the settings this function will return the same as get_bottom_selected)
5656
+ * @name get_bottom_checked([full])
5657
+ * @param {mixed} full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned
5658
+ * @return {Array}
5659
+ * @plugin checkbox
5660
+ */
5661
+ this.get_bottom_checked = function (full) {
5662
+ if(this.settings.checkbox.tie_selection) { return this.get_bottom_selected(full); }
5663
+ var tmp = this.get_checked(true),
5664
+ obj = [], i, j;
5665
+ for(i = 0, j = tmp.length; i < j; i++) {
5666
+ if(!tmp[i].children.length) {
5667
+ obj.push(tmp[i].id);
5668
+ }
5669
+ }
5670
+ return full ? $.map(obj, $.proxy(function (i) { return this.get_node(i); }, this)) : obj;
5671
+ };
5672
+ this.load_node = function (obj, callback) {
5673
+ var k, l, i, j, c, tmp;
5674
+ if(!$.isArray(obj) && !this.settings.checkbox.tie_selection) {
5675
+ tmp = this.get_node(obj);
5676
+ if(tmp && tmp.state.loaded) {
5677
+ for(k = 0, l = tmp.children_d.length; k < l; k++) {
5678
+ if(this._model.data[tmp.children_d[k]].state.checked) {
5679
+ c = true;
5680
+ this._data.checkbox.selected = $.vakata.array_remove_item(this._data.checkbox.selected, tmp.children_d[k]);
5681
+ }
5682
+ }
5683
+ }
5684
+ }
5685
+ return parent.load_node.apply(this, arguments);
5686
+ };
5687
+ this.get_state = function () {
5688
+ var state = parent.get_state.apply(this, arguments);
5689
+ if(this.settings.checkbox.tie_selection) { return state; }
5690
+ state.checkbox = this._data.checkbox.selected.slice();
5691
+ return state;
5692
+ };
5693
+ this.set_state = function (state, callback) {
5694
+ var res = parent.set_state.apply(this, arguments);
5695
+ if(res && state.checkbox) {
5696
+ if(!this.settings.checkbox.tie_selection) {
5697
+ this.uncheck_all();
5698
+ var _this = this;
5699
+ $.each(state.checkbox, function (i, v) {
5700
+ _this.check_node(v);
5701
+ });
5702
+ }
5703
+ delete state.checkbox;
5704
+ this.set_state(state, callback);
5705
+ return false;
5706
+ }
5707
+ return res;
5708
+ };
5709
+ this.refresh = function (skip_loading, forget_state) {
5710
+ if(!this.settings.checkbox.tie_selection) {
5711
+ this._data.checkbox.selected = [];
5712
+ }
5713
+ return parent.refresh.apply(this, arguments);
5714
+ };
5715
+ };
5716
+
5717
+ // include the checkbox plugin by default
5718
+ // $.jstree.defaults.plugins.push("checkbox");
5719
+
5720
+ /**
5721
+ * ### Conditionalselect plugin
5722
+ *
5723
+ * This plugin allows defining a callback to allow or deny node selection by user input (activate node method).
5724
+ */
5725
+
5726
+ /**
5727
+ * a callback (function) which is invoked in the instance's scope and receives two arguments - the node and the event that triggered the `activate_node` call. Returning false prevents working with the node, returning true allows invoking activate_node. Defaults to returning `true`.
5728
+ * @name $.jstree.defaults.checkbox.visible
5729
+ * @plugin checkbox
5730
+ */
5731
+ $.jstree.defaults.conditionalselect = function () { return true; };
5732
+ $.jstree.plugins.conditionalselect = function (options, parent) {
5733
+ // own function
5734
+ this.activate_node = function (obj, e) {
5735
+ if(this.settings.conditionalselect.call(this, this.get_node(obj), e)) {
5736
+ parent.activate_node.call(this, obj, e);
5737
+ }
5738
+ };
5739
+ };
5740
+
5741
+
5742
+ /**
5743
+ * ### Contextmenu plugin
5744
+ *
5745
+ * Shows a context menu when a node is right-clicked.
5746
+ */
5747
+
5748
+ /**
5749
+ * stores all defaults for the contextmenu plugin
5750
+ * @name $.jstree.defaults.contextmenu
5751
+ * @plugin contextmenu
5752
+ */
5753
+ $.jstree.defaults.contextmenu = {
5754
+ /**
5755
+ * a boolean indicating if the node should be selected when the context menu is invoked on it. Defaults to `true`.
5756
+ * @name $.jstree.defaults.contextmenu.select_node
5757
+ * @plugin contextmenu
5758
+ */
5759
+ select_node : true,
5760
+ /**
5761
+ * a boolean indicating if the menu should be shown aligned with the node. Defaults to `true`, otherwise the mouse coordinates are used.
5762
+ * @name $.jstree.defaults.contextmenu.show_at_node
5763
+ * @plugin contextmenu
5764
+ */
5765
+ show_at_node : true,
5766
+ /**
5767
+ * an object of actions, or a function that accepts a node and a callback function and calls the callback function with an object of actions available for that node (you can also return the items too).
5768
+ *
5769
+ * Each action consists of a key (a unique name) and a value which is an object with the following properties (only label and action are required). Once a menu item is activated the `action` function will be invoked with an object containing the following keys: item - the contextmenu item definition as seen below, reference - the DOM node that was used (the tree node), element - the contextmenu DOM element, position - an object with x/y properties indicating the position of the menu.
5770
+ *
5771
+ * * `separator_before` - a boolean indicating if there should be a separator before this item
5772
+ * * `separator_after` - a boolean indicating if there should be a separator after this item
5773
+ * * `_disabled` - a boolean indicating if this action should be disabled
5774
+ * * `label` - a string - the name of the action (could be a function returning a string)
5775
+ * * `title` - a string - an optional tooltip for the item
5776
+ * * `action` - a function to be executed if this item is chosen, the function will receive
5777
+ * * `icon` - a string, can be a path to an icon or a className, if using an image that is in the current directory use a `./` prefix, otherwise it will be detected as a class
5778
+ * * `shortcut` - keyCode which will trigger the action if the menu is open (for example `113` for rename, which equals F2)
5779
+ * * `shortcut_label` - shortcut label (like for example `F2` for rename)
5780
+ * * `submenu` - an object with the same structure as $.jstree.defaults.contextmenu.items which can be used to create a submenu - each key will be rendered as a separate option in a submenu that will appear once the current item is hovered
5781
+ *
5782
+ * @name $.jstree.defaults.contextmenu.items
5783
+ * @plugin contextmenu
5784
+ */
5785
+ items : function (o, cb) { // Could be an object directly
5786
+ return {
5787
+ "create" : {
5788
+ "separator_before" : false,
5789
+ "separator_after" : true,
5790
+ "_disabled" : false, //(this.check("create_node", data.reference, {}, "last")),
5791
+ "label" : "Create",
5792
+ "action" : function (data) {
5793
+ var inst = $.jstree.reference(data.reference),
5794
+ obj = inst.get_node(data.reference);
5795
+ inst.create_node(obj, {}, "last", function (new_node) {
5796
+ setTimeout(function () { inst.edit(new_node); },0);
5797
+ });
5798
+ }
5799
+ },
5800
+ "rename" : {
5801
+ "separator_before" : false,
5802
+ "separator_after" : false,
5803
+ "_disabled" : false, //(this.check("rename_node", data.reference, this.get_parent(data.reference), "")),
5804
+ "label" : "Rename",
5805
+ /*!
5806
+ "shortcut" : 113,
5807
+ "shortcut_label" : 'F2',
5808
+ "icon" : "glyphicon glyphicon-leaf",
5809
+ */
5810
+ "action" : function (data) {
5811
+ var inst = $.jstree.reference(data.reference),
5812
+ obj = inst.get_node(data.reference);
5813
+ inst.edit(obj);
5814
+ }
5815
+ },
5816
+ "remove" : {
5817
+ "separator_before" : false,
5818
+ "icon" : false,
5819
+ "separator_after" : false,
5820
+ "_disabled" : false, //(this.check("delete_node", data.reference, this.get_parent(data.reference), "")),
5821
+ "label" : "Delete",
5822
+ "action" : function (data) {
5823
+ var inst = $.jstree.reference(data.reference),
5824
+ obj = inst.get_node(data.reference);
5825
+ if(inst.is_selected(obj)) {
5826
+ inst.delete_node(inst.get_selected());
5827
+ }
5828
+ else {
5829
+ inst.delete_node(obj);
5830
+ }
5831
+ }
5832
+ },
5833
+ "ccp" : {
5834
+ "separator_before" : true,
5835
+ "icon" : false,
5836
+ "separator_after" : false,
5837
+ "label" : "Edit",
5838
+ "action" : false,
5839
+ "submenu" : {
5840
+ "cut" : {
5841
+ "separator_before" : false,
5842
+ "separator_after" : false,
5843
+ "label" : "Cut",
5844
+ "action" : function (data) {
5845
+ var inst = $.jstree.reference(data.reference),
5846
+ obj = inst.get_node(data.reference);
5847
+ if(inst.is_selected(obj)) {
5848
+ inst.cut(inst.get_top_selected());
5849
+ }
5850
+ else {
5851
+ inst.cut(obj);
5852
+ }
5853
+ }
5854
+ },
5855
+ "copy" : {
5856
+ "separator_before" : false,
5857
+ "icon" : false,
5858
+ "separator_after" : false,
5859
+ "label" : "Copy",
5860
+ "action" : function (data) {
5861
+ var inst = $.jstree.reference(data.reference),
5862
+ obj = inst.get_node(data.reference);
5863
+ if(inst.is_selected(obj)) {
5864
+ inst.copy(inst.get_top_selected());
5865
+ }
5866
+ else {
5867
+ inst.copy(obj);
5868
+ }
5869
+ }
5870
+ },
5871
+ "paste" : {
5872
+ "separator_before" : false,
5873
+ "icon" : false,
5874
+ "_disabled" : function (data) {
5875
+ return !$.jstree.reference(data.reference).can_paste();
5876
+ },
5877
+ "separator_after" : false,
5878
+ "label" : "Paste",
5879
+ "action" : function (data) {
5880
+ var inst = $.jstree.reference(data.reference),
5881
+ obj = inst.get_node(data.reference);
5882
+ inst.paste(obj);
5883
+ }
5884
+ }
5885
+ }
5886
+ }
5887
+ };
5888
+ }
5889
+ };
5890
+
5891
+ $.jstree.plugins.contextmenu = function (options, parent) {
5892
+ this.bind = function () {
5893
+ parent.bind.call(this);
5894
+
5895
+ var last_ts = 0, cto = null, ex, ey;
5896
+ this.element
5897
+ .on("contextmenu.jstree", ".jstree-anchor", $.proxy(function (e, data) {
5898
+ if (e.target.tagName.toLowerCase() === 'input') {
5899
+ return;
5900
+ }
5901
+ e.preventDefault();
5902
+ last_ts = e.ctrlKey ? +new Date() : 0;
5903
+ if(data || cto) {
5904
+ last_ts = (+new Date()) + 10000;
5905
+ }
5906
+ if(cto) {
5907
+ clearTimeout(cto);
5908
+ }
5909
+ if(!this.is_loading(e.currentTarget)) {
5910
+ this.show_contextmenu(e.currentTarget, e.pageX, e.pageY, e);
5911
+ }
5912
+ }, this))
5913
+ .on("click.jstree", ".jstree-anchor", $.proxy(function (e) {
5914
+ if(this._data.contextmenu.visible && (!last_ts || (+new Date()) - last_ts > 250)) { // work around safari & macOS ctrl+click
5915
+ $.vakata.context.hide();
5916
+ }
5917
+ last_ts = 0;
5918
+ }, this))
5919
+ .on("touchstart.jstree", ".jstree-anchor", function (e) {
5920
+ if(!e.originalEvent || !e.originalEvent.changedTouches || !e.originalEvent.changedTouches[0]) {
5921
+ return;
5922
+ }
5923
+ ex = e.originalEvent.changedTouches[0].clientX;
5924
+ ey = e.originalEvent.changedTouches[0].clientY;
5925
+ cto = setTimeout(function () {
5926
+ $(e.currentTarget).trigger('contextmenu', true);
5927
+ }, 750);
5928
+ })
5929
+ .on('touchmove.vakata.jstree', function (e) {
5930
+ if(cto && e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0] && (Math.abs(ex - e.originalEvent.changedTouches[0].clientX) > 50 || Math.abs(ey - e.originalEvent.changedTouches[0].clientY) > 50)) {
5931
+ clearTimeout(cto);
5932
+ }
5933
+ })
5934
+ .on('touchend.vakata.jstree', function (e) {
5935
+ if(cto) {
5936
+ clearTimeout(cto);
5937
+ }
5938
+ });
5939
+
5940
+ /*!
5941
+ if(!('oncontextmenu' in document.body) && ('ontouchstart' in document.body)) {
5942
+ var el = null, tm = null;
5943
+ this.element
5944
+ .on("touchstart", ".jstree-anchor", function (e) {
5945
+ el = e.currentTarget;
5946
+ tm = +new Date();
5947
+ $(document).one("touchend", function (e) {
5948
+ e.target = document.elementFromPoint(e.originalEvent.targetTouches[0].pageX - window.pageXOffset, e.originalEvent.targetTouches[0].pageY - window.pageYOffset);
5949
+ e.currentTarget = e.target;
5950
+ tm = ((+(new Date())) - tm);
5951
+ if(e.target === el && tm > 600 && tm < 1000) {
5952
+ e.preventDefault();
5953
+ $(el).trigger('contextmenu', e);
5954
+ }
5955
+ el = null;
5956
+ tm = null;
5957
+ });
5958
+ });
5959
+ }
5960
+ */
5961
+ $(document).on("context_hide.vakata.jstree", $.proxy(function (e, data) {
5962
+ this._data.contextmenu.visible = false;
5963
+ $(data.reference).removeClass('jstree-context');
5964
+ }, this));
5965
+ };
5966
+ this.teardown = function () {
5967
+ if(this._data.contextmenu.visible) {
5968
+ $.vakata.context.hide();
5969
+ }
5970
+ parent.teardown.call(this);
5971
+ };
5972
+
5973
+ /**
5974
+ * prepare and show the context menu for a node
5975
+ * @name show_contextmenu(obj [, x, y])
5976
+ * @param {mixed} obj the node
5977
+ * @param {Number} x the x-coordinate relative to the document to show the menu at
5978
+ * @param {Number} y the y-coordinate relative to the document to show the menu at
5979
+ * @param {Object} e the event if available that triggered the contextmenu
5980
+ * @plugin contextmenu
5981
+ * @trigger show_contextmenu.jstree
5982
+ */
5983
+ this.show_contextmenu = function (obj, x, y, e) {
5984
+ obj = this.get_node(obj);
5985
+ if(!obj || obj.id === $.jstree.root) { return false; }
5986
+ var s = this.settings.contextmenu,
5987
+ d = this.get_node(obj, true),
5988
+ a = d.children(".jstree-anchor"),
5989
+ o = false,
5990
+ i = false;
5991
+ if(s.show_at_node || x === undefined || y === undefined) {
5992
+ o = a.offset();
5993
+ x = o.left;
5994
+ y = o.top + this._data.core.li_height;
5995
+ }
5996
+ if(this.settings.contextmenu.select_node && !this.is_selected(obj)) {
5997
+ this.activate_node(obj, e);
5998
+ }
5999
+
6000
+ i = s.items;
6001
+ if($.isFunction(i)) {
6002
+ i = i.call(this, obj, $.proxy(function (i) {
6003
+ this._show_contextmenu(obj, x, y, i);
6004
+ }, this));
6005
+ }
6006
+ if($.isPlainObject(i)) {
6007
+ this._show_contextmenu(obj, x, y, i);
6008
+ }
6009
+ };
6010
+ /**
6011
+ * show the prepared context menu for a node
6012
+ * @name _show_contextmenu(obj, x, y, i)
6013
+ * @param {mixed} obj the node
6014
+ * @param {Number} x the x-coordinate relative to the document to show the menu at
6015
+ * @param {Number} y the y-coordinate relative to the document to show the menu at
6016
+ * @param {Number} i the object of items to show
6017
+ * @plugin contextmenu
6018
+ * @trigger show_contextmenu.jstree
6019
+ * @private
6020
+ */
6021
+ this._show_contextmenu = function (obj, x, y, i) {
6022
+ var d = this.get_node(obj, true),
6023
+ a = d.children(".jstree-anchor");
6024
+ $(document).one("context_show.vakata.jstree", $.proxy(function (e, data) {
6025
+ var cls = 'jstree-contextmenu jstree-' + this.get_theme() + '-contextmenu';
6026
+ $(data.element).addClass(cls);
6027
+ a.addClass('jstree-context');
6028
+ }, this));
6029
+ this._data.contextmenu.visible = true;
6030
+ $.vakata.context.show(a, { 'x' : x, 'y' : y }, i);
6031
+ /**
6032
+ * triggered when the contextmenu is shown for a node
6033
+ * @event
6034
+ * @name show_contextmenu.jstree
6035
+ * @param {Object} node the node
6036
+ * @param {Number} x the x-coordinate of the menu relative to the document
6037
+ * @param {Number} y the y-coordinate of the menu relative to the document
6038
+ * @plugin contextmenu
6039
+ */
6040
+ this.trigger('show_contextmenu', { "node" : obj, "x" : x, "y" : y });
6041
+ };
6042
+ };
6043
+
6044
+ // contextmenu helper
6045
+ (function ($) {
6046
+ var right_to_left = false,
6047
+ vakata_context = {
6048
+ element : false,
6049
+ reference : false,
6050
+ position_x : 0,
6051
+ position_y : 0,
6052
+ items : [],
6053
+ html : "",
6054
+ is_visible : false
6055
+ };
6056
+
6057
+ $.vakata.context = {
6058
+ settings : {
6059
+ hide_onmouseleave : 0,
6060
+ icons : true
6061
+ },
6062
+ _trigger : function (event_name) {
6063
+ $(document).triggerHandler("context_" + event_name + ".vakata", {
6064
+ "reference" : vakata_context.reference,
6065
+ "element" : vakata_context.element,
6066
+ "position" : {
6067
+ "x" : vakata_context.position_x,
6068
+ "y" : vakata_context.position_y
6069
+ }
6070
+ });
6071
+ },
6072
+ _execute : function (i) {
6073
+ i = vakata_context.items[i];
6074
+ return i && (!i._disabled || ($.isFunction(i._disabled) && !i._disabled({ "item" : i, "reference" : vakata_context.reference, "element" : vakata_context.element }))) && i.action ? i.action.call(null, {
6075
+ "item" : i,
6076
+ "reference" : vakata_context.reference,
6077
+ "element" : vakata_context.element,
6078
+ "position" : {
6079
+ "x" : vakata_context.position_x,
6080
+ "y" : vakata_context.position_y
6081
+ }
6082
+ }) : false;
6083
+ },
6084
+ _parse : function (o, is_callback) {
6085
+ if(!o) { return false; }
6086
+ if(!is_callback) {
6087
+ vakata_context.html = "";
6088
+ vakata_context.items = [];
6089
+ }
6090
+ var str = "",
6091
+ sep = false,
6092
+ tmp;
6093
+
6094
+ if(is_callback) { str += "<"+"ul>"; }
6095
+ $.each(o, function (i, val) {
6096
+ if(!val) { return true; }
6097
+ vakata_context.items.push(val);
6098
+ if(!sep && val.separator_before) {
6099
+ str += "<"+"li class='vakata-context-separator'><"+"a href='#' " + ($.vakata.context.settings.icons ? '' : 'style="margin-left:0px;"') + ">&#160;<"+"/a><"+"/li>";
6100
+ }
6101
+ sep = false;
6102
+ str += "<"+"li class='" + (val._class || "") + (val._disabled === true || ($.isFunction(val._disabled) && val._disabled({ "item" : val, "reference" : vakata_context.reference, "element" : vakata_context.element })) ? " vakata-contextmenu-disabled " : "") + "' "+(val.shortcut?" data-shortcut='"+val.shortcut+"' ":'')+">";
6103
+ str += "<"+"a href='#' rel='" + (vakata_context.items.length - 1) + "' " + (val.title ? "title='" + val.title + "'" : "") + ">";
6104
+ if($.vakata.context.settings.icons) {
6105
+ str += "<"+"i ";
6106
+ if(val.icon) {
6107
+ if(val.icon.indexOf("/") !== -1 || val.icon.indexOf(".") !== -1) { str += " style='background:url(\"" + val.icon + "\") center center no-repeat' "; }
6108
+ else { str += " class='" + val.icon + "' "; }
6109
+ }
6110
+ str += "><"+"/i><"+"span class='vakata-contextmenu-sep'>&#160;<"+"/span>";
6111
+ }
6112
+ str += ($.isFunction(val.label) ? val.label({ "item" : i, "reference" : vakata_context.reference, "element" : vakata_context.element }) : val.label) + (val.shortcut?' <span class="vakata-contextmenu-shortcut vakata-contextmenu-shortcut-'+val.shortcut+'">'+ (val.shortcut_label || '') +'</span>':'') + "<"+"/a>";
6113
+ if(val.submenu) {
6114
+ tmp = $.vakata.context._parse(val.submenu, true);
6115
+ if(tmp) { str += tmp; }
6116
+ }
6117
+ str += "<"+"/li>";
6118
+ if(val.separator_after) {
6119
+ str += "<"+"li class='vakata-context-separator'><"+"a href='#' " + ($.vakata.context.settings.icons ? '' : 'style="margin-left:0px;"') + ">&#160;<"+"/a><"+"/li>";
6120
+ sep = true;
6121
+ }
6122
+ });
6123
+ str = str.replace(/<li class\='vakata-context-separator'\><\/li\>$/,"");
6124
+ if(is_callback) { str += "</ul>"; }
6125
+ /**
6126
+ * triggered on the document when the contextmenu is parsed (HTML is built)
6127
+ * @event
6128
+ * @plugin contextmenu
6129
+ * @name context_parse.vakata
6130
+ * @param {jQuery} reference the element that was right clicked
6131
+ * @param {jQuery} element the DOM element of the menu itself
6132
+ * @param {Object} position the x & y coordinates of the menu
6133
+ */
6134
+ if(!is_callback) { vakata_context.html = str; $.vakata.context._trigger("parse"); }
6135
+ return str.length > 10 ? str : false;
6136
+ },
6137
+ _show_submenu : function (o) {
6138
+ o = $(o);
6139
+ if(!o.length || !o.children("ul").length) { return; }
6140
+ var e = o.children("ul"),
6141
+ xl = o.offset().left,
6142
+ x = xl + o.outerWidth(),
6143
+ y = o.offset().top,
6144
+ w = e.width(),
6145
+ h = e.height(),
6146
+ dw = $(window).width() + $(window).scrollLeft(),
6147
+ dh = $(window).height() + $(window).scrollTop();
6148
+ // може да се спести е една проверка - дали няма някой от класовете вече нагоре
6149
+ if(right_to_left) {
6150
+ o[x - (w + 10 + o.outerWidth()) < 0 ? "addClass" : "removeClass"]("vakata-context-left");
6151
+ }
6152
+ else {
6153
+ o[x + w > dw && xl > dw - x ? "addClass" : "removeClass"]("vakata-context-right");
6154
+ }
6155
+ if(y + h + 10 > dh) {
6156
+ e.css("bottom","-1px");
6157
+ }
6158
+
6159
+ //if does not fit - stick it to the side
6160
+ if (o.hasClass('vakata-context-right')) {
6161
+ if (xl < w) {
6162
+ e.css("margin-right", xl - w);
6163
+ }
6164
+ } else {
6165
+ if (dw - x < w) {
6166
+ e.css("margin-left", dw - x - w);
6167
+ }
6168
+ }
6169
+
6170
+ e.show();
6171
+ },
6172
+ show : function (reference, position, data) {
6173
+ var o, e, x, y, w, h, dw, dh, cond = true;
6174
+ if(vakata_context.element && vakata_context.element.length) {
6175
+ vakata_context.element.width('');
6176
+ }
6177
+ switch(cond) {
6178
+ case (!position && !reference):
6179
+ return false;
6180
+ case (!!position && !!reference):
6181
+ vakata_context.reference = reference;
6182
+ vakata_context.position_x = position.x;
6183
+ vakata_context.position_y = position.y;
6184
+ break;
6185
+ case (!position && !!reference):
6186
+ vakata_context.reference = reference;
6187
+ o = reference.offset();
6188
+ vakata_context.position_x = o.left + reference.outerHeight();
6189
+ vakata_context.position_y = o.top;
6190
+ break;
6191
+ case (!!position && !reference):
6192
+ vakata_context.position_x = position.x;
6193
+ vakata_context.position_y = position.y;
6194
+ break;
6195
+ }
6196
+ if(!!reference && !data && $(reference).data('vakata_contextmenu')) {
6197
+ data = $(reference).data('vakata_contextmenu');
6198
+ }
6199
+ if($.vakata.context._parse(data)) {
6200
+ vakata_context.element.html(vakata_context.html);
6201
+ }
6202
+ if(vakata_context.items.length) {
6203
+ vakata_context.element.appendTo("body");
6204
+ e = vakata_context.element;
6205
+ x = vakata_context.position_x;
6206
+ y = vakata_context.position_y;
6207
+ w = e.width();
6208
+ h = e.height();
6209
+ dw = $(window).width() + $(window).scrollLeft();
6210
+ dh = $(window).height() + $(window).scrollTop();
6211
+ if(right_to_left) {
6212
+ x -= (e.outerWidth() - $(reference).outerWidth());
6213
+ if(x < $(window).scrollLeft() + 20) {
6214
+ x = $(window).scrollLeft() + 20;
6215
+ }
6216
+ }
6217
+ if(x + w + 20 > dw) {
6218
+ x = dw - (w + 20);
6219
+ }
6220
+ if(y + h + 20 > dh) {
6221
+ y = dh - (h + 20);
6222
+ }
6223
+
6224
+ vakata_context.element
6225
+ .css({ "left" : x, "top" : y })
6226
+ .show()
6227
+ .find('a').first().focus().parent().addClass("vakata-context-hover");
6228
+ vakata_context.is_visible = true;
6229
+ /**
6230
+ * triggered on the document when the contextmenu is shown
6231
+ * @event
6232
+ * @plugin contextmenu
6233
+ * @name context_show.vakata
6234
+ * @param {jQuery} reference the element that was right clicked
6235
+ * @param {jQuery} element the DOM element of the menu itself
6236
+ * @param {Object} position the x & y coordinates of the menu
6237
+ */
6238
+ $.vakata.context._trigger("show");
6239
+ }
6240
+ },
6241
+ hide : function () {
6242
+ if(vakata_context.is_visible) {
6243
+ vakata_context.element.hide().find("ul").hide().end().find(':focus').blur().end().detach();
6244
+ vakata_context.is_visible = false;
6245
+ /**
6246
+ * triggered on the document when the contextmenu is hidden
6247
+ * @event
6248
+ * @plugin contextmenu
6249
+ * @name context_hide.vakata
6250
+ * @param {jQuery} reference the element that was right clicked
6251
+ * @param {jQuery} element the DOM element of the menu itself
6252
+ * @param {Object} position the x & y coordinates of the menu
6253
+ */
6254
+ $.vakata.context._trigger("hide");
6255
+ }
6256
+ }
6257
+ };
6258
+ $(function () {
6259
+ right_to_left = $("body").css("direction") === "rtl";
6260
+ var to = false;
6261
+
6262
+ vakata_context.element = $("<ul class='vakata-context'></ul>");
6263
+ vakata_context.element
6264
+ .on("mouseenter", "li", function (e) {
6265
+ e.stopImmediatePropagation();
6266
+
6267
+ if($.contains(this, e.relatedTarget)) {
6268
+ // премахнато заради delegate mouseleave по-долу
6269
+ // $(this).find(".vakata-context-hover").removeClass("vakata-context-hover");
6270
+ return;
6271
+ }
6272
+
6273
+ if(to) { clearTimeout(to); }
6274
+ vakata_context.element.find(".vakata-context-hover").removeClass("vakata-context-hover").end();
6275
+
6276
+ $(this)
6277
+ .siblings().find("ul").hide().end().end()
6278
+ .parentsUntil(".vakata-context", "li").addBack().addClass("vakata-context-hover");
6279
+ $.vakata.context._show_submenu(this);
6280
+ })
6281
+ // тестово - дали не натоварва?
6282
+ .on("mouseleave", "li", function (e) {
6283
+ if($.contains(this, e.relatedTarget)) { return; }
6284
+ $(this).find(".vakata-context-hover").addBack().removeClass("vakata-context-hover");
6285
+ })
6286
+ .on("mouseleave", function (e) {
6287
+ $(this).find(".vakata-context-hover").removeClass("vakata-context-hover");
6288
+ if($.vakata.context.settings.hide_onmouseleave) {
6289
+ to = setTimeout(
6290
+ (function (t) {
6291
+ return function () { $.vakata.context.hide(); };
6292
+ }(this)), $.vakata.context.settings.hide_onmouseleave);
6293
+ }
6294
+ })
6295
+ .on("click", "a", function (e) {
6296
+ e.preventDefault();
6297
+ //})
6298
+ //.on("mouseup", "a", function (e) {
6299
+ if(!$(this).blur().parent().hasClass("vakata-context-disabled") && $.vakata.context._execute($(this).attr("rel")) !== false) {
6300
+ $.vakata.context.hide();
6301
+ }
6302
+ })
6303
+ .on('keydown', 'a', function (e) {
6304
+ var o = null;
6305
+ switch(e.which) {
6306
+ case 13:
6307
+ case 32:
6308
+ e.type = "click";
6309
+ e.preventDefault();
6310
+ $(e.currentTarget).trigger(e);
6311
+ break;
6312
+ case 37:
6313
+ if(vakata_context.is_visible) {
6314
+ vakata_context.element.find(".vakata-context-hover").last().closest("li").first().find("ul").hide().find(".vakata-context-hover").removeClass("vakata-context-hover").end().end().children('a').focus();
6315
+ e.stopImmediatePropagation();
6316
+ e.preventDefault();
6317
+ }
6318
+ break;
6319
+ case 38:
6320
+ if(vakata_context.is_visible) {
6321
+ o = vakata_context.element.find("ul:visible").addBack().last().children(".vakata-context-hover").removeClass("vakata-context-hover").prevAll("li:not(.vakata-context-separator)").first();
6322
+ if(!o.length) { o = vakata_context.element.find("ul:visible").addBack().last().children("li:not(.vakata-context-separator)").last(); }
6323
+ o.addClass("vakata-context-hover").children('a').focus();
6324
+ e.stopImmediatePropagation();
6325
+ e.preventDefault();
6326
+ }
6327
+ break;
6328
+ case 39:
6329
+ if(vakata_context.is_visible) {
6330
+ vakata_context.element.find(".vakata-context-hover").last().children("ul").show().children("li:not(.vakata-context-separator)").removeClass("vakata-context-hover").first().addClass("vakata-context-hover").children('a').focus();
6331
+ e.stopImmediatePropagation();
6332
+ e.preventDefault();
6333
+ }
6334
+ break;
6335
+ case 40:
6336
+ if(vakata_context.is_visible) {
6337
+ o = vakata_context.element.find("ul:visible").addBack().last().children(".vakata-context-hover").removeClass("vakata-context-hover").nextAll("li:not(.vakata-context-separator)").first();
6338
+ if(!o.length) { o = vakata_context.element.find("ul:visible").addBack().last().children("li:not(.vakata-context-separator)").first(); }
6339
+ o.addClass("vakata-context-hover").children('a').focus();
6340
+ e.stopImmediatePropagation();
6341
+ e.preventDefault();
6342
+ }
6343
+ break;
6344
+ case 27:
6345
+ $.vakata.context.hide();
6346
+ e.preventDefault();
6347
+ break;
6348
+ default:
6349
+ //console.log(e.which);
6350
+ break;
6351
+ }
6352
+ })
6353
+ .on('keydown', function (e) {
6354
+ e.preventDefault();
6355
+ var a = vakata_context.element.find('.vakata-contextmenu-shortcut-' + e.which).parent();
6356
+ if(a.parent().not('.vakata-context-disabled')) {
6357
+ a.click();
6358
+ }
6359
+ });
6360
+
6361
+ $(document)
6362
+ .on("mousedown.vakata.jstree", function (e) {
6363
+ if(vakata_context.is_visible && !$.contains(vakata_context.element[0], e.target)) {
6364
+ $.vakata.context.hide();
6365
+ }
6366
+ })
6367
+ .on("context_show.vakata.jstree", function (e, data) {
6368
+ vakata_context.element.find("li:has(ul)").children("a").addClass("vakata-context-parent");
6369
+ if(right_to_left) {
6370
+ vakata_context.element.addClass("vakata-context-rtl").css("direction", "rtl");
6371
+ }
6372
+ // also apply a RTL class?
6373
+ vakata_context.element.find("ul").hide().end();
6374
+ });
6375
+ });
6376
+ }($));
6377
+ // $.jstree.defaults.plugins.push("contextmenu");
6378
+
6379
+
6380
+ /**
6381
+ * ### Drag'n'drop plugin
6382
+ *
6383
+ * Enables dragging and dropping of nodes in the tree, resulting in a move or copy operations.
6384
+ */
6385
+
6386
+ /**
6387
+ * stores all defaults for the drag'n'drop plugin
6388
+ * @name $.jstree.defaults.dnd
6389
+ * @plugin dnd
6390
+ */
6391
+ $.jstree.defaults.dnd = {
6392
+ /**
6393
+ * a boolean indicating if a copy should be possible while dragging (by pressint the meta key or Ctrl). Defaults to `true`.
6394
+ * @name $.jstree.defaults.dnd.copy
6395
+ * @plugin dnd
6396
+ */
6397
+ copy : true,
6398
+ /**
6399
+ * a number indicating how long a node should remain hovered while dragging to be opened. Defaults to `500`.
6400
+ * @name $.jstree.defaults.dnd.open_timeout
6401
+ * @plugin dnd
6402
+ */
6403
+ open_timeout : 500,
6404
+ /**
6405
+ * a function invoked each time a node is about to be dragged, invoked in the tree's scope and receives the nodes about to be dragged as an argument (array) and the event that started the drag - return `false` to prevent dragging
6406
+ * @name $.jstree.defaults.dnd.is_draggable
6407
+ * @plugin dnd
6408
+ */
6409
+ is_draggable : true,
6410
+ /**
6411
+ * a boolean indicating if checks should constantly be made while the user is dragging the node (as opposed to checking only on drop), default is `true`
6412
+ * @name $.jstree.defaults.dnd.check_while_dragging
6413
+ * @plugin dnd
6414
+ */
6415
+ check_while_dragging : true,
6416
+ /**
6417
+ * a boolean indicating if nodes from this tree should only be copied with dnd (as opposed to moved), default is `false`
6418
+ * @name $.jstree.defaults.dnd.always_copy
6419
+ * @plugin dnd
6420
+ */
6421
+ always_copy : false,
6422
+ /**
6423
+ * when dropping a node "inside", this setting indicates the position the node should go to - it can be an integer or a string: "first" (same as 0) or "last", default is `0`
6424
+ * @name $.jstree.defaults.dnd.inside_pos
6425
+ * @plugin dnd
6426
+ */
6427
+ inside_pos : 0,
6428
+ /**
6429
+ * when starting the drag on a node that is selected this setting controls if all selected nodes are dragged or only the single node, default is `true`, which means all selected nodes are dragged when the drag is started on a selected node
6430
+ * @name $.jstree.defaults.dnd.drag_selection
6431
+ * @plugin dnd
6432
+ */
6433
+ drag_selection : true,
6434
+ /**
6435
+ * controls whether dnd works on touch devices. If left as boolean true dnd will work the same as in desktop browsers, which in some cases may impair scrolling. If set to boolean false dnd will not work on touch devices. There is a special third option - string "selected" which means only selected nodes can be dragged on touch devices.
6436
+ * @name $.jstree.defaults.dnd.touch
6437
+ * @plugin dnd
6438
+ */
6439
+ touch : true,
6440
+ /**
6441
+ * controls whether items can be dropped anywhere on the node, not just on the anchor, by default only the node anchor is a valid drop target. Works best with the wholerow plugin. If enabled on mobile depending on the interface it might be hard for the user to cancel the drop, since the whole tree container will be a valid drop target.
6442
+ * @name $.jstree.defaults.dnd.large_drop_target
6443
+ * @plugin dnd
6444
+ */
6445
+ large_drop_target : false,
6446
+ /**
6447
+ * controls whether a drag can be initiated from any part of the node and not just the text/icon part, works best with the wholerow plugin. Keep in mind it can cause problems with tree scrolling on mobile depending on the interface - in that case set the touch option to "selected".
6448
+ * @name $.jstree.defaults.dnd.large_drag_target
6449
+ * @plugin dnd
6450
+ */
6451
+ large_drag_target : false,
6452
+ /**
6453
+ * controls whether use HTML5 dnd api instead of classical. That will allow better integration of dnd events with other HTML5 controls.
6454
+ * @reference http://caniuse.com/#feat=dragndrop
6455
+ * @name $.jstree.defaults.dnd.use_html5
6456
+ * @plugin dnd
6457
+ */
6458
+ use_html5: false
6459
+ };
6460
+ var drg, elm;
6461
+ // TODO: now check works by checking for each node individually, how about max_children, unique, etc?
6462
+ $.jstree.plugins.dnd = function (options, parent) {
6463
+ this.init = function (el, options) {
6464
+ parent.init.call(this, el, options);
6465
+ this.settings.dnd.use_html5 = this.settings.dnd.use_html5 && ('draggable' in document.createElement('span'));
6466
+ };
6467
+ this.bind = function () {
6468
+ parent.bind.call(this);
6469
+
6470
+ this.element
6471
+ .on(this.settings.dnd.use_html5 ? 'dragstart.jstree' : 'mousedown.jstree touchstart.jstree', this.settings.dnd.large_drag_target ? '.jstree-node' : '.jstree-anchor', $.proxy(function (e) {
6472
+ if(this.settings.dnd.large_drag_target && $(e.target).closest('.jstree-node')[0] !== e.currentTarget) {
6473
+ return true;
6474
+ }
6475
+ if(e.type === "touchstart" && (!this.settings.dnd.touch || (this.settings.dnd.touch === 'selected' && !$(e.currentTarget).closest('.jstree-node').children('.jstree-anchor').hasClass('jstree-clicked')))) {
6476
+ return true;
6477
+ }
6478
+ var obj = this.get_node(e.target),
6479
+ mlt = this.is_selected(obj) && this.settings.dnd.drag_selection ? this.get_top_selected().length : 1,
6480
+ txt = (mlt > 1 ? mlt + ' ' + this.get_string('nodes') : this.get_text(e.currentTarget));
6481
+ if(this.settings.core.force_text) {
6482
+ txt = $.vakata.html.escape(txt);
6483
+ }
6484
+ if(obj && obj.id && obj.id !== $.jstree.root && (e.which === 1 || e.type === "touchstart" || e.type === "dragstart") &&
6485
+ (this.settings.dnd.is_draggable === true || ($.isFunction(this.settings.dnd.is_draggable) && this.settings.dnd.is_draggable.call(this, (mlt > 1 ? this.get_top_selected(true) : [obj]), e)))
6486
+ ) {
6487
+ drg = { 'jstree' : true, 'origin' : this, 'obj' : this.get_node(obj,true), 'nodes' : mlt > 1 ? this.get_top_selected() : [obj.id] };
6488
+ elm = e.currentTarget;
6489
+ if (this.settings.dnd.use_html5) {
6490
+ $.vakata.dnd._trigger('start', e, { 'helper': $(), 'element': elm, 'data': drg });
6491
+ } else {
6492
+ this.element.trigger('mousedown.jstree');
6493
+ return $.vakata.dnd.start(e, drg, '<div id="jstree-dnd" class="jstree-' + this.get_theme() + ' jstree-' + this.get_theme() + '-' + this.get_theme_variant() + ' ' + ( this.settings.core.themes.responsive ? ' jstree-dnd-responsive' : '' ) + '"><i class="jstree-icon jstree-er"></i>' + txt + '<ins class="jstree-copy" style="display:none;">+</ins></div>');
6494
+ }
6495
+ }
6496
+ }, this));
6497
+ if (this.settings.dnd.use_html5) {
6498
+ this.element
6499
+ .on('dragover.jstree', function (e) {
6500
+ e.preventDefault();
6501
+ $.vakata.dnd._trigger('move', e, { 'helper': $(), 'element': elm, 'data': drg });
6502
+ return false;
6503
+ })
6504
+ //.on('dragenter.jstree', this.settings.dnd.large_drop_target ? '.jstree-node' : '.jstree-anchor', $.proxy(function (e) {
6505
+ // e.preventDefault();
6506
+ // $.vakata.dnd._trigger('move', e, { 'helper': $(), 'element': elm, 'data': drg });
6507
+ // return false;
6508
+ // }, this))
6509
+ .on('drop.jstree', $.proxy(function (e) {
6510
+ e.preventDefault();
6511
+ $.vakata.dnd._trigger('stop', e, { 'helper': $(), 'element': elm, 'data': drg });
6512
+ return false;
6513
+ }, this));
6514
+ }
6515
+ };
6516
+ this.redraw_node = function(obj, deep, callback, force_render) {
6517
+ obj = parent.redraw_node.apply(this, arguments);
6518
+ if (obj && this.settings.dnd.use_html5) {
6519
+ if (this.settings.dnd.large_drag_target) {
6520
+ obj.setAttribute('draggable', true);
6521
+ } else {
6522
+ var i, j, tmp = null;
6523
+ for(i = 0, j = obj.childNodes.length; i < j; i++) {
6524
+ if(obj.childNodes[i] && obj.childNodes[i].className && obj.childNodes[i].className.indexOf("jstree-anchor") !== -1) {
6525
+ tmp = obj.childNodes[i];
6526
+ break;
6527
+ }
6528
+ }
6529
+ if(tmp) {
6530
+ tmp.setAttribute('draggable', true);
6531
+ }
6532
+ }
6533
+ }
6534
+ return obj;
6535
+ };
6536
+ };
6537
+
6538
+ $(function() {
6539
+ // bind only once for all instances
6540
+ var lastmv = false,
6541
+ laster = false,
6542
+ lastev = false,
6543
+ opento = false,
6544
+ marker = $('<div id="jstree-marker">&#160;</div>').hide(); //.appendTo('body');
6545
+
6546
+ $(document)
6547
+ .on('dnd_start.vakata.jstree', function (e, data) {
6548
+ lastmv = false;
6549
+ lastev = false;
6550
+ if(!data || !data.data || !data.data.jstree) { return; }
6551
+ marker.appendTo('body'); //.show();
6552
+ })
6553
+ .on('dnd_move.vakata.jstree', function (e, data) {
6554
+ if(opento) {
6555
+ if (!data.event || data.event.type !== 'dragover' || data.event.target !== lastev.target) {
6556
+ clearTimeout(opento);
6557
+ }
6558
+ }
6559
+ if(!data || !data.data || !data.data.jstree) { return; }
6560
+
6561
+ // if we are hovering the marker image do nothing (can happen on "inside" drags)
6562
+ if(data.event.target.id && data.event.target.id === 'jstree-marker') {
6563
+ return;
6564
+ }
6565
+ lastev = data.event;
6566
+
6567
+ var ins = $.jstree.reference(data.event.target),
6568
+ ref = false,
6569
+ off = false,
6570
+ rel = false,
6571
+ tmp, l, t, h, p, i, o, ok, t1, t2, op, ps, pr, ip, tm, is_copy, pn;
6572
+ // if we are over an instance
6573
+ if(ins && ins._data && ins._data.dnd) {
6574
+ marker.attr('class', 'jstree-' + ins.get_theme() + ( ins.settings.core.themes.responsive ? ' jstree-dnd-responsive' : '' ));
6575
+ is_copy = data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (data.event.metaKey || data.event.ctrlKey)));
6576
+ data.helper
6577
+ .children().attr('class', 'jstree-' + ins.get_theme() + ' jstree-' + ins.get_theme() + '-' + ins.get_theme_variant() + ' ' + ( ins.settings.core.themes.responsive ? ' jstree-dnd-responsive' : '' ))
6578
+ .find('.jstree-copy').first()[ is_copy ? 'show' : 'hide' ]();
6579
+
6580
+ // if are hovering the container itself add a new root node
6581
+ //console.log(data.event);
6582
+ if( (data.event.target === ins.element[0] || data.event.target === ins.get_container_ul()[0]) && ins.get_container_ul().children().length === 0) {
6583
+ ok = true;
6584
+ for(t1 = 0, t2 = data.data.nodes.length; t1 < t2; t1++) {
6585
+ ok = ok && ins.check( (data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (data.event.metaKey || data.event.ctrlKey)) ) ? "copy_node" : "move_node"), (data.data.origin && data.data.origin !== ins ? data.data.origin.get_node(data.data.nodes[t1]) : data.data.nodes[t1]), $.jstree.root, 'last', { 'dnd' : true, 'ref' : ins.get_node($.jstree.root), 'pos' : 'i', 'origin' : data.data.origin, 'is_multi' : (data.data.origin && data.data.origin !== ins), 'is_foreign' : (!data.data.origin) });
6586
+ if(!ok) { break; }
6587
+ }
6588
+ if(ok) {
6589
+ lastmv = { 'ins' : ins, 'par' : $.jstree.root, 'pos' : 'last' };
6590
+ marker.hide();
6591
+ data.helper.find('.jstree-icon').first().removeClass('jstree-er').addClass('jstree-ok');
6592
+ if (data.event.originalEvent && data.event.originalEvent.dataTransfer) {
6593
+ data.event.originalEvent.dataTransfer.dropEffect = is_copy ? 'copy' : 'move';
6594
+ }
6595
+ return;
6596
+ }
6597
+ }
6598
+ else {
6599
+ // if we are hovering a tree node
6600
+ ref = ins.settings.dnd.large_drop_target ? $(data.event.target).closest('.jstree-node').children('.jstree-anchor') : $(data.event.target).closest('.jstree-anchor');
6601
+ if(ref && ref.length && ref.parent().is('.jstree-closed, .jstree-open, .jstree-leaf')) {
6602
+ off = ref.offset();
6603
+ rel = (data.event.pageY !== undefined ? data.event.pageY : data.event.originalEvent.pageY) - off.top;
6604
+ h = ref.outerHeight();
6605
+ if(rel < h / 3) {
6606
+ o = ['b', 'i', 'a'];
6607
+ }
6608
+ else if(rel > h - h / 3) {
6609
+ o = ['a', 'i', 'b'];
6610
+ }
6611
+ else {
6612
+ o = rel > h / 2 ? ['i', 'a', 'b'] : ['i', 'b', 'a'];
6613
+ }
6614
+ $.each(o, function (j, v) {
6615
+ switch(v) {
6616
+ case 'b':
6617
+ l = off.left - 6;
6618
+ t = off.top;
6619
+ p = ins.get_parent(ref);
6620
+ i = ref.parent().index();
6621
+ break;
6622
+ case 'i':
6623
+ ip = ins.settings.dnd.inside_pos;
6624
+ tm = ins.get_node(ref.parent());
6625
+ l = off.left - 2;
6626
+ t = off.top + h / 2 + 1;
6627
+ p = tm.id;
6628
+ i = ip === 'first' ? 0 : (ip === 'last' ? tm.children.length : Math.min(ip, tm.children.length));
6629
+ break;
6630
+ case 'a':
6631
+ l = off.left - 6;
6632
+ t = off.top + h;
6633
+ p = ins.get_parent(ref);
6634
+ i = ref.parent().index() + 1;
6635
+ break;
6636
+ }
6637
+ ok = true;
6638
+ for(t1 = 0, t2 = data.data.nodes.length; t1 < t2; t1++) {
6639
+ op = data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (data.event.metaKey || data.event.ctrlKey))) ? "copy_node" : "move_node";
6640
+ ps = i;
6641
+ if(op === "move_node" && v === 'a' && (data.data.origin && data.data.origin === ins) && p === ins.get_parent(data.data.nodes[t1])) {
6642
+ pr = ins.get_node(p);
6643
+ if(ps > $.inArray(data.data.nodes[t1], pr.children)) {
6644
+ ps -= 1;
6645
+ }
6646
+ }
6647
+ ok = ok && ( (ins && ins.settings && ins.settings.dnd && ins.settings.dnd.check_while_dragging === false) || ins.check(op, (data.data.origin && data.data.origin !== ins ? data.data.origin.get_node(data.data.nodes[t1]) : data.data.nodes[t1]), p, ps, { 'dnd' : true, 'ref' : ins.get_node(ref.parent()), 'pos' : v, 'origin' : data.data.origin, 'is_multi' : (data.data.origin && data.data.origin !== ins), 'is_foreign' : (!data.data.origin) }) );
6648
+ if(!ok) {
6649
+ if(ins && ins.last_error) { laster = ins.last_error(); }
6650
+ break;
6651
+ }
6652
+ }
6653
+ if(v === 'i' && ref.parent().is('.jstree-closed') && ins.settings.dnd.open_timeout) {
6654
+ opento = setTimeout((function (x, z) { return function () { x.open_node(z); }; }(ins, ref)), ins.settings.dnd.open_timeout);
6655
+ }
6656
+ if(ok) {
6657
+ pn = ins.get_node(p, true);
6658
+ if (!pn.hasClass('.jstree-dnd-parent')) {
6659
+ $('.jstree-dnd-parent').removeClass('jstree-dnd-parent');
6660
+ pn.addClass('jstree-dnd-parent');
6661
+ }
6662
+ lastmv = { 'ins' : ins, 'par' : p, 'pos' : v === 'i' && ip === 'last' && i === 0 && !ins.is_loaded(tm) ? 'last' : i };
6663
+ marker.css({ 'left' : l + 'px', 'top' : t + 'px' }).show();
6664
+ data.helper.find('.jstree-icon').first().removeClass('jstree-er').addClass('jstree-ok');
6665
+ if (data.event.originalEvent && data.event.originalEvent.dataTransfer) {
6666
+ data.event.originalEvent.dataTransfer.dropEffect = is_copy ? 'copy' : 'move';
6667
+ }
6668
+ laster = {};
6669
+ o = true;
6670
+ return false;
6671
+ }
6672
+ });
6673
+ if(o === true) { return; }
6674
+ }
6675
+ }
6676
+ }
6677
+ $('.jstree-dnd-parent').removeClass('jstree-dnd-parent');
6678
+ lastmv = false;
6679
+ data.helper.find('.jstree-icon').removeClass('jstree-ok').addClass('jstree-er');
6680
+ if (data.event.originalEvent && data.event.originalEvent.dataTransfer) {
6681
+ data.event.originalEvent.dataTransfer.dropEffect = 'none';
6682
+ }
6683
+ marker.hide();
6684
+ })
6685
+ .on('dnd_scroll.vakata.jstree', function (e, data) {
6686
+ if(!data || !data.data || !data.data.jstree) { return; }
6687
+ marker.hide();
6688
+ lastmv = false;
6689
+ lastev = false;
6690
+ data.helper.find('.jstree-icon').first().removeClass('jstree-ok').addClass('jstree-er');
6691
+ })
6692
+ .on('dnd_stop.vakata.jstree', function (e, data) {
6693
+ $('.jstree-dnd-parent').removeClass('jstree-dnd-parent');
6694
+ if(opento) { clearTimeout(opento); }
6695
+ if(!data || !data.data || !data.data.jstree) { return; }
6696
+ marker.hide().detach();
6697
+ var i, j, nodes = [];
6698
+ if(lastmv) {
6699
+ for(i = 0, j = data.data.nodes.length; i < j; i++) {
6700
+ nodes[i] = data.data.origin ? data.data.origin.get_node(data.data.nodes[i]) : data.data.nodes[i];
6701
+ }
6702
+ lastmv.ins[ data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (data.event.metaKey || data.event.ctrlKey))) ? 'copy_node' : 'move_node' ](nodes, lastmv.par, lastmv.pos, false, false, false, data.data.origin);
6703
+ }
6704
+ else {
6705
+ i = $(data.event.target).closest('.jstree');
6706
+ if(i.length && laster && laster.error && laster.error === 'check') {
6707
+ i = i.jstree(true);
6708
+ if(i) {
6709
+ i.settings.core.error.call(this, laster);
6710
+ }
6711
+ }
6712
+ }
6713
+ lastev = false;
6714
+ lastmv = false;
6715
+ })
6716
+ .on('keyup.jstree keydown.jstree', function (e, data) {
6717
+ data = $.vakata.dnd._get();
6718
+ if(data && data.data && data.data.jstree) {
6719
+ if (e.type === "keyup" && e.which === 27) {
6720
+ if (opento) { clearTimeout(opento); }
6721
+ lastmv = false;
6722
+ laster = false;
6723
+ lastev = false;
6724
+ opento = false;
6725
+ marker.hide().detach();
6726
+ $.vakata.dnd._clean();
6727
+ } else {
6728
+ data.helper.find('.jstree-copy').first()[ data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (e.metaKey || e.ctrlKey))) ? 'show' : 'hide' ]();
6729
+ if(lastev) {
6730
+ lastev.metaKey = e.metaKey;
6731
+ lastev.ctrlKey = e.ctrlKey;
6732
+ $.vakata.dnd._trigger('move', lastev);
6733
+ }
6734
+ }
6735
+ }
6736
+ });
6737
+ });
6738
+
6739
+ // helpers
6740
+ (function ($) {
6741
+ $.vakata.html = {
6742
+ div : $('<div />'),
6743
+ escape : function (str) {
6744
+ return $.vakata.html.div.text(str).html();
6745
+ },
6746
+ strip : function (str) {
6747
+ return $.vakata.html.div.empty().append($.parseHTML(str)).text();
6748
+ }
6749
+ };
6750
+ // private variable
6751
+ var vakata_dnd = {
6752
+ element : false,
6753
+ target : false,
6754
+ is_down : false,
6755
+ is_drag : false,
6756
+ helper : false,
6757
+ helper_w: 0,
6758
+ data : false,
6759
+ init_x : 0,
6760
+ init_y : 0,
6761
+ scroll_l: 0,
6762
+ scroll_t: 0,
6763
+ scroll_e: false,
6764
+ scroll_i: false,
6765
+ is_touch: false
6766
+ };
6767
+ $.vakata.dnd = {
6768
+ settings : {
6769
+ scroll_speed : 10,
6770
+ scroll_proximity : 20,
6771
+ helper_left : 5,
6772
+ helper_top : 10,
6773
+ threshold : 5,
6774
+ threshold_touch : 50
6775
+ },
6776
+ _trigger : function (event_name, e, data) {
6777
+ if (data === undefined) {
6778
+ data = $.vakata.dnd._get();
6779
+ }
6780
+ data.event = e;
6781
+ $(document).triggerHandler("dnd_" + event_name + ".vakata", data);
6782
+ },
6783
+ _get : function () {
6784
+ return {
6785
+ "data" : vakata_dnd.data,
6786
+ "element" : vakata_dnd.element,
6787
+ "helper" : vakata_dnd.helper
6788
+ };
6789
+ },
6790
+ _clean : function () {
6791
+ if(vakata_dnd.helper) { vakata_dnd.helper.remove(); }
6792
+ if(vakata_dnd.scroll_i) { clearInterval(vakata_dnd.scroll_i); vakata_dnd.scroll_i = false; }
6793
+ vakata_dnd = {
6794
+ element : false,
6795
+ target : false,
6796
+ is_down : false,
6797
+ is_drag : false,
6798
+ helper : false,
6799
+ helper_w: 0,
6800
+ data : false,
6801
+ init_x : 0,
6802
+ init_y : 0,
6803
+ scroll_l: 0,
6804
+ scroll_t: 0,
6805
+ scroll_e: false,
6806
+ scroll_i: false,
6807
+ is_touch: false
6808
+ };
6809
+ $(document).off("mousemove.vakata.jstree touchmove.vakata.jstree", $.vakata.dnd.drag);
6810
+ $(document).off("mouseup.vakata.jstree touchend.vakata.jstree", $.vakata.dnd.stop);
6811
+ },
6812
+ _scroll : function (init_only) {
6813
+ if(!vakata_dnd.scroll_e || (!vakata_dnd.scroll_l && !vakata_dnd.scroll_t)) {
6814
+ if(vakata_dnd.scroll_i) { clearInterval(vakata_dnd.scroll_i); vakata_dnd.scroll_i = false; }
6815
+ return false;
6816
+ }
6817
+ if(!vakata_dnd.scroll_i) {
6818
+ vakata_dnd.scroll_i = setInterval($.vakata.dnd._scroll, 100);
6819
+ return false;
6820
+ }
6821
+ if(init_only === true) { return false; }
6822
+
6823
+ var i = vakata_dnd.scroll_e.scrollTop(),
6824
+ j = vakata_dnd.scroll_e.scrollLeft();
6825
+ vakata_dnd.scroll_e.scrollTop(i + vakata_dnd.scroll_t * $.vakata.dnd.settings.scroll_speed);
6826
+ vakata_dnd.scroll_e.scrollLeft(j + vakata_dnd.scroll_l * $.vakata.dnd.settings.scroll_speed);
6827
+ if(i !== vakata_dnd.scroll_e.scrollTop() || j !== vakata_dnd.scroll_e.scrollLeft()) {
6828
+ /**
6829
+ * triggered on the document when a drag causes an element to scroll
6830
+ * @event
6831
+ * @plugin dnd
6832
+ * @name dnd_scroll.vakata
6833
+ * @param {Mixed} data any data supplied with the call to $.vakata.dnd.start
6834
+ * @param {DOM} element the DOM element being dragged
6835
+ * @param {jQuery} helper the helper shown next to the mouse
6836
+ * @param {jQuery} event the element that is scrolling
6837
+ */
6838
+ $.vakata.dnd._trigger("scroll", vakata_dnd.scroll_e);
6839
+ }
6840
+ },
6841
+ start : function (e, data, html) {
6842
+ if(e.type === "touchstart" && e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0]) {
6843
+ e.pageX = e.originalEvent.changedTouches[0].pageX;
6844
+ e.pageY = e.originalEvent.changedTouches[0].pageY;
6845
+ e.target = document.elementFromPoint(e.originalEvent.changedTouches[0].pageX - window.pageXOffset, e.originalEvent.changedTouches[0].pageY - window.pageYOffset);
6846
+ }
6847
+ if(vakata_dnd.is_drag) { $.vakata.dnd.stop({}); }
6848
+ try {
6849
+ e.currentTarget.unselectable = "on";
6850
+ e.currentTarget.onselectstart = function() { return false; };
6851
+ if(e.currentTarget.style) {
6852
+ e.currentTarget.style.touchAction = "none";
6853
+ e.currentTarget.style.msTouchAction = "none";
6854
+ e.currentTarget.style.MozUserSelect = "none";
6855
+ }
6856
+ } catch(ignore) { }
6857
+ vakata_dnd.init_x = e.pageX;
6858
+ vakata_dnd.init_y = e.pageY;
6859
+ vakata_dnd.data = data;
6860
+ vakata_dnd.is_down = true;
6861
+ vakata_dnd.element = e.currentTarget;
6862
+ vakata_dnd.target = e.target;
6863
+ vakata_dnd.is_touch = e.type === "touchstart";
6864
+ if(html !== false) {
6865
+ vakata_dnd.helper = $("<div id='vakata-dnd'></div>").html(html).css({
6866
+ "display" : "block",
6867
+ "margin" : "0",
6868
+ "padding" : "0",
6869
+ "position" : "absolute",
6870
+ "top" : "-2000px",
6871
+ "lineHeight" : "16px",
6872
+ "zIndex" : "10000"
6873
+ });
6874
+ }
6875
+ $(document).on("mousemove.vakata.jstree touchmove.vakata.jstree", $.vakata.dnd.drag);
6876
+ $(document).on("mouseup.vakata.jstree touchend.vakata.jstree", $.vakata.dnd.stop);
6877
+ return false;
6878
+ },
6879
+ drag : function (e) {
6880
+ if(e.type === "touchmove" && e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0]) {
6881
+ e.pageX = e.originalEvent.changedTouches[0].pageX;
6882
+ e.pageY = e.originalEvent.changedTouches[0].pageY;
6883
+ e.target = document.elementFromPoint(e.originalEvent.changedTouches[0].pageX - window.pageXOffset, e.originalEvent.changedTouches[0].pageY - window.pageYOffset);
6884
+ }
6885
+ if(!vakata_dnd.is_down) { return; }
6886
+ if(!vakata_dnd.is_drag) {
6887
+ if(
6888
+ Math.abs(e.pageX - vakata_dnd.init_x) > (vakata_dnd.is_touch ? $.vakata.dnd.settings.threshold_touch : $.vakata.dnd.settings.threshold) ||
6889
+ Math.abs(e.pageY - vakata_dnd.init_y) > (vakata_dnd.is_touch ? $.vakata.dnd.settings.threshold_touch : $.vakata.dnd.settings.threshold)
6890
+ ) {
6891
+ if(vakata_dnd.helper) {
6892
+ vakata_dnd.helper.appendTo("body");
6893
+ vakata_dnd.helper_w = vakata_dnd.helper.outerWidth();
6894
+ }
6895
+ vakata_dnd.is_drag = true;
6896
+ $(vakata_dnd.target).one('click.vakata', false);
6897
+ /**
6898
+ * triggered on the document when a drag starts
6899
+ * @event
6900
+ * @plugin dnd
6901
+ * @name dnd_start.vakata
6902
+ * @param {Mixed} data any data supplied with the call to $.vakata.dnd.start
6903
+ * @param {DOM} element the DOM element being dragged
6904
+ * @param {jQuery} helper the helper shown next to the mouse
6905
+ * @param {Object} event the event that caused the start (probably mousemove)
6906
+ */
6907
+ $.vakata.dnd._trigger("start", e);
6908
+ }
6909
+ else { return; }
6910
+ }
6911
+
6912
+ var d = false, w = false,
6913
+ dh = false, wh = false,
6914
+ dw = false, ww = false,
6915
+ dt = false, dl = false,
6916
+ ht = false, hl = false;
6917
+
6918
+ vakata_dnd.scroll_t = 0;
6919
+ vakata_dnd.scroll_l = 0;
6920
+ vakata_dnd.scroll_e = false;
6921
+ $($(e.target).parentsUntil("body").addBack().get().reverse())
6922
+ .filter(function () {
6923
+ return (/^auto|scroll$/).test($(this).css("overflow")) &&
6924
+ (this.scrollHeight > this.offsetHeight || this.scrollWidth > this.offsetWidth);
6925
+ })
6926
+ .each(function () {
6927
+ var t = $(this), o = t.offset();
6928
+ if(this.scrollHeight > this.offsetHeight) {
6929
+ if(o.top + t.height() - e.pageY < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_t = 1; }
6930
+ if(e.pageY - o.top < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_t = -1; }
6931
+ }
6932
+ if(this.scrollWidth > this.offsetWidth) {
6933
+ if(o.left + t.width() - e.pageX < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_l = 1; }
6934
+ if(e.pageX - o.left < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_l = -1; }
6935
+ }
6936
+ if(vakata_dnd.scroll_t || vakata_dnd.scroll_l) {
6937
+ vakata_dnd.scroll_e = $(this);
6938
+ return false;
6939
+ }
6940
+ });
6941
+
6942
+ if(!vakata_dnd.scroll_e) {
6943
+ d = $(document); w = $(window);
6944
+ dh = d.height(); wh = w.height();
6945
+ dw = d.width(); ww = w.width();
6946
+ dt = d.scrollTop(); dl = d.scrollLeft();
6947
+ if(dh > wh && e.pageY - dt < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_t = -1; }
6948
+ if(dh > wh && wh - (e.pageY - dt) < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_t = 1; }
6949
+ if(dw > ww && e.pageX - dl < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_l = -1; }
6950
+ if(dw > ww && ww - (e.pageX - dl) < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_l = 1; }
6951
+ if(vakata_dnd.scroll_t || vakata_dnd.scroll_l) {
6952
+ vakata_dnd.scroll_e = d;
6953
+ }
6954
+ }
6955
+ if(vakata_dnd.scroll_e) { $.vakata.dnd._scroll(true); }
6956
+
6957
+ if(vakata_dnd.helper) {
6958
+ ht = parseInt(e.pageY + $.vakata.dnd.settings.helper_top, 10);
6959
+ hl = parseInt(e.pageX + $.vakata.dnd.settings.helper_left, 10);
6960
+ if(dh && ht + 25 > dh) { ht = dh - 50; }
6961
+ if(dw && hl + vakata_dnd.helper_w > dw) { hl = dw - (vakata_dnd.helper_w + 2); }
6962
+ vakata_dnd.helper.css({
6963
+ left : hl + "px",
6964
+ top : ht + "px"
6965
+ });
6966
+ }
6967
+ /**
6968
+ * triggered on the document when a drag is in progress
6969
+ * @event
6970
+ * @plugin dnd
6971
+ * @name dnd_move.vakata
6972
+ * @param {Mixed} data any data supplied with the call to $.vakata.dnd.start
6973
+ * @param {DOM} element the DOM element being dragged
6974
+ * @param {jQuery} helper the helper shown next to the mouse
6975
+ * @param {Object} event the event that caused this to trigger (most likely mousemove)
6976
+ */
6977
+ $.vakata.dnd._trigger("move", e);
6978
+ return false;
6979
+ },
6980
+ stop : function (e) {
6981
+ if(e.type === "touchend" && e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0]) {
6982
+ e.pageX = e.originalEvent.changedTouches[0].pageX;
6983
+ e.pageY = e.originalEvent.changedTouches[0].pageY;
6984
+ e.target = document.elementFromPoint(e.originalEvent.changedTouches[0].pageX - window.pageXOffset, e.originalEvent.changedTouches[0].pageY - window.pageYOffset);
6985
+ }
6986
+ if(vakata_dnd.is_drag) {
6987
+ /**
6988
+ * triggered on the document when a drag stops (the dragged element is dropped)
6989
+ * @event
6990
+ * @plugin dnd
6991
+ * @name dnd_stop.vakata
6992
+ * @param {Mixed} data any data supplied with the call to $.vakata.dnd.start
6993
+ * @param {DOM} element the DOM element being dragged
6994
+ * @param {jQuery} helper the helper shown next to the mouse
6995
+ * @param {Object} event the event that caused the stop
6996
+ */
6997
+ if (e.target !== vakata_dnd.target) {
6998
+ $(vakata_dnd.target).off('click.vakata');
6999
+ }
7000
+ $.vakata.dnd._trigger("stop", e);
7001
+ }
7002
+ else {
7003
+ if(e.type === "touchend" && e.target === vakata_dnd.target) {
7004
+ var to = setTimeout(function () { $(e.target).click(); }, 100);
7005
+ $(e.target).one('click', function() { if(to) { clearTimeout(to); } });
7006
+ }
7007
+ }
7008
+ $.vakata.dnd._clean();
7009
+ return false;
7010
+ }
7011
+ };
7012
+ }($));
7013
+
7014
+ // include the dnd plugin by default
7015
+ // $.jstree.defaults.plugins.push("dnd");
7016
+
7017
+
7018
+ /**
7019
+ * ### Massload plugin
7020
+ *
7021
+ * Adds massload functionality to jsTree, so that multiple nodes can be loaded in a single request (only useful with lazy loading).
7022
+ */
7023
+
7024
+ /**
7025
+ * massload configuration
7026
+ *
7027
+ * It is possible to set this to a standard jQuery-like AJAX config.
7028
+ * In addition to the standard jQuery ajax options here you can supply functions for `data` and `url`, the functions will be run in the current instance's scope and a param will be passed indicating which node IDs need to be loaded, the return value of those functions will be used.
7029
+ *
7030
+ * You can also set this to a function, that function will receive the node IDs being loaded as argument and a second param which is a function (callback) which should be called with the result.
7031
+ *
7032
+ * Both the AJAX and the function approach rely on the same return value - an object where the keys are the node IDs, and the value is the children of that node as an array.
7033
+ *
7034
+ * {
7035
+ * "id1" : [{ "text" : "Child of ID1", "id" : "c1" }, { "text" : "Another child of ID1", "id" : "c2" }],
7036
+ * "id2" : [{ "text" : "Child of ID2", "id" : "c3" }]
7037
+ * }
7038
+ *
7039
+ * @name $.jstree.defaults.massload
7040
+ * @plugin massload
7041
+ */
7042
+ $.jstree.defaults.massload = null;
7043
+ $.jstree.plugins.massload = function (options, parent) {
7044
+ this.init = function (el, options) {
7045
+ this._data.massload = {};
7046
+ parent.init.call(this, el, options);
7047
+ };
7048
+ this._load_nodes = function (nodes, callback, is_callback, force_reload) {
7049
+ var s = this.settings.massload,
7050
+ nodesString = JSON.stringify(nodes),
7051
+ toLoad = [],
7052
+ m = this._model.data,
7053
+ i, j, dom;
7054
+ if (!is_callback) {
7055
+ for(i = 0, j = nodes.length; i < j; i++) {
7056
+ if(!m[nodes[i]] || ( (!m[nodes[i]].state.loaded && !m[nodes[i]].state.failed) || force_reload) ) {
7057
+ toLoad.push(nodes[i]);
7058
+ dom = this.get_node(nodes[i], true);
7059
+ if (dom && dom.length) {
7060
+ dom.addClass("jstree-loading").attr('aria-busy',true);
7061
+ }
7062
+ }
7063
+ }
7064
+ this._data.massload = {};
7065
+ if (toLoad.length) {
7066
+ if($.isFunction(s)) {
7067
+ return s.call(this, toLoad, $.proxy(function (data) {
7068
+ var i, j;
7069
+ if(data) {
7070
+ for(i in data) {
7071
+ if(data.hasOwnProperty(i)) {
7072
+ this._data.massload[i] = data[i];
7073
+ }
7074
+ }
7075
+ }
7076
+ for(i = 0, j = nodes.length; i < j; i++) {
7077
+ dom = this.get_node(nodes[i], true);
7078
+ if (dom && dom.length) {
7079
+ dom.removeClass("jstree-loading").attr('aria-busy',false);
7080
+ }
7081
+ }
7082
+ parent._load_nodes.call(this, nodes, callback, is_callback, force_reload);
7083
+ }, this));
7084
+ }
7085
+ if(typeof s === 'object' && s && s.url) {
7086
+ s = $.extend(true, {}, s);
7087
+ if($.isFunction(s.url)) {
7088
+ s.url = s.url.call(this, toLoad);
7089
+ }
7090
+ if($.isFunction(s.data)) {
7091
+ s.data = s.data.call(this, toLoad);
7092
+ }
7093
+ return $.ajax(s)
7094
+ .done($.proxy(function (data,t,x) {
7095
+ var i, j;
7096
+ if(data) {
7097
+ for(i in data) {
7098
+ if(data.hasOwnProperty(i)) {
7099
+ this._data.massload[i] = data[i];
7100
+ }
7101
+ }
7102
+ }
7103
+ for(i = 0, j = nodes.length; i < j; i++) {
7104
+ dom = this.get_node(nodes[i], true);
7105
+ if (dom && dom.length) {
7106
+ dom.removeClass("jstree-loading").attr('aria-busy',false);
7107
+ }
7108
+ }
7109
+ parent._load_nodes.call(this, nodes, callback, is_callback, force_reload);
7110
+ }, this))
7111
+ .fail($.proxy(function (f) {
7112
+ parent._load_nodes.call(this, nodes, callback, is_callback, force_reload);
7113
+ }, this));
7114
+ }
7115
+ }
7116
+ }
7117
+ return parent._load_nodes.call(this, nodes, callback, is_callback, force_reload);
7118
+ };
7119
+ this._load_node = function (obj, callback) {
7120
+ var data = this._data.massload[obj.id],
7121
+ rslt = null, dom;
7122
+ if(data) {
7123
+ rslt = this[typeof data === 'string' ? '_append_html_data' : '_append_json_data'](
7124
+ obj,
7125
+ typeof data === 'string' ? $($.parseHTML(data)).filter(function () { return this.nodeType !== 3; }) : data,
7126
+ function (status) { callback.call(this, status); }
7127
+ );
7128
+ dom = this.get_node(obj.id, true);
7129
+ if (dom && dom.length) {
7130
+ dom.removeClass("jstree-loading").attr('aria-busy',false);
7131
+ }
7132
+ delete this._data.massload[obj.id];
7133
+ return rslt;
7134
+ }
7135
+ return parent._load_node.call(this, obj, callback);
7136
+ };
7137
+ };
7138
+
7139
+ /**
7140
+ * ### Search plugin
7141
+ *
7142
+ * Adds search functionality to jsTree.
7143
+ */
7144
+
7145
+ /**
7146
+ * stores all defaults for the search plugin
7147
+ * @name $.jstree.defaults.search
7148
+ * @plugin search
7149
+ */
7150
+ $.jstree.defaults.search = {
7151
+ /**
7152
+ * a jQuery-like AJAX config, which jstree uses if a server should be queried for results.
7153
+ *
7154
+ * A `str` (which is the search string) parameter will be added with the request, an optional `inside` parameter will be added if the search is limited to a node id. The expected result is a JSON array with nodes that need to be opened so that matching nodes will be revealed.
7155
+ * Leave this setting as `false` to not query the server. You can also set this to a function, which will be invoked in the instance's scope and receive 3 parameters - the search string, the callback to call with the array of nodes to load, and the optional node ID to limit the search to
7156
+ * @name $.jstree.defaults.search.ajax
7157
+ * @plugin search
7158
+ */
7159
+ ajax : false,
7160
+ /**
7161
+ * Indicates if the search should be fuzzy or not (should `chnd3` match `child node 3`). Default is `false`.
7162
+ * @name $.jstree.defaults.search.fuzzy
7163
+ * @plugin search
7164
+ */
7165
+ fuzzy : false,
7166
+ /**
7167
+ * Indicates if the search should be case sensitive. Default is `false`.
7168
+ * @name $.jstree.defaults.search.case_sensitive
7169
+ * @plugin search
7170
+ */
7171
+ case_sensitive : false,
7172
+ /**
7173
+ * Indicates if the tree should be filtered (by default) to show only matching nodes (keep in mind this can be a heavy on large trees in old browsers).
7174
+ * This setting can be changed at runtime when calling the search method. Default is `false`.
7175
+ * @name $.jstree.defaults.search.show_only_matches
7176
+ * @plugin search
7177
+ */
7178
+ show_only_matches : false,
7179
+ /**
7180
+ * Indicates if the children of matched element are shown (when show_only_matches is true)
7181
+ * This setting can be changed at runtime when calling the search method. Default is `false`.
7182
+ * @name $.jstree.defaults.search.show_only_matches_children
7183
+ * @plugin search
7184
+ */
7185
+ show_only_matches_children : false,
7186
+ /**
7187
+ * Indicates if all nodes opened to reveal the search result, should be closed when the search is cleared or a new search is performed. Default is `true`.
7188
+ * @name $.jstree.defaults.search.close_opened_onclear
7189
+ * @plugin search
7190
+ */
7191
+ close_opened_onclear : true,
7192
+ /**
7193
+ * Indicates if only leaf nodes should be included in search results. Default is `false`.
7194
+ * @name $.jstree.defaults.search.search_leaves_only
7195
+ * @plugin search
7196
+ */
7197
+ search_leaves_only : false,
7198
+ /**
7199
+ * If set to a function it wil be called in the instance's scope with two arguments - search string and node (where node will be every node in the structure, so use with caution).
7200
+ * If the function returns a truthy value the node will be considered a match (it might not be displayed if search_only_leaves is set to true and the node is not a leaf). Default is `false`.
7201
+ * @name $.jstree.defaults.search.search_callback
7202
+ * @plugin search
7203
+ */
7204
+ search_callback : false
7205
+ };
7206
+
7207
+ $.jstree.plugins.search = function (options, parent) {
7208
+ this.bind = function () {
7209
+ parent.bind.call(this);
7210
+
7211
+ this._data.search.str = "";
7212
+ this._data.search.dom = $();
7213
+ this._data.search.res = [];
7214
+ this._data.search.opn = [];
7215
+ this._data.search.som = false;
7216
+ this._data.search.smc = false;
7217
+ this._data.search.hdn = [];
7218
+
7219
+ this.element
7220
+ .on("search.jstree", $.proxy(function (e, data) {
7221
+ if(this._data.search.som && data.res.length) {
7222
+ var m = this._model.data, i, j, p = [], k, l;
7223
+ for(i = 0, j = data.res.length; i < j; i++) {
7224
+ if(m[data.res[i]] && !m[data.res[i]].state.hidden) {
7225
+ p.push(data.res[i]);
7226
+ p = p.concat(m[data.res[i]].parents);
7227
+ if(this._data.search.smc) {
7228
+ for (k = 0, l = m[data.res[i]].children_d.length; k < l; k++) {
7229
+ if (m[m[data.res[i]].children_d[k]] && !m[m[data.res[i]].children_d[k]].state.hidden) {
7230
+ p.push(m[data.res[i]].children_d[k]);
7231
+ }
7232
+ }
7233
+ }
7234
+ }
7235
+ }
7236
+ p = $.vakata.array_remove_item($.vakata.array_unique(p), $.jstree.root);
7237
+ this._data.search.hdn = this.hide_all(true);
7238
+ this.show_node(p, true);
7239
+ this.redraw(true);
7240
+ }
7241
+ }, this))
7242
+ .on("clear_search.jstree", $.proxy(function (e, data) {
7243
+ if(this._data.search.som && data.res.length) {
7244
+ this.show_node(this._data.search.hdn, true);
7245
+ this.redraw(true);
7246
+ }
7247
+ }, this));
7248
+ };
7249
+ /**
7250
+ * used to search the tree nodes for a given string
7251
+ * @name search(str [, skip_async])
7252
+ * @param {String} str the search string
7253
+ * @param {Boolean} skip_async if set to true server will not be queried even if configured
7254
+ * @param {Boolean} show_only_matches if set to true only matching nodes will be shown (keep in mind this can be very slow on large trees or old browsers)
7255
+ * @param {mixed} inside an optional node to whose children to limit the search
7256
+ * @param {Boolean} append if set to true the results of this search are appended to the previous search
7257
+ * @plugin search
7258
+ * @trigger search.jstree
7259
+ */
7260
+ this.search = function (str, skip_async, show_only_matches, inside, append, show_only_matches_children) {
7261
+ if(str === false || $.trim(str.toString()) === "") {
7262
+ return this.clear_search();
7263
+ }
7264
+ inside = this.get_node(inside);
7265
+ inside = inside && inside.id ? inside.id : null;
7266
+ str = str.toString();
7267
+ var s = this.settings.search,
7268
+ a = s.ajax ? s.ajax : false,
7269
+ m = this._model.data,
7270
+ f = null,
7271
+ r = [],
7272
+ p = [], i, j;
7273
+ if(this._data.search.res.length && !append) {
7274
+ this.clear_search();
7275
+ }
7276
+ if(show_only_matches === undefined) {
7277
+ show_only_matches = s.show_only_matches;
7278
+ }
7279
+ if(show_only_matches_children === undefined) {
7280
+ show_only_matches_children = s.show_only_matches_children;
7281
+ }
7282
+ if(!skip_async && a !== false) {
7283
+ if($.isFunction(a)) {
7284
+ return a.call(this, str, $.proxy(function (d) {
7285
+ if(d && d.d) { d = d.d; }
7286
+ this._load_nodes(!$.isArray(d) ? [] : $.vakata.array_unique(d), function () {
7287
+ this.search(str, true, show_only_matches, inside, append, show_only_matches_children);
7288
+ });
7289
+ }, this), inside);
7290
+ }
7291
+ else {
7292
+ a = $.extend({}, a);
7293
+ if(!a.data) { a.data = {}; }
7294
+ a.data.str = str;
7295
+ if(inside) {
7296
+ a.data.inside = inside;
7297
+ }
7298
+ if (this._data.search.lastRequest) {
7299
+ this._data.search.lastRequest.abort();
7300
+ }
7301
+ this._data.search.lastRequest = $.ajax(a)
7302
+ .fail($.proxy(function () {
7303
+ this._data.core.last_error = { 'error' : 'ajax', 'plugin' : 'search', 'id' : 'search_01', 'reason' : 'Could not load search parents', 'data' : JSON.stringify(a) };
7304
+ this.settings.core.error.call(this, this._data.core.last_error);
7305
+ }, this))
7306
+ .done($.proxy(function (d) {
7307
+ if(d && d.d) { d = d.d; }
7308
+ this._load_nodes(!$.isArray(d) ? [] : $.vakata.array_unique(d), function () {
7309
+ this.search(str, true, show_only_matches, inside, append, show_only_matches_children);
7310
+ });
7311
+ }, this));
7312
+ return this._data.search.lastRequest;
7313
+ }
7314
+ }
7315
+ if(!append) {
7316
+ this._data.search.str = str;
7317
+ this._data.search.dom = $();
7318
+ this._data.search.res = [];
7319
+ this._data.search.opn = [];
7320
+ this._data.search.som = show_only_matches;
7321
+ this._data.search.smc = show_only_matches_children;
7322
+ }
7323
+
7324
+ f = new $.vakata.search(str, true, { caseSensitive : s.case_sensitive, fuzzy : s.fuzzy });
7325
+ $.each(m[inside ? inside : $.jstree.root].children_d, function (ii, i) {
7326
+ var v = m[i];
7327
+ if(v.text && !v.state.hidden && (!s.search_leaves_only || (v.state.loaded && v.children.length === 0)) && ( (s.search_callback && s.search_callback.call(this, str, v)) || (!s.search_callback && f.search(v.text).isMatch) ) ) {
7328
+ r.push(i);
7329
+ p = p.concat(v.parents);
7330
+ }
7331
+ });
7332
+ if(r.length) {
7333
+ p = $.vakata.array_unique(p);
7334
+ for(i = 0, j = p.length; i < j; i++) {
7335
+ if(p[i] !== $.jstree.root && m[p[i]] && this.open_node(p[i], null, 0) === true) {
7336
+ this._data.search.opn.push(p[i]);
7337
+ }
7338
+ }
7339
+ if(!append) {
7340
+ this._data.search.dom = $(this.element[0].querySelectorAll('#' + $.map(r, function (v) { return "0123456789".indexOf(v[0]) !== -1 ? '\\3' + v[0] + ' ' + v.substr(1).replace($.jstree.idregex,'\\$&') : v.replace($.jstree.idregex,'\\$&'); }).join(', #')));
7341
+ this._data.search.res = r;
7342
+ }
7343
+ else {
7344
+ this._data.search.dom = this._data.search.dom.add($(this.element[0].querySelectorAll('#' + $.map(r, function (v) { return "0123456789".indexOf(v[0]) !== -1 ? '\\3' + v[0] + ' ' + v.substr(1).replace($.jstree.idregex,'\\$&') : v.replace($.jstree.idregex,'\\$&'); }).join(', #'))));
7345
+ this._data.search.res = $.vakata.array_unique(this._data.search.res.concat(r));
7346
+ }
7347
+ this._data.search.dom.children(".jstree-anchor").addClass('jstree-search');
7348
+ }
7349
+ /**
7350
+ * triggered after search is complete
7351
+ * @event
7352
+ * @name search.jstree
7353
+ * @param {jQuery} nodes a jQuery collection of matching nodes
7354
+ * @param {String} str the search string
7355
+ * @param {Array} res a collection of objects represeing the matching nodes
7356
+ * @plugin search
7357
+ */
7358
+ this.trigger('search', { nodes : this._data.search.dom, str : str, res : this._data.search.res, show_only_matches : show_only_matches });
7359
+ };
7360
+ /**
7361
+ * used to clear the last search (removes classes and shows all nodes if filtering is on)
7362
+ * @name clear_search()
7363
+ * @plugin search
7364
+ * @trigger clear_search.jstree
7365
+ */
7366
+ this.clear_search = function () {
7367
+ if(this.settings.search.close_opened_onclear) {
7368
+ this.close_node(this._data.search.opn, 0);
7369
+ }
7370
+ /**
7371
+ * triggered after search is complete
7372
+ * @event
7373
+ * @name clear_search.jstree
7374
+ * @param {jQuery} nodes a jQuery collection of matching nodes (the result from the last search)
7375
+ * @param {String} str the search string (the last search string)
7376
+ * @param {Array} res a collection of objects represeing the matching nodes (the result from the last search)
7377
+ * @plugin search
7378
+ */
7379
+ this.trigger('clear_search', { 'nodes' : this._data.search.dom, str : this._data.search.str, res : this._data.search.res });
7380
+ if(this._data.search.res.length) {
7381
+ this._data.search.dom = $(this.element[0].querySelectorAll('#' + $.map(this._data.search.res, function (v) {
7382
+ return "0123456789".indexOf(v[0]) !== -1 ? '\\3' + v[0] + ' ' + v.substr(1).replace($.jstree.idregex,'\\$&') : v.replace($.jstree.idregex,'\\$&');
7383
+ }).join(', #')));
7384
+ this._data.search.dom.children(".jstree-anchor").removeClass("jstree-search");
7385
+ }
7386
+ this._data.search.str = "";
7387
+ this._data.search.res = [];
7388
+ this._data.search.opn = [];
7389
+ this._data.search.dom = $();
7390
+ };
7391
+
7392
+ this.redraw_node = function(obj, deep, callback, force_render) {
7393
+ obj = parent.redraw_node.apply(this, arguments);
7394
+ if(obj) {
7395
+ if($.inArray(obj.id, this._data.search.res) !== -1) {
7396
+ var i, j, tmp = null;
7397
+ for(i = 0, j = obj.childNodes.length; i < j; i++) {
7398
+ if(obj.childNodes[i] && obj.childNodes[i].className && obj.childNodes[i].className.indexOf("jstree-anchor") !== -1) {
7399
+ tmp = obj.childNodes[i];
7400
+ break;
7401
+ }
7402
+ }
7403
+ if(tmp) {
7404
+ tmp.className += ' jstree-search';
7405
+ }
7406
+ }
7407
+ }
7408
+ return obj;
7409
+ };
7410
+ };
7411
+
7412
+ // helpers
7413
+ (function ($) {
7414
+ // from http://kiro.me/projects/fuse.html
7415
+ $.vakata.search = function(pattern, txt, options) {
7416
+ options = options || {};
7417
+ options = $.extend({}, $.vakata.search.defaults, options);
7418
+ if(options.fuzzy !== false) {
7419
+ options.fuzzy = true;
7420
+ }
7421
+ pattern = options.caseSensitive ? pattern : pattern.toLowerCase();
7422
+ var MATCH_LOCATION = options.location,
7423
+ MATCH_DISTANCE = options.distance,
7424
+ MATCH_THRESHOLD = options.threshold,
7425
+ patternLen = pattern.length,
7426
+ matchmask, pattern_alphabet, match_bitapScore, search;
7427
+ if(patternLen > 32) {
7428
+ options.fuzzy = false;
7429
+ }
7430
+ if(options.fuzzy) {
7431
+ matchmask = 1 << (patternLen - 1);
7432
+ pattern_alphabet = (function () {
7433
+ var mask = {},
7434
+ i = 0;
7435
+ for (i = 0; i < patternLen; i++) {
7436
+ mask[pattern.charAt(i)] = 0;
7437
+ }
7438
+ for (i = 0; i < patternLen; i++) {
7439
+ mask[pattern.charAt(i)] |= 1 << (patternLen - i - 1);
7440
+ }
7441
+ return mask;
7442
+ }());
7443
+ match_bitapScore = function (e, x) {
7444
+ var accuracy = e / patternLen,
7445
+ proximity = Math.abs(MATCH_LOCATION - x);
7446
+ if(!MATCH_DISTANCE) {
7447
+ return proximity ? 1.0 : accuracy;
7448
+ }
7449
+ return accuracy + (proximity / MATCH_DISTANCE);
7450
+ };
7451
+ }
7452
+ search = function (text) {
7453
+ text = options.caseSensitive ? text : text.toLowerCase();
7454
+ if(pattern === text || text.indexOf(pattern) !== -1) {
7455
+ return {
7456
+ isMatch: true,
7457
+ score: 0
7458
+ };
7459
+ }
7460
+ if(!options.fuzzy) {
7461
+ return {
7462
+ isMatch: false,
7463
+ score: 1
7464
+ };
7465
+ }
7466
+ var i, j,
7467
+ textLen = text.length,
7468
+ scoreThreshold = MATCH_THRESHOLD,
7469
+ bestLoc = text.indexOf(pattern, MATCH_LOCATION),
7470
+ binMin, binMid,
7471
+ binMax = patternLen + textLen,
7472
+ lastRd, start, finish, rd, charMatch,
7473
+ score = 1,
7474
+ locations = [];
7475
+ if (bestLoc !== -1) {
7476
+ scoreThreshold = Math.min(match_bitapScore(0, bestLoc), scoreThreshold);
7477
+ bestLoc = text.lastIndexOf(pattern, MATCH_LOCATION + patternLen);
7478
+ if (bestLoc !== -1) {
7479
+ scoreThreshold = Math.min(match_bitapScore(0, bestLoc), scoreThreshold);
7480
+ }
7481
+ }
7482
+ bestLoc = -1;
7483
+ for (i = 0; i < patternLen; i++) {
7484
+ binMin = 0;
7485
+ binMid = binMax;
7486
+ while (binMin < binMid) {
7487
+ if (match_bitapScore(i, MATCH_LOCATION + binMid) <= scoreThreshold) {
7488
+ binMin = binMid;
7489
+ } else {
7490
+ binMax = binMid;
7491
+ }
7492
+ binMid = Math.floor((binMax - binMin) / 2 + binMin);
7493
+ }
7494
+ binMax = binMid;
7495
+ start = Math.max(1, MATCH_LOCATION - binMid + 1);
7496
+ finish = Math.min(MATCH_LOCATION + binMid, textLen) + patternLen;
7497
+ rd = new Array(finish + 2);
7498
+ rd[finish + 1] = (1 << i) - 1;
7499
+ for (j = finish; j >= start; j--) {
7500
+ charMatch = pattern_alphabet[text.charAt(j - 1)];
7501
+ if (i === 0) {
7502
+ rd[j] = ((rd[j + 1] << 1) | 1) & charMatch;
7503
+ } else {
7504
+ rd[j] = ((rd[j + 1] << 1) | 1) & charMatch | (((lastRd[j + 1] | lastRd[j]) << 1) | 1) | lastRd[j + 1];
7505
+ }
7506
+ if (rd[j] & matchmask) {
7507
+ score = match_bitapScore(i, j - 1);
7508
+ if (score <= scoreThreshold) {
7509
+ scoreThreshold = score;
7510
+ bestLoc = j - 1;
7511
+ locations.push(bestLoc);
7512
+ if (bestLoc > MATCH_LOCATION) {
7513
+ start = Math.max(1, 2 * MATCH_LOCATION - bestLoc);
7514
+ } else {
7515
+ break;
7516
+ }
7517
+ }
7518
+ }
7519
+ }
7520
+ if (match_bitapScore(i + 1, MATCH_LOCATION) > scoreThreshold) {
7521
+ break;
7522
+ }
7523
+ lastRd = rd;
7524
+ }
7525
+ return {
7526
+ isMatch: bestLoc >= 0,
7527
+ score: score
7528
+ };
7529
+ };
7530
+ return txt === true ? { 'search' : search } : search(txt);
7531
+ };
7532
+ $.vakata.search.defaults = {
7533
+ location : 0,
7534
+ distance : 100,
7535
+ threshold : 0.6,
7536
+ fuzzy : false,
7537
+ caseSensitive : false
7538
+ };
7539
+ }($));
7540
+
7541
+ // include the search plugin by default
7542
+ // $.jstree.defaults.plugins.push("search");
7543
+
7544
+
7545
+ /**
7546
+ * ### Sort plugin
7547
+ *
7548
+ * Automatically sorts all siblings in the tree according to a sorting function.
7549
+ */
7550
+
7551
+ /**
7552
+ * the settings function used to sort the nodes.
7553
+ * It is executed in the tree's context, accepts two nodes as arguments and should return `1` or `-1`.
7554
+ * @name $.jstree.defaults.sort
7555
+ * @plugin sort
7556
+ */
7557
+ $.jstree.defaults.sort = function (a, b) {
7558
+ //return this.get_type(a) === this.get_type(b) ? (this.get_text(a) > this.get_text(b) ? 1 : -1) : this.get_type(a) >= this.get_type(b);
7559
+ return this.get_text(a) > this.get_text(b) ? 1 : -1;
7560
+ };
7561
+ $.jstree.plugins.sort = function (options, parent) {
7562
+ this.bind = function () {
7563
+ parent.bind.call(this);
7564
+ this.element
7565
+ .on("model.jstree", $.proxy(function (e, data) {
7566
+ this.sort(data.parent, true);
7567
+ }, this))
7568
+ .on("rename_node.jstree create_node.jstree", $.proxy(function (e, data) {
7569
+ this.sort(data.parent || data.node.parent, false);
7570
+ this.redraw_node(data.parent || data.node.parent, true);
7571
+ }, this))
7572
+ .on("move_node.jstree copy_node.jstree", $.proxy(function (e, data) {
7573
+ this.sort(data.parent, false);
7574
+ this.redraw_node(data.parent, true);
7575
+ }, this));
7576
+ };
7577
+ /**
7578
+ * used to sort a node's children
7579
+ * @private
7580
+ * @name sort(obj [, deep])
7581
+ * @param {mixed} obj the node
7582
+ * @param {Boolean} deep if set to `true` nodes are sorted recursively.
7583
+ * @plugin sort
7584
+ * @trigger search.jstree
7585
+ */
7586
+ this.sort = function (obj, deep) {
7587
+ var i, j;
7588
+ obj = this.get_node(obj);
7589
+ if(obj && obj.children && obj.children.length) {
7590
+ obj.children.sort($.proxy(this.settings.sort, this));
7591
+ if(deep) {
7592
+ for(i = 0, j = obj.children_d.length; i < j; i++) {
7593
+ this.sort(obj.children_d[i], false);
7594
+ }
7595
+ }
7596
+ }
7597
+ };
7598
+ };
7599
+
7600
+ // include the sort plugin by default
7601
+ // $.jstree.defaults.plugins.push("sort");
7602
+
7603
+ /**
7604
+ * ### State plugin
7605
+ *
7606
+ * Saves the state of the tree (selected nodes, opened nodes) on the user's computer using available options (localStorage, cookies, etc)
7607
+ */
7608
+
7609
+ var to = false;
7610
+ /**
7611
+ * stores all defaults for the state plugin
7612
+ * @name $.jstree.defaults.state
7613
+ * @plugin state
7614
+ */
7615
+ $.jstree.defaults.state = {
7616
+ /**
7617
+ * A string for the key to use when saving the current tree (change if using multiple trees in your project). Defaults to `jstree`.
7618
+ * @name $.jstree.defaults.state.key
7619
+ * @plugin state
7620
+ */
7621
+ key : 'jstree',
7622
+ /**
7623
+ * A space separated list of events that trigger a state save. Defaults to `changed.jstree open_node.jstree close_node.jstree`.
7624
+ * @name $.jstree.defaults.state.events
7625
+ * @plugin state
7626
+ */
7627
+ events : 'changed.jstree open_node.jstree close_node.jstree check_node.jstree uncheck_node.jstree',
7628
+ /**
7629
+ * Time in milliseconds after which the state will expire. Defaults to 'false' meaning - no expire.
7630
+ * @name $.jstree.defaults.state.ttl
7631
+ * @plugin state
7632
+ */
7633
+ ttl : false,
7634
+ /**
7635
+ * A function that will be executed prior to restoring state with one argument - the state object. Can be used to clear unwanted parts of the state.
7636
+ * @name $.jstree.defaults.state.filter
7637
+ * @plugin state
7638
+ */
7639
+ filter : false
7640
+ };
7641
+ $.jstree.plugins.state = function (options, parent) {
7642
+ this.bind = function () {
7643
+ parent.bind.call(this);
7644
+ var bind = $.proxy(function () {
7645
+ this.element.on(this.settings.state.events, $.proxy(function () {
7646
+ if(to) { clearTimeout(to); }
7647
+ to = setTimeout($.proxy(function () { this.save_state(); }, this), 100);
7648
+ }, this));
7649
+ /**
7650
+ * triggered when the state plugin is finished restoring the state (and immediately after ready if there is no state to restore).
7651
+ * @event
7652
+ * @name state_ready.jstree
7653
+ * @plugin state
7654
+ */
7655
+ this.trigger('state_ready');
7656
+ }, this);
7657
+ this.element
7658
+ .on("ready.jstree", $.proxy(function (e, data) {
7659
+ this.element.one("restore_state.jstree", bind);
7660
+ if(!this.restore_state()) { bind(); }
7661
+ }, this));
7662
+ };
7663
+ /**
7664
+ * save the state
7665
+ * @name save_state()
7666
+ * @plugin state
7667
+ */
7668
+ this.save_state = function () {
7669
+ var st = { 'state' : this.get_state(), 'ttl' : this.settings.state.ttl, 'sec' : +(new Date()) };
7670
+ $.vakata.storage.set(this.settings.state.key, JSON.stringify(st));
7671
+ };
7672
+ /**
7673
+ * restore the state from the user's computer
7674
+ * @name restore_state()
7675
+ * @plugin state
7676
+ */
7677
+ this.restore_state = function () {
7678
+ var k = $.vakata.storage.get(this.settings.state.key);
7679
+ if(!!k) { try { k = JSON.parse(k); } catch(ex) { return false; } }
7680
+ if(!!k && k.ttl && k.sec && +(new Date()) - k.sec > k.ttl) { return false; }
7681
+ if(!!k && k.state) { k = k.state; }
7682
+ if(!!k && $.isFunction(this.settings.state.filter)) { k = this.settings.state.filter.call(this, k); }
7683
+ if(!!k) {
7684
+ this.element.one("set_state.jstree", function (e, data) { data.instance.trigger('restore_state', { 'state' : $.extend(true, {}, k) }); });
7685
+ this.set_state(k);
7686
+ return true;
7687
+ }
7688
+ return false;
7689
+ };
7690
+ /**
7691
+ * clear the state on the user's computer
7692
+ * @name clear_state()
7693
+ * @plugin state
7694
+ */
7695
+ this.clear_state = function () {
7696
+ return $.vakata.storage.del(this.settings.state.key);
7697
+ };
7698
+ };
7699
+
7700
+ (function ($, undefined) {
7701
+ $.vakata.storage = {
7702
+ // simply specifying the functions in FF throws an error
7703
+ set : function (key, val) { return window.localStorage.setItem(key, val); },
7704
+ get : function (key) { return window.localStorage.getItem(key); },
7705
+ del : function (key) { return window.localStorage.removeItem(key); }
7706
+ };
7707
+ }($));
7708
+
7709
+ // include the state plugin by default
7710
+ // $.jstree.defaults.plugins.push("state");
7711
+
7712
+ /**
7713
+ * ### Types plugin
7714
+ *
7715
+ * Makes it possible to add predefined types for groups of nodes, which make it possible to easily control nesting rules and icon for each group.
7716
+ */
7717
+
7718
+ /**
7719
+ * An object storing all types as key value pairs, where the key is the type name and the value is an object that could contain following keys (all optional).
7720
+ *
7721
+ * * `max_children` the maximum number of immediate children this node type can have. Do not specify or set to `-1` for unlimited.
7722
+ * * `max_depth` the maximum number of nesting this node type can have. A value of `1` would mean that the node can have children, but no grandchildren. Do not specify or set to `-1` for unlimited.
7723
+ * * `valid_children` an array of node type strings, that nodes of this type can have as children. Do not specify or set to `-1` for no limits.
7724
+ * * `icon` a string - can be a path to an icon or a className, if using an image that is in the current directory use a `./` prefix, otherwise it will be detected as a class. Omit to use the default icon from your theme.
7725
+ * * `li_attr` an object of values which will be used to add HTML attributes on the resulting LI DOM node (merged with the node's own data)
7726
+ * * `a_attr` an object of values which will be used to add HTML attributes on the resulting A DOM node (merged with the node's own data)
7727
+ *
7728
+ * There are two predefined types:
7729
+ *
7730
+ * * `#` represents the root of the tree, for example `max_children` would control the maximum number of root nodes.
7731
+ * * `default` represents the default node - any settings here will be applied to all nodes that do not have a type specified.
7732
+ *
7733
+ * @name $.jstree.defaults.types
7734
+ * @plugin types
7735
+ */
7736
+ $.jstree.defaults.types = {
7737
+ 'default' : {}
7738
+ };
7739
+ $.jstree.defaults.types[$.jstree.root] = {};
7740
+
7741
+ $.jstree.plugins.types = function (options, parent) {
7742
+ this.init = function (el, options) {
7743
+ var i, j;
7744
+ if(options && options.types && options.types['default']) {
7745
+ for(i in options.types) {
7746
+ if(i !== "default" && i !== $.jstree.root && options.types.hasOwnProperty(i)) {
7747
+ for(j in options.types['default']) {
7748
+ if(options.types['default'].hasOwnProperty(j) && options.types[i][j] === undefined) {
7749
+ options.types[i][j] = options.types['default'][j];
7750
+ }
7751
+ }
7752
+ }
7753
+ }
7754
+ }
7755
+ parent.init.call(this, el, options);
7756
+ this._model.data[$.jstree.root].type = $.jstree.root;
7757
+ };
7758
+ this.refresh = function (skip_loading, forget_state) {
7759
+ parent.refresh.call(this, skip_loading, forget_state);
7760
+ this._model.data[$.jstree.root].type = $.jstree.root;
7761
+ };
7762
+ this.bind = function () {
7763
+ this.element
7764
+ .on('model.jstree', $.proxy(function (e, data) {
7765
+ var m = this._model.data,
7766
+ dpc = data.nodes,
7767
+ t = this.settings.types,
7768
+ i, j, c = 'default', k;
7769
+ for(i = 0, j = dpc.length; i < j; i++) {
7770
+ c = 'default';
7771
+ if(m[dpc[i]].original && m[dpc[i]].original.type && t[m[dpc[i]].original.type]) {
7772
+ c = m[dpc[i]].original.type;
7773
+ }
7774
+ if(m[dpc[i]].data && m[dpc[i]].data.jstree && m[dpc[i]].data.jstree.type && t[m[dpc[i]].data.jstree.type]) {
7775
+ c = m[dpc[i]].data.jstree.type;
7776
+ }
7777
+ m[dpc[i]].type = c;
7778
+ if(m[dpc[i]].icon === true && t[c].icon !== undefined) {
7779
+ m[dpc[i]].icon = t[c].icon;
7780
+ }
7781
+ if(t[c].li_attr !== undefined && typeof t[c].li_attr === 'object') {
7782
+ for (k in t[c].li_attr) {
7783
+ if (t[c].li_attr.hasOwnProperty(k)) {
7784
+ if (k === 'id') {
7785
+ continue;
7786
+ }
7787
+ else if (m[dpc[i]].li_attr[k] === undefined) {
7788
+ m[dpc[i]].li_attr[k] = t[c].li_attr[k];
7789
+ }
7790
+ else if (k === 'class') {
7791
+ m[dpc[i]].li_attr['class'] = t[c].li_attr['class'] + ' ' + m[dpc[i]].li_attr['class'];
7792
+ }
7793
+ }
7794
+ }
7795
+ }
7796
+ if(t[c].a_attr !== undefined && typeof t[c].a_attr === 'object') {
7797
+ for (k in t[c].a_attr) {
7798
+ if (t[c].a_attr.hasOwnProperty(k)) {
7799
+ if (k === 'id') {
7800
+ continue;
7801
+ }
7802
+ else if (m[dpc[i]].a_attr[k] === undefined) {
7803
+ m[dpc[i]].a_attr[k] = t[c].a_attr[k];
7804
+ }
7805
+ else if (k === 'href' && m[dpc[i]].a_attr[k] === '#') {
7806
+ m[dpc[i]].a_attr['href'] = t[c].a_attr['href'];
7807
+ }
7808
+ else if (k === 'class') {
7809
+ m[dpc[i]].a_attr['class'] = t[c].a_attr['class'] + ' ' + m[dpc[i]].a_attr['class'];
7810
+ }
7811
+ }
7812
+ }
7813
+ }
7814
+ }
7815
+ m[$.jstree.root].type = $.jstree.root;
7816
+ }, this));
7817
+ parent.bind.call(this);
7818
+ };
7819
+ this.get_json = function (obj, options, flat) {
7820
+ var i, j,
7821
+ m = this._model.data,
7822
+ opt = options ? $.extend(true, {}, options, {no_id:false}) : {},
7823
+ tmp = parent.get_json.call(this, obj, opt, flat);
7824
+ if(tmp === false) { return false; }
7825
+ if($.isArray(tmp)) {
7826
+ for(i = 0, j = tmp.length; i < j; i++) {
7827
+ tmp[i].type = tmp[i].id && m[tmp[i].id] && m[tmp[i].id].type ? m[tmp[i].id].type : "default";
7828
+ if(options && options.no_id) {
7829
+ delete tmp[i].id;
7830
+ if(tmp[i].li_attr && tmp[i].li_attr.id) {
7831
+ delete tmp[i].li_attr.id;
7832
+ }
7833
+ if(tmp[i].a_attr && tmp[i].a_attr.id) {
7834
+ delete tmp[i].a_attr.id;
7835
+ }
7836
+ }
7837
+ }
7838
+ }
7839
+ else {
7840
+ tmp.type = tmp.id && m[tmp.id] && m[tmp.id].type ? m[tmp.id].type : "default";
7841
+ if(options && options.no_id) {
7842
+ tmp = this._delete_ids(tmp);
7843
+ }
7844
+ }
7845
+ return tmp;
7846
+ };
7847
+ this._delete_ids = function (tmp) {
7848
+ if($.isArray(tmp)) {
7849
+ for(var i = 0, j = tmp.length; i < j; i++) {
7850
+ tmp[i] = this._delete_ids(tmp[i]);
7851
+ }
7852
+ return tmp;
7853
+ }
7854
+ delete tmp.id;
7855
+ if(tmp.li_attr && tmp.li_attr.id) {
7856
+ delete tmp.li_attr.id;
7857
+ }
7858
+ if(tmp.a_attr && tmp.a_attr.id) {
7859
+ delete tmp.a_attr.id;
7860
+ }
7861
+ if(tmp.children && $.isArray(tmp.children)) {
7862
+ tmp.children = this._delete_ids(tmp.children);
7863
+ }
7864
+ return tmp;
7865
+ };
7866
+ this.check = function (chk, obj, par, pos, more) {
7867
+ if(parent.check.call(this, chk, obj, par, pos, more) === false) { return false; }
7868
+ obj = obj && obj.id ? obj : this.get_node(obj);
7869
+ par = par && par.id ? par : this.get_node(par);
7870
+ var m = obj && obj.id ? (more && more.origin ? more.origin : $.jstree.reference(obj.id)) : null, tmp, d, i, j;
7871
+ m = m && m._model && m._model.data ? m._model.data : null;
7872
+ switch(chk) {
7873
+ case "create_node":
7874
+ case "move_node":
7875
+ case "copy_node":
7876
+ if(chk !== 'move_node' || $.inArray(obj.id, par.children) === -1) {
7877
+ tmp = this.get_rules(par);
7878
+ if(tmp.max_children !== undefined && tmp.max_children !== -1 && tmp.max_children === par.children.length) {
7879
+ this._data.core.last_error = { 'error' : 'check', 'plugin' : 'types', 'id' : 'types_01', 'reason' : 'max_children prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
7880
+ return false;
7881
+ }
7882
+ if(tmp.valid_children !== undefined && tmp.valid_children !== -1 && $.inArray((obj.type || 'default'), tmp.valid_children) === -1) {
7883
+ this._data.core.last_error = { 'error' : 'check', 'plugin' : 'types', 'id' : 'types_02', 'reason' : 'valid_children prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
7884
+ return false;
7885
+ }
7886
+ if(m && obj.children_d && obj.parents) {
7887
+ d = 0;
7888
+ for(i = 0, j = obj.children_d.length; i < j; i++) {
7889
+ d = Math.max(d, m[obj.children_d[i]].parents.length);
7890
+ }
7891
+ d = d - obj.parents.length + 1;
7892
+ }
7893
+ if(d <= 0 || d === undefined) { d = 1; }
7894
+ do {
7895
+ if(tmp.max_depth !== undefined && tmp.max_depth !== -1 && tmp.max_depth < d) {
7896
+ this._data.core.last_error = { 'error' : 'check', 'plugin' : 'types', 'id' : 'types_03', 'reason' : 'max_depth prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
7897
+ return false;
7898
+ }
7899
+ par = this.get_node(par.parent);
7900
+ tmp = this.get_rules(par);
7901
+ d++;
7902
+ } while(par);
7903
+ }
7904
+ break;
7905
+ }
7906
+ return true;
7907
+ };
7908
+ /**
7909
+ * used to retrieve the type settings object for a node
7910
+ * @name get_rules(obj)
7911
+ * @param {mixed} obj the node to find the rules for
7912
+ * @return {Object}
7913
+ * @plugin types
7914
+ */
7915
+ this.get_rules = function (obj) {
7916
+ obj = this.get_node(obj);
7917
+ if(!obj) { return false; }
7918
+ var tmp = this.get_type(obj, true);
7919
+ if(tmp.max_depth === undefined) { tmp.max_depth = -1; }
7920
+ if(tmp.max_children === undefined) { tmp.max_children = -1; }
7921
+ if(tmp.valid_children === undefined) { tmp.valid_children = -1; }
7922
+ return tmp;
7923
+ };
7924
+ /**
7925
+ * used to retrieve the type string or settings object for a node
7926
+ * @name get_type(obj [, rules])
7927
+ * @param {mixed} obj the node to find the rules for
7928
+ * @param {Boolean} rules if set to `true` instead of a string the settings object will be returned
7929
+ * @return {String|Object}
7930
+ * @plugin types
7931
+ */
7932
+ this.get_type = function (obj, rules) {
7933
+ obj = this.get_node(obj);
7934
+ return (!obj) ? false : ( rules ? $.extend({ 'type' : obj.type }, this.settings.types[obj.type]) : obj.type);
7935
+ };
7936
+ /**
7937
+ * used to change a node's type
7938
+ * @name set_type(obj, type)
7939
+ * @param {mixed} obj the node to change
7940
+ * @param {String} type the new type
7941
+ * @plugin types
7942
+ */
7943
+ this.set_type = function (obj, type) {
7944
+ var m = this._model.data, t, t1, t2, old_type, old_icon, k, d, a;
7945
+ if($.isArray(obj)) {
7946
+ obj = obj.slice();
7947
+ for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
7948
+ this.set_type(obj[t1], type);
7949
+ }
7950
+ return true;
7951
+ }
7952
+ t = this.settings.types;
7953
+ obj = this.get_node(obj);
7954
+ if(!t[type] || !obj) { return false; }
7955
+ d = this.get_node(obj, true);
7956
+ if (d && d.length) {
7957
+ a = d.children('.jstree-anchor');
7958
+ }
7959
+ old_type = obj.type;
7960
+ old_icon = this.get_icon(obj);
7961
+ obj.type = type;
7962
+ if(old_icon === true || !t[old_type] || (t[old_type].icon !== undefined && old_icon === t[old_type].icon)) {
7963
+ this.set_icon(obj, t[type].icon !== undefined ? t[type].icon : true);
7964
+ }
7965
+
7966
+ // remove old type props
7967
+ if(t[old_type] && t[old_type].li_attr !== undefined && typeof t[old_type].li_attr === 'object') {
7968
+ for (k in t[old_type].li_attr) {
7969
+ if (t[old_type].li_attr.hasOwnProperty(k)) {
7970
+ if (k === 'id') {
7971
+ continue;
7972
+ }
7973
+ else if (k === 'class') {
7974
+ m[obj.id].li_attr['class'] = (m[obj.id].li_attr['class'] || '').replace(t[old_type].li_attr[k], '');
7975
+ if (d) { d.removeClass(t[old_type].li_attr[k]); }
7976
+ }
7977
+ else if (m[obj.id].li_attr[k] === t[old_type].li_attr[k]) {
7978
+ m[obj.id].li_attr[k] = null;
7979
+ if (d) { d.removeAttr(k); }
7980
+ }
7981
+ }
7982
+ }
7983
+ }
7984
+ if(t[old_type] && t[old_type].a_attr !== undefined && typeof t[old_type].a_attr === 'object') {
7985
+ for (k in t[old_type].a_attr) {
7986
+ if (t[old_type].a_attr.hasOwnProperty(k)) {
7987
+ if (k === 'id') {
7988
+ continue;
7989
+ }
7990
+ else if (k === 'class') {
7991
+ m[obj.id].a_attr['class'] = (m[obj.id].a_attr['class'] || '').replace(t[old_type].a_attr[k], '');
7992
+ if (a) { a.removeClass(t[old_type].a_attr[k]); }
7993
+ }
7994
+ else if (m[obj.id].a_attr[k] === t[old_type].a_attr[k]) {
7995
+ if (k === 'href') {
7996
+ m[obj.id].a_attr[k] = '#';
7997
+ if (a) { a.attr('href', '#'); }
7998
+ }
7999
+ else {
8000
+ delete m[obj.id].a_attr[k];
8001
+ if (a) { a.removeAttr(k); }
8002
+ }
8003
+ }
8004
+ }
8005
+ }
8006
+ }
8007
+
8008
+ // add new props
8009
+ if(t[type].li_attr !== undefined && typeof t[type].li_attr === 'object') {
8010
+ for (k in t[type].li_attr) {
8011
+ if (t[type].li_attr.hasOwnProperty(k)) {
8012
+ if (k === 'id') {
8013
+ continue;
8014
+ }
8015
+ else if (m[obj.id].li_attr[k] === undefined) {
8016
+ m[obj.id].li_attr[k] = t[type].li_attr[k];
8017
+ if (d) {
8018
+ if (k === 'class') {
8019
+ d.addClass(t[type].li_attr[k]);
8020
+ }
8021
+ else {
8022
+ d.attr(k, t[type].li_attr[k]);
8023
+ }
8024
+ }
8025
+ }
8026
+ else if (k === 'class') {
8027
+ m[obj.id].li_attr['class'] = t[type].li_attr[k] + ' ' + m[obj.id].li_attr['class'];
8028
+ if (d) { d.addClass(t[type].li_attr[k]); }
8029
+ }
8030
+ }
8031
+ }
8032
+ }
8033
+ if(t[type].a_attr !== undefined && typeof t[type].a_attr === 'object') {
8034
+ for (k in t[type].a_attr) {
8035
+ if (t[type].a_attr.hasOwnProperty(k)) {
8036
+ if (k === 'id') {
8037
+ continue;
8038
+ }
8039
+ else if (m[obj.id].a_attr[k] === undefined) {
8040
+ m[obj.id].a_attr[k] = t[type].a_attr[k];
8041
+ if (a) {
8042
+ if (k === 'class') {
8043
+ a.addClass(t[type].a_attr[k]);
8044
+ }
8045
+ else {
8046
+ a.attr(k, t[type].a_attr[k]);
8047
+ }
8048
+ }
8049
+ }
8050
+ else if (k === 'href' && m[obj.id].a_attr[k] === '#') {
8051
+ m[obj.id].a_attr['href'] = t[type].a_attr['href'];
8052
+ if (a) { a.attr('href', t[type].a_attr['href']); }
8053
+ }
8054
+ else if (k === 'class') {
8055
+ m[obj.id].a_attr['class'] = t[type].a_attr['class'] + ' ' + m[obj.id].a_attr['class'];
8056
+ if (a) { a.addClass(t[type].a_attr[k]); }
8057
+ }
8058
+ }
8059
+ }
8060
+ }
8061
+
8062
+ return true;
8063
+ };
8064
+ };
8065
+ // include the types plugin by default
8066
+ // $.jstree.defaults.plugins.push("types");
8067
+
8068
+
8069
+ /**
8070
+ * ### Unique plugin
8071
+ *
8072
+ * Enforces that no nodes with the same name can coexist as siblings.
8073
+ */
8074
+
8075
+ /**
8076
+ * stores all defaults for the unique plugin
8077
+ * @name $.jstree.defaults.unique
8078
+ * @plugin unique
8079
+ */
8080
+ $.jstree.defaults.unique = {
8081
+ /**
8082
+ * Indicates if the comparison should be case sensitive. Default is `false`.
8083
+ * @name $.jstree.defaults.unique.case_sensitive
8084
+ * @plugin unique
8085
+ */
8086
+ case_sensitive : false,
8087
+ /**
8088
+ * A callback executed in the instance's scope when a new node is created and the name is already taken, the two arguments are the conflicting name and the counter. The default will produce results like `New node (2)`.
8089
+ * @name $.jstree.defaults.unique.duplicate
8090
+ * @plugin unique
8091
+ */
8092
+ duplicate : function (name, counter) {
8093
+ return name + ' (' + counter + ')';
8094
+ }
8095
+ };
8096
+
8097
+ $.jstree.plugins.unique = function (options, parent) {
8098
+ this.check = function (chk, obj, par, pos, more) {
8099
+ if(parent.check.call(this, chk, obj, par, pos, more) === false) { return false; }
8100
+ obj = obj && obj.id ? obj : this.get_node(obj);
8101
+ par = par && par.id ? par : this.get_node(par);
8102
+ if(!par || !par.children) { return true; }
8103
+ var n = chk === "rename_node" ? pos : obj.text,
8104
+ c = [],
8105
+ s = this.settings.unique.case_sensitive,
8106
+ m = this._model.data, i, j;
8107
+ for(i = 0, j = par.children.length; i < j; i++) {
8108
+ c.push(s ? m[par.children[i]].text : m[par.children[i]].text.toLowerCase());
8109
+ }
8110
+ if(!s) { n = n.toLowerCase(); }
8111
+ switch(chk) {
8112
+ case "delete_node":
8113
+ return true;
8114
+ case "rename_node":
8115
+ i = ($.inArray(n, c) === -1 || (obj.text && obj.text[ s ? 'toString' : 'toLowerCase']() === n));
8116
+ if(!i) {
8117
+ this._data.core.last_error = { 'error' : 'check', 'plugin' : 'unique', 'id' : 'unique_01', 'reason' : 'Child with name ' + n + ' already exists. Preventing: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
8118
+ }
8119
+ return i;
8120
+ case "create_node":
8121
+ i = ($.inArray(n, c) === -1);
8122
+ if(!i) {
8123
+ this._data.core.last_error = { 'error' : 'check', 'plugin' : 'unique', 'id' : 'unique_04', 'reason' : 'Child with name ' + n + ' already exists. Preventing: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
8124
+ }
8125
+ return i;
8126
+ case "copy_node":
8127
+ i = ($.inArray(n, c) === -1);
8128
+ if(!i) {
8129
+ this._data.core.last_error = { 'error' : 'check', 'plugin' : 'unique', 'id' : 'unique_02', 'reason' : 'Child with name ' + n + ' already exists. Preventing: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
8130
+ }
8131
+ return i;
8132
+ case "move_node":
8133
+ i = ( (obj.parent === par.id && (!more || !more.is_multi)) || $.inArray(n, c) === -1);
8134
+ if(!i) {
8135
+ this._data.core.last_error = { 'error' : 'check', 'plugin' : 'unique', 'id' : 'unique_03', 'reason' : 'Child with name ' + n + ' already exists. Preventing: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
8136
+ }
8137
+ return i;
8138
+ }
8139
+ return true;
8140
+ };
8141
+ this.create_node = function (par, node, pos, callback, is_loaded) {
8142
+ if(!node || node.text === undefined) {
8143
+ if(par === null) {
8144
+ par = $.jstree.root;
8145
+ }
8146
+ par = this.get_node(par);
8147
+ if(!par) {
8148
+ return parent.create_node.call(this, par, node, pos, callback, is_loaded);
8149
+ }
8150
+ pos = pos === undefined ? "last" : pos;
8151
+ if(!pos.toString().match(/^(before|after)$/) && !is_loaded && !this.is_loaded(par)) {
8152
+ return parent.create_node.call(this, par, node, pos, callback, is_loaded);
8153
+ }
8154
+ if(!node) { node = {}; }
8155
+ var tmp, n, dpc, i, j, m = this._model.data, s = this.settings.unique.case_sensitive, cb = this.settings.unique.duplicate;
8156
+ n = tmp = this.get_string('New node');
8157
+ dpc = [];
8158
+ for(i = 0, j = par.children.length; i < j; i++) {
8159
+ dpc.push(s ? m[par.children[i]].text : m[par.children[i]].text.toLowerCase());
8160
+ }
8161
+ i = 1;
8162
+ while($.inArray(s ? n : n.toLowerCase(), dpc) !== -1) {
8163
+ n = cb.call(this, tmp, (++i)).toString();
8164
+ }
8165
+ node.text = n;
8166
+ }
8167
+ return parent.create_node.call(this, par, node, pos, callback, is_loaded);
8168
+ };
8169
+ };
8170
+
8171
+ // include the unique plugin by default
8172
+ // $.jstree.defaults.plugins.push("unique");
8173
+
8174
+
8175
+ /**
8176
+ * ### Wholerow plugin
8177
+ *
8178
+ * Makes each node appear block level. Making selection easier. May cause slow down for large trees in old browsers.
8179
+ */
8180
+
8181
+ var div = document.createElement('DIV');
8182
+ div.setAttribute('unselectable','on');
8183
+ div.setAttribute('role','presentation');
8184
+ div.className = 'jstree-wholerow';
8185
+ div.innerHTML = '&#160;';
8186
+ $.jstree.plugins.wholerow = function (options, parent) {
8187
+ this.bind = function () {
8188
+ parent.bind.call(this);
8189
+
8190
+ this.element
8191
+ .on('ready.jstree set_state.jstree', $.proxy(function () {
8192
+ this.hide_dots();
8193
+ }, this))
8194
+ .on("init.jstree loading.jstree ready.jstree", $.proxy(function () {
8195
+ //div.style.height = this._data.core.li_height + 'px';
8196
+ this.get_container_ul().addClass('jstree-wholerow-ul');
8197
+ }, this))
8198
+ .on("deselect_all.jstree", $.proxy(function (e, data) {
8199
+ this.element.find('.jstree-wholerow-clicked').removeClass('jstree-wholerow-clicked');
8200
+ }, this))
8201
+ .on("changed.jstree", $.proxy(function (e, data) {
8202
+ this.element.find('.jstree-wholerow-clicked').removeClass('jstree-wholerow-clicked');
8203
+ var tmp = false, i, j;
8204
+ for(i = 0, j = data.selected.length; i < j; i++) {
8205
+ tmp = this.get_node(data.selected[i], true);
8206
+ if(tmp && tmp.length) {
8207
+ tmp.children('.jstree-wholerow').addClass('jstree-wholerow-clicked');
8208
+ }
8209
+ }
8210
+ }, this))
8211
+ .on("open_node.jstree", $.proxy(function (e, data) {
8212
+ this.get_node(data.node, true).find('.jstree-clicked').parent().children('.jstree-wholerow').addClass('jstree-wholerow-clicked');
8213
+ }, this))
8214
+ .on("hover_node.jstree dehover_node.jstree", $.proxy(function (e, data) {
8215
+ if(e.type === "hover_node" && this.is_disabled(data.node)) { return; }
8216
+ this.get_node(data.node, true).children('.jstree-wholerow')[e.type === "hover_node"?"addClass":"removeClass"]('jstree-wholerow-hovered');
8217
+ }, this))
8218
+ .on("contextmenu.jstree", ".jstree-wholerow", $.proxy(function (e) {
8219
+ if (this._data.contextmenu) {
8220
+ e.preventDefault();
8221
+ var tmp = $.Event('contextmenu', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey, pageX : e.pageX, pageY : e.pageY });
8222
+ $(e.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(tmp);
8223
+ }
8224
+ }, this))
8225
+ /*!
8226
+ .on("mousedown.jstree touchstart.jstree", ".jstree-wholerow", function (e) {
8227
+ if(e.target === e.currentTarget) {
8228
+ var a = $(e.currentTarget).closest(".jstree-node").children(".jstree-anchor");
8229
+ e.target = a[0];
8230
+ a.trigger(e);
8231
+ }
8232
+ })
8233
+ */
8234
+ .on("click.jstree", ".jstree-wholerow", function (e) {
8235
+ e.stopImmediatePropagation();
8236
+ var tmp = $.Event('click', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey });
8237
+ $(e.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(tmp).focus();
8238
+ })
8239
+ .on("dblclick.jstree", ".jstree-wholerow", function (e) {
8240
+ e.stopImmediatePropagation();
8241
+ var tmp = $.Event('dblclick', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey });
8242
+ $(e.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(tmp).focus();
8243
+ })
8244
+ .on("click.jstree", ".jstree-leaf > .jstree-ocl", $.proxy(function (e) {
8245
+ e.stopImmediatePropagation();
8246
+ var tmp = $.Event('click', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey });
8247
+ $(e.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(tmp).focus();
8248
+ }, this))
8249
+ .on("mouseover.jstree", ".jstree-wholerow, .jstree-icon", $.proxy(function (e) {
8250
+ e.stopImmediatePropagation();
8251
+ if(!this.is_disabled(e.currentTarget)) {
8252
+ this.hover_node(e.currentTarget);
8253
+ }
8254
+ return false;
8255
+ }, this))
8256
+ .on("mouseleave.jstree", ".jstree-node", $.proxy(function (e) {
8257
+ this.dehover_node(e.currentTarget);
8258
+ }, this));
8259
+ };
8260
+ this.teardown = function () {
8261
+ if(this.settings.wholerow) {
8262
+ this.element.find(".jstree-wholerow").remove();
8263
+ }
8264
+ parent.teardown.call(this);
8265
+ };
8266
+ this.redraw_node = function(obj, deep, callback, force_render) {
8267
+ obj = parent.redraw_node.apply(this, arguments);
8268
+ if(obj) {
8269
+ var tmp = div.cloneNode(true);
8270
+ //tmp.style.height = this._data.core.li_height + 'px';
8271
+ if($.inArray(obj.id, this._data.core.selected) !== -1) { tmp.className += ' jstree-wholerow-clicked'; }
8272
+ if(this._data.core.focused && this._data.core.focused === obj.id) { tmp.className += ' jstree-wholerow-hovered'; }
8273
+ obj.insertBefore(tmp, obj.childNodes[0]);
8274
+ }
8275
+ return obj;
8276
+ };
8277
+ };
8278
+ // include the wholerow plugin by default
8279
+ // $.jstree.defaults.plugins.push("wholerow");
8280
+ if(document.registerElement && Object && Object.create) {
8281
+ var proto = Object.create(HTMLElement.prototype);
8282
+ proto.createdCallback = function () {
8283
+ var c = { core : {}, plugins : [] }, i;
8284
+ for(i in $.jstree.plugins) {
8285
+ if($.jstree.plugins.hasOwnProperty(i) && this.attributes[i]) {
8286
+ c.plugins.push(i);
8287
+ if(this.getAttribute(i) && JSON.parse(this.getAttribute(i))) {
8288
+ c[i] = JSON.parse(this.getAttribute(i));
8289
+ }
8290
+ }
8291
+ }
8292
+ for(i in $.jstree.defaults.core) {
8293
+ if($.jstree.defaults.core.hasOwnProperty(i) && this.attributes[i]) {
8294
+ c.core[i] = JSON.parse(this.getAttribute(i)) || this.getAttribute(i);
8295
+ }
8296
+ }
8297
+ $(this).jstree(c);
8298
+ };
8299
+ // proto.attributeChangedCallback = function (name, previous, value) { };
8300
+ try {
8301
+ document.registerElement("vakata-jstree", { prototype: proto });
8302
+ } catch(ignore) { }
8303
+ }
8304
+
8305
+ }));
includes/jstree/jstree.min.js ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ /*! jsTree - v3.3.3 - 2016-10-31 - (MIT) */
2
+ !function(a){"use strict";"function"==typeof define&&define.amd?define(["jquery"],a):"undefined"!=typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a,b){"use strict";if(!a.jstree){var c=0,d=!1,e=!1,f=!1,g=[],h=a("script:last").attr("src"),i=window.document;a.jstree={version:"3.3.3",defaults:{plugins:[]},plugins:{},path:h&&-1!==h.indexOf("/")?h.replace(/\/[^\/]+$/,""):"",idregex:/[\\:&!^|()\[\]<>@*'+~#";.,=\- \/${}%?`]/g,root:"#"},a.jstree.create=function(b,d){var e=new a.jstree.core(++c),f=d;return d=a.extend(!0,{},a.jstree.defaults,d),f&&f.plugins&&(d.plugins=f.plugins),a.each(d.plugins,function(a,b){"core"!==a&&(e=e.plugin(b,d[b]))}),a(b).data("jstree",e),e.init(b,d),e},a.jstree.destroy=function(){a(".jstree:jstree").jstree("destroy"),a(i).off(".jstree")},a.jstree.core=function(a){this._id=a,this._cnt=0,this._wrk=null,this._data={core:{themes:{name:!1,dots:!1,icons:!1,ellipsis:!1},selected:[],last_error:{},working:!1,worker_queue:[],focused:null}}},a.jstree.reference=function(b){var c=null,d=null;if(!b||!b.id||b.tagName&&b.nodeType||(b=b.id),!d||!d.length)try{d=a(b)}catch(e){}if(!d||!d.length)try{d=a("#"+b.replace(a.jstree.idregex,"\\$&"))}catch(e){}return d&&d.length&&(d=d.closest(".jstree")).length&&(d=d.data("jstree"))?c=d:a(".jstree").each(function(){var d=a(this).data("jstree");return d&&d._model.data[b]?(c=d,!1):void 0}),c},a.fn.jstree=function(c){var d="string"==typeof c,e=Array.prototype.slice.call(arguments,1),f=null;return c!==!0||this.length?(this.each(function(){var g=a.jstree.reference(this),h=d&&g?g[c]:null;return f=d&&h?h.apply(g,e):null,g||d||c!==b&&!a.isPlainObject(c)||a.jstree.create(this,c),(g&&!d||c===!0)&&(f=g||!1),null!==f&&f!==b?!1:void 0}),null!==f&&f!==b?f:this):!1},a.expr.pseudos.jstree=a.expr.createPseudo(function(c){return function(c){return a(c).hasClass("jstree")&&a(c).data("jstree")!==b}}),a.jstree.defaults.core={data:!1,strings:!1,check_callback:!1,error:a.noop,animation:200,multiple:!0,themes:{name:!1,url:!1,dir:!1,dots:!0,icons:!0,ellipsis:!1,stripes:!1,variant:!1,responsive:!1},expand_selected_onload:!0,worker:!0,force_text:!1,dblclick_toggle:!0},a.jstree.core.prototype={plugin:function(b,c){var d=a.jstree.plugins[b];return d?(this._data[b]={},d.prototype=this,new d(c,this)):this},init:function(b,c){this._model={data:{},changed:[],force_full_redraw:!1,redraw_timeout:!1,default_state:{loaded:!0,opened:!1,selected:!1,disabled:!1}},this._model.data[a.jstree.root]={id:a.jstree.root,parent:null,parents:[],children:[],children_d:[],state:{loaded:!1}},this.element=a(b).addClass("jstree jstree-"+this._id),this.settings=c,this._data.core.ready=!1,this._data.core.loaded=!1,this._data.core.rtl="rtl"===this.element.css("direction"),this.element[this._data.core.rtl?"addClass":"removeClass"]("jstree-rtl"),this.element.attr("role","tree"),this.settings.core.multiple&&this.element.attr("aria-multiselectable",!0),this.element.attr("tabindex")||this.element.attr("tabindex","0"),this.bind(),this.trigger("init"),this._data.core.original_container_html=this.element.find(" > ul > li").clone(!0),this._data.core.original_container_html.find("li").addBack().contents().filter(function(){return 3===this.nodeType&&(!this.nodeValue||/^\s+$/.test(this.nodeValue))}).remove(),this.element.html("<ul class='jstree-container-ul jstree-children' role='group'><li id='j"+this._id+"_loading' class='jstree-initial-node jstree-loading jstree-leaf jstree-last' role='tree-item'><i class='jstree-icon jstree-ocl'></i><a class='jstree-anchor' href='#'><i class='jstree-icon jstree-themeicon-hidden'></i>"+this.get_string("Loading ...")+"</a></li></ul>"),this.element.attr("aria-activedescendant","j"+this._id+"_loading"),this._data.core.li_height=this.get_container_ul().children("li").first().height()||24,this._data.core.node=this._create_prototype_node(),this.trigger("loading"),this.load_node(a.jstree.root)},destroy:function(a){if(this._wrk)try{window.URL.revokeObjectURL(this._wrk),this._wrk=null}catch(b){}a||this.element.empty(),this.teardown()},_create_prototype_node:function(){var a=i.createElement("LI"),b,c;return a.setAttribute("role","treeitem"),b=i.createElement("I"),b.className="jstree-icon jstree-ocl",b.setAttribute("role","presentation"),a.appendChild(b),b=i.createElement("A"),b.className="jstree-anchor",b.setAttribute("href","#"),b.setAttribute("tabindex","-1"),c=i.createElement("I"),c.className="jstree-icon jstree-themeicon",c.setAttribute("role","presentation"),b.appendChild(c),a.appendChild(b),b=c=null,a},teardown:function(){this.unbind(),this.element.removeClass("jstree").removeData("jstree").find("[class^='jstree']").addBack().attr("class",function(){return this.className.replace(/jstree[^ ]*|$/gi,"")}),this.element=null},bind:function(){var b="",c=null,d=0;this.element.on("dblclick.jstree",function(a){if(a.target.tagName&&"input"===a.target.tagName.toLowerCase())return!0;if(i.selection&&i.selection.empty)i.selection.empty();else if(window.getSelection){var b=window.getSelection();try{b.removeAllRanges(),b.collapse()}catch(c){}}}).on("mousedown.jstree",a.proxy(function(a){a.target===this.element[0]&&(a.preventDefault(),d=+new Date)},this)).on("mousedown.jstree",".jstree-ocl",function(a){a.preventDefault()}).on("click.jstree",".jstree-ocl",a.proxy(function(a){this.toggle_node(a.target)},this)).on("dblclick.jstree",".jstree-anchor",a.proxy(function(a){return a.target.tagName&&"input"===a.target.tagName.toLowerCase()?!0:void(this.settings.core.dblclick_toggle&&this.toggle_node(a.target))},this)).on("click.jstree",".jstree-anchor",a.proxy(function(b){b.preventDefault(),b.currentTarget!==i.activeElement&&a(b.currentTarget).focus(),this.activate_node(b.currentTarget,b)},this)).on("keydown.jstree",".jstree-anchor",a.proxy(function(b){if(b.target.tagName&&"input"===b.target.tagName.toLowerCase())return!0;if(32!==b.which&&13!==b.which&&(b.shiftKey||b.ctrlKey||b.altKey||b.metaKey))return!0;var c=null;switch(this._data.core.rtl&&(37===b.which?b.which=39:39===b.which&&(b.which=37)),b.which){case 32:b.ctrlKey&&(b.type="click",a(b.currentTarget).trigger(b));break;case 13:b.type="click",a(b.currentTarget).trigger(b);break;case 37:b.preventDefault(),this.is_open(b.currentTarget)?this.close_node(b.currentTarget):(c=this.get_parent(b.currentTarget),c&&c.id!==a.jstree.root&&this.get_node(c,!0).children(".jstree-anchor").focus());break;case 38:b.preventDefault(),c=this.get_prev_dom(b.currentTarget),c&&c.length&&c.children(".jstree-anchor").focus();break;case 39:b.preventDefault(),this.is_closed(b.currentTarget)?this.open_node(b.currentTarget,function(a){this.get_node(a,!0).children(".jstree-anchor").focus()}):this.is_open(b.currentTarget)&&(c=this.get_node(b.currentTarget,!0).children(".jstree-children")[0],c&&a(this._firstChild(c)).children(".jstree-anchor").focus());break;case 40:b.preventDefault(),c=this.get_next_dom(b.currentTarget),c&&c.length&&c.children(".jstree-anchor").focus();break;case 106:this.open_all();break;case 36:b.preventDefault(),c=this._firstChild(this.get_container_ul()[0]),c&&a(c).children(".jstree-anchor").filter(":visible").focus();break;case 35:b.preventDefault(),this.element.find(".jstree-anchor").filter(":visible").last().focus();break;case 113:b.preventDefault(),this.edit(b.currentTarget)}},this)).on("load_node.jstree",a.proxy(function(b,c){c.status&&(c.node.id!==a.jstree.root||this._data.core.loaded||(this._data.core.loaded=!0,this._firstChild(this.get_container_ul()[0])&&this.element.attr("aria-activedescendant",this._firstChild(this.get_container_ul()[0]).id),this.trigger("loaded")),this._data.core.ready||setTimeout(a.proxy(function(){if(this.element&&!this.get_container_ul().find(".jstree-loading").length){if(this._data.core.ready=!0,this._data.core.selected.length){if(this.settings.core.expand_selected_onload){var b=[],c,d;for(c=0,d=this._data.core.selected.length;d>c;c++)b=b.concat(this._model.data[this._data.core.selected[c]].parents);for(b=a.vakata.array_unique(b),c=0,d=b.length;d>c;c++)this.open_node(b[c],!1,0)}this.trigger("changed",{action:"ready",selected:this._data.core.selected})}this.trigger("ready")}},this),0))},this)).on("keypress.jstree",a.proxy(function(d){if(d.target.tagName&&"input"===d.target.tagName.toLowerCase())return!0;c&&clearTimeout(c),c=setTimeout(function(){b=""},500);var e=String.fromCharCode(d.which).toLowerCase(),f=this.element.find(".jstree-anchor").filter(":visible"),g=f.index(i.activeElement)||0,h=!1;if(b+=e,b.length>1){if(f.slice(g).each(a.proxy(function(c,d){return 0===a(d).text().toLowerCase().indexOf(b)?(a(d).focus(),h=!0,!1):void 0},this)),h)return;if(f.slice(0,g).each(a.proxy(function(c,d){return 0===a(d).text().toLowerCase().indexOf(b)?(a(d).focus(),h=!0,!1):void 0},this)),h)return}if(new RegExp("^"+e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")+"+$").test(b)){if(f.slice(g+1).each(a.proxy(function(b,c){return a(c).text().toLowerCase().charAt(0)===e?(a(c).focus(),h=!0,!1):void 0},this)),h)return;if(f.slice(0,g+1).each(a.proxy(function(b,c){return a(c).text().toLowerCase().charAt(0)===e?(a(c).focus(),h=!0,!1):void 0},this)),h)return}},this)).on("init.jstree",a.proxy(function(){var a=this.settings.core.themes;this._data.core.themes.dots=a.dots,this._data.core.themes.stripes=a.stripes,this._data.core.themes.icons=a.icons,this._data.core.themes.ellipsis=a.ellipsis,this.set_theme(a.name||"default",a.url),this.set_theme_variant(a.variant)},this)).on("loading.jstree",a.proxy(function(){this[this._data.core.themes.dots?"show_dots":"hide_dots"](),this[this._data.core.themes.icons?"show_icons":"hide_icons"](),this[this._data.core.themes.stripes?"show_stripes":"hide_stripes"](),this[this._data.core.themes.ellipsis?"show_ellipsis":"hide_ellipsis"]()},this)).on("blur.jstree",".jstree-anchor",a.proxy(function(b){this._data.core.focused=null,a(b.currentTarget).filter(".jstree-hovered").mouseleave(),this.element.attr("tabindex","0")},this)).on("focus.jstree",".jstree-anchor",a.proxy(function(b){var c=this.get_node(b.currentTarget);c&&c.id&&(this._data.core.focused=c.id),this.element.find(".jstree-hovered").not(b.currentTarget).mouseleave(),a(b.currentTarget).mouseenter(),this.element.attr("tabindex","-1")},this)).on("focus.jstree",a.proxy(function(){if(+new Date-d>500&&!this._data.core.focused){d=0;var a=this.get_node(this.element.attr("aria-activedescendant"),!0);a&&a.find("> .jstree-anchor").focus()}},this)).on("mouseenter.jstree",".jstree-anchor",a.proxy(function(a){this.hover_node(a.currentTarget)},this)).on("mouseleave.jstree",".jstree-anchor",a.proxy(function(a){this.dehover_node(a.currentTarget)},this))},unbind:function(){this.element.off(".jstree"),a(i).off(".jstree-"+this._id)},trigger:function(a,b){b||(b={}),b.instance=this,this.element.triggerHandler(a.replace(".jstree","")+".jstree",b)},get_container:function(){return this.element},get_container_ul:function(){return this.element.children(".jstree-children").first()},get_string:function(b){var c=this.settings.core.strings;return a.isFunction(c)?c.call(this,b):c&&c[b]?c[b]:b},_firstChild:function(a){a=a?a.firstChild:null;while(null!==a&&1!==a.nodeType)a=a.nextSibling;return a},_nextSibling:function(a){a=a?a.nextSibling:null;while(null!==a&&1!==a.nodeType)a=a.nextSibling;return a},_previousSibling:function(a){a=a?a.previousSibling:null;while(null!==a&&1!==a.nodeType)a=a.previousSibling;return a},get_node:function(b,c){b&&b.id&&(b=b.id);var d;try{if(this._model.data[b])b=this._model.data[b];else if("string"==typeof b&&this._model.data[b.replace(/^#/,"")])b=this._model.data[b.replace(/^#/,"")];else if("string"==typeof b&&(d=a("#"+b.replace(a.jstree.idregex,"\\$&"),this.element)).length&&this._model.data[d.closest(".jstree-node").attr("id")])b=this._model.data[d.closest(".jstree-node").attr("id")];else if((d=a(b,this.element)).length&&this._model.data[d.closest(".jstree-node").attr("id")])b=this._model.data[d.closest(".jstree-node").attr("id")];else{if(!(d=a(b,this.element)).length||!d.hasClass("jstree"))return!1;b=this._model.data[a.jstree.root]}return c&&(b=b.id===a.jstree.root?this.element:a("#"+b.id.replace(a.jstree.idregex,"\\$&"),this.element)),b}catch(e){return!1}},get_path:function(b,c,d){if(b=b.parents?b:this.get_node(b),!b||b.id===a.jstree.root||!b.parents)return!1;var e,f,g=[];for(g.push(d?b.id:b.text),e=0,f=b.parents.length;f>e;e++)g.push(d?b.parents[e]:this.get_text(b.parents[e]));return g=g.reverse().slice(1),c?g.join(c):g},get_next_dom:function(b,c){var d;if(b=this.get_node(b,!0),b[0]===this.element[0]){d=this._firstChild(this.get_container_ul()[0]);while(d&&0===d.offsetHeight)d=this._nextSibling(d);return d?a(d):!1}if(!b||!b.length)return!1;if(c){d=b[0];do d=this._nextSibling(d);while(d&&0===d.offsetHeight);return d?a(d):!1}if(b.hasClass("jstree-open")){d=this._firstChild(b.children(".jstree-children")[0]);while(d&&0===d.offsetHeight)d=this._nextSibling(d);if(null!==d)return a(d)}d=b[0];do d=this._nextSibling(d);while(d&&0===d.offsetHeight);return null!==d?a(d):b.parentsUntil(".jstree",".jstree-node").nextAll(".jstree-node:visible").first()},get_prev_dom:function(b,c){var d;if(b=this.get_node(b,!0),b[0]===this.element[0]){d=this.get_container_ul()[0].lastChild;while(d&&0===d.offsetHeight)d=this._previousSibling(d);return d?a(d):!1}if(!b||!b.length)return!1;if(c){d=b[0];do d=this._previousSibling(d);while(d&&0===d.offsetHeight);return d?a(d):!1}d=b[0];do d=this._previousSibling(d);while(d&&0===d.offsetHeight);if(null!==d){b=a(d);while(b.hasClass("jstree-open"))b=b.children(".jstree-children").first().children(".jstree-node:visible:last");return b}return d=b[0].parentNode.parentNode,d&&d.className&&-1!==d.className.indexOf("jstree-node")?a(d):!1},get_parent:function(b){return b=this.get_node(b),b&&b.id!==a.jstree.root?b.parent:!1},get_children_dom:function(a){return a=this.get_node(a,!0),a[0]===this.element[0]?this.get_container_ul().children(".jstree-node"):a&&a.length?a.children(".jstree-children").children(".jstree-node"):!1},is_parent:function(a){return a=this.get_node(a),a&&(a.state.loaded===!1||a.children.length>0)},is_loaded:function(a){return a=this.get_node(a),a&&a.state.loaded},is_loading:function(a){return a=this.get_node(a),a&&a.state&&a.state.loading},is_open:function(a){return a=this.get_node(a),a&&a.state.opened},is_closed:function(a){return a=this.get_node(a),a&&this.is_parent(a)&&!a.state.opened},is_leaf:function(a){return!this.is_parent(a)},load_node:function(b,c){var d,e,f,g,h;if(a.isArray(b))return this._load_nodes(b.slice(),c),!0;if(b=this.get_node(b),!b)return c&&c.call(this,b,!1),!1;if(b.state.loaded){for(b.state.loaded=!1,f=0,g=b.parents.length;g>f;f++)this._model.data[b.parents[f]].children_d=a.vakata.array_filter(this._model.data[b.parents[f]].children_d,function(c){return-1===a.inArray(c,b.children_d)});for(d=0,e=b.children_d.length;e>d;d++)this._model.data[b.children_d[d]].state.selected&&(h=!0),delete this._model.data[b.children_d[d]];h&&(this._data.core.selected=a.vakata.array_filter(this._data.core.selected,function(c){return-1===a.inArray(c,b.children_d)})),b.children=[],b.children_d=[],h&&this.trigger("changed",{action:"load_node",node:b,selected:this._data.core.selected})}return b.state.failed=!1,b.state.loading=!0,this.get_node(b,!0).addClass("jstree-loading").attr("aria-busy",!0),this._load_node(b,a.proxy(function(a){b=this._model.data[b.id],b.state.loading=!1,b.state.loaded=a,b.state.failed=!b.state.loaded;var d=this.get_node(b,!0),e=0,f=0,g=this._model.data,h=!1;for(e=0,f=b.children.length;f>e;e++)if(g[b.children[e]]&&!g[b.children[e]].state.hidden){h=!0;break}b.state.loaded&&d&&d.length&&(d.removeClass("jstree-closed jstree-open jstree-leaf"),h?"#"!==b.id&&d.addClass(b.state.opened?"jstree-open":"jstree-closed"):d.addClass("jstree-leaf")),d.removeClass("jstree-loading").attr("aria-busy",!1),this.trigger("load_node",{node:b,status:a}),c&&c.call(this,b,a)},this)),!0},_load_nodes:function(a,b,c,d){var e=!0,f=function(){this._load_nodes(a,b,!0)},g=this._model.data,h,i,j=[];for(h=0,i=a.length;i>h;h++)g[a[h]]&&(!g[a[h]].state.loaded&&!g[a[h]].state.failed||!c&&d)&&(this.is_loading(a[h])||this.load_node(a[h],f),e=!1);if(e){for(h=0,i=a.length;i>h;h++)g[a[h]]&&g[a[h]].state.loaded&&j.push(a[h]);b&&!b.done&&(b.call(this,j),b.done=!0)}},load_all:function(b,c){if(b||(b=a.jstree.root),b=this.get_node(b),!b)return!1;var d=[],e=this._model.data,f=e[b.id].children_d,g,h;for(b.state&&!b.state.loaded&&d.push(b.id),g=0,h=f.length;h>g;g++)e[f[g]]&&e[f[g]].state&&!e[f[g]].state.loaded&&d.push(f[g]);d.length?this._load_nodes(d,function(){this.load_all(b,c)}):(c&&c.call(this,b),this.trigger("load_all",{node:b}))},_load_node:function(b,c){var d=this.settings.core.data,e,f=function g(){return 3!==this.nodeType&&8!==this.nodeType};return d?a.isFunction(d)?d.call(this,b,a.proxy(function(d){d===!1?c.call(this,!1):this["string"==typeof d?"_append_html_data":"_append_json_data"](b,"string"==typeof d?a(a.parseHTML(d)).filter(f):d,function(a){c.call(this,a)})},this)):"object"==typeof d?d.url?(d=a.extend(!0,{},d),a.isFunction(d.url)&&(d.url=d.url.call(this,b)),a.isFunction(d.data)&&(d.data=d.data.call(this,b)),a.ajax(d).done(a.proxy(function(d,e,g){var h=g.getResponseHeader("Content-Type");return h&&-1!==h.indexOf("json")||"object"==typeof d?this._append_json_data(b,d,function(a){c.call(this,a)}):h&&-1!==h.indexOf("html")||"string"==typeof d?this._append_html_data(b,a(a.parseHTML(d)).filter(f),function(a){c.call(this,a)}):(this._data.core.last_error={error:"ajax",plugin:"core",id:"core_04",reason:"Could not load node",data:JSON.stringify({id:b.id,xhr:g})},this.settings.core.error.call(this,this._data.core.last_error),c.call(this,!1))},this)).fail(a.proxy(function(a){c.call(this,!1),this._data.core.last_error={error:"ajax",plugin:"core",id:"core_04",reason:"Could not load node",data:JSON.stringify({id:b.id,xhr:a})},this.settings.core.error.call(this,this._data.core.last_error)},this))):(e=a.isArray(d)||a.isPlainObject(d)?JSON.parse(JSON.stringify(d)):d,b.id===a.jstree.root?this._append_json_data(b,e,function(a){c.call(this,a)}):(this._data.core.last_error={error:"nodata",plugin:"core",id:"core_05",reason:"Could not load node",data:JSON.stringify({id:b.id})},this.settings.core.error.call(this,this._data.core.last_error),c.call(this,!1))):"string"==typeof d?b.id===a.jstree.root?this._append_html_data(b,a(a.parseHTML(d)).filter(f),function(a){c.call(this,a)}):(this._data.core.last_error={error:"nodata",plugin:"core",id:"core_06",reason:"Could not load node",data:JSON.stringify({id:b.id})},this.settings.core.error.call(this,this._data.core.last_error),c.call(this,!1)):c.call(this,!1):b.id===a.jstree.root?this._append_html_data(b,this._data.core.original_container_html.clone(!0),function(a){c.call(this,a)}):c.call(this,!1)},_node_changed:function(a){a=this.get_node(a),a&&this._model.changed.push(a.id)},_append_html_data:function(b,c,d){b=this.get_node(b),b.children=[],b.children_d=[];var e=c.is("ul")?c.children():c,f=b.id,g=[],h=[],i=this._model.data,j=i[f],k=this._data.core.selected.length,l,m,n;for(e.each(a.proxy(function(b,c){l=this._parse_model_from_html(a(c),f,j.parents.concat()),l&&(g.push(l),h.push(l),i[l].children_d.length&&(h=h.concat(i[l].children_d)))},this)),j.children=g,j.children_d=h,m=0,n=j.parents.length;n>m;m++)i[j.parents[m]].children_d=i[j.parents[m]].children_d.concat(h);this.trigger("model",{nodes:h,parent:f}),f!==a.jstree.root?(this._node_changed(f),this.redraw()):(this.get_container_ul().children(".jstree-initial-node").remove(),this.redraw(!0)),this._data.core.selected.length!==k&&this.trigger("changed",{action:"model",selected:this._data.core.selected}),d.call(this,!0)},_append_json_data:function(b,c,d,e){if(null!==this.element){b=this.get_node(b),b.children=[],b.children_d=[],c.d&&(c=c.d,"string"==typeof c&&(c=JSON.parse(c))),a.isArray(c)||(c=[c]);var f=null,g={df:this._model.default_state,dat:c,par:b.id,m:this._model.data,t_id:this._id,t_cnt:this._cnt,sel:this._data.core.selected},h=function(a,b){a.data&&(a=a.data);var c=a.dat,d=a.par,e=[],f=[],g=[],h=a.df,i=a.t_id,j=a.t_cnt,k=a.m,l=k[d],m=a.sel,n,o,p,q,r=function(a,c,d){d=d?d.concat():[],c&&d.unshift(c);var e=a.id.toString(),f,i,j,l,m={id:e,text:a.text||"",icon:a.icon!==b?a.icon:!0,parent:c,parents:d,children:a.children||[],children_d:a.children_d||[],data:a.data,state:{},li_attr:{id:!1},a_attr:{href:"#"},original:!1};for(f in h)h.hasOwnProperty(f)&&(m.state[f]=h[f]);if(a&&a.data&&a.data.jstree&&a.data.jstree.icon&&(m.icon=a.data.jstree.icon),(m.icon===b||null===m.icon||""===m.icon)&&(m.icon=!0),a&&a.data&&(m.data=a.data,a.data.jstree))for(f in a.data.jstree)a.data.jstree.hasOwnProperty(f)&&(m.state[f]=a.data.jstree[f]);if(a&&"object"==typeof a.state)for(f in a.state)a.state.hasOwnProperty(f)&&(m.state[f]=a.state[f]);if(a&&"object"==typeof a.li_attr)for(f in a.li_attr)a.li_attr.hasOwnProperty(f)&&(m.li_attr[f]=a.li_attr[f]);if(m.li_attr.id||(m.li_attr.id=e),a&&"object"==typeof a.a_attr)for(f in a.a_attr)a.a_attr.hasOwnProperty(f)&&(m.a_attr[f]=a.a_attr[f]);for(a&&a.children&&a.children===!0&&(m.state.loaded=!1,m.children=[],m.children_d=[]),k[m.id]=m,f=0,i=m.children.length;i>f;f++)j=r(k[m.children[f]],m.id,d),l=k[j],m.children_d.push(j),l.children_d.length&&(m.children_d=m.children_d.concat(l.children_d));return delete a.data,delete a.children,k[m.id].original=a,m.state.selected&&g.push(m.id),m.id},s=function(a,c,d){d=d?d.concat():[],c&&d.unshift(c);var e=!1,f,l,m,n,o;do e="j"+i+"_"+ ++j;while(k[e]);o={id:!1,text:"string"==typeof a?a:"",icon:"object"==typeof a&&a.icon!==b?a.icon:!0,parent:c,parents:d,children:[],children_d:[],data:null,state:{},li_attr:{id:!1},a_attr:{href:"#"},original:!1};for(f in h)h.hasOwnProperty(f)&&(o.state[f]=h[f]);if(a&&a.id&&(o.id=a.id.toString()),a&&a.text&&(o.text=a.text),a&&a.data&&a.data.jstree&&a.data.jstree.icon&&(o.icon=a.data.jstree.icon),(o.icon===b||null===o.icon||""===o.icon)&&(o.icon=!0),a&&a.data&&(o.data=a.data,a.data.jstree))for(f in a.data.jstree)a.data.jstree.hasOwnProperty(f)&&(o.state[f]=a.data.jstree[f]);if(a&&"object"==typeof a.state)for(f in a.state)a.state.hasOwnProperty(f)&&(o.state[f]=a.state[f]);if(a&&"object"==typeof a.li_attr)for(f in a.li_attr)a.li_attr.hasOwnProperty(f)&&(o.li_attr[f]=a.li_attr[f]);if(o.li_attr.id&&!o.id&&(o.id=o.li_attr.id.toString()),o.id||(o.id=e),o.li_attr.id||(o.li_attr.id=o.id),a&&"object"==typeof a.a_attr)for(f in a.a_attr)a.a_attr.hasOwnProperty(f)&&(o.a_attr[f]=a.a_attr[f]);if(a&&a.children&&a.children.length){for(f=0,l=a.children.length;l>f;f++)m=s(a.children[f],o.id,d),n=k[m],o.children.push(m),n.children_d.length&&(o.children_d=o.children_d.concat(n.children_d));o.children_d=o.children_d.concat(o.children)}return a&&a.children&&a.children===!0&&(o.state.loaded=!1,o.children=[],o.children_d=[]),delete a.data,delete a.children,o.original=a,k[o.id]=o,o.state.selected&&g.push(o.id),o.id};if(c.length&&c[0].id!==b&&c[0].parent!==b){for(o=0,p=c.length;p>o;o++)c[o].children||(c[o].children=[]),k[c[o].id.toString()]=c[o];for(o=0,p=c.length;p>o;o++)k[c[o].parent.toString()].children.push(c[o].id.toString()),l.children_d.push(c[o].id.toString());for(o=0,p=l.children.length;p>o;o++)n=r(k[l.children[o]],d,l.parents.concat()),f.push(n),k[n].children_d.length&&(f=f.concat(k[n].children_d));for(o=0,p=l.parents.length;p>o;o++)k[l.parents[o]].children_d=k[l.parents[o]].children_d.concat(f);q={cnt:j,mod:k,sel:m,par:d,dpc:f,add:g}}else{for(o=0,p=c.length;p>o;o++)n=s(c[o],d,l.parents.concat()),n&&(e.push(n),f.push(n),k[n].children_d.length&&(f=f.concat(k[n].children_d)));for(l.children=e,l.children_d=f,o=0,p=l.parents.length;p>o;o++)k[l.parents[o]].children_d=k[l.parents[o]].children_d.concat(f);q={cnt:j,mod:k,sel:m,par:d,dpc:f,add:g}}return"undefined"!=typeof window&&"undefined"!=typeof window.document?q:void postMessage(q)},i=function(b,c){if(null!==this.element){this._cnt=b.cnt;var e,f=this._model.data;for(e in f)f.hasOwnProperty(e)&&f[e].state&&f[e].state.loading&&b.mod[e]&&(b.mod[e].state.loading=!0);if(this._model.data=b.mod,c){var g,h=b.add,i=b.sel,j=this._data.core.selected.slice();if(f=this._model.data,i.length!==j.length||a.vakata.array_unique(i.concat(j)).length!==i.length){for(e=0,g=i.length;g>e;e++)-1===a.inArray(i[e],h)&&-1===a.inArray(i[e],j)&&(f[i[e]].state.selected=!1);for(e=0,g=j.length;g>e;e++)-1===a.inArray(j[e],i)&&(f[j[e]].state.selected=!0)}}b.add.length&&(this._data.core.selected=this._data.core.selected.concat(b.add)),this.trigger("model",{nodes:b.dpc,parent:b.par}),b.par!==a.jstree.root?(this._node_changed(b.par),this.redraw()):this.redraw(!0),b.add.length&&this.trigger("changed",{action:"model",selected:this._data.core.selected}),d.call(this,!0)}};if(this.settings.core.worker&&window.Blob&&window.URL&&window.Worker)try{null===this._wrk&&(this._wrk=window.URL.createObjectURL(new window.Blob(["self.onmessage = "+h.toString()],{type:"text/javascript"}))),!this._data.core.working||e?(this._data.core.working=!0,f=new window.Worker(this._wrk),f.onmessage=a.proxy(function(a){i.call(this,a.data,!0);try{f.terminate(),f=null}catch(b){}this._data.core.worker_queue.length?this._append_json_data.apply(this,this._data.core.worker_queue.shift()):this._data.core.working=!1},this),g.par?f.postMessage(g):this._data.core.worker_queue.length?this._append_json_data.apply(this,this._data.core.worker_queue.shift()):this._data.core.working=!1):this._data.core.worker_queue.push([b,c,d,!0])}catch(j){i.call(this,h(g),!1),this._data.core.worker_queue.length?this._append_json_data.apply(this,this._data.core.worker_queue.shift()):this._data.core.working=!1}else i.call(this,h(g),!1)}},_parse_model_from_html:function(c,d,e){e=e?[].concat(e):[],d&&e.unshift(d);var f,g,h=this._model.data,i={id:!1,text:!1,icon:!0,parent:d,parents:e,children:[],children_d:[],data:null,state:{},li_attr:{id:!1},a_attr:{href:"#"},original:!1},j,k,l;for(j in this._model.default_state)this._model.default_state.hasOwnProperty(j)&&(i.state[j]=this._model.default_state[j]);if(k=a.vakata.attributes(c,!0),a.each(k,function(b,c){return c=a.trim(c),c.length?(i.li_attr[b]=c,void("id"===b&&(i.id=c.toString()))):!0}),k=c.children("a").first(),k.length&&(k=a.vakata.attributes(k,!0),a.each(k,function(b,c){c=a.trim(c),c.length&&(i.a_attr[b]=c)})),k=c.children("a").first().length?c.children("a").first().clone():c.clone(),k.children("ins, i, ul").remove(),k=k.html(),k=a("<div />").html(k),i.text=this.settings.core.force_text?k.text():k.html(),k=c.data(),i.data=k?a.extend(!0,{},k):null,i.state.opened=c.hasClass("jstree-open"),i.state.selected=c.children("a").hasClass("jstree-clicked"),i.state.disabled=c.children("a").hasClass("jstree-disabled"),i.data&&i.data.jstree)for(j in i.data.jstree)i.data.jstree.hasOwnProperty(j)&&(i.state[j]=i.data.jstree[j]);k=c.children("a").children(".jstree-themeicon"),k.length&&(i.icon=k.hasClass("jstree-themeicon-hidden")?!1:k.attr("rel")),i.state.icon!==b&&(i.icon=i.state.icon),(i.icon===b||null===i.icon||""===i.icon)&&(i.icon=!0),k=c.children("ul").children("li");do l="j"+this._id+"_"+ ++this._cnt;while(h[l]);return i.id=i.li_attr.id?i.li_attr.id.toString():l,k.length?(k.each(a.proxy(function(b,c){f=this._parse_model_from_html(a(c),i.id,e),g=this._model.data[f],i.children.push(f),g.children_d.length&&(i.children_d=i.children_d.concat(g.children_d))},this)),i.children_d=i.children_d.concat(i.children)):c.hasClass("jstree-closed")&&(i.state.loaded=!1),i.li_attr["class"]&&(i.li_attr["class"]=i.li_attr["class"].replace("jstree-closed","").replace("jstree-open","")),i.a_attr["class"]&&(i.a_attr["class"]=i.a_attr["class"].replace("jstree-clicked","").replace("jstree-disabled","")),h[i.id]=i,i.state.selected&&this._data.core.selected.push(i.id),i.id},_parse_model_from_flat_json:function(a,c,d){d=d?d.concat():[],c&&d.unshift(c);var e=a.id.toString(),f=this._model.data,g=this._model.default_state,h,i,j,k,l={id:e,text:a.text||"",icon:a.icon!==b?a.icon:!0,parent:c,parents:d,children:a.children||[],children_d:a.children_d||[],data:a.data,state:{},li_attr:{id:!1},a_attr:{href:"#"},original:!1};for(h in g)g.hasOwnProperty(h)&&(l.state[h]=g[h]);if(a&&a.data&&a.data.jstree&&a.data.jstree.icon&&(l.icon=a.data.jstree.icon),(l.icon===b||null===l.icon||""===l.icon)&&(l.icon=!0),a&&a.data&&(l.data=a.data,a.data.jstree))for(h in a.data.jstree)a.data.jstree.hasOwnProperty(h)&&(l.state[h]=a.data.jstree[h]);if(a&&"object"==typeof a.state)for(h in a.state)a.state.hasOwnProperty(h)&&(l.state[h]=a.state[h]);if(a&&"object"==typeof a.li_attr)for(h in a.li_attr)a.li_attr.hasOwnProperty(h)&&(l.li_attr[h]=a.li_attr[h]);if(l.li_attr.id||(l.li_attr.id=e),a&&"object"==typeof a.a_attr)for(h in a.a_attr)a.a_attr.hasOwnProperty(h)&&(l.a_attr[h]=a.a_attr[h]);for(a&&a.children&&a.children===!0&&(l.state.loaded=!1,l.children=[],l.children_d=[]),f[l.id]=l,h=0,i=l.children.length;i>h;h++)j=this._parse_model_from_flat_json(f[l.children[h]],l.id,d),k=f[j],l.children_d.push(j),k.children_d.length&&(l.children_d=l.children_d.concat(k.children_d));return delete a.data,delete a.children,f[l.id].original=a,l.state.selected&&this._data.core.selected.push(l.id),l.id},_parse_model_from_json:function(a,c,d){d=d?d.concat():[],c&&d.unshift(c);var e=!1,f,g,h,i,j=this._model.data,k=this._model.default_state,l;do e="j"+this._id+"_"+ ++this._cnt;while(j[e]);l={id:!1,text:"string"==typeof a?a:"",icon:"object"==typeof a&&a.icon!==b?a.icon:!0,parent:c,parents:d,children:[],children_d:[],data:null,state:{},li_attr:{id:!1},a_attr:{href:"#"},original:!1};for(f in k)k.hasOwnProperty(f)&&(l.state[f]=k[f]);if(a&&a.id&&(l.id=a.id.toString()),a&&a.text&&(l.text=a.text),a&&a.data&&a.data.jstree&&a.data.jstree.icon&&(l.icon=a.data.jstree.icon),(l.icon===b||null===l.icon||""===l.icon)&&(l.icon=!0),a&&a.data&&(l.data=a.data,a.data.jstree))for(f in a.data.jstree)a.data.jstree.hasOwnProperty(f)&&(l.state[f]=a.data.jstree[f]);if(a&&"object"==typeof a.state)for(f in a.state)a.state.hasOwnProperty(f)&&(l.state[f]=a.state[f]);if(a&&"object"==typeof a.li_attr)for(f in a.li_attr)a.li_attr.hasOwnProperty(f)&&(l.li_attr[f]=a.li_attr[f]);if(l.li_attr.id&&!l.id&&(l.id=l.li_attr.id.toString()),l.id||(l.id=e),l.li_attr.id||(l.li_attr.id=l.id),a&&"object"==typeof a.a_attr)for(f in a.a_attr)a.a_attr.hasOwnProperty(f)&&(l.a_attr[f]=a.a_attr[f]);if(a&&a.children&&a.children.length){for(f=0,g=a.children.length;g>f;f++)h=this._parse_model_from_json(a.children[f],l.id,d),i=j[h],l.children.push(h),i.children_d.length&&(l.children_d=l.children_d.concat(i.children_d));l.children_d=l.children_d.concat(l.children)}return a&&a.children&&a.children===!0&&(l.state.loaded=!1,l.children=[],l.children_d=[]),delete a.data,delete a.children,l.original=a,j[l.id]=l,l.state.selected&&this._data.core.selected.push(l.id),l.id},_redraw:function(){var b=this._model.force_full_redraw?this._model.data[a.jstree.root].children.concat([]):this._model.changed.concat([]),c=i.createElement("UL"),d,e,f,g=this._data.core.focused;for(e=0,f=b.length;f>e;e++)d=this.redraw_node(b[e],!0,this._model.force_full_redraw),d&&this._model.force_full_redraw&&c.appendChild(d);this._model.force_full_redraw&&(c.className=this.get_container_ul()[0].className,c.setAttribute("role","group"),this.element.empty().append(c)),null!==g&&(d=this.get_node(g,!0),d&&d.length&&d.children(".jstree-anchor")[0]!==i.activeElement?d.children(".jstree-anchor").focus():this._data.core.focused=null),this._model.force_full_redraw=!1,this._model.changed=[],this.trigger("redraw",{nodes:b})},redraw:function(a){a&&(this._model.force_full_redraw=!0),this._redraw()},draw_children:function(b){var c=this.get_node(b),d=!1,e=!1,f=!1,g=i;if(!c)return!1;if(c.id===a.jstree.root)return this.redraw(!0);if(b=this.get_node(b,!0),!b||!b.length)return!1;if(b.children(".jstree-children").remove(),b=b[0],c.children.length&&c.state.loaded){for(f=g.createElement("UL"),f.setAttribute("role","group"),f.className="jstree-children",d=0,e=c.children.length;e>d;d++)f.appendChild(this.redraw_node(c.children[d],!0,!0));b.appendChild(f)}},redraw_node:function(b,c,d,e){var f=this.get_node(b),g=!1,h=!1,j=!1,k=!1,l=!1,m=!1,n="",o=i,p=this._model.data,q=!1,r=!1,s=null,t=0,u=0,v=!1,w=!1;
3
+ if(!f)return!1;if(f.id===a.jstree.root)return this.redraw(!0);if(c=c||0===f.children.length,b=i.querySelector?this.element[0].querySelector("#"+(-1!=="0123456789".indexOf(f.id[0])?"\\3"+f.id[0]+" "+f.id.substr(1).replace(a.jstree.idregex,"\\$&"):f.id.replace(a.jstree.idregex,"\\$&"))):i.getElementById(f.id))b=a(b),d||(g=b.parent().parent()[0],g===this.element[0]&&(g=null),h=b.index()),c||!f.children.length||b.children(".jstree-children").length||(c=!0),c||(j=b.children(".jstree-children")[0]),q=b.children(".jstree-anchor")[0]===i.activeElement,b.remove();else if(c=!0,!d){if(g=f.parent!==a.jstree.root?a("#"+f.parent.replace(a.jstree.idregex,"\\$&"),this.element)[0]:null,!(null===g||g&&p[f.parent].state.opened))return!1;h=a.inArray(f.id,null===g?p[a.jstree.root].children:p[f.parent].children)}b=this._data.core.node.cloneNode(!0),n="jstree-node ";for(k in f.li_attr)if(f.li_attr.hasOwnProperty(k)){if("id"===k)continue;"class"!==k?b.setAttribute(k,f.li_attr[k]):n+=f.li_attr[k]}for(f.a_attr.id||(f.a_attr.id=f.id+"_anchor"),b.setAttribute("aria-selected",!!f.state.selected),b.setAttribute("aria-level",f.parents.length),b.setAttribute("aria-labelledby",f.a_attr.id),f.state.disabled&&b.setAttribute("aria-disabled",!0),k=0,l=f.children.length;l>k;k++)if(!p[f.children[k]].state.hidden){v=!0;break}if(null!==f.parent&&p[f.parent]&&!f.state.hidden&&(k=a.inArray(f.id,p[f.parent].children),w=f.id,-1!==k))for(k++,l=p[f.parent].children.length;l>k;k++)if(p[p[f.parent].children[k]].state.hidden||(w=p[f.parent].children[k]),w!==f.id)break;f.state.hidden&&(n+=" jstree-hidden"),f.state.loaded&&!v?n+=" jstree-leaf":(n+=f.state.opened&&f.state.loaded?" jstree-open":" jstree-closed",b.setAttribute("aria-expanded",f.state.opened&&f.state.loaded)),w===f.id&&(n+=" jstree-last"),b.id=f.id,b.className=n,n=(f.state.selected?" jstree-clicked":"")+(f.state.disabled?" jstree-disabled":"");for(l in f.a_attr)if(f.a_attr.hasOwnProperty(l)){if("href"===l&&"#"===f.a_attr[l])continue;"class"!==l?b.childNodes[1].setAttribute(l,f.a_attr[l]):n+=" "+f.a_attr[l]}if(n.length&&(b.childNodes[1].className="jstree-anchor "+n),(f.icon&&f.icon!==!0||f.icon===!1)&&(f.icon===!1?b.childNodes[1].childNodes[0].className+=" jstree-themeicon-hidden":-1===f.icon.indexOf("/")&&-1===f.icon.indexOf(".")?b.childNodes[1].childNodes[0].className+=" "+f.icon+" jstree-themeicon-custom":(b.childNodes[1].childNodes[0].style.backgroundImage='url("'+f.icon+'")',b.childNodes[1].childNodes[0].style.backgroundPosition="center center",b.childNodes[1].childNodes[0].style.backgroundSize="auto",b.childNodes[1].childNodes[0].className+=" jstree-themeicon-custom")),this.settings.core.force_text?b.childNodes[1].appendChild(o.createTextNode(f.text)):b.childNodes[1].innerHTML+=f.text,c&&f.children.length&&(f.state.opened||e)&&f.state.loaded){for(m=o.createElement("UL"),m.setAttribute("role","group"),m.className="jstree-children",k=0,l=f.children.length;l>k;k++)m.appendChild(this.redraw_node(f.children[k],c,!0));b.appendChild(m)}if(j&&b.appendChild(j),!d){for(g||(g=this.element[0]),k=0,l=g.childNodes.length;l>k;k++)if(g.childNodes[k]&&g.childNodes[k].className&&-1!==g.childNodes[k].className.indexOf("jstree-children")){s=g.childNodes[k];break}s||(s=o.createElement("UL"),s.setAttribute("role","group"),s.className="jstree-children",g.appendChild(s)),g=s,h<g.childNodes.length?g.insertBefore(b,g.childNodes[h]):g.appendChild(b),q&&(t=this.element[0].scrollTop,u=this.element[0].scrollLeft,b.childNodes[1].focus(),this.element[0].scrollTop=t,this.element[0].scrollLeft=u)}return f.state.opened&&!f.state.loaded&&(f.state.opened=!1,setTimeout(a.proxy(function(){this.open_node(f.id,!1,0)},this),0)),b},open_node:function(c,d,e){var f,g,h,i;if(a.isArray(c)){for(c=c.slice(),f=0,g=c.length;g>f;f++)this.open_node(c[f],d,e);return!0}return c=this.get_node(c),c&&c.id!==a.jstree.root?(e=e===b?this.settings.core.animation:e,this.is_closed(c)?this.is_loaded(c)?(h=this.get_node(c,!0),i=this,h.length&&(e&&h.children(".jstree-children").length&&h.children(".jstree-children").stop(!0,!0),c.children.length&&!this._firstChild(h.children(".jstree-children")[0])&&this.draw_children(c),e?(this.trigger("before_open",{node:c}),h.children(".jstree-children").css("display","none").end().removeClass("jstree-closed").addClass("jstree-open").attr("aria-expanded",!0).children(".jstree-children").stop(!0,!0).slideDown(e,function(){this.style.display="",i.element&&i.trigger("after_open",{node:c})})):(this.trigger("before_open",{node:c}),h[0].className=h[0].className.replace("jstree-closed","jstree-open"),h[0].setAttribute("aria-expanded",!0))),c.state.opened=!0,d&&d.call(this,c,!0),h.length||this.trigger("before_open",{node:c}),this.trigger("open_node",{node:c}),e&&h.length||this.trigger("after_open",{node:c}),!0):this.is_loading(c)?setTimeout(a.proxy(function(){this.open_node(c,d,e)},this),500):void this.load_node(c,function(a,b){return b?this.open_node(a,d,e):d?d.call(this,a,!1):!1}):(d&&d.call(this,c,!1),!1)):!1},_open_to:function(b){if(b=this.get_node(b),!b||b.id===a.jstree.root)return!1;var c,d,e=b.parents;for(c=0,d=e.length;d>c;c+=1)c!==a.jstree.root&&this.open_node(e[c],!1,0);return a("#"+b.id.replace(a.jstree.idregex,"\\$&"),this.element)},close_node:function(c,d){var e,f,g,h;if(a.isArray(c)){for(c=c.slice(),e=0,f=c.length;f>e;e++)this.close_node(c[e],d);return!0}return c=this.get_node(c),c&&c.id!==a.jstree.root?this.is_closed(c)?!1:(d=d===b?this.settings.core.animation:d,g=this,h=this.get_node(c,!0),c.state.opened=!1,this.trigger("close_node",{node:c}),void(h.length?d?h.children(".jstree-children").attr("style","display:block !important").end().removeClass("jstree-open").addClass("jstree-closed").attr("aria-expanded",!1).children(".jstree-children").stop(!0,!0).slideUp(d,function(){this.style.display="",h.children(".jstree-children").remove(),g.element&&g.trigger("after_close",{node:c})}):(h[0].className=h[0].className.replace("jstree-open","jstree-closed"),h.attr("aria-expanded",!1).children(".jstree-children").remove(),this.trigger("after_close",{node:c})):this.trigger("after_close",{node:c}))):!1},toggle_node:function(b){var c,d;if(a.isArray(b)){for(b=b.slice(),c=0,d=b.length;d>c;c++)this.toggle_node(b[c]);return!0}return this.is_closed(b)?this.open_node(b):this.is_open(b)?this.close_node(b):void 0},open_all:function(b,c,d){if(b||(b=a.jstree.root),b=this.get_node(b),!b)return!1;var e=b.id===a.jstree.root?this.get_container_ul():this.get_node(b,!0),f,g,h;if(!e.length){for(f=0,g=b.children_d.length;g>f;f++)this.is_closed(this._model.data[b.children_d[f]])&&(this._model.data[b.children_d[f]].state.opened=!0);return this.trigger("open_all",{node:b})}d=d||e,h=this,e=this.is_closed(b)?e.find(".jstree-closed").addBack():e.find(".jstree-closed"),e.each(function(){h.open_node(this,function(a,b){b&&this.is_parent(a)&&this.open_all(a,c,d)},c||0)}),0===d.find(".jstree-closed").length&&this.trigger("open_all",{node:this.get_node(d)})},close_all:function(b,c){if(b||(b=a.jstree.root),b=this.get_node(b),!b)return!1;var d=b.id===a.jstree.root?this.get_container_ul():this.get_node(b,!0),e=this,f,g;for(d.length&&(d=this.is_open(b)?d.find(".jstree-open").addBack():d.find(".jstree-open"),a(d.get().reverse()).each(function(){e.close_node(this,c||0)})),f=0,g=b.children_d.length;g>f;f++)this._model.data[b.children_d[f]].state.opened=!1;this.trigger("close_all",{node:b})},is_disabled:function(a){return a=this.get_node(a),a&&a.state&&a.state.disabled},enable_node:function(b){var c,d;if(a.isArray(b)){for(b=b.slice(),c=0,d=b.length;d>c;c++)this.enable_node(b[c]);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(b.state.disabled=!1,this.get_node(b,!0).children(".jstree-anchor").removeClass("jstree-disabled").attr("aria-disabled",!1),void this.trigger("enable_node",{node:b})):!1},disable_node:function(b){var c,d;if(a.isArray(b)){for(b=b.slice(),c=0,d=b.length;d>c;c++)this.disable_node(b[c]);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(b.state.disabled=!0,this.get_node(b,!0).children(".jstree-anchor").addClass("jstree-disabled").attr("aria-disabled",!0),void this.trigger("disable_node",{node:b})):!1},is_hidden:function(a){return a=this.get_node(a),a.state.hidden===!0},hide_node:function(b,c){var d,e;if(a.isArray(b)){for(b=b.slice(),d=0,e=b.length;e>d;d++)this.hide_node(b[d],!0);return c||this.redraw(),!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?void(b.state.hidden||(b.state.hidden=!0,this._node_changed(b.parent),c||this.redraw(),this.trigger("hide_node",{node:b}))):!1},show_node:function(b,c){var d,e;if(a.isArray(b)){for(b=b.slice(),d=0,e=b.length;e>d;d++)this.show_node(b[d],!0);return c||this.redraw(),!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?void(b.state.hidden&&(b.state.hidden=!1,this._node_changed(b.parent),c||this.redraw(),this.trigger("show_node",{node:b}))):!1},hide_all:function(b){var c,d=this._model.data,e=[];for(c in d)d.hasOwnProperty(c)&&c!==a.jstree.root&&!d[c].state.hidden&&(d[c].state.hidden=!0,e.push(c));return this._model.force_full_redraw=!0,b||this.redraw(),this.trigger("hide_all",{nodes:e}),e},show_all:function(b){var c,d=this._model.data,e=[];for(c in d)d.hasOwnProperty(c)&&c!==a.jstree.root&&d[c].state.hidden&&(d[c].state.hidden=!1,e.push(c));return this._model.force_full_redraw=!0,b||this.redraw(),this.trigger("show_all",{nodes:e}),e},activate_node:function(a,c){if(this.is_disabled(a))return!1;if(c&&"object"==typeof c||(c={}),this._data.core.last_clicked=this._data.core.last_clicked&&this._data.core.last_clicked.id!==b?this.get_node(this._data.core.last_clicked.id):null,this._data.core.last_clicked&&!this._data.core.last_clicked.state.selected&&(this._data.core.last_clicked=null),!this._data.core.last_clicked&&this._data.core.selected.length&&(this._data.core.last_clicked=this.get_node(this._data.core.selected[this._data.core.selected.length-1])),this.settings.core.multiple&&(c.metaKey||c.ctrlKey||c.shiftKey)&&(!c.shiftKey||this._data.core.last_clicked&&this.get_parent(a)&&this.get_parent(a)===this._data.core.last_clicked.parent))if(c.shiftKey){var d=this.get_node(a).id,e=this._data.core.last_clicked.id,f=this.get_node(this._data.core.last_clicked.parent).children,g=!1,h,i;for(h=0,i=f.length;i>h;h+=1)f[h]===d&&(g=!g),f[h]===e&&(g=!g),this.is_disabled(f[h])||!g&&f[h]!==d&&f[h]!==e?this.deselect_node(f[h],!0,c):this.is_hidden(f[h])||this.select_node(f[h],!0,!1,c);this.trigger("changed",{action:"select_node",node:this.get_node(a),selected:this._data.core.selected,event:c})}else this.is_selected(a)?this.deselect_node(a,!1,c):this.select_node(a,!1,!1,c);else!this.settings.core.multiple&&(c.metaKey||c.ctrlKey||c.shiftKey)&&this.is_selected(a)?this.deselect_node(a,!1,c):(this.deselect_all(!0),this.select_node(a,!1,!1,c),this._data.core.last_clicked=this.get_node(a));this.trigger("activate_node",{node:this.get_node(a),event:c})},hover_node:function(a){if(a=this.get_node(a,!0),!a||!a.length||a.children(".jstree-hovered").length)return!1;var b=this.element.find(".jstree-hovered"),c=this.element;b&&b.length&&this.dehover_node(b),a.children(".jstree-anchor").addClass("jstree-hovered"),this.trigger("hover_node",{node:this.get_node(a)}),setTimeout(function(){c.attr("aria-activedescendant",a[0].id)},0)},dehover_node:function(a){return a=this.get_node(a,!0),a&&a.length&&a.children(".jstree-hovered").length?(a.children(".jstree-anchor").removeClass("jstree-hovered"),void this.trigger("dehover_node",{node:this.get_node(a)})):!1},select_node:function(b,c,d,e){var f,g,h,i;if(a.isArray(b)){for(b=b.slice(),g=0,h=b.length;h>g;g++)this.select_node(b[g],c,d,e);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(f=this.get_node(b,!0),void(b.state.selected||(b.state.selected=!0,this._data.core.selected.push(b.id),d||(f=this._open_to(b)),f&&f.length&&f.attr("aria-selected",!0).children(".jstree-anchor").addClass("jstree-clicked"),this.trigger("select_node",{node:b,selected:this._data.core.selected,event:e}),c||this.trigger("changed",{action:"select_node",node:b,selected:this._data.core.selected,event:e})))):!1},deselect_node:function(b,c,d){var e,f,g;if(a.isArray(b)){for(b=b.slice(),e=0,f=b.length;f>e;e++)this.deselect_node(b[e],c,d);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(g=this.get_node(b,!0),void(b.state.selected&&(b.state.selected=!1,this._data.core.selected=a.vakata.array_remove_item(this._data.core.selected,b.id),g.length&&g.attr("aria-selected",!1).children(".jstree-anchor").removeClass("jstree-clicked"),this.trigger("deselect_node",{node:b,selected:this._data.core.selected,event:d}),c||this.trigger("changed",{action:"deselect_node",node:b,selected:this._data.core.selected,event:d})))):!1},select_all:function(b){var c=this._data.core.selected.concat([]),d,e;for(this._data.core.selected=this._model.data[a.jstree.root].children_d.concat(),d=0,e=this._data.core.selected.length;e>d;d++)this._model.data[this._data.core.selected[d]]&&(this._model.data[this._data.core.selected[d]].state.selected=!0);this.redraw(!0),this.trigger("select_all",{selected:this._data.core.selected}),b||this.trigger("changed",{action:"select_all",selected:this._data.core.selected,old_selection:c})},deselect_all:function(a){var b=this._data.core.selected.concat([]),c,d;for(c=0,d=this._data.core.selected.length;d>c;c++)this._model.data[this._data.core.selected[c]]&&(this._model.data[this._data.core.selected[c]].state.selected=!1);this._data.core.selected=[],this.element.find(".jstree-clicked").removeClass("jstree-clicked").parent().attr("aria-selected",!1),this.trigger("deselect_all",{selected:this._data.core.selected,node:b}),a||this.trigger("changed",{action:"deselect_all",selected:this._data.core.selected,old_selection:b})},is_selected:function(b){return b=this.get_node(b),b&&b.id!==a.jstree.root?b.state.selected:!1},get_selected:function(b){return b?a.map(this._data.core.selected,a.proxy(function(a){return this.get_node(a)},this)):this._data.core.selected.slice()},get_top_selected:function(b){var c=this.get_selected(!0),d={},e,f,g,h;for(e=0,f=c.length;f>e;e++)d[c[e].id]=c[e];for(e=0,f=c.length;f>e;e++)for(g=0,h=c[e].children_d.length;h>g;g++)d[c[e].children_d[g]]&&delete d[c[e].children_d[g]];c=[];for(e in d)d.hasOwnProperty(e)&&c.push(e);return b?a.map(c,a.proxy(function(a){return this.get_node(a)},this)):c},get_bottom_selected:function(b){var c=this.get_selected(!0),d=[],e,f;for(e=0,f=c.length;f>e;e++)c[e].children.length||d.push(c[e].id);return b?a.map(d,a.proxy(function(a){return this.get_node(a)},this)):d},get_state:function(){var b={core:{open:[],scroll:{left:this.element.scrollLeft(),top:this.element.scrollTop()},selected:[]}},c;for(c in this._model.data)this._model.data.hasOwnProperty(c)&&c!==a.jstree.root&&(this._model.data[c].state.opened&&b.core.open.push(c),this._model.data[c].state.selected&&b.core.selected.push(c));return b},set_state:function(c,d){if(c){if(c.core){var e,f,g,h,i;if(c.core.open)return a.isArray(c.core.open)&&c.core.open.length?this._load_nodes(c.core.open,function(a){this.open_node(a,!1,0),delete c.core.open,this.set_state(c,d)}):(delete c.core.open,this.set_state(c,d)),!1;if(c.core.scroll)return c.core.scroll&&c.core.scroll.left!==b&&this.element.scrollLeft(c.core.scroll.left),c.core.scroll&&c.core.scroll.top!==b&&this.element.scrollTop(c.core.scroll.top),delete c.core.scroll,this.set_state(c,d),!1;if(c.core.selected)return h=this,this.deselect_all(),a.each(c.core.selected,function(a,b){h.select_node(b,!1,!0)}),delete c.core.selected,this.set_state(c,d),!1;for(i in c)c.hasOwnProperty(i)&&"core"!==i&&-1===a.inArray(i,this.settings.plugins)&&delete c[i];if(a.isEmptyObject(c.core))return delete c.core,this.set_state(c,d),!1}return a.isEmptyObject(c)?(c=null,d&&d.call(this),this.trigger("set_state"),!1):!0}return!1},refresh:function(b,c){this._data.core.state=c===!0?{}:this.get_state(),c&&a.isFunction(c)&&(this._data.core.state=c.call(this,this._data.core.state)),this._cnt=0,this._model.data={},this._model.data[a.jstree.root]={id:a.jstree.root,parent:null,parents:[],children:[],children_d:[],state:{loaded:!1}},this._data.core.selected=[],this._data.core.last_clicked=null,this._data.core.focused=null;var d=this.get_container_ul()[0].className;b||(this.element.html("<ul class='"+d+"' role='group'><li class='jstree-initial-node jstree-loading jstree-leaf jstree-last' role='treeitem' id='j"+this._id+"_loading'><i class='jstree-icon jstree-ocl'></i><a class='jstree-anchor' href='#'><i class='jstree-icon jstree-themeicon-hidden'></i>"+this.get_string("Loading ...")+"</a></li></ul>"),this.element.attr("aria-activedescendant","j"+this._id+"_loading")),this.load_node(a.jstree.root,function(b,c){c&&(this.get_container_ul()[0].className=d,this._firstChild(this.get_container_ul()[0])&&this.element.attr("aria-activedescendant",this._firstChild(this.get_container_ul()[0]).id),this.set_state(a.extend(!0,{},this._data.core.state),function(){this.trigger("refresh")})),this._data.core.state=null})},refresh_node:function(b){if(b=this.get_node(b),!b||b.id===a.jstree.root)return!1;var c=[],d=[],e=this._data.core.selected.concat([]);d.push(b.id),b.state.opened===!0&&c.push(b.id),this.get_node(b,!0).find(".jstree-open").each(function(){d.push(this.id),c.push(this.id)}),this._load_nodes(d,a.proxy(function(a){this.open_node(c,!1,0),this.select_node(e),this.trigger("refresh_node",{node:b,nodes:a})},this),!1,!0)},set_id:function(b,c){if(b=this.get_node(b),!b||b.id===a.jstree.root)return!1;var d,e,f=this._model.data,g=b.id;for(c=c.toString(),f[b.parent].children[a.inArray(b.id,f[b.parent].children)]=c,d=0,e=b.parents.length;e>d;d++)f[b.parents[d]].children_d[a.inArray(b.id,f[b.parents[d]].children_d)]=c;for(d=0,e=b.children.length;e>d;d++)f[b.children[d]].parent=c;for(d=0,e=b.children_d.length;e>d;d++)f[b.children_d[d]].parents[a.inArray(b.id,f[b.children_d[d]].parents)]=c;return d=a.inArray(b.id,this._data.core.selected),-1!==d&&(this._data.core.selected[d]=c),d=this.get_node(b.id,!0),d&&(d.attr("id",c),this.element.attr("aria-activedescendant")===b.id&&this.element.attr("aria-activedescendant",c)),delete f[b.id],b.id=c,b.li_attr.id=c,f[c]=b,this.trigger("set_id",{node:b,"new":b.id,old:g}),!0},get_text:function(b){return b=this.get_node(b),b&&b.id!==a.jstree.root?b.text:!1},set_text:function(b,c){var d,e;if(a.isArray(b)){for(b=b.slice(),d=0,e=b.length;e>d;d++)this.set_text(b[d],c);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(b.text=c,this.get_node(b,!0).length&&this.redraw_node(b.id),this.trigger("set_text",{obj:b,text:c}),!0):!1},get_json:function(b,c,d){if(b=this.get_node(b||a.jstree.root),!b)return!1;c&&c.flat&&!d&&(d=[]);var e={id:b.id,text:b.text,icon:this.get_icon(b),li_attr:a.extend(!0,{},b.li_attr),a_attr:a.extend(!0,{},b.a_attr),state:{},data:c&&c.no_data?!1:a.extend(!0,{},b.data)},f,g;if(c&&c.flat?e.parent=b.parent:e.children=[],c&&c.no_state)delete e.state;else for(f in b.state)b.state.hasOwnProperty(f)&&(e.state[f]=b.state[f]);if(c&&c.no_li_attr&&delete e.li_attr,c&&c.no_a_attr&&delete e.a_attr,c&&c.no_id&&(delete e.id,e.li_attr&&e.li_attr.id&&delete e.li_attr.id,e.a_attr&&e.a_attr.id&&delete e.a_attr.id),c&&c.flat&&b.id!==a.jstree.root&&d.push(e),!c||!c.no_children)for(f=0,g=b.children.length;g>f;f++)c&&c.flat?this.get_json(b.children[f],c,d):e.children.push(this.get_json(b.children[f],c));return c&&c.flat?d:b.id===a.jstree.root?e.children:e},create_node:function(c,d,e,f,g){if(null===c&&(c=a.jstree.root),c=this.get_node(c),!c)return!1;if(e=e===b?"last":e,!e.toString().match(/^(before|after)$/)&&!g&&!this.is_loaded(c))return this.load_node(c,function(){this.create_node(c,d,e,f,!0)});d||(d={text:this.get_string("New node")}),"string"==typeof d&&(d={text:d}),d.text===b&&(d.text=this.get_string("New node"));var h,i,j,k;switch(c.id===a.jstree.root&&("before"===e&&(e="first"),"after"===e&&(e="last")),e){case"before":h=this.get_node(c.parent),e=a.inArray(c.id,h.children),c=h;break;case"after":h=this.get_node(c.parent),e=a.inArray(c.id,h.children)+1,c=h;break;case"inside":case"first":e=0;break;case"last":e=c.children.length;break;default:e||(e=0)}if(e>c.children.length&&(e=c.children.length),d.id||(d.id=!0),!this.check("create_node",d,c,e))return this.settings.core.error.call(this,this._data.core.last_error),!1;if(d.id===!0&&delete d.id,d=this._parse_model_from_json(d,c.id,c.parents.concat()),!d)return!1;for(h=this.get_node(d),i=[],i.push(d),i=i.concat(h.children_d),this.trigger("model",{nodes:i,parent:c.id}),c.children_d=c.children_d.concat(i),j=0,k=c.parents.length;k>j;j++)this._model.data[c.parents[j]].children_d=this._model.data[c.parents[j]].children_d.concat(i);for(d=h,h=[],j=0,k=c.children.length;k>j;j++)h[j>=e?j+1:j]=c.children[j];return h[e]=d.id,c.children=h,this.redraw_node(c,!0),f&&f.call(this,this.get_node(d)),this.trigger("create_node",{node:this.get_node(d),parent:c.id,position:e}),d.id},rename_node:function(b,c){var d,e,f;if(a.isArray(b)){for(b=b.slice(),d=0,e=b.length;e>d;d++)this.rename_node(b[d],c);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(f=b.text,this.check("rename_node",b,this.get_parent(b),c)?(this.set_text(b,c),this.trigger("rename_node",{node:b,text:c,old:f}),!0):(this.settings.core.error.call(this,this._data.core.last_error),!1)):!1},delete_node:function(b){var c,d,e,f,g,h,i,j,k,l,m,n;if(a.isArray(b)){for(b=b.slice(),c=0,d=b.length;d>c;c++)this.delete_node(b[c]);return!0}if(b=this.get_node(b),!b||b.id===a.jstree.root)return!1;if(e=this.get_node(b.parent),f=a.inArray(b.id,e.children),l=!1,!this.check("delete_node",b,e,f))return this.settings.core.error.call(this,this._data.core.last_error),!1;for(-1!==f&&(e.children=a.vakata.array_remove(e.children,f)),g=b.children_d.concat([]),g.push(b.id),h=0,i=b.parents.length;i>h;h++)this._model.data[b.parents[h]].children_d=a.vakata.array_filter(this._model.data[b.parents[h]].children_d,function(b){return-1===a.inArray(b,g)});for(j=0,k=g.length;k>j;j++)if(this._model.data[g[j]].state.selected){l=!0;break}for(l&&(this._data.core.selected=a.vakata.array_filter(this._data.core.selected,function(b){return-1===a.inArray(b,g)})),this.trigger("delete_node",{node:b,parent:e.id}),l&&this.trigger("changed",{action:"delete_node",node:b,selected:this._data.core.selected,parent:e.id}),j=0,k=g.length;k>j;j++)delete this._model.data[g[j]];return-1!==a.inArray(this._data.core.focused,g)&&(this._data.core.focused=null,m=this.element[0].scrollTop,n=this.element[0].scrollLeft,e.id===a.jstree.root?this._model.data[a.jstree.root].children[0]&&this.get_node(this._model.data[a.jstree.root].children[0],!0).children(".jstree-anchor").focus():this.get_node(e,!0).children(".jstree-anchor").focus(),this.element[0].scrollTop=m,this.element[0].scrollLeft=n),this.redraw_node(e,!0),!0},check:function(b,c,d,e,f){c=c&&c.id?c:this.get_node(c),d=d&&d.id?d:this.get_node(d);var g=b.match(/^move_node|copy_node|create_node$/i)?d:c,h=this.settings.core.check_callback;return"move_node"!==b&&"copy_node"!==b||f&&f.is_multi||c.id!==d.id&&("move_node"!==b||a.inArray(c.id,d.children)!==e)&&-1===a.inArray(d.id,c.children_d)?(g&&g.data&&(g=g.data),g&&g.functions&&(g.functions[b]===!1||g.functions[b]===!0)?(g.functions[b]===!1&&(this._data.core.last_error={error:"check",plugin:"core",id:"core_02",reason:"Node data prevents function: "+b,data:JSON.stringify({chk:b,pos:e,obj:c&&c.id?c.id:!1,par:d&&d.id?d.id:!1})}),g.functions[b]):h===!1||a.isFunction(h)&&h.call(this,b,c,d,e,f)===!1||h&&h[b]===!1?(this._data.core.last_error={error:"check",plugin:"core",id:"core_03",reason:"User config for core.check_callback prevents function: "+b,data:JSON.stringify({chk:b,pos:e,obj:c&&c.id?c.id:!1,par:d&&d.id?d.id:!1})},!1):!0):(this._data.core.last_error={error:"check",plugin:"core",id:"core_01",reason:"Moving parent inside child",data:JSON.stringify({chk:b,pos:e,obj:c&&c.id?c.id:!1,par:d&&d.id?d.id:!1})},!1)},last_error:function(){return this._data.core.last_error},move_node:function(c,d,e,f,g,h,i){var j,k,l,m,n,o,p,q,r,s,t,u,v,w;if(d=this.get_node(d),e=e===b?0:e,!d)return!1;if(!e.toString().match(/^(before|after)$/)&&!g&&!this.is_loaded(d))return this.load_node(d,function(){this.move_node(c,d,e,f,!0,!1,i)});if(a.isArray(c)){if(1!==c.length){for(j=0,k=c.length;k>j;j++)(r=this.move_node(c[j],d,e,f,g,!1,i))&&(d=r,e="after");return this.redraw(),!0}c=c[0]}if(c=c&&c.id?c:this.get_node(c),!c||c.id===a.jstree.root)return!1;if(l=(c.parent||a.jstree.root).toString(),n=e.toString().match(/^(before|after)$/)&&d.id!==a.jstree.root?this.get_node(d.parent):d,o=i?i:this._model.data[c.id]?this:a.jstree.reference(c.id),p=!o||!o._id||this._id!==o._id,m=o&&o._id&&l&&o._model.data[l]&&o._model.data[l].children?a.inArray(c.id,o._model.data[l].children):-1,o&&o._id&&(c=o._model.data[c.id]),p)return(r=this.copy_node(c,d,e,f,g,!1,i))?(o&&o.delete_node(c),r):!1;switch(d.id===a.jstree.root&&("before"===e&&(e="first"),"after"===e&&(e="last")),e){case"before":e=a.inArray(d.id,n.children);break;case"after":e=a.inArray(d.id,n.children)+1;break;case"inside":case"first":e=0;break;case"last":e=n.children.length;break;default:e||(e=0)}if(e>n.children.length&&(e=n.children.length),!this.check("move_node",c,n,e,{core:!0,origin:i,is_multi:o&&o._id&&o._id!==this._id,is_foreign:!o||!o._id}))return this.settings.core.error.call(this,this._data.core.last_error),!1;if(c.parent===n.id){for(q=n.children.concat(),r=a.inArray(c.id,q),-1!==r&&(q=a.vakata.array_remove(q,r),e>r&&e--),r=[],s=0,t=q.length;t>s;s++)r[s>=e?s+1:s]=q[s];r[e]=c.id,n.children=r,this._node_changed(n.id),this.redraw(n.id===a.jstree.root)}else{for(r=c.children_d.concat(),r.push(c.id),s=0,t=c.parents.length;t>s;s++){for(q=[],w=o._model.data[c.parents[s]].children_d,u=0,v=w.length;v>u;u++)-1===a.inArray(w[u],r)&&q.push(w[u]);o._model.data[c.parents[s]].children_d=q}for(o._model.data[l].children=a.vakata.array_remove_item(o._model.data[l].children,c.id),s=0,t=n.parents.length;t>s;s++)this._model.data[n.parents[s]].children_d=this._model.data[n.parents[s]].children_d.concat(r);for(q=[],s=0,t=n.children.length;t>s;s++)q[s>=e?s+1:s]=n.children[s];for(q[e]=c.id,n.children=q,n.children_d.push(c.id),n.children_d=n.children_d.concat(c.children_d),c.parent=n.id,r=n.parents.concat(),r.unshift(n.id),w=c.parents.length,c.parents=r,r=r.concat(),s=0,t=c.children_d.length;t>s;s++)this._model.data[c.children_d[s]].parents=this._model.data[c.children_d[s]].parents.slice(0,-1*w),Array.prototype.push.apply(this._model.data[c.children_d[s]].parents,r);(l===a.jstree.root||n.id===a.jstree.root)&&(this._model.force_full_redraw=!0),this._model.force_full_redraw||(this._node_changed(l),this._node_changed(n.id)),h||this.redraw()}return f&&f.call(this,c,n,e),this.trigger("move_node",{node:c,parent:n.id,position:e,old_parent:l,old_position:m,is_multi:o&&o._id&&o._id!==this._id,is_foreign:!o||!o._id,old_instance:o,new_instance:this}),c.id},copy_node:function(c,d,e,f,g,h,i){var j,k,l,m,n,o,p,q,r,s,t;if(d=this.get_node(d),e=e===b?0:e,!d)return!1;if(!e.toString().match(/^(before|after)$/)&&!g&&!this.is_loaded(d))return this.load_node(d,function(){this.copy_node(c,d,e,f,!0,!1,i)});if(a.isArray(c)){if(1!==c.length){for(j=0,k=c.length;k>j;j++)(m=this.copy_node(c[j],d,e,f,g,!0,i))&&(d=m,e="after");return this.redraw(),!0}c=c[0]}if(c=c&&c.id?c:this.get_node(c),!c||c.id===a.jstree.root)return!1;switch(q=(c.parent||a.jstree.root).toString(),r=e.toString().match(/^(before|after)$/)&&d.id!==a.jstree.root?this.get_node(d.parent):d,s=i?i:this._model.data[c.id]?this:a.jstree.reference(c.id),t=!s||!s._id||this._id!==s._id,s&&s._id&&(c=s._model.data[c.id]),d.id===a.jstree.root&&("before"===e&&(e="first"),"after"===e&&(e="last")),e){case"before":e=a.inArray(d.id,r.children);break;case"after":e=a.inArray(d.id,r.children)+1;break;case"inside":case"first":e=0;break;case"last":e=r.children.length;break;default:e||(e=0)}if(e>r.children.length&&(e=r.children.length),!this.check("copy_node",c,r,e,{core:!0,origin:i,is_multi:s&&s._id&&s._id!==this._id,is_foreign:!s||!s._id}))return this.settings.core.error.call(this,this._data.core.last_error),!1;if(p=s?s.get_json(c,{no_id:!0,no_data:!0,no_state:!0}):c,!p)return!1;if(p.id===!0&&delete p.id,p=this._parse_model_from_json(p,r.id,r.parents.concat()),!p)return!1;for(m=this.get_node(p),c&&c.state&&c.state.loaded===!1&&(m.state.loaded=!1),l=[],l.push(p),l=l.concat(m.children_d),this.trigger("model",{nodes:l,parent:r.id}),n=0,o=r.parents.length;o>n;n++)this._model.data[r.parents[n]].children_d=this._model.data[r.parents[n]].children_d.concat(l);for(l=[],n=0,o=r.children.length;o>n;n++)l[n>=e?n+1:n]=r.children[n];return l[e]=m.id,r.children=l,r.children_d.push(m.id),r.children_d=r.children_d.concat(m.children_d),r.id===a.jstree.root&&(this._model.force_full_redraw=!0),this._model.force_full_redraw||this._node_changed(r.id),h||this.redraw(r.id===a.jstree.root),f&&f.call(this,m,r,e),this.trigger("copy_node",{node:m,original:c,parent:r.id,position:e,old_parent:q,old_position:s&&s._id&&q&&s._model.data[q]&&s._model.data[q].children?a.inArray(c.id,s._model.data[q].children):-1,is_multi:s&&s._id&&s._id!==this._id,is_foreign:!s||!s._id,old_instance:s,new_instance:this}),m.id},cut:function(b){if(b||(b=this._data.core.selected.concat()),a.isArray(b)||(b=[b]),!b.length)return!1;var c=[],g,h,i;for(h=0,i=b.length;i>h;h++)g=this.get_node(b[h]),g&&g.id&&g.id!==a.jstree.root&&c.push(g);return c.length?(d=c,f=this,e="move_node",void this.trigger("cut",{node:b})):!1},copy:function(b){if(b||(b=this._data.core.selected.concat()),a.isArray(b)||(b=[b]),!b.length)return!1;var c=[],g,h,i;for(h=0,i=b.length;i>h;h++)g=this.get_node(b[h]),g&&g.id&&g.id!==a.jstree.root&&c.push(g);return c.length?(d=c,f=this,e="copy_node",void this.trigger("copy",{node:b})):!1},get_buffer:function(){return{mode:e,node:d,inst:f}},can_paste:function(){return e!==!1&&d!==!1},paste:function(a,b){return a=this.get_node(a),a&&e&&e.match(/^(copy_node|move_node)$/)&&d?(this[e](d,a,b,!1,!1,!1,f)&&this.trigger("paste",{parent:a.id,node:d,mode:e}),d=!1,e=!1,void(f=!1)):!1},clear_buffer:function(){d=!1,e=!1,f=!1,this.trigger("clear_buffer")},edit:function(b,c,d){var e,f,g,h,j,k,l,m,n,o=!1;return(b=this.get_node(b))?this.settings.core.check_callback===!1?(this._data.core.last_error={error:"check",plugin:"core",id:"core_07",reason:"Could not edit node because of check_callback"},this.settings.core.error.call(this,this._data.core.last_error),!1):(n=b,c="string"==typeof c?c:b.text,this.set_text(b,""),b=this._open_to(b),n.text=c,e=this._data.core.rtl,f=this.element.width(),this._data.core.focused=n.id,g=b.children(".jstree-anchor").focus(),h=a("<span>"),j=c,k=a("<div />",{css:{position:"absolute",top:"-200px",left:e?"0px":"-1000px",visibility:"hidden"}}).appendTo("body"),l=a("<input />",{value:j,"class":"jstree-rename-input",css:{padding:"0",border:"1px solid silver","box-sizing":"border-box",display:"inline-block",height:this._data.core.li_height+"px",lineHeight:this._data.core.li_height+"px",width:"150px"},blur:a.proxy(function(c){c.stopImmediatePropagation(),c.preventDefault();var e=h.children(".jstree-rename-input"),f=e.val(),i=this.settings.core.force_text,m;""===f&&(f=j),k.remove(),h.replaceWith(g),h.remove(),j=i?j:a("<div></div>").append(a.parseHTML(j)).html(),this.set_text(b,j),m=!!this.rename_node(b,i?a("<div></div>").text(f).text():a("<div></div>").append(a.parseHTML(f)).html()),m||this.set_text(b,j),this._data.core.focused=n.id,setTimeout(a.proxy(function(){var a=this.get_node(n.id,!0);a.length&&(this._data.core.focused=n.id,a.children(".jstree-anchor").focus())},this),0),d&&d.call(this,n,m,o),l=null},this),keydown:function(a){var b=a.which;27===b&&(o=!0,this.value=j),(27===b||13===b||37===b||38===b||39===b||40===b||32===b)&&a.stopImmediatePropagation(),(27===b||13===b)&&(a.preventDefault(),this.blur())},click:function(a){a.stopImmediatePropagation()},mousedown:function(a){a.stopImmediatePropagation()},keyup:function(a){l.width(Math.min(k.text("pW"+this.value).width(),f))},keypress:function(a){return 13===a.which?!1:void 0}}),m={fontFamily:g.css("fontFamily")||"",fontSize:g.css("fontSize")||"",
4
+ fontWeight:g.css("fontWeight")||"",fontStyle:g.css("fontStyle")||"",fontStretch:g.css("fontStretch")||"",fontVariant:g.css("fontVariant")||"",letterSpacing:g.css("letterSpacing")||"",wordSpacing:g.css("wordSpacing")||""},h.attr("class",g.attr("class")).append(g.contents().clone()).append(l),g.replaceWith(h),k.css(m),l.css(m).width(Math.min(k.text("pW"+l[0].value).width(),f))[0].select(),void a(i).one("mousedown.jstree touchstart.jstree dnd_start.vakata",function(b){l&&b.target!==l&&a(l).blur()})):!1},set_theme:function(b,c){if(!b)return!1;if(c===!0){var d=this.settings.core.themes.dir;d||(d=a.jstree.path+"/themes"),c=d+"/"+b+"/style.css"}c&&-1===a.inArray(c,g)&&(a("head").append('<link rel="stylesheet" href="'+c+'" type="text/css" />'),g.push(c)),this._data.core.themes.name&&this.element.removeClass("jstree-"+this._data.core.themes.name),this._data.core.themes.name=b,this.element.addClass("jstree-"+b),this.element[this.settings.core.themes.responsive?"addClass":"removeClass"]("jstree-"+b+"-responsive"),this.trigger("set_theme",{theme:b})},get_theme:function(){return this._data.core.themes.name},set_theme_variant:function(a){this._data.core.themes.variant&&this.element.removeClass("jstree-"+this._data.core.themes.name+"-"+this._data.core.themes.variant),this._data.core.themes.variant=a,a&&this.element.addClass("jstree-"+this._data.core.themes.name+"-"+this._data.core.themes.variant)},get_theme_variant:function(){return this._data.core.themes.variant},show_stripes:function(){this._data.core.themes.stripes=!0,this.get_container_ul().addClass("jstree-striped"),this.trigger("show_stripes")},hide_stripes:function(){this._data.core.themes.stripes=!1,this.get_container_ul().removeClass("jstree-striped"),this.trigger("hide_stripes")},toggle_stripes:function(){this._data.core.themes.stripes?this.hide_stripes():this.show_stripes()},show_dots:function(){this._data.core.themes.dots=!0,this.get_container_ul().removeClass("jstree-no-dots"),this.trigger("show_dots")},hide_dots:function(){this._data.core.themes.dots=!1,this.get_container_ul().addClass("jstree-no-dots"),this.trigger("hide_dots")},toggle_dots:function(){this._data.core.themes.dots?this.hide_dots():this.show_dots()},show_icons:function(){this._data.core.themes.icons=!0,this.get_container_ul().removeClass("jstree-no-icons"),this.trigger("show_icons")},hide_icons:function(){this._data.core.themes.icons=!1,this.get_container_ul().addClass("jstree-no-icons"),this.trigger("hide_icons")},toggle_icons:function(){this._data.core.themes.icons?this.hide_icons():this.show_icons()},show_ellipsis:function(){this._data.core.themes.ellipsis=!0,this.get_container_ul().addClass("jstree-ellipsis"),this.trigger("show_ellipsis")},hide_ellipsis:function(){this._data.core.themes.ellipsis=!1,this.get_container_ul().removeClass("jstree-ellipsis"),this.trigger("hide_ellipsis")},toggle_ellipsis:function(){this._data.core.themes.ellipsis?this.hide_ellipsis():this.show_ellipsis()},set_icon:function(c,d){var e,f,g,h;if(a.isArray(c)){for(c=c.slice(),e=0,f=c.length;f>e;e++)this.set_icon(c[e],d);return!0}return c=this.get_node(c),c&&c.id!==a.jstree.root?(h=c.icon,c.icon=d===!0||null===d||d===b||""===d?!0:d,g=this.get_node(c,!0).children(".jstree-anchor").children(".jstree-themeicon"),d===!1?this.hide_icon(c):d===!0||null===d||d===b||""===d?(g.removeClass("jstree-themeicon-custom "+h).css("background","").removeAttr("rel"),h===!1&&this.show_icon(c)):-1===d.indexOf("/")&&-1===d.indexOf(".")?(g.removeClass(h).css("background",""),g.addClass(d+" jstree-themeicon-custom").attr("rel",d),h===!1&&this.show_icon(c)):(g.removeClass(h).css("background",""),g.addClass("jstree-themeicon-custom").css("background","url('"+d+"') center center no-repeat").attr("rel",d),h===!1&&this.show_icon(c)),!0):!1},get_icon:function(b){return b=this.get_node(b),b&&b.id!==a.jstree.root?b.icon:!1},hide_icon:function(b){var c,d;if(a.isArray(b)){for(b=b.slice(),c=0,d=b.length;d>c;c++)this.hide_icon(b[c]);return!0}return b=this.get_node(b),b&&b!==a.jstree.root?(b.icon=!1,this.get_node(b,!0).children(".jstree-anchor").children(".jstree-themeicon").addClass("jstree-themeicon-hidden"),!0):!1},show_icon:function(b){var c,d,e;if(a.isArray(b)){for(b=b.slice(),c=0,d=b.length;d>c;c++)this.show_icon(b[c]);return!0}return b=this.get_node(b),b&&b!==a.jstree.root?(e=this.get_node(b,!0),b.icon=e.length?e.children(".jstree-anchor").children(".jstree-themeicon").attr("rel"):!0,b.icon||(b.icon=!0),e.children(".jstree-anchor").children(".jstree-themeicon").removeClass("jstree-themeicon-hidden"),!0):!1}},a.vakata={},a.vakata.attributes=function(b,c){b=a(b)[0];var d=c?{}:[];return b&&b.attributes&&a.each(b.attributes,function(b,e){-1===a.inArray(e.name.toLowerCase(),["style","contenteditable","hasfocus","tabindex"])&&null!==e.value&&""!==a.trim(e.value)&&(c?d[e.name]=e.value:d.push(e.name))}),d},a.vakata.array_unique=function(a){var c=[],d,e,f,g={};for(d=0,f=a.length;f>d;d++)g[a[d]]===b&&(c.push(a[d]),g[a[d]]=!0);return c},a.vakata.array_remove=function(a,b){return a.splice(b,1),a},a.vakata.array_remove_item=function(b,c){var d=a.inArray(c,b);return-1!==d?a.vakata.array_remove(b,d):b},a.vakata.array_filter=function(a,b,c,d,e){if(a.filter)return a.filter(b,c);d=[];for(e in a)~~e+""==e+""&&e>=0&&b.call(c,a[e],+e,a)&&d.push(a[e]);return d},a.jstree.plugins.changed=function(a,b){var c=[];this.trigger=function(a,d){var e,f;if(d||(d={}),"changed"===a.replace(".jstree","")){d.changed={selected:[],deselected:[]};var g={};for(e=0,f=c.length;f>e;e++)g[c[e]]=1;for(e=0,f=d.selected.length;f>e;e++)g[d.selected[e]]?g[d.selected[e]]=2:d.changed.selected.push(d.selected[e]);for(e=0,f=c.length;f>e;e++)1===g[c[e]]&&d.changed.deselected.push(c[e]);c=d.selected.slice()}b.trigger.call(this,a,d)},this.refresh=function(a,d){return c=[],b.refresh.apply(this,arguments)}};var j=i.createElement("I");j.className="jstree-icon jstree-checkbox",j.setAttribute("role","presentation"),a.jstree.defaults.checkbox={visible:!0,three_state:!0,whole_node:!0,keep_selected_style:!0,cascade:"",tie_selection:!0},a.jstree.plugins.checkbox=function(c,d){this.bind=function(){d.bind.call(this),this._data.checkbox.uto=!1,this._data.checkbox.selected=[],this.settings.checkbox.three_state&&(this.settings.checkbox.cascade="up+down+undetermined"),this.element.on("init.jstree",a.proxy(function(){this._data.checkbox.visible=this.settings.checkbox.visible,this.settings.checkbox.keep_selected_style||this.element.addClass("jstree-checkbox-no-clicked"),this.settings.checkbox.tie_selection&&this.element.addClass("jstree-checkbox-selection")},this)).on("loading.jstree",a.proxy(function(){this[this._data.checkbox.visible?"show_checkboxes":"hide_checkboxes"]()},this)),-1!==this.settings.checkbox.cascade.indexOf("undetermined")&&this.element.on("changed.jstree uncheck_node.jstree check_node.jstree uncheck_all.jstree check_all.jstree move_node.jstree copy_node.jstree redraw.jstree open_node.jstree",a.proxy(function(){this._data.checkbox.uto&&clearTimeout(this._data.checkbox.uto),this._data.checkbox.uto=setTimeout(a.proxy(this._undetermined,this),50)},this)),this.settings.checkbox.tie_selection||this.element.on("model.jstree",a.proxy(function(a,b){var c=this._model.data,d=c[b.parent],e=b.nodes,f,g;for(f=0,g=e.length;g>f;f++)c[e[f]].state.checked=c[e[f]].state.checked||c[e[f]].original&&c[e[f]].original.state&&c[e[f]].original.state.checked,c[e[f]].state.checked&&this._data.checkbox.selected.push(e[f])},this)),(-1!==this.settings.checkbox.cascade.indexOf("up")||-1!==this.settings.checkbox.cascade.indexOf("down"))&&this.element.on("model.jstree",a.proxy(function(b,c){var d=this._model.data,e=d[c.parent],f=c.nodes,g=[],h,i,j,k,l,m,n=this.settings.checkbox.cascade,o=this.settings.checkbox.tie_selection;if(-1!==n.indexOf("down"))if(e.state[o?"selected":"checked"]){for(i=0,j=f.length;j>i;i++)d[f[i]].state[o?"selected":"checked"]=!0;this._data[o?"core":"checkbox"].selected=this._data[o?"core":"checkbox"].selected.concat(f)}else for(i=0,j=f.length;j>i;i++)if(d[f[i]].state[o?"selected":"checked"]){for(k=0,l=d[f[i]].children_d.length;l>k;k++)d[d[f[i]].children_d[k]].state[o?"selected":"checked"]=!0;this._data[o?"core":"checkbox"].selected=this._data[o?"core":"checkbox"].selected.concat(d[f[i]].children_d)}if(-1!==n.indexOf("up")){for(i=0,j=e.children_d.length;j>i;i++)d[e.children_d[i]].children.length||g.push(d[e.children_d[i]].parent);for(g=a.vakata.array_unique(g),k=0,l=g.length;l>k;k++){e=d[g[k]];while(e&&e.id!==a.jstree.root){for(h=0,i=0,j=e.children.length;j>i;i++)h+=d[e.children[i]].state[o?"selected":"checked"];if(h!==j)break;e.state[o?"selected":"checked"]=!0,this._data[o?"core":"checkbox"].selected.push(e.id),m=this.get_node(e,!0),m&&m.length&&m.attr("aria-selected",!0).children(".jstree-anchor").addClass(o?"jstree-clicked":"jstree-checked"),e=this.get_node(e.parent)}}}this._data[o?"core":"checkbox"].selected=a.vakata.array_unique(this._data[o?"core":"checkbox"].selected)},this)).on(this.settings.checkbox.tie_selection?"select_node.jstree":"check_node.jstree",a.proxy(function(b,c){var d=c.node,e=this._model.data,f=this.get_node(d.parent),g=this.get_node(d,!0),h,i,j,k,l=this.settings.checkbox.cascade,m=this.settings.checkbox.tie_selection,n={},o=this._data[m?"core":"checkbox"].selected;for(h=0,i=o.length;i>h;h++)n[o[h]]=!0;if(-1!==l.indexOf("down"))for(h=0,i=d.children_d.length;i>h;h++)n[d.children_d[h]]=!0,k=e[d.children_d[h]],k.state[m?"selected":"checked"]=!0,k&&k.original&&k.original.state&&k.original.state.undetermined&&(k.original.state.undetermined=!1);if(-1!==l.indexOf("up"))while(f&&f.id!==a.jstree.root){for(j=0,h=0,i=f.children.length;i>h;h++)j+=e[f.children[h]].state[m?"selected":"checked"];if(j!==i)break;f.state[m?"selected":"checked"]=!0,n[f.id]=!0,k=this.get_node(f,!0),k&&k.length&&k.attr("aria-selected",!0).children(".jstree-anchor").addClass(m?"jstree-clicked":"jstree-checked"),f=this.get_node(f.parent)}o=[];for(h in n)n.hasOwnProperty(h)&&o.push(h);this._data[m?"core":"checkbox"].selected=o,-1!==l.indexOf("down")&&g.length&&g.find(".jstree-anchor").addClass(m?"jstree-clicked":"jstree-checked").parent().attr("aria-selected",!0)},this)).on(this.settings.checkbox.tie_selection?"deselect_all.jstree":"uncheck_all.jstree",a.proxy(function(b,c){var d=this.get_node(a.jstree.root),e=this._model.data,f,g,h;for(f=0,g=d.children_d.length;g>f;f++)h=e[d.children_d[f]],h&&h.original&&h.original.state&&h.original.state.undetermined&&(h.original.state.undetermined=!1)},this)).on(this.settings.checkbox.tie_selection?"deselect_node.jstree":"uncheck_node.jstree",a.proxy(function(b,c){var d=c.node,e=this.get_node(d,!0),f,g,h,i=this.settings.checkbox.cascade,j=this.settings.checkbox.tie_selection,k=this._data[j?"core":"checkbox"].selected,l={};if(d&&d.original&&d.original.state&&d.original.state.undetermined&&(d.original.state.undetermined=!1),-1!==i.indexOf("down"))for(f=0,g=d.children_d.length;g>f;f++)h=this._model.data[d.children_d[f]],h.state[j?"selected":"checked"]=!1,h&&h.original&&h.original.state&&h.original.state.undetermined&&(h.original.state.undetermined=!1);if(-1!==i.indexOf("up"))for(f=0,g=d.parents.length;g>f;f++)h=this._model.data[d.parents[f]],h.state[j?"selected":"checked"]=!1,h&&h.original&&h.original.state&&h.original.state.undetermined&&(h.original.state.undetermined=!1),h=this.get_node(d.parents[f],!0),h&&h.length&&h.attr("aria-selected",!1).children(".jstree-anchor").removeClass(j?"jstree-clicked":"jstree-checked");for(l={},f=0,g=k.length;g>f;f++)-1!==i.indexOf("down")&&-1!==a.inArray(k[f],d.children_d)||-1!==i.indexOf("up")&&-1!==a.inArray(k[f],d.parents)||(l[k[f]]=!0);k=[];for(f in l)l.hasOwnProperty(f)&&k.push(f);this._data[j?"core":"checkbox"].selected=k,-1!==i.indexOf("down")&&e.length&&e.find(".jstree-anchor").removeClass(j?"jstree-clicked":"jstree-checked").parent().attr("aria-selected",!1)},this)),-1!==this.settings.checkbox.cascade.indexOf("up")&&this.element.on("delete_node.jstree",a.proxy(function(b,c){var d=this.get_node(c.parent),e=this._model.data,f,g,h,i,j=this.settings.checkbox.tie_selection;while(d&&d.id!==a.jstree.root&&!d.state[j?"selected":"checked"]){for(h=0,f=0,g=d.children.length;g>f;f++)h+=e[d.children[f]].state[j?"selected":"checked"];if(!(g>0&&h===g))break;d.state[j?"selected":"checked"]=!0,this._data[j?"core":"checkbox"].selected.push(d.id),i=this.get_node(d,!0),i&&i.length&&i.attr("aria-selected",!0).children(".jstree-anchor").addClass(j?"jstree-clicked":"jstree-checked"),d=this.get_node(d.parent)}},this)).on("move_node.jstree",a.proxy(function(b,c){var d=c.is_multi,e=c.old_parent,f=this.get_node(c.parent),g=this._model.data,h,i,j,k,l,m=this.settings.checkbox.tie_selection;if(!d){h=this.get_node(e);while(h&&h.id!==a.jstree.root&&!h.state[m?"selected":"checked"]){for(i=0,j=0,k=h.children.length;k>j;j++)i+=g[h.children[j]].state[m?"selected":"checked"];if(!(k>0&&i===k))break;h.state[m?"selected":"checked"]=!0,this._data[m?"core":"checkbox"].selected.push(h.id),l=this.get_node(h,!0),l&&l.length&&l.attr("aria-selected",!0).children(".jstree-anchor").addClass(m?"jstree-clicked":"jstree-checked"),h=this.get_node(h.parent)}}h=f;while(h&&h.id!==a.jstree.root){for(i=0,j=0,k=h.children.length;k>j;j++)i+=g[h.children[j]].state[m?"selected":"checked"];if(i===k)h.state[m?"selected":"checked"]||(h.state[m?"selected":"checked"]=!0,this._data[m?"core":"checkbox"].selected.push(h.id),l=this.get_node(h,!0),l&&l.length&&l.attr("aria-selected",!0).children(".jstree-anchor").addClass(m?"jstree-clicked":"jstree-checked"));else{if(!h.state[m?"selected":"checked"])break;h.state[m?"selected":"checked"]=!1,this._data[m?"core":"checkbox"].selected=a.vakata.array_remove_item(this._data[m?"core":"checkbox"].selected,h.id),l=this.get_node(h,!0),l&&l.length&&l.attr("aria-selected",!1).children(".jstree-anchor").removeClass(m?"jstree-clicked":"jstree-checked")}h=this.get_node(h.parent)}},this))},this._undetermined=function(){if(null!==this.element){var c,d,e,f,g={},h=this._model.data,i=this.settings.checkbox.tie_selection,j=this._data[i?"core":"checkbox"].selected,k=[],l=this;for(c=0,d=j.length;d>c;c++)if(h[j[c]]&&h[j[c]].parents)for(e=0,f=h[j[c]].parents.length;f>e;e++){if(g[h[j[c]].parents[e]]!==b)break;h[j[c]].parents[e]!==a.jstree.root&&(g[h[j[c]].parents[e]]=!0,k.push(h[j[c]].parents[e]))}for(this.element.find(".jstree-closed").not(":has(.jstree-children)").each(function(){var i=l.get_node(this),j;if(i.state.loaded){for(c=0,d=i.children_d.length;d>c;c++)if(j=h[i.children_d[c]],!j.state.loaded&&j.original&&j.original.state&&j.original.state.undetermined&&j.original.state.undetermined===!0)for(g[j.id]===b&&j.id!==a.jstree.root&&(g[j.id]=!0,k.push(j.id)),e=0,f=j.parents.length;f>e;e++)g[j.parents[e]]===b&&j.parents[e]!==a.jstree.root&&(g[j.parents[e]]=!0,k.push(j.parents[e]))}else if(i.original&&i.original.state&&i.original.state.undetermined&&i.original.state.undetermined===!0)for(g[i.id]===b&&i.id!==a.jstree.root&&(g[i.id]=!0,k.push(i.id)),e=0,f=i.parents.length;f>e;e++)g[i.parents[e]]===b&&i.parents[e]!==a.jstree.root&&(g[i.parents[e]]=!0,k.push(i.parents[e]))}),this.element.find(".jstree-undetermined").removeClass("jstree-undetermined"),c=0,d=k.length;d>c;c++)h[k[c]].state[i?"selected":"checked"]||(j=this.get_node(k[c],!0),j&&j.length&&j.children(".jstree-anchor").children(".jstree-checkbox").addClass("jstree-undetermined"))}},this.redraw_node=function(b,c,e,f){if(b=d.redraw_node.apply(this,arguments)){var g,h,i=null,k=null;for(g=0,h=b.childNodes.length;h>g;g++)if(b.childNodes[g]&&b.childNodes[g].className&&-1!==b.childNodes[g].className.indexOf("jstree-anchor")){i=b.childNodes[g];break}i&&(!this.settings.checkbox.tie_selection&&this._model.data[b.id].state.checked&&(i.className+=" jstree-checked"),k=j.cloneNode(!1),this._model.data[b.id].state.checkbox_disabled&&(k.className+=" jstree-checkbox-disabled"),i.insertBefore(k,i.childNodes[0]))}return e||-1===this.settings.checkbox.cascade.indexOf("undetermined")||(this._data.checkbox.uto&&clearTimeout(this._data.checkbox.uto),this._data.checkbox.uto=setTimeout(a.proxy(this._undetermined,this),50)),b},this.show_checkboxes=function(){this._data.core.themes.checkboxes=!0,this.get_container_ul().removeClass("jstree-no-checkboxes")},this.hide_checkboxes=function(){this._data.core.themes.checkboxes=!1,this.get_container_ul().addClass("jstree-no-checkboxes")},this.toggle_checkboxes=function(){this._data.core.themes.checkboxes?this.hide_checkboxes():this.show_checkboxes()},this.is_undetermined=function(b){b=this.get_node(b);var c=this.settings.checkbox.cascade,d,e,f=this.settings.checkbox.tie_selection,g=this._data[f?"core":"checkbox"].selected,h=this._model.data;if(!b||b.state[f?"selected":"checked"]===!0||-1===c.indexOf("undetermined")||-1===c.indexOf("down")&&-1===c.indexOf("up"))return!1;if(!b.state.loaded&&b.original.state.undetermined===!0)return!0;for(d=0,e=b.children_d.length;e>d;d++)if(-1!==a.inArray(b.children_d[d],g)||!h[b.children_d[d]].state.loaded&&h[b.children_d[d]].original.state.undetermined)return!0;return!1},this.disable_checkbox=function(b){var c,d,e;if(a.isArray(b)){for(b=b.slice(),c=0,d=b.length;d>c;c++)this.disable_checkbox(b[c]);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(e=this.get_node(b,!0),void(b.state.checkbox_disabled||(b.state.checkbox_disabled=!0,e&&e.length&&e.children(".jstree-anchor").children(".jstree-checkbox").addClass("jstree-checkbox-disabled"),this.trigger("disable_checkbox",{node:b})))):!1},this.enable_checkbox=function(b){var c,d,e;if(a.isArray(b)){for(b=b.slice(),c=0,d=b.length;d>c;c++)this.enable_checkbox(b[c]);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(e=this.get_node(b,!0),void(b.state.checkbox_disabled&&(b.state.checkbox_disabled=!1,e&&e.length&&e.children(".jstree-anchor").children(".jstree-checkbox").removeClass("jstree-checkbox-disabled"),this.trigger("enable_checkbox",{node:b})))):!1},this.activate_node=function(b,c){return a(c.target).hasClass("jstree-checkbox-disabled")?!1:(this.settings.checkbox.tie_selection&&(this.settings.checkbox.whole_node||a(c.target).hasClass("jstree-checkbox"))&&(c.ctrlKey=!0),this.settings.checkbox.tie_selection||!this.settings.checkbox.whole_node&&!a(c.target).hasClass("jstree-checkbox")?d.activate_node.call(this,b,c):this.is_disabled(b)?!1:(this.is_checked(b)?this.uncheck_node(b,c):this.check_node(b,c),void this.trigger("activate_node",{node:this.get_node(b)})))},this.check_node=function(b,c){if(this.settings.checkbox.tie_selection)return this.select_node(b,!1,!0,c);var d,e,f,g;if(a.isArray(b)){for(b=b.slice(),e=0,f=b.length;f>e;e++)this.check_node(b[e],c);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(d=this.get_node(b,!0),void(b.state.checked||(b.state.checked=!0,this._data.checkbox.selected.push(b.id),d&&d.length&&d.children(".jstree-anchor").addClass("jstree-checked"),this.trigger("check_node",{node:b,selected:this._data.checkbox.selected,event:c})))):!1},this.uncheck_node=function(b,c){if(this.settings.checkbox.tie_selection)return this.deselect_node(b,!1,c);var d,e,f;if(a.isArray(b)){for(b=b.slice(),d=0,e=b.length;e>d;d++)this.uncheck_node(b[d],c);return!0}return b=this.get_node(b),b&&b.id!==a.jstree.root?(f=this.get_node(b,!0),void(b.state.checked&&(b.state.checked=!1,this._data.checkbox.selected=a.vakata.array_remove_item(this._data.checkbox.selected,b.id),f.length&&f.children(".jstree-anchor").removeClass("jstree-checked"),this.trigger("uncheck_node",{node:b,selected:this._data.checkbox.selected,event:c})))):!1},this.check_all=function(){if(this.settings.checkbox.tie_selection)return this.select_all();var b=this._data.checkbox.selected.concat([]),c,d;for(this._data.checkbox.selected=this._model.data[a.jstree.root].children_d.concat(),c=0,d=this._data.checkbox.selected.length;d>c;c++)this._model.data[this._data.checkbox.selected[c]]&&(this._model.data[this._data.checkbox.selected[c]].state.checked=!0);this.redraw(!0),this.trigger("check_all",{selected:this._data.checkbox.selected})},this.uncheck_all=function(){if(this.settings.checkbox.tie_selection)return this.deselect_all();var a=this._data.checkbox.selected.concat([]),b,c;for(b=0,c=this._data.checkbox.selected.length;c>b;b++)this._model.data[this._data.checkbox.selected[b]]&&(this._model.data[this._data.checkbox.selected[b]].state.checked=!1);this._data.checkbox.selected=[],this.element.find(".jstree-checked").removeClass("jstree-checked"),this.trigger("uncheck_all",{selected:this._data.checkbox.selected,node:a})},this.is_checked=function(b){return this.settings.checkbox.tie_selection?this.is_selected(b):(b=this.get_node(b),b&&b.id!==a.jstree.root?b.state.checked:!1)},this.get_checked=function(b){return this.settings.checkbox.tie_selection?this.get_selected(b):b?a.map(this._data.checkbox.selected,a.proxy(function(a){return this.get_node(a)},this)):this._data.checkbox.selected},this.get_top_checked=function(b){if(this.settings.checkbox.tie_selection)return this.get_top_selected(b);var c=this.get_checked(!0),d={},e,f,g,h;for(e=0,f=c.length;f>e;e++)d[c[e].id]=c[e];for(e=0,f=c.length;f>e;e++)for(g=0,h=c[e].children_d.length;h>g;g++)d[c[e].children_d[g]]&&delete d[c[e].children_d[g]];c=[];for(e in d)d.hasOwnProperty(e)&&c.push(e);return b?a.map(c,a.proxy(function(a){return this.get_node(a)},this)):c},this.get_bottom_checked=function(b){if(this.settings.checkbox.tie_selection)return this.get_bottom_selected(b);var c=this.get_checked(!0),d=[],e,f;for(e=0,f=c.length;f>e;e++)c[e].children.length||d.push(c[e].id);return b?a.map(d,a.proxy(function(a){return this.get_node(a)},this)):d},this.load_node=function(b,c){var e,f,g,h,i,j;if(!a.isArray(b)&&!this.settings.checkbox.tie_selection&&(j=this.get_node(b),j&&j.state.loaded))for(e=0,f=j.children_d.length;f>e;e++)this._model.data[j.children_d[e]].state.checked&&(i=!0,this._data.checkbox.selected=a.vakata.array_remove_item(this._data.checkbox.selected,j.children_d[e]));return d.load_node.apply(this,arguments)},this.get_state=function(){var a=d.get_state.apply(this,arguments);return this.settings.checkbox.tie_selection?a:(a.checkbox=this._data.checkbox.selected.slice(),a)},this.set_state=function(b,c){var e=d.set_state.apply(this,arguments);if(e&&b.checkbox){if(!this.settings.checkbox.tie_selection){this.uncheck_all();var f=this;a.each(b.checkbox,function(a,b){f.check_node(b)})}return delete b.checkbox,this.set_state(b,c),!1}return e},this.refresh=function(a,b){return this.settings.checkbox.tie_selection||(this._data.checkbox.selected=[]),d.refresh.apply(this,arguments)}},a.jstree.defaults.conditionalselect=function(){return!0},a.jstree.plugins.conditionalselect=function(a,b){this.activate_node=function(a,c){this.settings.conditionalselect.call(this,this.get_node(a),c)&&b.activate_node.call(this,a,c)}},a.jstree.defaults.contextmenu={select_node:!0,show_at_node:!0,items:function(b,c){return{create:{separator_before:!1,separator_after:!0,_disabled:!1,label:"Create",action:function(b){var c=a.jstree.reference(b.reference),d=c.get_node(b.reference);c.create_node(d,{},"last",function(a){setTimeout(function(){c.edit(a)},0)})}},rename:{separator_before:!1,separator_after:!1,_disabled:!1,label:"Rename",action:function(b){var c=a.jstree.reference(b.reference),d=c.get_node(b.reference);c.edit(d)}},remove:{separator_before:!1,icon:!1,separator_after:!1,_disabled:!1,label:"Delete",action:function(b){var c=a.jstree.reference(b.reference),d=c.get_node(b.reference);c.is_selected(d)?c.delete_node(c.get_selected()):c.delete_node(d)}},ccp:{separator_before:!0,icon:!1,separator_after:!1,label:"Edit",action:!1,submenu:{cut:{separator_before:!1,separator_after:!1,label:"Cut",action:function(b){var c=a.jstree.reference(b.reference),d=c.get_node(b.reference);c.is_selected(d)?c.cut(c.get_top_selected()):c.cut(d)}},copy:{separator_before:!1,icon:!1,separator_after:!1,label:"Copy",action:function(b){var c=a.jstree.reference(b.reference),d=c.get_node(b.reference);c.is_selected(d)?c.copy(c.get_top_selected()):c.copy(d)}},paste:{separator_before:!1,icon:!1,_disabled:function(b){return!a.jstree.reference(b.reference).can_paste()},separator_after:!1,label:"Paste",action:function(b){var c=a.jstree.reference(b.reference),d=c.get_node(b.reference);c.paste(d)}}}}}}},a.jstree.plugins.contextmenu=function(c,d){this.bind=function(){d.bind.call(this);var b=0,c=null,e,f;this.element.on("contextmenu.jstree",".jstree-anchor",a.proxy(function(a,d){"input"!==a.target.tagName.toLowerCase()&&(a.preventDefault(),b=a.ctrlKey?+new Date:0,(d||c)&&(b=+new Date+1e4),c&&clearTimeout(c),this.is_loading(a.currentTarget)||this.show_contextmenu(a.currentTarget,a.pageX,a.pageY,a))},this)).on("click.jstree",".jstree-anchor",a.proxy(function(c){this._data.contextmenu.visible&&(!b||+new Date-b>250)&&a.vakata.context.hide(),b=0},this)).on("touchstart.jstree",".jstree-anchor",function(b){b.originalEvent&&b.originalEvent.changedTouches&&b.originalEvent.changedTouches[0]&&(e=b.originalEvent.changedTouches[0].clientX,f=b.originalEvent.changedTouches[0].clientY,c=setTimeout(function(){a(b.currentTarget).trigger("contextmenu",!0)},750))}).on("touchmove.vakata.jstree",function(a){c&&a.originalEvent&&a.originalEvent.changedTouches&&a.originalEvent.changedTouches[0]&&(Math.abs(e-a.originalEvent.changedTouches[0].clientX)>50||Math.abs(f-a.originalEvent.changedTouches[0].clientY)>50)&&clearTimeout(c)}).on("touchend.vakata.jstree",function(a){c&&clearTimeout(c)}),a(i).on("context_hide.vakata.jstree",a.proxy(function(b,c){this._data.contextmenu.visible=!1,a(c.reference).removeClass("jstree-context")},this))},this.teardown=function(){this._data.contextmenu.visible&&a.vakata.context.hide(),d.teardown.call(this)},this.show_contextmenu=function(c,d,e,f){if(c=this.get_node(c),!c||c.id===a.jstree.root)return!1;var g=this.settings.contextmenu,h=this.get_node(c,!0),i=h.children(".jstree-anchor"),j=!1,k=!1;(g.show_at_node||d===b||e===b)&&(j=i.offset(),d=j.left,e=j.top+this._data.core.li_height),this.settings.contextmenu.select_node&&!this.is_selected(c)&&this.activate_node(c,f),k=g.items,a.isFunction(k)&&(k=k.call(this,c,a.proxy(function(a){this._show_contextmenu(c,d,e,a)},this))),a.isPlainObject(k)&&this._show_contextmenu(c,d,e,k)},this._show_contextmenu=function(b,c,d,e){var f=this.get_node(b,!0),g=f.children(".jstree-anchor");a(i).one("context_show.vakata.jstree",a.proxy(function(b,c){var d="jstree-contextmenu jstree-"+this.get_theme()+"-contextmenu";a(c.element).addClass(d),g.addClass("jstree-context")},this)),this._data.contextmenu.visible=!0,a.vakata.context.show(g,{x:c,y:d},e),this.trigger("show_contextmenu",{node:b,x:c,y:d})}},function(a){var b=!1,c={element:!1,reference:!1,position_x:0,position_y:0,items:[],html:"",is_visible:!1};a.vakata.context={settings:{hide_onmouseleave:0,icons:!0},_trigger:function(b){a(i).triggerHandler("context_"+b+".vakata",{reference:c.reference,element:c.element,position:{x:c.position_x,y:c.position_y}})},_execute:function(b){return b=c.items[b],b&&(!b._disabled||a.isFunction(b._disabled)&&!b._disabled({item:b,reference:c.reference,element:c.element}))&&b.action?b.action.call(null,{item:b,reference:c.reference,element:c.element,position:{x:c.position_x,y:c.position_y}}):!1},_parse:function(b,d){if(!b)return!1;d||(c.html="",c.items=[]);var e="",f=!1,g;return d&&(e+="<ul>"),a.each(b,function(b,d){return d?(c.items.push(d),!f&&d.separator_before&&(e+="<li class='vakata-context-separator'><a href='#' "+(a.vakata.context.settings.icons?"":'style="margin-left:0px;"')+">&#160;</a></li>"),f=!1,e+="<li class='"+(d._class||"")+(d._disabled===!0||a.isFunction(d._disabled)&&d._disabled({item:d,reference:c.reference,element:c.element})?" vakata-contextmenu-disabled ":"")+"' "+(d.shortcut?" data-shortcut='"+d.shortcut+"' ":"")+">",e+="<a href='#' rel='"+(c.items.length-1)+"' "+(d.title?"title='"+d.title+"'":"")+">",a.vakata.context.settings.icons&&(e+="<i ",d.icon&&(e+=-1!==d.icon.indexOf("/")||-1!==d.icon.indexOf(".")?" style='background:url(\""+d.icon+"\") center center no-repeat' ":" class='"+d.icon+"' "),e+="></i><span class='vakata-contextmenu-sep'>&#160;</span>"),e+=(a.isFunction(d.label)?d.label({item:b,reference:c.reference,element:c.element}):d.label)+(d.shortcut?' <span class="vakata-contextmenu-shortcut vakata-contextmenu-shortcut-'+d.shortcut+'">'+(d.shortcut_label||"")+"</span>":"")+"</a>",d.submenu&&(g=a.vakata.context._parse(d.submenu,!0),g&&(e+=g)),e+="</li>",void(d.separator_after&&(e+="<li class='vakata-context-separator'><a href='#' "+(a.vakata.context.settings.icons?"":'style="margin-left:0px;"')+">&#160;</a></li>",f=!0))):!0}),e=e.replace(/<li class\='vakata-context-separator'\><\/li\>$/,""),d&&(e+="</ul>"),d||(c.html=e,a.vakata.context._trigger("parse")),e.length>10?e:!1},_show_submenu:function(c){if(c=a(c),c.length&&c.children("ul").length){var d=c.children("ul"),e=c.offset().left,f=e+c.outerWidth(),g=c.offset().top,h=d.width(),i=d.height(),j=a(window).width()+a(window).scrollLeft(),k=a(window).height()+a(window).scrollTop();b?c[f-(h+10+c.outerWidth())<0?"addClass":"removeClass"]("vakata-context-left"):c[f+h>j&&e>j-f?"addClass":"removeClass"]("vakata-context-right"),g+i+10>k&&d.css("bottom","-1px"),c.hasClass("vakata-context-right")?h>e&&d.css("margin-right",e-h):h>j-f&&d.css("margin-left",j-f-h),d.show()}},show:function(d,e,f){var g,h,i,j,k,l,m,n,o=!0;switch(c.element&&c.element.length&&c.element.width(""),o){case!e&&!d:return!1;case!!e&&!!d:c.reference=d,c.position_x=e.x,c.position_y=e.y;break;case!e&&!!d:c.reference=d,g=d.offset(),c.position_x=g.left+d.outerHeight(),c.position_y=g.top;break;case!!e&&!d:c.position_x=e.x,c.position_y=e.y}d&&!f&&a(d).data("vakata_contextmenu")&&(f=a(d).data("vakata_contextmenu")),a.vakata.context._parse(f)&&c.element.html(c.html),c.items.length&&(c.element.appendTo("body"),h=c.element,i=c.position_x,j=c.position_y,k=h.width(),l=h.height(),m=a(window).width()+a(window).scrollLeft(),n=a(window).height()+a(window).scrollTop(),b&&(i-=h.outerWidth()-a(d).outerWidth(),i<a(window).scrollLeft()+20&&(i=a(window).scrollLeft()+20)),i+k+20>m&&(i=m-(k+20)),j+l+20>n&&(j=n-(l+20)),c.element.css({left:i,top:j}).show().find("a").first().focus().parent().addClass("vakata-context-hover"),c.is_visible=!0,a.vakata.context._trigger("show"))},hide:function(){c.is_visible&&(c.element.hide().find("ul").hide().end().find(":focus").blur().end().detach(),c.is_visible=!1,a.vakata.context._trigger("hide"))}},a(function(){b="rtl"===a("body").css("direction");var d=!1;c.element=a("<ul class='vakata-context'></ul>"),c.element.on("mouseenter","li",function(b){b.stopImmediatePropagation(),a.contains(this,b.relatedTarget)||(d&&clearTimeout(d),c.element.find(".vakata-context-hover").removeClass("vakata-context-hover").end(),a(this).siblings().find("ul").hide().end().end().parentsUntil(".vakata-context","li").addBack().addClass("vakata-context-hover"),a.vakata.context._show_submenu(this))}).on("mouseleave","li",function(b){a.contains(this,b.relatedTarget)||a(this).find(".vakata-context-hover").addBack().removeClass("vakata-context-hover")}).on("mouseleave",function(b){a(this).find(".vakata-context-hover").removeClass("vakata-context-hover"),a.vakata.context.settings.hide_onmouseleave&&(d=setTimeout(function(b){return function(){a.vakata.context.hide()}}(this),a.vakata.context.settings.hide_onmouseleave))}).on("click","a",function(b){b.preventDefault(),a(this).blur().parent().hasClass("vakata-context-disabled")||a.vakata.context._execute(a(this).attr("rel"))===!1||a.vakata.context.hide()}).on("keydown","a",function(b){var d=null;switch(b.which){case 13:case 32:b.type="click",b.preventDefault(),a(b.currentTarget).trigger(b);break;case 37:c.is_visible&&(c.element.find(".vakata-context-hover").last().closest("li").first().find("ul").hide().find(".vakata-context-hover").removeClass("vakata-context-hover").end().end().children("a").focus(),b.stopImmediatePropagation(),b.preventDefault());break;case 38:c.is_visible&&(d=c.element.find("ul:visible").addBack().last().children(".vakata-context-hover").removeClass("vakata-context-hover").prevAll("li:not(.vakata-context-separator)").first(),
5
+ d.length||(d=c.element.find("ul:visible").addBack().last().children("li:not(.vakata-context-separator)").last()),d.addClass("vakata-context-hover").children("a").focus(),b.stopImmediatePropagation(),b.preventDefault());break;case 39:c.is_visible&&(c.element.find(".vakata-context-hover").last().children("ul").show().children("li:not(.vakata-context-separator)").removeClass("vakata-context-hover").first().addClass("vakata-context-hover").children("a").focus(),b.stopImmediatePropagation(),b.preventDefault());break;case 40:c.is_visible&&(d=c.element.find("ul:visible").addBack().last().children(".vakata-context-hover").removeClass("vakata-context-hover").nextAll("li:not(.vakata-context-separator)").first(),d.length||(d=c.element.find("ul:visible").addBack().last().children("li:not(.vakata-context-separator)").first()),d.addClass("vakata-context-hover").children("a").focus(),b.stopImmediatePropagation(),b.preventDefault());break;case 27:a.vakata.context.hide(),b.preventDefault()}}).on("keydown",function(a){a.preventDefault();var b=c.element.find(".vakata-contextmenu-shortcut-"+a.which).parent();b.parent().not(".vakata-context-disabled")&&b.click()}),a(i).on("mousedown.vakata.jstree",function(b){c.is_visible&&!a.contains(c.element[0],b.target)&&a.vakata.context.hide()}).on("context_show.vakata.jstree",function(a,d){c.element.find("li:has(ul)").children("a").addClass("vakata-context-parent"),b&&c.element.addClass("vakata-context-rtl").css("direction","rtl"),c.element.find("ul").hide().end()})})}(a),a.jstree.defaults.dnd={copy:!0,open_timeout:500,is_draggable:!0,check_while_dragging:!0,always_copy:!1,inside_pos:0,drag_selection:!0,touch:!0,large_drop_target:!1,large_drag_target:!1,use_html5:!1};var k,l;a.jstree.plugins.dnd=function(b,c){this.init=function(a,b){c.init.call(this,a,b),this.settings.dnd.use_html5=this.settings.dnd.use_html5&&"draggable"in i.createElement("span")},this.bind=function(){c.bind.call(this),this.element.on(this.settings.dnd.use_html5?"dragstart.jstree":"mousedown.jstree touchstart.jstree",this.settings.dnd.large_drag_target?".jstree-node":".jstree-anchor",a.proxy(function(b){if(this.settings.dnd.large_drag_target&&a(b.target).closest(".jstree-node")[0]!==b.currentTarget)return!0;if("touchstart"===b.type&&(!this.settings.dnd.touch||"selected"===this.settings.dnd.touch&&!a(b.currentTarget).closest(".jstree-node").children(".jstree-anchor").hasClass("jstree-clicked")))return!0;var c=this.get_node(b.target),d=this.is_selected(c)&&this.settings.dnd.drag_selection?this.get_top_selected().length:1,e=d>1?d+" "+this.get_string("nodes"):this.get_text(b.currentTarget);if(this.settings.core.force_text&&(e=a.vakata.html.escape(e)),c&&c.id&&c.id!==a.jstree.root&&(1===b.which||"touchstart"===b.type||"dragstart"===b.type)&&(this.settings.dnd.is_draggable===!0||a.isFunction(this.settings.dnd.is_draggable)&&this.settings.dnd.is_draggable.call(this,d>1?this.get_top_selected(!0):[c],b))){if(k={jstree:!0,origin:this,obj:this.get_node(c,!0),nodes:d>1?this.get_top_selected():[c.id]},l=b.currentTarget,!this.settings.dnd.use_html5)return this.element.trigger("mousedown.jstree"),a.vakata.dnd.start(b,k,'<div id="jstree-dnd" class="jstree-'+this.get_theme()+" jstree-"+this.get_theme()+"-"+this.get_theme_variant()+" "+(this.settings.core.themes.responsive?" jstree-dnd-responsive":"")+'"><i class="jstree-icon jstree-er"></i>'+e+'<ins class="jstree-copy" style="display:none;">+</ins></div>');a.vakata.dnd._trigger("start",b,{helper:a(),element:l,data:k})}},this)),this.settings.dnd.use_html5&&this.element.on("dragover.jstree",function(b){return b.preventDefault(),a.vakata.dnd._trigger("move",b,{helper:a(),element:l,data:k}),!1}).on("drop.jstree",a.proxy(function(b){return b.preventDefault(),a.vakata.dnd._trigger("stop",b,{helper:a(),element:l,data:k}),!1},this))},this.redraw_node=function(a,b,d,e){if(a=c.redraw_node.apply(this,arguments),a&&this.settings.dnd.use_html5)if(this.settings.dnd.large_drag_target)a.setAttribute("draggable",!0);else{var f,g,h=null;for(f=0,g=a.childNodes.length;g>f;f++)if(a.childNodes[f]&&a.childNodes[f].className&&-1!==a.childNodes[f].className.indexOf("jstree-anchor")){h=a.childNodes[f];break}h&&h.setAttribute("draggable",!0)}return a}},a(function(){var c=!1,d=!1,e=!1,f=!1,g=a('<div id="jstree-marker">&#160;</div>').hide();a(i).on("dnd_start.vakata.jstree",function(a,b){c=!1,e=!1,b&&b.data&&b.data.jstree&&g.appendTo("body")}).on("dnd_move.vakata.jstree",function(h,i){if(f&&(i.event&&"dragover"===i.event.type&&i.event.target===e.target||clearTimeout(f)),i&&i.data&&i.data.jstree&&(!i.event.target.id||"jstree-marker"!==i.event.target.id)){e=i.event;var j=a.jstree.reference(i.event.target),k=!1,l=!1,m=!1,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D;if(j&&j._data&&j._data.dnd)if(g.attr("class","jstree-"+j.get_theme()+(j.settings.core.themes.responsive?" jstree-dnd-responsive":"")),C=i.data.origin&&(i.data.origin.settings.dnd.always_copy||i.data.origin.settings.dnd.copy&&(i.event.metaKey||i.event.ctrlKey)),i.helper.children().attr("class","jstree-"+j.get_theme()+" jstree-"+j.get_theme()+"-"+j.get_theme_variant()+" "+(j.settings.core.themes.responsive?" jstree-dnd-responsive":"")).find(".jstree-copy").first()[C?"show":"hide"](),i.event.target!==j.element[0]&&i.event.target!==j.get_container_ul()[0]||0!==j.get_container_ul().children().length){if(k=j.settings.dnd.large_drop_target?a(i.event.target).closest(".jstree-node").children(".jstree-anchor"):a(i.event.target).closest(".jstree-anchor"),k&&k.length&&k.parent().is(".jstree-closed, .jstree-open, .jstree-leaf")&&(l=k.offset(),m=(i.event.pageY!==b?i.event.pageY:i.event.originalEvent.pageY)-l.top,q=k.outerHeight(),t=q/3>m?["b","i","a"]:m>q-q/3?["a","i","b"]:m>q/2?["i","a","b"]:["i","b","a"],a.each(t,function(b,e){switch(e){case"b":o=l.left-6,p=l.top,r=j.get_parent(k),s=k.parent().index();break;case"i":A=j.settings.dnd.inside_pos,B=j.get_node(k.parent()),o=l.left-2,p=l.top+q/2+1,r=B.id,s="first"===A?0:"last"===A?B.children.length:Math.min(A,B.children.length);break;case"a":o=l.left-6,p=l.top+q,r=j.get_parent(k),s=k.parent().index()+1}for(u=!0,v=0,w=i.data.nodes.length;w>v;v++)if(x=i.data.origin&&(i.data.origin.settings.dnd.always_copy||i.data.origin.settings.dnd.copy&&(i.event.metaKey||i.event.ctrlKey))?"copy_node":"move_node",y=s,"move_node"===x&&"a"===e&&i.data.origin&&i.data.origin===j&&r===j.get_parent(i.data.nodes[v])&&(z=j.get_node(r),y>a.inArray(i.data.nodes[v],z.children)&&(y-=1)),u=u&&(j&&j.settings&&j.settings.dnd&&j.settings.dnd.check_while_dragging===!1||j.check(x,i.data.origin&&i.data.origin!==j?i.data.origin.get_node(i.data.nodes[v]):i.data.nodes[v],r,y,{dnd:!0,ref:j.get_node(k.parent()),pos:e,origin:i.data.origin,is_multi:i.data.origin&&i.data.origin!==j,is_foreign:!i.data.origin})),!u){j&&j.last_error&&(d=j.last_error());break}return"i"===e&&k.parent().is(".jstree-closed")&&j.settings.dnd.open_timeout&&(f=setTimeout(function(a,b){return function(){a.open_node(b)}}(j,k),j.settings.dnd.open_timeout)),u?(D=j.get_node(r,!0),D.hasClass(".jstree-dnd-parent")||(a(".jstree-dnd-parent").removeClass("jstree-dnd-parent"),D.addClass("jstree-dnd-parent")),c={ins:j,par:r,pos:"i"!==e||"last"!==A||0!==s||j.is_loaded(B)?s:"last"},g.css({left:o+"px",top:p+"px"}).show(),i.helper.find(".jstree-icon").first().removeClass("jstree-er").addClass("jstree-ok"),i.event.originalEvent&&i.event.originalEvent.dataTransfer&&(i.event.originalEvent.dataTransfer.dropEffect=C?"copy":"move"),d={},t=!0,!1):void 0}),t===!0))return}else{for(u=!0,v=0,w=i.data.nodes.length;w>v;v++)if(u=u&&j.check(i.data.origin&&(i.data.origin.settings.dnd.always_copy||i.data.origin.settings.dnd.copy&&(i.event.metaKey||i.event.ctrlKey))?"copy_node":"move_node",i.data.origin&&i.data.origin!==j?i.data.origin.get_node(i.data.nodes[v]):i.data.nodes[v],a.jstree.root,"last",{dnd:!0,ref:j.get_node(a.jstree.root),pos:"i",origin:i.data.origin,is_multi:i.data.origin&&i.data.origin!==j,is_foreign:!i.data.origin}),!u)break;if(u)return c={ins:j,par:a.jstree.root,pos:"last"},g.hide(),i.helper.find(".jstree-icon").first().removeClass("jstree-er").addClass("jstree-ok"),void(i.event.originalEvent&&i.event.originalEvent.dataTransfer&&(i.event.originalEvent.dataTransfer.dropEffect=C?"copy":"move"))}a(".jstree-dnd-parent").removeClass("jstree-dnd-parent"),c=!1,i.helper.find(".jstree-icon").removeClass("jstree-ok").addClass("jstree-er"),i.event.originalEvent&&i.event.originalEvent.dataTransfer&&(i.event.originalEvent.dataTransfer.dropEffect="none"),g.hide()}}).on("dnd_scroll.vakata.jstree",function(a,b){b&&b.data&&b.data.jstree&&(g.hide(),c=!1,e=!1,b.helper.find(".jstree-icon").first().removeClass("jstree-ok").addClass("jstree-er"))}).on("dnd_stop.vakata.jstree",function(b,h){if(a(".jstree-dnd-parent").removeClass("jstree-dnd-parent"),f&&clearTimeout(f),h&&h.data&&h.data.jstree){g.hide().detach();var i,j,k=[];if(c){for(i=0,j=h.data.nodes.length;j>i;i++)k[i]=h.data.origin?h.data.origin.get_node(h.data.nodes[i]):h.data.nodes[i];c.ins[h.data.origin&&(h.data.origin.settings.dnd.always_copy||h.data.origin.settings.dnd.copy&&(h.event.metaKey||h.event.ctrlKey))?"copy_node":"move_node"](k,c.par,c.pos,!1,!1,!1,h.data.origin)}else i=a(h.event.target).closest(".jstree"),i.length&&d&&d.error&&"check"===d.error&&(i=i.jstree(!0),i&&i.settings.core.error.call(this,d));e=!1,c=!1}}).on("keyup.jstree keydown.jstree",function(b,h){h=a.vakata.dnd._get(),h&&h.data&&h.data.jstree&&("keyup"===b.type&&27===b.which?(f&&clearTimeout(f),c=!1,d=!1,e=!1,f=!1,g.hide().detach(),a.vakata.dnd._clean()):(h.helper.find(".jstree-copy").first()[h.data.origin&&(h.data.origin.settings.dnd.always_copy||h.data.origin.settings.dnd.copy&&(b.metaKey||b.ctrlKey))?"show":"hide"](),e&&(e.metaKey=b.metaKey,e.ctrlKey=b.ctrlKey,a.vakata.dnd._trigger("move",e))))})}),function(a){a.vakata.html={div:a("<div />"),escape:function(b){return a.vakata.html.div.text(b).html()},strip:function(b){return a.vakata.html.div.empty().append(a.parseHTML(b)).text()}};var c={element:!1,target:!1,is_down:!1,is_drag:!1,helper:!1,helper_w:0,data:!1,init_x:0,init_y:0,scroll_l:0,scroll_t:0,scroll_e:!1,scroll_i:!1,is_touch:!1};a.vakata.dnd={settings:{scroll_speed:10,scroll_proximity:20,helper_left:5,helper_top:10,threshold:5,threshold_touch:50},_trigger:function(c,d,e){e===b&&(e=a.vakata.dnd._get()),e.event=d,a(i).triggerHandler("dnd_"+c+".vakata",e)},_get:function(){return{data:c.data,element:c.element,helper:c.helper}},_clean:function(){c.helper&&c.helper.remove(),c.scroll_i&&(clearInterval(c.scroll_i),c.scroll_i=!1),c={element:!1,target:!1,is_down:!1,is_drag:!1,helper:!1,helper_w:0,data:!1,init_x:0,init_y:0,scroll_l:0,scroll_t:0,scroll_e:!1,scroll_i:!1,is_touch:!1},a(i).off("mousemove.vakata.jstree touchmove.vakata.jstree",a.vakata.dnd.drag),a(i).off("mouseup.vakata.jstree touchend.vakata.jstree",a.vakata.dnd.stop)},_scroll:function(b){if(!c.scroll_e||!c.scroll_l&&!c.scroll_t)return c.scroll_i&&(clearInterval(c.scroll_i),c.scroll_i=!1),!1;if(!c.scroll_i)return c.scroll_i=setInterval(a.vakata.dnd._scroll,100),!1;if(b===!0)return!1;var d=c.scroll_e.scrollTop(),e=c.scroll_e.scrollLeft();c.scroll_e.scrollTop(d+c.scroll_t*a.vakata.dnd.settings.scroll_speed),c.scroll_e.scrollLeft(e+c.scroll_l*a.vakata.dnd.settings.scroll_speed),(d!==c.scroll_e.scrollTop()||e!==c.scroll_e.scrollLeft())&&a.vakata.dnd._trigger("scroll",c.scroll_e)},start:function(b,d,e){"touchstart"===b.type&&b.originalEvent&&b.originalEvent.changedTouches&&b.originalEvent.changedTouches[0]&&(b.pageX=b.originalEvent.changedTouches[0].pageX,b.pageY=b.originalEvent.changedTouches[0].pageY,b.target=i.elementFromPoint(b.originalEvent.changedTouches[0].pageX-window.pageXOffset,b.originalEvent.changedTouches[0].pageY-window.pageYOffset)),c.is_drag&&a.vakata.dnd.stop({});try{b.currentTarget.unselectable="on",b.currentTarget.onselectstart=function(){return!1},b.currentTarget.style&&(b.currentTarget.style.touchAction="none",b.currentTarget.style.msTouchAction="none",b.currentTarget.style.MozUserSelect="none")}catch(f){}return c.init_x=b.pageX,c.init_y=b.pageY,c.data=d,c.is_down=!0,c.element=b.currentTarget,c.target=b.target,c.is_touch="touchstart"===b.type,e!==!1&&(c.helper=a("<div id='vakata-dnd'></div>").html(e).css({display:"block",margin:"0",padding:"0",position:"absolute",top:"-2000px",lineHeight:"16px",zIndex:"10000"})),a(i).on("mousemove.vakata.jstree touchmove.vakata.jstree",a.vakata.dnd.drag),a(i).on("mouseup.vakata.jstree touchend.vakata.jstree",a.vakata.dnd.stop),!1},drag:function(b){if("touchmove"===b.type&&b.originalEvent&&b.originalEvent.changedTouches&&b.originalEvent.changedTouches[0]&&(b.pageX=b.originalEvent.changedTouches[0].pageX,b.pageY=b.originalEvent.changedTouches[0].pageY,b.target=i.elementFromPoint(b.originalEvent.changedTouches[0].pageX-window.pageXOffset,b.originalEvent.changedTouches[0].pageY-window.pageYOffset)),c.is_down){if(!c.is_drag){if(!(Math.abs(b.pageX-c.init_x)>(c.is_touch?a.vakata.dnd.settings.threshold_touch:a.vakata.dnd.settings.threshold)||Math.abs(b.pageY-c.init_y)>(c.is_touch?a.vakata.dnd.settings.threshold_touch:a.vakata.dnd.settings.threshold)))return;c.helper&&(c.helper.appendTo("body"),c.helper_w=c.helper.outerWidth()),c.is_drag=!0,a(c.target).one("click.vakata",!1),a.vakata.dnd._trigger("start",b)}var d=!1,e=!1,f=!1,g=!1,h=!1,j=!1,k=!1,l=!1,m=!1,n=!1;return c.scroll_t=0,c.scroll_l=0,c.scroll_e=!1,a(a(b.target).parentsUntil("body").addBack().get().reverse()).filter(function(){return/^auto|scroll$/.test(a(this).css("overflow"))&&(this.scrollHeight>this.offsetHeight||this.scrollWidth>this.offsetWidth)}).each(function(){var d=a(this),e=d.offset();return this.scrollHeight>this.offsetHeight&&(e.top+d.height()-b.pageY<a.vakata.dnd.settings.scroll_proximity&&(c.scroll_t=1),b.pageY-e.top<a.vakata.dnd.settings.scroll_proximity&&(c.scroll_t=-1)),this.scrollWidth>this.offsetWidth&&(e.left+d.width()-b.pageX<a.vakata.dnd.settings.scroll_proximity&&(c.scroll_l=1),b.pageX-e.left<a.vakata.dnd.settings.scroll_proximity&&(c.scroll_l=-1)),c.scroll_t||c.scroll_l?(c.scroll_e=a(this),!1):void 0}),c.scroll_e||(d=a(i),e=a(window),f=d.height(),g=e.height(),h=d.width(),j=e.width(),k=d.scrollTop(),l=d.scrollLeft(),f>g&&b.pageY-k<a.vakata.dnd.settings.scroll_proximity&&(c.scroll_t=-1),f>g&&g-(b.pageY-k)<a.vakata.dnd.settings.scroll_proximity&&(c.scroll_t=1),h>j&&b.pageX-l<a.vakata.dnd.settings.scroll_proximity&&(c.scroll_l=-1),h>j&&j-(b.pageX-l)<a.vakata.dnd.settings.scroll_proximity&&(c.scroll_l=1),(c.scroll_t||c.scroll_l)&&(c.scroll_e=d)),c.scroll_e&&a.vakata.dnd._scroll(!0),c.helper&&(m=parseInt(b.pageY+a.vakata.dnd.settings.helper_top,10),n=parseInt(b.pageX+a.vakata.dnd.settings.helper_left,10),f&&m+25>f&&(m=f-50),h&&n+c.helper_w>h&&(n=h-(c.helper_w+2)),c.helper.css({left:n+"px",top:m+"px"})),a.vakata.dnd._trigger("move",b),!1}},stop:function(b){if("touchend"===b.type&&b.originalEvent&&b.originalEvent.changedTouches&&b.originalEvent.changedTouches[0]&&(b.pageX=b.originalEvent.changedTouches[0].pageX,b.pageY=b.originalEvent.changedTouches[0].pageY,b.target=i.elementFromPoint(b.originalEvent.changedTouches[0].pageX-window.pageXOffset,b.originalEvent.changedTouches[0].pageY-window.pageYOffset)),c.is_drag)b.target!==c.target&&a(c.target).off("click.vakata"),a.vakata.dnd._trigger("stop",b);else if("touchend"===b.type&&b.target===c.target){var d=setTimeout(function(){a(b.target).click()},100);a(b.target).one("click",function(){d&&clearTimeout(d)})}return a.vakata.dnd._clean(),!1}}}(a),a.jstree.defaults.massload=null,a.jstree.plugins.massload=function(b,c){this.init=function(a,b){this._data.massload={},c.init.call(this,a,b)},this._load_nodes=function(b,d,e,f){var g=this.settings.massload,h=JSON.stringify(b),i=[],j=this._model.data,k,l,m;if(!e){for(k=0,l=b.length;l>k;k++)(!j[b[k]]||!j[b[k]].state.loaded&&!j[b[k]].state.failed||f)&&(i.push(b[k]),m=this.get_node(b[k],!0),m&&m.length&&m.addClass("jstree-loading").attr("aria-busy",!0));if(this._data.massload={},i.length){if(a.isFunction(g))return g.call(this,i,a.proxy(function(a){var g,h;if(a)for(g in a)a.hasOwnProperty(g)&&(this._data.massload[g]=a[g]);for(g=0,h=b.length;h>g;g++)m=this.get_node(b[g],!0),m&&m.length&&m.removeClass("jstree-loading").attr("aria-busy",!1);c._load_nodes.call(this,b,d,e,f)},this));if("object"==typeof g&&g&&g.url)return g=a.extend(!0,{},g),a.isFunction(g.url)&&(g.url=g.url.call(this,i)),a.isFunction(g.data)&&(g.data=g.data.call(this,i)),a.ajax(g).done(a.proxy(function(a,g,h){var i,j;if(a)for(i in a)a.hasOwnProperty(i)&&(this._data.massload[i]=a[i]);for(i=0,j=b.length;j>i;i++)m=this.get_node(b[i],!0),m&&m.length&&m.removeClass("jstree-loading").attr("aria-busy",!1);c._load_nodes.call(this,b,d,e,f)},this)).fail(a.proxy(function(a){c._load_nodes.call(this,b,d,e,f)},this))}}return c._load_nodes.call(this,b,d,e,f)},this._load_node=function(b,d){var e=this._data.massload[b.id],f=null,g;return e?(f=this["string"==typeof e?"_append_html_data":"_append_json_data"](b,"string"==typeof e?a(a.parseHTML(e)).filter(function(){return 3!==this.nodeType}):e,function(a){d.call(this,a)}),g=this.get_node(b.id,!0),g&&g.length&&g.removeClass("jstree-loading").attr("aria-busy",!1),delete this._data.massload[b.id],f):c._load_node.call(this,b,d)}},a.jstree.defaults.search={ajax:!1,fuzzy:!1,case_sensitive:!1,show_only_matches:!1,show_only_matches_children:!1,close_opened_onclear:!0,search_leaves_only:!1,search_callback:!1},a.jstree.plugins.search=function(c,d){this.bind=function(){d.bind.call(this),this._data.search.str="",this._data.search.dom=a(),this._data.search.res=[],this._data.search.opn=[],this._data.search.som=!1,this._data.search.smc=!1,this._data.search.hdn=[],this.element.on("search.jstree",a.proxy(function(b,c){if(this._data.search.som&&c.res.length){var d=this._model.data,e,f,g=[],h,i;for(e=0,f=c.res.length;f>e;e++)if(d[c.res[e]]&&!d[c.res[e]].state.hidden&&(g.push(c.res[e]),g=g.concat(d[c.res[e]].parents),this._data.search.smc))for(h=0,i=d[c.res[e]].children_d.length;i>h;h++)d[d[c.res[e]].children_d[h]]&&!d[d[c.res[e]].children_d[h]].state.hidden&&g.push(d[c.res[e]].children_d[h]);g=a.vakata.array_remove_item(a.vakata.array_unique(g),a.jstree.root),this._data.search.hdn=this.hide_all(!0),this.show_node(g,!0),this.redraw(!0)}},this)).on("clear_search.jstree",a.proxy(function(a,b){this._data.search.som&&b.res.length&&(this.show_node(this._data.search.hdn,!0),this.redraw(!0))},this))},this.search=function(c,d,e,f,g,h){if(c===!1||""===a.trim(c.toString()))return this.clear_search();f=this.get_node(f),f=f&&f.id?f.id:null,c=c.toString();var i=this.settings.search,j=i.ajax?i.ajax:!1,k=this._model.data,l=null,m=[],n=[],o,p;if(this._data.search.res.length&&!g&&this.clear_search(),e===b&&(e=i.show_only_matches),h===b&&(h=i.show_only_matches_children),!d&&j!==!1)return a.isFunction(j)?j.call(this,c,a.proxy(function(b){b&&b.d&&(b=b.d),this._load_nodes(a.isArray(b)?a.vakata.array_unique(b):[],function(){this.search(c,!0,e,f,g,h)})},this),f):(j=a.extend({},j),j.data||(j.data={}),j.data.str=c,f&&(j.data.inside=f),this._data.search.lastRequest&&this._data.search.lastRequest.abort(),this._data.search.lastRequest=a.ajax(j).fail(a.proxy(function(){this._data.core.last_error={error:"ajax",plugin:"search",id:"search_01",reason:"Could not load search parents",data:JSON.stringify(j)},this.settings.core.error.call(this,this._data.core.last_error)},this)).done(a.proxy(function(b){b&&b.d&&(b=b.d),this._load_nodes(a.isArray(b)?a.vakata.array_unique(b):[],function(){this.search(c,!0,e,f,g,h)})},this)),this._data.search.lastRequest);if(g||(this._data.search.str=c,this._data.search.dom=a(),this._data.search.res=[],this._data.search.opn=[],this._data.search.som=e,this._data.search.smc=h),l=new a.vakata.search(c,!0,{caseSensitive:i.case_sensitive,fuzzy:i.fuzzy}),a.each(k[f?f:a.jstree.root].children_d,function(a,b){var d=k[b];d.text&&!d.state.hidden&&(!i.search_leaves_only||d.state.loaded&&0===d.children.length)&&(i.search_callback&&i.search_callback.call(this,c,d)||!i.search_callback&&l.search(d.text).isMatch)&&(m.push(b),n=n.concat(d.parents))}),m.length){for(n=a.vakata.array_unique(n),o=0,p=n.length;p>o;o++)n[o]!==a.jstree.root&&k[n[o]]&&this.open_node(n[o],null,0)===!0&&this._data.search.opn.push(n[o]);g?(this._data.search.dom=this._data.search.dom.add(a(this.element[0].querySelectorAll("#"+a.map(m,function(b){return-1!=="0123456789".indexOf(b[0])?"\\3"+b[0]+" "+b.substr(1).replace(a.jstree.idregex,"\\$&"):b.replace(a.jstree.idregex,"\\$&")}).join(", #")))),this._data.search.res=a.vakata.array_unique(this._data.search.res.concat(m))):(this._data.search.dom=a(this.element[0].querySelectorAll("#"+a.map(m,function(b){return-1!=="0123456789".indexOf(b[0])?"\\3"+b[0]+" "+b.substr(1).replace(a.jstree.idregex,"\\$&"):b.replace(a.jstree.idregex,"\\$&")}).join(", #"))),this._data.search.res=m),this._data.search.dom.children(".jstree-anchor").addClass("jstree-search")}this.trigger("search",{nodes:this._data.search.dom,str:c,res:this._data.search.res,show_only_matches:e})},this.clear_search=function(){this.settings.search.close_opened_onclear&&this.close_node(this._data.search.opn,0),this.trigger("clear_search",{nodes:this._data.search.dom,str:this._data.search.str,res:this._data.search.res}),this._data.search.res.length&&(this._data.search.dom=a(this.element[0].querySelectorAll("#"+a.map(this._data.search.res,function(b){return-1!=="0123456789".indexOf(b[0])?"\\3"+b[0]+" "+b.substr(1).replace(a.jstree.idregex,"\\$&"):b.replace(a.jstree.idregex,"\\$&")}).join(", #"))),this._data.search.dom.children(".jstree-anchor").removeClass("jstree-search")),this._data.search.str="",this._data.search.res=[],this._data.search.opn=[],this._data.search.dom=a()},this.redraw_node=function(b,c,e,f){if(b=d.redraw_node.apply(this,arguments),b&&-1!==a.inArray(b.id,this._data.search.res)){var g,h,i=null;for(g=0,h=b.childNodes.length;h>g;g++)if(b.childNodes[g]&&b.childNodes[g].className&&-1!==b.childNodes[g].className.indexOf("jstree-anchor")){i=b.childNodes[g];break}i&&(i.className+=" jstree-search")}return b}},function(a){a.vakata.search=function(b,c,d){d=d||{},d=a.extend({},a.vakata.search.defaults,d),d.fuzzy!==!1&&(d.fuzzy=!0),b=d.caseSensitive?b:b.toLowerCase();var e=d.location,f=d.distance,g=d.threshold,h=b.length,i,j,k,l;return h>32&&(d.fuzzy=!1),d.fuzzy&&(i=1<<h-1,j=function(){var a={},c=0;for(c=0;h>c;c++)a[b.charAt(c)]=0;for(c=0;h>c;c++)a[b.charAt(c)]|=1<<h-c-1;return a}(),k=function(a,b){var c=a/h,d=Math.abs(e-b);return f?c+d/f:d?1:c}),l=function(a){if(a=d.caseSensitive?a:a.toLowerCase(),b===a||-1!==a.indexOf(b))return{isMatch:!0,score:0};if(!d.fuzzy)return{isMatch:!1,score:1};var c,f,l=a.length,m=g,n=a.indexOf(b,e),o,p,q=h+l,r,s,t,u,v,w=1,x=[];for(-1!==n&&(m=Math.min(k(0,n),m),n=a.lastIndexOf(b,e+h),-1!==n&&(m=Math.min(k(0,n),m))),n=-1,c=0;h>c;c++){o=0,p=q;while(p>o)k(c,e+p)<=m?o=p:q=p,p=Math.floor((q-o)/2+o);for(q=p,s=Math.max(1,e-p+1),t=Math.min(e+p,l)+h,u=new Array(t+2),u[t+1]=(1<<c)-1,f=t;f>=s;f--)if(v=j[a.charAt(f-1)],0===c?u[f]=(u[f+1]<<1|1)&v:u[f]=(u[f+1]<<1|1)&v|((r[f+1]|r[f])<<1|1)|r[f+1],u[f]&i&&(w=k(c,f-1),m>=w)){if(m=w,n=f-1,x.push(n),!(n>e))break;s=Math.max(1,2*e-n)}if(k(c+1,e)>m)break;r=u}return{isMatch:n>=0,score:w}},c===!0?{search:l}:l(c)},a.vakata.search.defaults={location:0,distance:100,threshold:.6,fuzzy:!1,caseSensitive:!1}}(a),a.jstree.defaults.sort=function(a,b){return this.get_text(a)>this.get_text(b)?1:-1},a.jstree.plugins.sort=function(b,c){this.bind=function(){c.bind.call(this),this.element.on("model.jstree",a.proxy(function(a,b){this.sort(b.parent,!0)},this)).on("rename_node.jstree create_node.jstree",a.proxy(function(a,b){this.sort(b.parent||b.node.parent,!1),this.redraw_node(b.parent||b.node.parent,!0)},this)).on("move_node.jstree copy_node.jstree",a.proxy(function(a,b){this.sort(b.parent,!1),this.redraw_node(b.parent,!0)},this))},this.sort=function(b,c){var d,e;if(b=this.get_node(b),b&&b.children&&b.children.length&&(b.children.sort(a.proxy(this.settings.sort,this)),c))for(d=0,e=b.children_d.length;e>d;d++)this.sort(b.children_d[d],!1)}};var m=!1;a.jstree.defaults.state={key:"jstree",events:"changed.jstree open_node.jstree close_node.jstree check_node.jstree uncheck_node.jstree",ttl:!1,filter:!1},a.jstree.plugins.state=function(b,c){this.bind=function(){c.bind.call(this);var b=a.proxy(function(){this.element.on(this.settings.state.events,a.proxy(function(){m&&clearTimeout(m),m=setTimeout(a.proxy(function(){this.save_state()},this),100)},this)),this.trigger("state_ready")},this);this.element.on("ready.jstree",a.proxy(function(a,c){this.element.one("restore_state.jstree",b),this.restore_state()||b()},this))},this.save_state=function(){var b={state:this.get_state(),ttl:this.settings.state.ttl,sec:+new Date};a.vakata.storage.set(this.settings.state.key,JSON.stringify(b))},this.restore_state=function(){var b=a.vakata.storage.get(this.settings.state.key);if(b)try{b=JSON.parse(b)}catch(c){return!1}return b&&b.ttl&&b.sec&&+new Date-b.sec>b.ttl?!1:(b&&b.state&&(b=b.state),b&&a.isFunction(this.settings.state.filter)&&(b=this.settings.state.filter.call(this,b)),b?(this.element.one("set_state.jstree",function(c,d){d.instance.trigger("restore_state",{state:a.extend(!0,{},b)})}),this.set_state(b),!0):!1)},this.clear_state=function(){return a.vakata.storage.del(this.settings.state.key)}},function(a,b){a.vakata.storage={set:function(a,b){return window.localStorage.setItem(a,b)},get:function(a){return window.localStorage.getItem(a)},del:function(a){return window.localStorage.removeItem(a)}}}(a),a.jstree.defaults.types={"default":{}},a.jstree.defaults.types[a.jstree.root]={},a.jstree.plugins.types=function(c,d){this.init=function(c,e){var f,g;if(e&&e.types&&e.types["default"])for(f in e.types)if("default"!==f&&f!==a.jstree.root&&e.types.hasOwnProperty(f))for(g in e.types["default"])e.types["default"].hasOwnProperty(g)&&e.types[f][g]===b&&(e.types[f][g]=e.types["default"][g]);d.init.call(this,c,e),this._model.data[a.jstree.root].type=a.jstree.root},this.refresh=function(b,c){d.refresh.call(this,b,c),this._model.data[a.jstree.root].type=a.jstree.root},this.bind=function(){this.element.on("model.jstree",a.proxy(function(c,d){var e=this._model.data,f=d.nodes,g=this.settings.types,h,i,j="default",k;for(h=0,i=f.length;i>h;h++){if(j="default",e[f[h]].original&&e[f[h]].original.type&&g[e[f[h]].original.type]&&(j=e[f[h]].original.type),e[f[h]].data&&e[f[h]].data.jstree&&e[f[h]].data.jstree.type&&g[e[f[h]].data.jstree.type]&&(j=e[f[h]].data.jstree.type),e[f[h]].type=j,e[f[h]].icon===!0&&g[j].icon!==b&&(e[f[h]].icon=g[j].icon),g[j].li_attr!==b&&"object"==typeof g[j].li_attr)for(k in g[j].li_attr)if(g[j].li_attr.hasOwnProperty(k)){if("id"===k)continue;e[f[h]].li_attr[k]===b?e[f[h]].li_attr[k]=g[j].li_attr[k]:"class"===k&&(e[f[h]].li_attr["class"]=g[j].li_attr["class"]+" "+e[f[h]].li_attr["class"])}if(g[j].a_attr!==b&&"object"==typeof g[j].a_attr)for(k in g[j].a_attr)if(g[j].a_attr.hasOwnProperty(k)){if("id"===k)continue;e[f[h]].a_attr[k]===b?e[f[h]].a_attr[k]=g[j].a_attr[k]:"href"===k&&"#"===e[f[h]].a_attr[k]?e[f[h]].a_attr.href=g[j].a_attr.href:"class"===k&&(e[f[h]].a_attr["class"]=g[j].a_attr["class"]+" "+e[f[h]].a_attr["class"])}}e[a.jstree.root].type=a.jstree.root},this)),d.bind.call(this)},this.get_json=function(b,c,e){var f,g,h=this._model.data,i=c?a.extend(!0,{},c,{no_id:!1}):{},j=d.get_json.call(this,b,i,e);if(j===!1)return!1;if(a.isArray(j))for(f=0,g=j.length;g>f;f++)j[f].type=j[f].id&&h[j[f].id]&&h[j[f].id].type?h[j[f].id].type:"default",c&&c.no_id&&(delete j[f].id,j[f].li_attr&&j[f].li_attr.id&&delete j[f].li_attr.id,j[f].a_attr&&j[f].a_attr.id&&delete j[f].a_attr.id);else j.type=j.id&&h[j.id]&&h[j.id].type?h[j.id].type:"default",c&&c.no_id&&(j=this._delete_ids(j));return j},this._delete_ids=function(b){if(a.isArray(b)){for(var c=0,d=b.length;d>c;c++)b[c]=this._delete_ids(b[c]);return b}return delete b.id,b.li_attr&&b.li_attr.id&&delete b.li_attr.id,b.a_attr&&b.a_attr.id&&delete b.a_attr.id,b.children&&a.isArray(b.children)&&(b.children=this._delete_ids(b.children)),b},this.check=function(c,e,f,g,h){if(d.check.call(this,c,e,f,g,h)===!1)return!1;e=e&&e.id?e:this.get_node(e),f=f&&f.id?f:this.get_node(f);var i=e&&e.id?h&&h.origin?h.origin:a.jstree.reference(e.id):null,j,k,l,m;switch(i=i&&i._model&&i._model.data?i._model.data:null,c){case"create_node":case"move_node":case"copy_node":if("move_node"!==c||-1===a.inArray(e.id,f.children)){if(j=this.get_rules(f),j.max_children!==b&&-1!==j.max_children&&j.max_children===f.children.length)return this._data.core.last_error={error:"check",plugin:"types",id:"types_01",reason:"max_children prevents function: "+c,data:JSON.stringify({chk:c,pos:g,obj:e&&e.id?e.id:!1,par:f&&f.id?f.id:!1})},!1;if(j.valid_children!==b&&-1!==j.valid_children&&-1===a.inArray(e.type||"default",j.valid_children))return this._data.core.last_error={error:"check",plugin:"types",id:"types_02",reason:"valid_children prevents function: "+c,data:JSON.stringify({chk:c,pos:g,obj:e&&e.id?e.id:!1,par:f&&f.id?f.id:!1})},!1;if(i&&e.children_d&&e.parents){for(k=0,l=0,m=e.children_d.length;m>l;l++)k=Math.max(k,i[e.children_d[l]].parents.length);k=k-e.parents.length+1}(0>=k||k===b)&&(k=1);do{if(j.max_depth!==b&&-1!==j.max_depth&&j.max_depth<k)return this._data.core.last_error={error:"check",plugin:"types",id:"types_03",reason:"max_depth prevents function: "+c,data:JSON.stringify({chk:c,pos:g,obj:e&&e.id?e.id:!1,par:f&&f.id?f.id:!1})},!1;f=this.get_node(f.parent),j=this.get_rules(f),k++}while(f)}}return!0},this.get_rules=function(a){if(a=this.get_node(a),!a)return!1;var c=this.get_type(a,!0);return c.max_depth===b&&(c.max_depth=-1),c.max_children===b&&(c.max_children=-1),c.valid_children===b&&(c.valid_children=-1),c},this.get_type=function(b,c){return b=this.get_node(b),b?c?a.extend({type:b.type},this.settings.types[b.type]):b.type:!1},this.set_type=function(c,d){var e=this._model.data,f,g,h,i,j,k,l,m;if(a.isArray(c)){for(c=c.slice(),g=0,h=c.length;h>g;g++)this.set_type(c[g],d);return!0}if(f=this.settings.types,c=this.get_node(c),!f[d]||!c)return!1;if(l=this.get_node(c,!0),l&&l.length&&(m=l.children(".jstree-anchor")),i=c.type,j=this.get_icon(c),c.type=d,(j===!0||!f[i]||f[i].icon!==b&&j===f[i].icon)&&this.set_icon(c,f[d].icon!==b?f[d].icon:!0),f[i]&&f[i].li_attr!==b&&"object"==typeof f[i].li_attr)for(k in f[i].li_attr)if(f[i].li_attr.hasOwnProperty(k)){if("id"===k)continue;"class"===k?(e[c.id].li_attr["class"]=(e[c.id].li_attr["class"]||"").replace(f[i].li_attr[k],""),l&&l.removeClass(f[i].li_attr[k])):e[c.id].li_attr[k]===f[i].li_attr[k]&&(e[c.id].li_attr[k]=null,l&&l.removeAttr(k))}if(f[i]&&f[i].a_attr!==b&&"object"==typeof f[i].a_attr)for(k in f[i].a_attr)if(f[i].a_attr.hasOwnProperty(k)){if("id"===k)continue;"class"===k?(e[c.id].a_attr["class"]=(e[c.id].a_attr["class"]||"").replace(f[i].a_attr[k],""),m&&m.removeClass(f[i].a_attr[k])):e[c.id].a_attr[k]===f[i].a_attr[k]&&("href"===k?(e[c.id].a_attr[k]="#",m&&m.attr("href","#")):(delete e[c.id].a_attr[k],m&&m.removeAttr(k)))}if(f[d].li_attr!==b&&"object"==typeof f[d].li_attr)for(k in f[d].li_attr)if(f[d].li_attr.hasOwnProperty(k)){if("id"===k)continue;e[c.id].li_attr[k]===b?(e[c.id].li_attr[k]=f[d].li_attr[k],l&&("class"===k?l.addClass(f[d].li_attr[k]):l.attr(k,f[d].li_attr[k]))):"class"===k&&(e[c.id].li_attr["class"]=f[d].li_attr[k]+" "+e[c.id].li_attr["class"],l&&l.addClass(f[d].li_attr[k]))}if(f[d].a_attr!==b&&"object"==typeof f[d].a_attr)for(k in f[d].a_attr)if(f[d].a_attr.hasOwnProperty(k)){if("id"===k)continue;e[c.id].a_attr[k]===b?(e[c.id].a_attr[k]=f[d].a_attr[k],m&&("class"===k?m.addClass(f[d].a_attr[k]):m.attr(k,f[d].a_attr[k]))):"href"===k&&"#"===e[c.id].a_attr[k]?(e[c.id].a_attr.href=f[d].a_attr.href,m&&m.attr("href",f[d].a_attr.href)):"class"===k&&(e[c.id].a_attr["class"]=f[d].a_attr["class"]+" "+e[c.id].a_attr["class"],m&&m.addClass(f[d].a_attr[k]))}return!0}},a.jstree.defaults.unique={case_sensitive:!1,duplicate:function(a,b){return a+" ("+b+")"}},a.jstree.plugins.unique=function(c,d){this.check=function(b,c,e,f,g){if(d.check.call(this,b,c,e,f,g)===!1)return!1;
6
+ if(c=c&&c.id?c:this.get_node(c),e=e&&e.id?e:this.get_node(e),!e||!e.children)return!0;var h="rename_node"===b?f:c.text,i=[],j=this.settings.unique.case_sensitive,k=this._model.data,l,m;for(l=0,m=e.children.length;m>l;l++)i.push(j?k[e.children[l]].text:k[e.children[l]].text.toLowerCase());switch(j||(h=h.toLowerCase()),b){case"delete_node":return!0;case"rename_node":return l=-1===a.inArray(h,i)||c.text&&c.text[j?"toString":"toLowerCase"]()===h,l||(this._data.core.last_error={error:"check",plugin:"unique",id:"unique_01",reason:"Child with name "+h+" already exists. Preventing: "+b,data:JSON.stringify({chk:b,pos:f,obj:c&&c.id?c.id:!1,par:e&&e.id?e.id:!1})}),l;case"create_node":return l=-1===a.inArray(h,i),l||(this._data.core.last_error={error:"check",plugin:"unique",id:"unique_04",reason:"Child with name "+h+" already exists. Preventing: "+b,data:JSON.stringify({chk:b,pos:f,obj:c&&c.id?c.id:!1,par:e&&e.id?e.id:!1})}),l;case"copy_node":return l=-1===a.inArray(h,i),l||(this._data.core.last_error={error:"check",plugin:"unique",id:"unique_02",reason:"Child with name "+h+" already exists. Preventing: "+b,data:JSON.stringify({chk:b,pos:f,obj:c&&c.id?c.id:!1,par:e&&e.id?e.id:!1})}),l;case"move_node":return l=c.parent===e.id&&(!g||!g.is_multi)||-1===a.inArray(h,i),l||(this._data.core.last_error={error:"check",plugin:"unique",id:"unique_03",reason:"Child with name "+h+" already exists. Preventing: "+b,data:JSON.stringify({chk:b,pos:f,obj:c&&c.id?c.id:!1,par:e&&e.id?e.id:!1})}),l}return!0},this.create_node=function(c,e,f,g,h){if(!e||e.text===b){if(null===c&&(c=a.jstree.root),c=this.get_node(c),!c)return d.create_node.call(this,c,e,f,g,h);if(f=f===b?"last":f,!f.toString().match(/^(before|after)$/)&&!h&&!this.is_loaded(c))return d.create_node.call(this,c,e,f,g,h);e||(e={});var i,j,k,l,m,n=this._model.data,o=this.settings.unique.case_sensitive,p=this.settings.unique.duplicate;for(j=i=this.get_string("New node"),k=[],l=0,m=c.children.length;m>l;l++)k.push(o?n[c.children[l]].text:n[c.children[l]].text.toLowerCase());l=1;while(-1!==a.inArray(o?j:j.toLowerCase(),k))j=p.call(this,i,++l).toString();e.text=j}return d.create_node.call(this,c,e,f,g,h)}};var n=i.createElement("DIV");if(n.setAttribute("unselectable","on"),n.setAttribute("role","presentation"),n.className="jstree-wholerow",n.innerHTML="&#160;",a.jstree.plugins.wholerow=function(b,c){this.bind=function(){c.bind.call(this),this.element.on("ready.jstree set_state.jstree",a.proxy(function(){this.hide_dots()},this)).on("init.jstree loading.jstree ready.jstree",a.proxy(function(){this.get_container_ul().addClass("jstree-wholerow-ul")},this)).on("deselect_all.jstree",a.proxy(function(a,b){this.element.find(".jstree-wholerow-clicked").removeClass("jstree-wholerow-clicked")},this)).on("changed.jstree",a.proxy(function(a,b){this.element.find(".jstree-wholerow-clicked").removeClass("jstree-wholerow-clicked");var c=!1,d,e;for(d=0,e=b.selected.length;e>d;d++)c=this.get_node(b.selected[d],!0),c&&c.length&&c.children(".jstree-wholerow").addClass("jstree-wholerow-clicked")},this)).on("open_node.jstree",a.proxy(function(a,b){this.get_node(b.node,!0).find(".jstree-clicked").parent().children(".jstree-wholerow").addClass("jstree-wholerow-clicked")},this)).on("hover_node.jstree dehover_node.jstree",a.proxy(function(a,b){"hover_node"===a.type&&this.is_disabled(b.node)||this.get_node(b.node,!0).children(".jstree-wholerow")["hover_node"===a.type?"addClass":"removeClass"]("jstree-wholerow-hovered")},this)).on("contextmenu.jstree",".jstree-wholerow",a.proxy(function(b){if(this._data.contextmenu){b.preventDefault();var c=a.Event("contextmenu",{metaKey:b.metaKey,ctrlKey:b.ctrlKey,altKey:b.altKey,shiftKey:b.shiftKey,pageX:b.pageX,pageY:b.pageY});a(b.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(c)}},this)).on("click.jstree",".jstree-wholerow",function(b){b.stopImmediatePropagation();var c=a.Event("click",{metaKey:b.metaKey,ctrlKey:b.ctrlKey,altKey:b.altKey,shiftKey:b.shiftKey});a(b.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(c).focus()}).on("dblclick.jstree",".jstree-wholerow",function(b){b.stopImmediatePropagation();var c=a.Event("dblclick",{metaKey:b.metaKey,ctrlKey:b.ctrlKey,altKey:b.altKey,shiftKey:b.shiftKey});a(b.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(c).focus()}).on("click.jstree",".jstree-leaf > .jstree-ocl",a.proxy(function(b){b.stopImmediatePropagation();var c=a.Event("click",{metaKey:b.metaKey,ctrlKey:b.ctrlKey,altKey:b.altKey,shiftKey:b.shiftKey});a(b.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(c).focus()},this)).on("mouseover.jstree",".jstree-wholerow, .jstree-icon",a.proxy(function(a){return a.stopImmediatePropagation(),this.is_disabled(a.currentTarget)||this.hover_node(a.currentTarget),!1},this)).on("mouseleave.jstree",".jstree-node",a.proxy(function(a){this.dehover_node(a.currentTarget)},this))},this.teardown=function(){this.settings.wholerow&&this.element.find(".jstree-wholerow").remove(),c.teardown.call(this)},this.redraw_node=function(b,d,e,f){if(b=c.redraw_node.apply(this,arguments)){var g=n.cloneNode(!0);-1!==a.inArray(b.id,this._data.core.selected)&&(g.className+=" jstree-wholerow-clicked"),this._data.core.focused&&this._data.core.focused===b.id&&(g.className+=" jstree-wholerow-hovered"),b.insertBefore(g,b.childNodes[0])}return b}},i.registerElement&&Object&&Object.create){var o=Object.create(HTMLElement.prototype);o.createdCallback=function(){var b={core:{},plugins:[]},c;for(c in a.jstree.plugins)a.jstree.plugins.hasOwnProperty(c)&&this.attributes[c]&&(b.plugins.push(c),this.getAttribute(c)&&JSON.parse(this.getAttribute(c))&&(b[c]=JSON.parse(this.getAttribute(c))));for(c in a.jstree.defaults.core)a.jstree.defaults.core.hasOwnProperty(c)&&this.attributes[c]&&(b.core[c]=JSON.parse(this.getAttribute(c))||this.getAttribute(c));a(this).jstree(b)};try{i.registerElement("vakata-jstree",{prototype:o})}catch(p){}}}});
includes/jstree/themes/default-dark/32px.png ADDED
Binary file
includes/jstree/themes/default-dark/40px.png ADDED
Binary file
includes/jstree/themes/default-dark/style.css ADDED
@@ -0,0 +1,1146 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* jsTree default dark theme */
2
+ .jstree-node,
3
+ .jstree-children,
4
+ .jstree-container-ul {
5
+ display: block;
6
+ margin: 0;
7
+ padding: 0;
8
+ list-style-type: none;
9
+ list-style-image: none;
10
+ }
11
+ .jstree-node {
12
+ white-space: nowrap;
13
+ }
14
+ .jstree-anchor {
15
+ display: inline-block;
16
+ color: black;
17
+ white-space: nowrap;
18
+ padding: 0 4px 0 1px;
19
+ margin: 0;
20
+ vertical-align: top;
21
+ }
22
+ .jstree-anchor:focus {
23
+ outline: 0;
24
+ }
25
+ .jstree-anchor,
26
+ .jstree-anchor:link,
27
+ .jstree-anchor:visited,
28
+ .jstree-anchor:hover,
29
+ .jstree-anchor:active {
30
+ text-decoration: none;
31
+ color: inherit;
32
+ }
33
+ .jstree-icon {
34
+ display: inline-block;
35
+ text-decoration: none;
36
+ margin: 0;
37
+ padding: 0;
38
+ vertical-align: top;
39
+ text-align: center;
40
+ }
41
+ .jstree-icon:empty {
42
+ display: inline-block;
43
+ text-decoration: none;
44
+ margin: 0;
45
+ padding: 0;
46
+ vertical-align: top;
47
+ text-align: center;
48
+ }
49
+ .jstree-ocl {
50
+ cursor: pointer;
51
+ }
52
+ .jstree-leaf > .jstree-ocl {
53
+ cursor: default;
54
+ }
55
+ .jstree .jstree-open > .jstree-children {
56
+ display: block;
57
+ }
58
+ .jstree .jstree-closed > .jstree-children,
59
+ .jstree .jstree-leaf > .jstree-children {
60
+ display: none;
61
+ }
62
+ .jstree-anchor > .jstree-themeicon {
63
+ margin-right: 2px;
64
+ }
65
+ .jstree-no-icons .jstree-themeicon,
66
+ .jstree-anchor > .jstree-themeicon-hidden {
67
+ display: none;
68
+ }
69
+ .jstree-hidden,
70
+ .jstree-node.jstree-hidden {
71
+ display: none;
72
+ }
73
+ .jstree-rtl .jstree-anchor {
74
+ padding: 0 1px 0 4px;
75
+ }
76
+ .jstree-rtl .jstree-anchor > .jstree-themeicon {
77
+ margin-left: 2px;
78
+ margin-right: 0;
79
+ }
80
+ .jstree-rtl .jstree-node {
81
+ margin-left: 0;
82
+ }
83
+ .jstree-rtl .jstree-container-ul > .jstree-node {
84
+ margin-right: 0;
85
+ }
86
+ .jstree-wholerow-ul {
87
+ position: relative;
88
+ display: inline-block;
89
+ min-width: 100%;
90
+ }
91
+ .jstree-wholerow-ul .jstree-leaf > .jstree-ocl {
92
+ cursor: pointer;
93
+ }
94
+ .jstree-wholerow-ul .jstree-anchor,
95
+ .jstree-wholerow-ul .jstree-icon {
96
+ position: relative;
97
+ }
98
+ .jstree-wholerow-ul .jstree-wholerow {
99
+ width: 100%;
100
+ cursor: pointer;
101
+ position: absolute;
102
+ left: 0;
103
+ -webkit-user-select: none;
104
+ -moz-user-select: none;
105
+ -ms-user-select: none;
106
+ user-select: none;
107
+ }
108
+ .vakata-context {
109
+ display: none;
110
+ }
111
+ .vakata-context,
112
+ .vakata-context ul {
113
+ margin: 0;
114
+ padding: 2px;
115
+ position: absolute;
116
+ background: #f5f5f5;
117
+ border: 1px solid #979797;
118
+ box-shadow: 2px 2px 2px #999999;
119
+ }
120
+ .vakata-context ul {
121
+ list-style: none;
122
+ left: 100%;
123
+ margin-top: -2.7em;
124
+ margin-left: -4px;
125
+ }
126
+ .vakata-context .vakata-context-right ul {
127
+ left: auto;
128
+ right: 100%;
129
+ margin-left: auto;
130
+ margin-right: -4px;
131
+ }
132
+ .vakata-context li {
133
+ list-style: none;
134
+ }
135
+ .vakata-context li > a {
136
+ display: block;
137
+ padding: 0 2em 0 2em;
138
+ text-decoration: none;
139
+ width: auto;
140
+ color: black;
141
+ white-space: nowrap;
142
+ line-height: 2.4em;
143
+ text-shadow: 1px 1px 0 white;
144
+ border-radius: 1px;
145
+ }
146
+ .vakata-context li > a:hover {
147
+ position: relative;
148
+ background-color: #e8eff7;
149
+ box-shadow: 0 0 2px #0a6aa1;
150
+ }
151
+ .vakata-context li > a.vakata-context-parent {
152
+ background-image: url("data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAIORI4JlrqN1oMSnmmZDQUAOw==");
153
+ background-position: right center;
154
+ background-repeat: no-repeat;
155
+ }
156
+ .vakata-context li > a:focus {
157
+ outline: 0;
158
+ }
159
+ .vakata-context .vakata-context-hover > a {
160
+ position: relative;
161
+ background-color: #e8eff7;
162
+ box-shadow: 0 0 2px #0a6aa1;
163
+ }
164
+ .vakata-context .vakata-context-separator > a,
165
+ .vakata-context .vakata-context-separator > a:hover {
166
+ background: white;
167
+ border: 0;
168
+ border-top: 1px solid #e2e3e3;
169
+ height: 1px;
170
+ min-height: 1px;
171
+ max-height: 1px;
172
+ padding: 0;
173
+ margin: 0 0 0 2.4em;
174
+ border-left: 1px solid #e0e0e0;
175
+ text-shadow: 0 0 0 transparent;
176
+ box-shadow: 0 0 0 transparent;
177
+ border-radius: 0;
178
+ }
179
+ .vakata-context .vakata-contextmenu-disabled a,
180
+ .vakata-context .vakata-contextmenu-disabled a:hover {
181
+ color: silver;
182
+ background-color: transparent;
183
+ border: 0;
184
+ box-shadow: 0 0 0;
185
+ }
186
+ .vakata-context li > a > i {
187
+ text-decoration: none;
188
+ display: inline-block;
189
+ width: 2.4em;
190
+ height: 2.4em;
191
+ background: transparent;
192
+ margin: 0 0 0 -2em;
193
+ vertical-align: top;
194
+ text-align: center;
195
+ line-height: 2.4em;
196
+ }
197
+ .vakata-context li > a > i:empty {
198
+ width: 2.4em;
199
+ line-height: 2.4em;
200
+ }
201
+ .vakata-context li > a .vakata-contextmenu-sep {
202
+ display: inline-block;
203
+ width: 1px;
204
+ height: 2.4em;
205
+ background: white;
206
+ margin: 0 0.5em 0 0;
207
+ border-left: 1px solid #e2e3e3;
208
+ }
209
+ .vakata-context .vakata-contextmenu-shortcut {
210
+ font-size: 0.8em;
211
+ color: silver;
212
+ opacity: 0.5;
213
+ display: none;
214
+ }
215
+ .vakata-context-rtl ul {
216
+ left: auto;
217
+ right: 100%;
218
+ margin-left: auto;
219
+ margin-right: -4px;
220
+ }
221
+ .vakata-context-rtl li > a.vakata-context-parent {
222
+ background-image: url("data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAINjI+AC7rWHIsPtmoxLAA7");
223
+ background-position: left center;
224
+ background-repeat: no-repeat;
225
+ }
226
+ .vakata-context-rtl .vakata-context-separator > a {
227
+ margin: 0 2.4em 0 0;
228
+ border-left: 0;
229
+ border-right: 1px solid #e2e3e3;
230
+ }
231
+ .vakata-context-rtl .vakata-context-left ul {
232
+ right: auto;
233
+ left: 100%;
234
+ margin-left: -4px;
235
+ margin-right: auto;
236
+ }
237
+ .vakata-context-rtl li > a > i {
238
+ margin: 0 -2em 0 0;
239
+ }
240
+ .vakata-context-rtl li > a .vakata-contextmenu-sep {
241
+ margin: 0 0 0 0.5em;
242
+ border-left-color: white;
243
+ background: #e2e3e3;
244
+ }
245
+ #jstree-marker {
246
+ position: absolute;
247
+ top: 0;
248
+ left: 0;
249
+ margin: -5px 0 0 0;
250
+ padding: 0;
251
+ border-right: 0;
252
+ border-top: 5px solid transparent;
253
+ border-bottom: 5px solid transparent;
254
+ border-left: 5px solid;
255
+ width: 0;
256
+ height: 0;
257
+ font-size: 0;
258
+ line-height: 0;
259
+ }
260
+ #jstree-dnd {
261
+ line-height: 16px;
262
+ margin: 0;
263
+ padding: 4px;
264
+ }
265
+ #jstree-dnd .jstree-icon,
266
+ #jstree-dnd .jstree-copy {
267
+ display: inline-block;
268
+ text-decoration: none;
269
+ margin: 0 2px 0 0;
270
+ padding: 0;
271
+ width: 16px;
272
+ height: 16px;
273
+ }
274
+ #jstree-dnd .jstree-ok {
275
+ background: green;
276
+ }
277
+ #jstree-dnd .jstree-er {
278
+ background: red;
279
+ }
280
+ #jstree-dnd .jstree-copy {
281
+ margin: 0 2px 0 2px;
282
+ }
283
+ .jstree-default-dark .jstree-node,
284
+ .jstree-default-dark .jstree-icon {
285
+ background-repeat: no-repeat;
286
+ background-color: transparent;
287
+ }
288
+ .jstree-default-dark .jstree-anchor,
289
+ .jstree-default-dark .jstree-animated,
290
+ .jstree-default-dark .jstree-wholerow {
291
+ transition: background-color 0.15s, box-shadow 0.15s;
292
+ }
293
+ .jstree-default-dark .jstree-hovered {
294
+ background: #555555;
295
+ border-radius: 2px;
296
+ box-shadow: inset 0 0 1px #555555;
297
+ }
298
+ .jstree-default-dark .jstree-context {
299
+ background: #555555;
300
+ border-radius: 2px;
301
+ box-shadow: inset 0 0 1px #555555;
302
+ }
303
+ .jstree-default-dark .jstree-clicked {
304
+ background: #5fa2db;
305
+ border-radius: 2px;
306
+ box-shadow: inset 0 0 1px #666666;
307
+ }
308
+ .jstree-default-dark .jstree-no-icons .jstree-anchor > .jstree-themeicon {
309
+ display: none;
310
+ }
311
+ .jstree-default-dark .jstree-disabled {
312
+ background: transparent;
313
+ color: #666666;
314
+ }
315
+ .jstree-default-dark .jstree-disabled.jstree-hovered {
316
+ background: transparent;
317
+ box-shadow: none;
318
+ }
319
+ .jstree-default-dark .jstree-disabled.jstree-clicked {
320
+ background: #333333;
321
+ }
322
+ .jstree-default-dark .jstree-disabled > .jstree-icon {
323
+ opacity: 0.8;
324
+ filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'jstree-grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#jstree-grayscale");
325
+ /* Firefox 10+ */
326
+ filter: gray;
327
+ /* IE6-9 */
328
+ -webkit-filter: grayscale(100%);
329
+ /* Chrome 19+ & Safari 6+ */
330
+ }
331
+ .jstree-default-dark .jstree-search {
332
+ font-style: italic;
333
+ color: #ffffff;
334
+ font-weight: bold;
335
+ }
336
+ .jstree-default-dark .jstree-no-checkboxes .jstree-checkbox {
337
+ display: none !important;
338
+ }
339
+ .jstree-default-dark.jstree-checkbox-no-clicked .jstree-clicked {
340
+ background: transparent;
341
+ box-shadow: none;
342
+ }
343
+ .jstree-default-dark.jstree-checkbox-no-clicked .jstree-clicked.jstree-hovered {
344
+ background: #555555;
345
+ }
346
+ .jstree-default-dark.jstree-checkbox-no-clicked > .jstree-wholerow-ul .jstree-wholerow-clicked {
347
+ background: transparent;
348
+ }
349
+ .jstree-default-dark.jstree-checkbox-no-clicked > .jstree-wholerow-ul .jstree-wholerow-clicked.jstree-wholerow-hovered {
350
+ background: #555555;
351
+ }
352
+ .jstree-default-dark > .jstree-striped {
353
+ min-width: 100%;
354
+ display: inline-block;
355
+ background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAMAAAB/qqA+AAAABlBMVEUAAAAAAAClZ7nPAAAAAnRSTlMNAMM9s3UAAAAXSURBVHjajcEBAQAAAIKg/H/aCQZ70AUBjAATb6YPDgAAAABJRU5ErkJggg==") left top repeat;
356
+ }
357
+ .jstree-default-dark > .jstree-wholerow-ul .jstree-hovered,
358
+ .jstree-default-dark > .jstree-wholerow-ul .jstree-clicked {
359
+ background: transparent;
360
+ box-shadow: none;
361
+ border-radius: 0;
362
+ }
363
+ .jstree-default-dark .jstree-wholerow {
364
+ -moz-box-sizing: border-box;
365
+ -webkit-box-sizing: border-box;
366
+ box-sizing: border-box;
367
+ }
368
+ .jstree-default-dark .jstree-wholerow-hovered {
369
+ background: #555555;
370
+ }
371
+ .jstree-default-dark .jstree-wholerow-clicked {
372
+ background: #5fa2db;
373
+ background: -webkit-linear-gradient(top, #5fa2db 0%, #5fa2db 100%);
374
+ background: linear-gradient(to bottom, #5fa2db 0%, #5fa2db 100%);
375
+ }
376
+ .jstree-default-dark .jstree-node {
377
+ min-height: 24px;
378
+ line-height: 24px;
379
+ margin-left: 24px;
380
+ min-width: 24px;
381
+ }
382
+ .jstree-default-dark .jstree-anchor {
383
+ line-height: 24px;
384
+ height: 24px;
385
+ }
386
+ .jstree-default-dark .jstree-icon {
387
+ width: 24px;
388
+ height: 24px;
389
+ line-height: 24px;
390
+ }
391
+ .jstree-default-dark .jstree-icon:empty {
392
+ width: 24px;
393
+ height: 24px;
394
+ line-height: 24px;
395
+ }
396
+ .jstree-default-dark.jstree-rtl .jstree-node {
397
+ margin-right: 24px;
398
+ }
399
+ .jstree-default-dark .jstree-wholerow {
400
+ height: 24px;
401
+ }
402
+ .jstree-default-dark .jstree-node,
403
+ .jstree-default-dark .jstree-icon {
404
+ background-image: url("32px.png");
405
+ }
406
+ .jstree-default-dark .jstree-node {
407
+ background-position: -292px -4px;
408
+ background-repeat: repeat-y;
409
+ }
410
+ .jstree-default-dark .jstree-last {
411
+ background: transparent;
412
+ }
413
+ .jstree-default-dark .jstree-open > .jstree-ocl {
414
+ background-position: -132px -4px;
415
+ }
416
+ .jstree-default-dark .jstree-closed > .jstree-ocl {
417
+ background-position: -100px -4px;
418
+ }
419
+ .jstree-default-dark .jstree-leaf > .jstree-ocl {
420
+ background-position: -68px -4px;
421
+ }
422
+ .jstree-default-dark .jstree-themeicon {
423
+ background-position: -260px -4px;
424
+ }
425
+ .jstree-default-dark > .jstree-no-dots .jstree-node,
426
+ .jstree-default-dark > .jstree-no-dots .jstree-leaf > .jstree-ocl {
427
+ background: transparent;
428
+ }
429
+ .jstree-default-dark > .jstree-no-dots .jstree-open > .jstree-ocl {
430
+ background-position: -36px -4px;
431
+ }
432
+ .jstree-default-dark > .jstree-no-dots .jstree-closed > .jstree-ocl {
433
+ background-position: -4px -4px;
434
+ }
435
+ .jstree-default-dark .jstree-disabled {
436
+ background: transparent;
437
+ }
438
+ .jstree-default-dark .jstree-disabled.jstree-hovered {
439
+ background: transparent;
440
+ }
441
+ .jstree-default-dark .jstree-disabled.jstree-clicked {
442
+ background: #efefef;
443
+ }
444
+ .jstree-default-dark .jstree-checkbox {
445
+ background-position: -164px -4px;
446
+ }
447
+ .jstree-default-dark .jstree-checkbox:hover {
448
+ background-position: -164px -36px;
449
+ }
450
+ .jstree-default-dark.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox,
451
+ .jstree-default-dark .jstree-checked > .jstree-checkbox {
452
+ background-position: -228px -4px;
453
+ }
454
+ .jstree-default-dark.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover,
455
+ .jstree-default-dark .jstree-checked > .jstree-checkbox:hover {
456
+ background-position: -228px -36px;
457
+ }
458
+ .jstree-default-dark .jstree-anchor > .jstree-undetermined {
459
+ background-position: -196px -4px;
460
+ }
461
+ .jstree-default-dark .jstree-anchor > .jstree-undetermined:hover {
462
+ background-position: -196px -36px;
463
+ }
464
+ .jstree-default-dark .jstree-checkbox-disabled {
465
+ opacity: 0.8;
466
+ filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'jstree-grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#jstree-grayscale");
467
+ /* Firefox 10+ */
468
+ filter: gray;
469
+ /* IE6-9 */
470
+ -webkit-filter: grayscale(100%);
471
+ /* Chrome 19+ & Safari 6+ */
472
+ }
473
+ .jstree-default-dark > .jstree-striped {
474
+ background-size: auto 48px;
475
+ }
476
+ .jstree-default-dark.jstree-rtl .jstree-node {
477
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");
478
+ background-position: 100% 1px;
479
+ background-repeat: repeat-y;
480
+ }
481
+ .jstree-default-dark.jstree-rtl .jstree-last {
482
+ background: transparent;
483
+ }
484
+ .jstree-default-dark.jstree-rtl .jstree-open > .jstree-ocl {
485
+ background-position: -132px -36px;
486
+ }
487
+ .jstree-default-dark.jstree-rtl .jstree-closed > .jstree-ocl {
488
+ background-position: -100px -36px;
489
+ }
490
+ .jstree-default-dark.jstree-rtl .jstree-leaf > .jstree-ocl {
491
+ background-position: -68px -36px;
492
+ }
493
+ .jstree-default-dark.jstree-rtl > .jstree-no-dots .jstree-node,
494
+ .jstree-default-dark.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl {
495
+ background: transparent;
496
+ }
497
+ .jstree-default-dark.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl {
498
+ background-position: -36px -36px;
499
+ }
500
+ .jstree-default-dark.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl {
501
+ background-position: -4px -36px;
502
+ }
503
+ .jstree-default-dark .jstree-themeicon-custom {
504
+ background-color: transparent;
505
+ background-image: none;
506
+ background-position: 0 0;
507
+ }
508
+ .jstree-default-dark > .jstree-container-ul .jstree-loading > .jstree-ocl {
509
+ background: url("throbber.gif") center center no-repeat;
510
+ }
511
+ .jstree-default-dark .jstree-file {
512
+ background: url("32px.png") -100px -68px no-repeat;
513
+ }
514
+ .jstree-default-dark .jstree-folder {
515
+ background: url("32px.png") -260px -4px no-repeat;
516
+ }
517
+ .jstree-default-dark > .jstree-container-ul > .jstree-node {
518
+ margin-left: 0;
519
+ margin-right: 0;
520
+ }
521
+ #jstree-dnd.jstree-default-dark {
522
+ line-height: 24px;
523
+ padding: 0 4px;
524
+ }
525
+ #jstree-dnd.jstree-default-dark .jstree-ok,
526
+ #jstree-dnd.jstree-default-dark .jstree-er {
527
+ background-image: url("32px.png");
528
+ background-repeat: no-repeat;
529
+ background-color: transparent;
530
+ }
531
+ #jstree-dnd.jstree-default-dark i {
532
+ background: transparent;
533
+ width: 24px;
534
+ height: 24px;
535
+ line-height: 24px;
536
+ }
537
+ #jstree-dnd.jstree-default-dark .jstree-ok {
538
+ background-position: -4px -68px;
539
+ }
540
+ #jstree-dnd.jstree-default-dark .jstree-er {
541
+ background-position: -36px -68px;
542
+ }
543
+ .jstree-default-dark .jstree-ellipsis {
544
+ overflow: hidden;
545
+ }
546
+ .jstree-default-dark .jstree-ellipsis .jstree-anchor {
547
+ width: calc(100% - 29px);
548
+ text-overflow: ellipsis;
549
+ overflow: hidden;
550
+ }
551
+ .jstree-default-dark .jstree-ellipsis.jstree-no-icons .jstree-anchor {
552
+ width: calc(100% - 5px);
553
+ }
554
+ .jstree-default-dark.jstree-rtl .jstree-node {
555
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");
556
+ }
557
+ .jstree-default-dark.jstree-rtl .jstree-last {
558
+ background: transparent;
559
+ }
560
+ .jstree-default-dark-small .jstree-node {
561
+ min-height: 18px;
562
+ line-height: 18px;
563
+ margin-left: 18px;
564
+ min-width: 18px;
565
+ }
566
+ .jstree-default-dark-small .jstree-anchor {
567
+ line-height: 18px;
568
+ height: 18px;
569
+ }
570
+ .jstree-default-dark-small .jstree-icon {
571
+ width: 18px;
572
+ height: 18px;
573
+ line-height: 18px;
574
+ }
575
+ .jstree-default-dark-small .jstree-icon:empty {
576
+ width: 18px;
577
+ height: 18px;
578
+ line-height: 18px;
579
+ }
580
+ .jstree-default-dark-small.jstree-rtl .jstree-node {
581
+ margin-right: 18px;
582
+ }
583
+ .jstree-default-dark-small .jstree-wholerow {
584
+ height: 18px;
585
+ }
586
+ .jstree-default-dark-small .jstree-node,
587
+ .jstree-default-dark-small .jstree-icon {
588
+ background-image: url("32px.png");
589
+ }
590
+ .jstree-default-dark-small .jstree-node {
591
+ background-position: -295px -7px;
592
+ background-repeat: repeat-y;
593
+ }
594
+ .jstree-default-dark-small .jstree-last {
595
+ background: transparent;
596
+ }
597
+ .jstree-default-dark-small .jstree-open > .jstree-ocl {
598
+ background-position: -135px -7px;
599
+ }
600
+ .jstree-default-dark-small .jstree-closed > .jstree-ocl {
601
+ background-position: -103px -7px;
602
+ }
603
+ .jstree-default-dark-small .jstree-leaf > .jstree-ocl {
604
+ background-position: -71px -7px;
605
+ }
606
+ .jstree-default-dark-small .jstree-themeicon {
607
+ background-position: -263px -7px;
608
+ }
609
+ .jstree-default-dark-small > .jstree-no-dots .jstree-node,
610
+ .jstree-default-dark-small > .jstree-no-dots .jstree-leaf > .jstree-ocl {
611
+ background: transparent;
612
+ }
613
+ .jstree-default-dark-small > .jstree-no-dots .jstree-open > .jstree-ocl {
614
+ background-position: -39px -7px;
615
+ }
616
+ .jstree-default-dark-small > .jstree-no-dots .jstree-closed > .jstree-ocl {
617
+ background-position: -7px -7px;
618
+ }
619
+ .jstree-default-dark-small .jstree-disabled {
620
+ background: transparent;
621
+ }
622
+ .jstree-default-dark-small .jstree-disabled.jstree-hovered {
623
+ background: transparent;
624
+ }
625
+ .jstree-default-dark-small .jstree-disabled.jstree-clicked {
626
+ background: #efefef;
627
+ }
628
+ .jstree-default-dark-small .jstree-checkbox {
629
+ background-position: -167px -7px;
630
+ }
631
+ .jstree-default-dark-small .jstree-checkbox:hover {
632
+ background-position: -167px -39px;
633
+ }
634
+ .jstree-default-dark-small.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox,
635
+ .jstree-default-dark-small .jstree-checked > .jstree-checkbox {
636
+ background-position: -231px -7px;
637
+ }
638
+ .jstree-default-dark-small.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover,
639
+ .jstree-default-dark-small .jstree-checked > .jstree-checkbox:hover {
640
+ background-position: -231px -39px;
641
+ }
642
+ .jstree-default-dark-small .jstree-anchor > .jstree-undetermined {
643
+ background-position: -199px -7px;
644
+ }
645
+ .jstree-default-dark-small .jstree-anchor > .jstree-undetermined:hover {
646
+ background-position: -199px -39px;
647
+ }
648
+ .jstree-default-dark-small .jstree-checkbox-disabled {
649
+ opacity: 0.8;
650
+ filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'jstree-grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#jstree-grayscale");
651
+ /* Firefox 10+ */
652
+ filter: gray;
653
+ /* IE6-9 */
654
+ -webkit-filter: grayscale(100%);
655
+ /* Chrome 19+ & Safari 6+ */
656
+ }
657
+ .jstree-default-dark-small > .jstree-striped {
658
+ background-size: auto 36px;
659
+ }
660
+ .jstree-default-dark-small.jstree-rtl .jstree-node {
661
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");
662
+ background-position: 100% 1px;
663
+ background-repeat: repeat-y;
664
+ }
665
+ .jstree-default-dark-small.jstree-rtl .jstree-last {
666
+ background: transparent;
667
+ }
668
+ .jstree-default-dark-small.jstree-rtl .jstree-open > .jstree-ocl {
669
+ background-position: -135px -39px;
670
+ }
671
+ .jstree-default-dark-small.jstree-rtl .jstree-closed > .jstree-ocl {
672
+ background-position: -103px -39px;
673
+ }
674
+ .jstree-default-dark-small.jstree-rtl .jstree-leaf > .jstree-ocl {
675
+ background-position: -71px -39px;
676
+ }
677
+ .jstree-default-dark-small.jstree-rtl > .jstree-no-dots .jstree-node,
678
+ .jstree-default-dark-small.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl {
679
+ background: transparent;
680
+ }
681
+ .jstree-default-dark-small.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl {
682
+ background-position: -39px -39px;
683
+ }
684
+ .jstree-default-dark-small.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl {
685
+ background-position: -7px -39px;
686
+ }
687
+ .jstree-default-dark-small .jstree-themeicon-custom {
688
+ background-color: transparent;
689
+ background-image: none;
690
+ background-position: 0 0;
691
+ }
692
+ .jstree-default-dark-small > .jstree-container-ul .jstree-loading > .jstree-ocl {
693
+ background: url("throbber.gif") center center no-repeat;
694
+ }
695
+ .jstree-default-dark-small .jstree-file {
696
+ background: url("32px.png") -103px -71px no-repeat;
697
+ }
698
+ .jstree-default-dark-small .jstree-folder {
699
+ background: url("32px.png") -263px -7px no-repeat;
700
+ }
701
+ .jstree-default-dark-small > .jstree-container-ul > .jstree-node {
702
+ margin-left: 0;
703
+ margin-right: 0;
704
+ }
705
+ #jstree-dnd.jstree-default-dark-small {
706
+ line-height: 18px;
707
+ padding: 0 4px;
708
+ }
709
+ #jstree-dnd.jstree-default-dark-small .jstree-ok,
710
+ #jstree-dnd.jstree-default-dark-small .jstree-er {
711
+ background-image: url("32px.png");
712
+ background-repeat: no-repeat;
713
+ background-color: transparent;
714
+ }
715
+ #jstree-dnd.jstree-default-dark-small i {
716
+ background: transparent;
717
+ width: 18px;
718
+ height: 18px;
719
+ line-height: 18px;
720
+ }
721
+ #jstree-dnd.jstree-default-dark-small .jstree-ok {
722
+ background-position: -7px -71px;
723
+ }
724
+ #jstree-dnd.jstree-default-dark-small .jstree-er {
725
+ background-position: -39px -71px;
726
+ }
727
+ .jstree-default-dark-small .jstree-ellipsis {
728
+ overflow: hidden;
729
+ }
730
+ .jstree-default-dark-small .jstree-ellipsis .jstree-anchor {
731
+ width: calc(100% - 23px);
732
+ text-overflow: ellipsis;
733
+ overflow: hidden;
734
+ }
735
+ .jstree-default-dark-small .jstree-ellipsis.jstree-no-icons .jstree-anchor {
736
+ width: calc(100% - 5px);
737
+ }
738
+ .jstree-default-dark-small.jstree-rtl .jstree-node {
739
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAACAQMAAABv1h6PAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMHBgAAiABBI4gz9AAAAABJRU5ErkJggg==");
740
+ }
741
+ .jstree-default-dark-small.jstree-rtl .jstree-last {
742
+ background: transparent;
743
+ }
744
+ .jstree-default-dark-large .jstree-node {
745
+ min-height: 32px;
746
+ line-height: 32px;
747
+ margin-left: 32px;
748
+ min-width: 32px;
749
+ }
750
+ .jstree-default-dark-large .jstree-anchor {
751
+ line-height: 32px;
752
+ height: 32px;
753
+ }
754
+ .jstree-default-dark-large .jstree-icon {
755
+ width: 32px;
756
+ height: 32px;
757
+ line-height: 32px;
758
+ }
759
+ .jstree-default-dark-large .jstree-icon:empty {
760
+ width: 32px;
761
+ height: 32px;
762
+ line-height: 32px;
763
+ }
764
+ .jstree-default-dark-large.jstree-rtl .jstree-node {
765
+ margin-right: 32px;
766
+ }
767
+ .jstree-default-dark-large .jstree-wholerow {
768
+ height: 32px;
769
+ }
770
+ .jstree-default-dark-large .jstree-node,
771
+ .jstree-default-dark-large .jstree-icon {
772
+ background-image: url("32px.png");
773
+ }
774
+ .jstree-default-dark-large .jstree-node {
775
+ background-position: -288px 0px;
776
+ background-repeat: repeat-y;
777
+ }
778
+ .jstree-default-dark-large .jstree-last {
779
+ background: transparent;
780
+ }
781
+ .jstree-default-dark-large .jstree-open > .jstree-ocl {
782
+ background-position: -128px 0px;
783
+ }
784
+ .jstree-default-dark-large .jstree-closed > .jstree-ocl {
785
+ background-position: -96px 0px;
786
+ }
787
+ .jstree-default-dark-large .jstree-leaf > .jstree-ocl {
788
+ background-position: -64px 0px;
789
+ }
790
+ .jstree-default-dark-large .jstree-themeicon {
791
+ background-position: -256px 0px;
792
+ }
793
+ .jstree-default-dark-large > .jstree-no-dots .jstree-node,
794
+ .jstree-default-dark-large > .jstree-no-dots .jstree-leaf > .jstree-ocl {
795
+ background: transparent;
796
+ }
797
+ .jstree-default-dark-large > .jstree-no-dots .jstree-open > .jstree-ocl {
798
+ background-position: -32px 0px;
799
+ }
800
+ .jstree-default-dark-large > .jstree-no-dots .jstree-closed > .jstree-ocl {
801
+ background-position: 0px 0px;
802
+ }
803
+ .jstree-default-dark-large .jstree-disabled {
804
+ background: transparent;
805
+ }
806
+ .jstree-default-dark-large .jstree-disabled.jstree-hovered {
807
+ background: transparent;
808
+ }
809
+ .jstree-default-dark-large .jstree-disabled.jstree-clicked {
810
+ background: #efefef;
811
+ }
812
+ .jstree-default-dark-large .jstree-checkbox {
813
+ background-position: -160px 0px;
814
+ }
815
+ .jstree-default-dark-large .jstree-checkbox:hover {
816
+ background-position: -160px -32px;
817
+ }
818
+ .jstree-default-dark-large.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox,
819
+ .jstree-default-dark-large .jstree-checked > .jstree-checkbox {
820
+ background-position: -224px 0px;
821
+ }
822
+ .jstree-default-dark-large.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover,
823
+ .jstree-default-dark-large .jstree-checked > .jstree-checkbox:hover {
824
+ background-position: -224px -32px;
825
+ }
826
+ .jstree-default-dark-large .jstree-anchor > .jstree-undetermined {
827
+ background-position: -192px 0px;
828
+ }
829
+ .jstree-default-dark-large .jstree-anchor > .jstree-undetermined:hover {
830
+ background-position: -192px -32px;
831
+ }
832
+ .jstree-default-dark-large .jstree-checkbox-disabled {
833
+ opacity: 0.8;
834
+ filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'jstree-grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#jstree-grayscale");
835
+ /* Firefox 10+ */
836
+ filter: gray;
837
+ /* IE6-9 */
838
+ -webkit-filter: grayscale(100%);
839
+ /* Chrome 19+ & Safari 6+ */
840
+ }
841
+ .jstree-default-dark-large > .jstree-striped {
842
+ background-size: auto 64px;
843
+ }
844
+ .jstree-default-dark-large.jstree-rtl .jstree-node {
845
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");
846
+ background-position: 100% 1px;
847
+ background-repeat: repeat-y;
848
+ }
849
+ .jstree-default-dark-large.jstree-rtl .jstree-last {
850
+ background: transparent;
851
+ }
852
+ .jstree-default-dark-large.jstree-rtl .jstree-open > .jstree-ocl {
853
+ background-position: -128px -32px;
854
+ }
855
+ .jstree-default-dark-large.jstree-rtl .jstree-closed > .jstree-ocl {
856
+ background-position: -96px -32px;
857
+ }
858
+ .jstree-default-dark-large.jstree-rtl .jstree-leaf > .jstree-ocl {
859
+ background-position: -64px -32px;
860
+ }
861
+ .jstree-default-dark-large.jstree-rtl > .jstree-no-dots .jstree-node,
862
+ .jstree-default-dark-large.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl {
863
+ background: transparent;
864
+ }
865
+ .jstree-default-dark-large.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl {
866
+ background-position: -32px -32px;
867
+ }
868
+ .jstree-default-dark-large.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl {
869
+ background-position: 0px -32px;
870
+ }
871
+ .jstree-default-dark-large .jstree-themeicon-custom {
872
+ background-color: transparent;
873
+ background-image: none;
874
+ background-position: 0 0;
875
+ }
876
+ .jstree-default-dark-large > .jstree-container-ul .jstree-loading > .jstree-ocl {
877
+ background: url("throbber.gif") center center no-repeat;
878
+ }
879
+ .jstree-default-dark-large .jstree-file {
880
+ background: url("32px.png") -96px -64px no-repeat;
881
+ }
882
+ .jstree-default-dark-large .jstree-folder {
883
+ background: url("32px.png") -256px 0px no-repeat;
884
+ }
885
+ .jstree-default-dark-large > .jstree-container-ul > .jstree-node {
886
+ margin-left: 0;
887
+ margin-right: 0;
888
+ }
889
+ #jstree-dnd.jstree-default-dark-large {
890
+ line-height: 32px;
891
+ padding: 0 4px;
892
+ }
893
+ #jstree-dnd.jstree-default-dark-large .jstree-ok,
894
+ #jstree-dnd.jstree-default-dark-large .jstree-er {
895
+ background-image: url("32px.png");
896
+ background-repeat: no-repeat;
897
+ background-color: transparent;
898
+ }
899
+ #jstree-dnd.jstree-default-dark-large i {
900
+ background: transparent;
901
+ width: 32px;
902
+ height: 32px;
903
+ line-height: 32px;
904
+ }
905
+ #jstree-dnd.jstree-default-dark-large .jstree-ok {
906
+ background-position: 0px -64px;
907
+ }
908
+ #jstree-dnd.jstree-default-dark-large .jstree-er {
909
+ background-position: -32px -64px;
910
+ }
911
+ .jstree-default-dark-large .jstree-ellipsis {
912
+ overflow: hidden;
913
+ }
914
+ .jstree-default-dark-large .jstree-ellipsis .jstree-anchor {
915
+ width: calc(100% - 37px);
916
+ text-overflow: ellipsis;
917
+ overflow: hidden;
918
+ }
919
+ .jstree-default-dark-large .jstree-ellipsis.jstree-no-icons .jstree-anchor {
920
+ width: calc(100% - 5px);
921
+ }
922
+ .jstree-default-dark-large.jstree-rtl .jstree-node {
923
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAACAQMAAAAD0EyKAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjgIIGBgABCgCBvVLXcAAAAABJRU5ErkJggg==");
924
+ }
925
+ .jstree-default-dark-large.jstree-rtl .jstree-last {
926
+ background: transparent;
927
+ }
928
+ @media (max-width: 768px) {
929
+ #jstree-dnd.jstree-dnd-responsive {
930
+ line-height: 40px;
931
+ font-weight: bold;
932
+ font-size: 1.1em;
933
+ text-shadow: 1px 1px white;
934
+ }
935
+ #jstree-dnd.jstree-dnd-responsive > i {
936
+ background: transparent;
937
+ width: 40px;
938
+ height: 40px;
939
+ }
940
+ #jstree-dnd.jstree-dnd-responsive > .jstree-ok {
941
+ background-image: url("40px.png");
942
+ background-position: 0 -200px;
943
+ background-size: 120px 240px;
944
+ }
945
+ #jstree-dnd.jstree-dnd-responsive > .jstree-er {
946
+ background-image: url("40px.png");
947
+ background-position: -40px -200px;
948
+ background-size: 120px 240px;
949
+ }
950
+ #jstree-marker.jstree-dnd-responsive {
951
+ border-left-width: 10px;
952
+ border-top-width: 10px;
953
+ border-bottom-width: 10px;
954
+ margin-top: -10px;
955
+ }
956
+ }
957
+ @media (max-width: 768px) {
958
+ .jstree-default-dark-responsive {
959
+ /*
960
+ .jstree-open > .jstree-ocl,
961
+ .jstree-closed > .jstree-ocl { border-radius:20px; background-color:white; }
962
+ */
963
+ }
964
+ .jstree-default-dark-responsive .jstree-icon {
965
+ background-image: url("40px.png");
966
+ }
967
+ .jstree-default-dark-responsive .jstree-node,
968
+ .jstree-default-dark-responsive .jstree-leaf > .jstree-ocl {
969
+ background: transparent;
970
+ }
971
+ .jstree-default-dark-responsive .jstree-node {
972
+ min-height: 40px;
973
+ line-height: 40px;
974
+ margin-left: 40px;
975
+ min-width: 40px;
976
+ white-space: nowrap;
977
+ }
978
+ .jstree-default-dark-responsive .jstree-anchor {
979
+ line-height: 40px;
980
+ height: 40px;
981
+ }
982
+ .jstree-default-dark-responsive .jstree-icon,
983
+ .jstree-default-dark-responsive .jstree-icon:empty {
984
+ width: 40px;
985
+ height: 40px;
986
+ line-height: 40px;
987
+ }
988
+ .jstree-default-dark-responsive > .jstree-container-ul > .jstree-node {
989
+ margin-left: 0;
990
+ }
991
+ .jstree-default-dark-responsive.jstree-rtl .jstree-node {
992
+ margin-left: 0;
993
+ margin-right: 40px;
994
+ background: transparent;
995
+ }
996
+ .jstree-default-dark-responsive.jstree-rtl .jstree-container-ul > .jstree-node {
997
+ margin-right: 0;
998
+ }
999
+ .jstree-default-dark-responsive .jstree-ocl,
1000
+ .jstree-default-dark-responsive .jstree-themeicon,
1001
+ .jstree-default-dark-responsive .jstree-checkbox {
1002
+ background-size: 120px 240px;
1003
+ }
1004
+ .jstree-default-dark-responsive .jstree-leaf > .jstree-ocl,
1005
+ .jstree-default-dark-responsive.jstree-rtl .jstree-leaf > .jstree-ocl {
1006
+ background: transparent;
1007
+ }
1008
+ .jstree-default-dark-responsive .jstree-open > .jstree-ocl {
1009
+ background-position: 0 0px !important;
1010
+ }
1011
+ .jstree-default-dark-responsive .jstree-closed > .jstree-ocl {
1012
+ background-position: 0 -40px !important;
1013
+ }
1014
+ .jstree-default-dark-responsive.jstree-rtl .jstree-closed > .jstree-ocl {
1015
+ background-position: -40px 0px !important;
1016
+ }
1017
+ .jstree-default-dark-responsive .jstree-themeicon {
1018
+ background-position: -40px -40px;
1019
+ }
1020
+ .jstree-default-dark-responsive .jstree-checkbox,
1021
+ .jstree-default-dark-responsive .jstree-checkbox:hover {
1022
+ background-position: -40px -80px;
1023
+ }
1024
+ .jstree-default-dark-responsive.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox,
1025
+ .jstree-default-dark-responsive.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover,
1026
+ .jstree-default-dark-responsive .jstree-checked > .jstree-checkbox,
1027
+ .jstree-default-dark-responsive .jstree-checked > .jstree-checkbox:hover {
1028
+ background-position: 0 -80px;
1029
+ }
1030
+ .jstree-default-dark-responsive .jstree-anchor > .jstree-undetermined,
1031
+ .jstree-default-dark-responsive .jstree-anchor > .jstree-undetermined:hover {
1032
+ background-position: 0 -120px;
1033
+ }
1034
+ .jstree-default-dark-responsive .jstree-anchor {
1035
+ font-weight: bold;
1036
+ font-size: 1.1em;
1037
+ text-shadow: 1px 1px white;
1038
+ }
1039
+ .jstree-default-dark-responsive > .jstree-striped {
1040
+ background: transparent;
1041
+ }
1042
+ .jstree-default-dark-responsive .jstree-wholerow {
1043
+ border-top: 1px solid #666666;
1044
+ border-bottom: 1px solid #000000;
1045
+ background: #333333;
1046
+ height: 40px;
1047
+ }
1048
+ .jstree-default-dark-responsive .jstree-wholerow-hovered {
1049
+ background: #555555;
1050
+ }
1051
+ .jstree-default-dark-responsive .jstree-wholerow-clicked {
1052
+ background: #5fa2db;
1053
+ }
1054
+ .jstree-default-dark-responsive .jstree-children .jstree-last > .jstree-wholerow {
1055
+ box-shadow: inset 0 -6px 3px -5px #111111;
1056
+ }
1057
+ .jstree-default-dark-responsive .jstree-children .jstree-open > .jstree-wholerow {
1058
+ box-shadow: inset 0 6px 3px -5px #111111;
1059
+ border-top: 0;
1060
+ }
1061
+ .jstree-default-dark-responsive .jstree-children .jstree-open + .jstree-open {
1062
+ box-shadow: none;
1063
+ }
1064
+ .jstree-default-dark-responsive .jstree-node,
1065
+ .jstree-default-dark-responsive .jstree-icon,
1066
+ .jstree-default-dark-responsive .jstree-node > .jstree-ocl,
1067
+ .jstree-default-dark-responsive .jstree-themeicon,
1068
+ .jstree-default-dark-responsive .jstree-checkbox {
1069
+ background-image: url("40px.png");
1070
+ background-size: 120px 240px;
1071
+ }
1072
+ .jstree-default-dark-responsive .jstree-node {
1073
+ background-position: -80px 0;
1074
+ background-repeat: repeat-y;
1075
+ }
1076
+ .jstree-default-dark-responsive .jstree-last {
1077
+ background: transparent;
1078
+ }
1079
+ .jstree-default-dark-responsive .jstree-leaf > .jstree-ocl {
1080
+ background-position: -40px -120px;
1081
+ }
1082
+ .jstree-default-dark-responsive .jstree-last > .jstree-ocl {
1083
+ background-position: -40px -160px;
1084
+ }
1085
+ .jstree-default-dark-responsive .jstree-themeicon-custom {
1086
+ background-color: transparent;
1087
+ background-image: none;
1088
+ background-position: 0 0;
1089
+ }
1090
+ .jstree-default-dark-responsive .jstree-file {
1091
+ background: url("40px.png") 0 -160px no-repeat;
1092
+ background-size: 120px 240px;
1093
+ }
1094
+ .jstree-default-dark-responsive .jstree-folder {
1095
+ background: url("40px.png") -40px -40px no-repeat;
1096
+ background-size: 120px 240px;
1097
+ }
1098
+ .jstree-default-dark-responsive > .jstree-container-ul > .jstree-node {
1099
+ margin-left: 0;
1100
+ margin-right: 0;
1101
+ }
1102
+ }
1103
+ .jstree-default-dark {
1104
+ background: #333;
1105
+ }
1106
+ .jstree-default-dark .jstree-anchor {
1107
+ color: #999;
1108
+ text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.5);
1109
+ }
1110
+ .jstree-default-dark .jstree-clicked,
1111
+ .jstree-default-dark .jstree-checked {
1112
+ color: white;
1113
+ }
1114
+ .jstree-default-dark .jstree-hovered {
1115
+ color: white;
1116
+ }
1117
+ #jstree-marker.jstree-default-dark {
1118
+ border-left-color: #999;
1119
+ background: transparent;
1120
+ }
1121
+ .jstree-default-dark .jstree-anchor > .jstree-icon {
1122
+ opacity: 0.75;
1123
+ }
1124
+ .jstree-default-dark .jstree-clicked > .jstree-icon,
1125
+ .jstree-default-dark .jstree-hovered > .jstree-icon,
1126
+ .jstree-default-dark .jstree-checked > .jstree-icon {
1127
+ opacity: 1;
1128
+ }
1129
+ .jstree-default-dark.jstree-rtl .jstree-node {
1130
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAACZmZl+9SADAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");
1131
+ }
1132
+ .jstree-default-dark.jstree-rtl .jstree-last {
1133
+ background: transparent;
1134
+ }
1135
+ .jstree-default-dark-small.jstree-rtl .jstree-node {
1136
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAACAQMAAABv1h6PAAAABlBMVEUAAACZmZl+9SADAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMHBgAAiABBI4gz9AAAAABJRU5ErkJggg==");
1137
+ }
1138
+ .jstree-default-dark-small.jstree-rtl .jstree-last {
1139
+ background: transparent;
1140
+ }
1141
+ .jstree-default-dark-large.jstree-rtl .jstree-node {
1142
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAACAQMAAAAD0EyKAAAABlBMVEUAAACZmZl+9SADAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjgIIGBgABCgCBvVLXcAAAAABJRU5ErkJggg==");
1143
+ }
1144
+ .jstree-default-dark-large.jstree-rtl .jstree-last {
1145
+ background: transparent;
1146
+ }
includes/jstree/themes/default-dark/style.min.css ADDED
@@ -0,0 +1 @@
 
1
+ .jstree-node,.jstree-children,.jstree-container-ul{display:block;margin:0;padding:0;list-style-type:none;list-style-image:none}.jstree-node{white-space:nowrap}.jstree-anchor{display:inline-block;color:#000;white-space:nowrap;padding:0 4px 0 1px;margin:0;vertical-align:top}.jstree-anchor:focus{outline:0}.jstree-anchor,.jstree-anchor:link,.jstree-anchor:visited,.jstree-anchor:hover,.jstree-anchor:active{text-decoration:none;color:inherit}.jstree-icon{display:inline-block;text-decoration:none;margin:0;padding:0;vertical-align:top;text-align:center}.jstree-icon:empty{display:inline-block;text-decoration:none;margin:0;padding:0;vertical-align:top;text-align:center}.jstree-ocl{cursor:pointer}.jstree-leaf>.jstree-ocl{cursor:default}.jstree .jstree-open>.jstree-children{display:block}.jstree .jstree-closed>.jstree-children,.jstree .jstree-leaf>.jstree-children{display:none}.jstree-anchor>.jstree-themeicon{margin-right:2px}.jstree-no-icons .jstree-themeicon,.jstree-anchor>.jstree-themeicon-hidden{display:none}.jstree-hidden,.jstree-node.jstree-hidden{display:none}.jstree-rtl .jstree-anchor{padding:0 1px 0 4px}.jstree-rtl .jstree-anchor>.jstree-themeicon{margin-left:2px;margin-right:0}.jstree-rtl .jstree-node{margin-left:0}.jstree-rtl .jstree-container-ul>.jstree-node{margin-right:0}.jstree-wholerow-ul{position:relative;display:inline-block;min-width:100%}.jstree-wholerow-ul .jstree-leaf>.jstree-ocl{cursor:pointer}.jstree-wholerow-ul .jstree-anchor,.jstree-wholerow-ul .jstree-icon{position:relative}.jstree-wholerow-ul .jstree-wholerow{width:100%;cursor:pointer;position:absolute;left:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vakata-context{display:none}.vakata-context,.vakata-context ul{margin:0;padding:2px;position:absolute;background:#f5f5f5;border:1px solid #979797;box-shadow:2px 2px 2px #999}.vakata-context ul{list-style:none;left:100%;margin-top:-2.7em;margin-left:-4px}.vakata-context .vakata-context-right ul{left:auto;right:100%;margin-left:auto;margin-right:-4px}.vakata-context li{list-style:none}.vakata-context li>a{display:block;padding:0 2em;text-decoration:none;width:auto;color:#000;white-space:nowrap;line-height:2.4em;text-shadow:1px 1px 0 #fff;border-radius:1px}.vakata-context li>a:hover{position:relative;background-color:#e8eff7;box-shadow:0 0 2px #0a6aa1}.vakata-context li>a.vakata-context-parent{background-image:url(data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAIORI4JlrqN1oMSnmmZDQUAOw==);background-position:right center;background-repeat:no-repeat}.vakata-context li>a:focus{outline:0}.vakata-context .vakata-context-hover>a{position:relative;background-color:#e8eff7;box-shadow:0 0 2px #0a6aa1}.vakata-context .vakata-context-separator>a,.vakata-context .vakata-context-separator>a:hover{background:#fff;border:0;border-top:1px solid #e2e3e3;height:1px;min-height:1px;max-height:1px;padding:0;margin:0 0 0 2.4em;border-left:1px solid #e0e0e0;text-shadow:0 0 0 transparent;box-shadow:0 0 0 transparent;border-radius:0}.vakata-context .vakata-contextmenu-disabled a,.vakata-context .vakata-contextmenu-disabled a:hover{color:silver;background-color:transparent;border:0;box-shadow:0 0 0}.vakata-context li>a>i{text-decoration:none;display:inline-block;width:2.4em;height:2.4em;background:0 0;margin:0 0 0 -2em;vertical-align:top;text-align:center;line-height:2.4em}.vakata-context li>a>i:empty{width:2.4em;line-height:2.4em}.vakata-context li>a .vakata-contextmenu-sep{display:inline-block;width:1px;height:2.4em;background:#fff;margin:0 .5em 0 0;border-left:1px solid #e2e3e3}.vakata-context .vakata-contextmenu-shortcut{font-size:.8em;color:silver;opacity:.5;display:none}.vakata-context-rtl ul{left:auto;right:100%;margin-left:auto;margin-right:-4px}.vakata-context-rtl li>a.vakata-context-parent{background-image:url(data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAINjI+AC7rWHIsPtmoxLAA7);background-position:left center;background-repeat:no-repeat}.vakata-context-rtl .vakata-context-separator>a{margin:0 2.4em 0 0;border-left:0;border-right:1px solid #e2e3e3}.vakata-context-rtl .vakata-context-left ul{right:auto;left:100%;margin-left:-4px;margin-right:auto}.vakata-context-rtl li>a>i{margin:0 -2em 0 0}.vakata-context-rtl li>a .vakata-contextmenu-sep{margin:0 0 0 .5em;border-left-color:#fff;background:#e2e3e3}#jstree-marker{position:absolute;top:0;left:0;margin:-5px 0 0 0;padding:0;border-right:0;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid;width:0;height:0;font-size:0;line-height:0}#jstree-dnd{line-height:16px;margin:0;padding:4px}#jstree-dnd .jstree-icon,#jstree-dnd .jstree-copy{display:inline-block;text-decoration:none;margin:0 2px 0 0;padding:0;width:16px;height:16px}#jstree-dnd .jstree-ok{background:green}#jstree-dnd .jstree-er{background:red}#jstree-dnd .jstree-copy{margin:0 2px}.jstree-default-dark .jstree-node,.jstree-default-dark .jstree-icon{background-repeat:no-repeat;background-color:transparent}.jstree-default-dark .jstree-anchor,.jstree-default-dark .jstree-animated,.jstree-default-dark .jstree-wholerow{transition:background-color .15s,box-shadow .15s}.jstree-default-dark .jstree-hovered{background:#555;border-radius:2px;box-shadow:inset 0 0 1px #555}.jstree-default-dark .jstree-context{background:#555;border-radius:2px;box-shadow:inset 0 0 1px #555}.jstree-default-dark .jstree-clicked{background:#5fa2db;border-radius:2px;box-shadow:inset 0 0 1px #666}.jstree-default-dark .jstree-no-icons .jstree-anchor>.jstree-themeicon{display:none}.jstree-default-dark .jstree-disabled{background:0 0;color:#666}.jstree-default-dark .jstree-disabled.jstree-hovered{background:0 0;box-shadow:none}.jstree-default-dark .jstree-disabled.jstree-clicked{background:#333}.jstree-default-dark .jstree-disabled>.jstree-icon{opacity:.8;filter:url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'jstree-grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default-dark .jstree-search{font-style:italic;color:#fff;font-weight:700}.jstree-default-dark .jstree-no-checkboxes .jstree-checkbox{display:none!important}.jstree-default-dark.jstree-checkbox-no-clicked .jstree-clicked{background:0 0;box-shadow:none}.jstree-default-dark.jstree-checkbox-no-clicked .jstree-clicked.jstree-hovered{background:#555}.jstree-default-dark.jstree-checkbox-no-clicked>.jstree-wholerow-ul .jstree-wholerow-clicked{background:0 0}.jstree-default-dark.jstree-checkbox-no-clicked>.jstree-wholerow-ul .jstree-wholerow-clicked.jstree-wholerow-hovered{background:#555}.jstree-default-dark>.jstree-striped{min-width:100%;display:inline-block;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAMAAAB/qqA+AAAABlBMVEUAAAAAAAClZ7nPAAAAAnRSTlMNAMM9s3UAAAAXSURBVHjajcEBAQAAAIKg/H/aCQZ70AUBjAATb6YPDgAAAABJRU5ErkJggg==) left top repeat}.jstree-default-dark>.jstree-wholerow-ul .jstree-hovered,.jstree-default-dark>.jstree-wholerow-ul .jstree-clicked{background:0 0;box-shadow:none;border-radius:0}.jstree-default-dark .jstree-wholerow{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.jstree-default-dark .jstree-wholerow-hovered{background:#555}.jstree-default-dark .jstree-wholerow-clicked{background:#5fa2db;background:-webkit-linear-gradient(top,#5fa2db 0,#5fa2db 100%);background:linear-gradient(to bottom,#5fa2db 0,#5fa2db 100%)}.jstree-default-dark .jstree-node{min-height:24px;line-height:24px;margin-left:24px;min-width:24px}.jstree-default-dark .jstree-anchor{line-height:24px;height:24px}.jstree-default-dark .jstree-icon{width:24px;height:24px;line-height:24px}.jstree-default-dark .jstree-icon:empty{width:24px;height:24px;line-height:24px}.jstree-default-dark.jstree-rtl .jstree-node{margin-right:24px}.jstree-default-dark .jstree-wholerow{height:24px}.jstree-default-dark .jstree-node,.jstree-default-dark .jstree-icon{background-image:url(32px.png)}.jstree-default-dark .jstree-node{background-position:-292px -4px;background-repeat:repeat-y}.jstree-default-dark .jstree-last{background:0 0}.jstree-default-dark .jstree-open>.jstree-ocl{background-position:-132px -4px}.jstree-default-dark .jstree-closed>.jstree-ocl{background-position:-100px -4px}.jstree-default-dark .jstree-leaf>.jstree-ocl{background-position:-68px -4px}.jstree-default-dark .jstree-themeicon{background-position:-260px -4px}.jstree-default-dark>.jstree-no-dots .jstree-node,.jstree-default-dark>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-dark>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-36px -4px}.jstree-default-dark>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-4px -4px}.jstree-default-dark .jstree-disabled{background:0 0}.jstree-default-dark .jstree-disabled.jstree-hovered{background:0 0}.jstree-default-dark .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default-dark .jstree-checkbox{background-position:-164px -4px}.jstree-default-dark .jstree-checkbox:hover{background-position:-164px -36px}.jstree-default-dark.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default-dark .jstree-checked>.jstree-checkbox{background-position:-228px -4px}.jstree-default-dark.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default-dark .jstree-checked>.jstree-checkbox:hover{background-position:-228px -36px}.jstree-default-dark .jstree-anchor>.jstree-undetermined{background-position:-196px -4px}.jstree-default-dark .jstree-anchor>.jstree-undetermined:hover{background-position:-196px -36px}.jstree-default-dark .jstree-checkbox-disabled{opacity:.8;filter:url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'jstree-grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default-dark>.jstree-striped{background-size:auto 48px}.jstree-default-dark.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==);background-position:100% 1px;background-repeat:repeat-y}.jstree-default-dark.jstree-rtl .jstree-last{background:0 0}.jstree-default-dark.jstree-rtl .jstree-open>.jstree-ocl{background-position:-132px -36px}.jstree-default-dark.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-100px -36px}.jstree-default-dark.jstree-rtl .jstree-leaf>.jstree-ocl{background-position:-68px -36px}.jstree-default-dark.jstree-rtl>.jstree-no-dots .jstree-node,.jstree-default-dark.jstree-rtl>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-dark.jstree-rtl>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-36px -36px}.jstree-default-dark.jstree-rtl>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-4px -36px}.jstree-default-dark .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-dark>.jstree-container-ul .jstree-loading>.jstree-ocl{background:url(throbber.gif) center center no-repeat}.jstree-default-dark .jstree-file{background:url(32px.png) -100px -68px no-repeat}.jstree-default-dark .jstree-folder{background:url(32px.png) -260px -4px no-repeat}.jstree-default-dark>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}#jstree-dnd.jstree-default-dark{line-height:24px;padding:0 4px}#jstree-dnd.jstree-default-dark .jstree-ok,#jstree-dnd.jstree-default-dark .jstree-er{background-image:url(32px.png);background-repeat:no-repeat;background-color:transparent}#jstree-dnd.jstree-default-dark i{background:0 0;width:24px;height:24px;line-height:24px}#jstree-dnd.jstree-default-dark .jstree-ok{background-position:-4px -68px}#jstree-dnd.jstree-default-dark .jstree-er{background-position:-36px -68px}.jstree-default-dark .jstree-ellipsis{overflow:hidden}.jstree-default-dark .jstree-ellipsis .jstree-anchor{width:calc(100% - 29px);text-overflow:ellipsis;overflow:hidden}.jstree-default-dark .jstree-ellipsis.jstree-no-icons .jstree-anchor{width:calc(100% - 5px)}.jstree-default-dark.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==)}.jstree-default-dark.jstree-rtl .jstree-last{background:0 0}.jstree-default-dark-small .jstree-node{min-height:18px;line-height:18px;margin-left:18px;min-width:18px}.jstree-default-dark-small .jstree-anchor{line-height:18px;height:18px}.jstree-default-dark-small .jstree-icon{width:18px;height:18px;line-height:18px}.jstree-default-dark-small .jstree-icon:empty{width:18px;height:18px;line-height:18px}.jstree-default-dark-small.jstree-rtl .jstree-node{margin-right:18px}.jstree-default-dark-small .jstree-wholerow{height:18px}.jstree-default-dark-small .jstree-node,.jstree-default-dark-small .jstree-icon{background-image:url(32px.png)}.jstree-default-dark-small .jstree-node{background-position:-295px -7px;background-repeat:repeat-y}.jstree-default-dark-small .jstree-last{background:0 0}.jstree-default-dark-small .jstree-open>.jstree-ocl{background-position:-135px -7px}.jstree-default-dark-small .jstree-closed>.jstree-ocl{background-position:-103px -7px}.jstree-default-dark-small .jstree-leaf>.jstree-ocl{background-position:-71px -7px}.jstree-default-dark-small .jstree-themeicon{background-position:-263px -7px}.jstree-default-dark-small>.jstree-no-dots .jstree-node,.jstree-default-dark-small>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-dark-small>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-39px -7px}.jstree-default-dark-small>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-7px -7px}.jstree-default-dark-small .jstree-disabled{background:0 0}.jstree-default-dark-small .jstree-disabled.jstree-hovered{background:0 0}.jstree-default-dark-small .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default-dark-small .jstree-checkbox{background-position:-167px -7px}.jstree-default-dark-small .jstree-checkbox:hover{background-position:-167px -39px}.jstree-default-dark-small.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default-dark-small .jstree-checked>.jstree-checkbox{background-position:-231px -7px}.jstree-default-dark-small.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default-dark-small .jstree-checked>.jstree-checkbox:hover{background-position:-231px -39px}.jstree-default-dark-small .jstree-anchor>.jstree-undetermined{background-position:-199px -7px}.jstree-default-dark-small .jstree-anchor>.jstree-undetermined:hover{background-position:-199px -39px}.jstree-default-dark-small .jstree-checkbox-disabled{opacity:.8;filter:url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'jstree-grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default-dark-small>.jstree-striped{background-size:auto 36px}.jstree-default-dark-small.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==);background-position:100% 1px;background-repeat:repeat-y}.jstree-default-dark-small.jstree-rtl .jstree-last{background:0 0}.jstree-default-dark-small.jstree-rtl .jstree-open>.jstree-ocl{background-position:-135px -39px}.jstree-default-dark-small.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-103px -39px}.jstree-default-dark-small.jstree-rtl .jstree-leaf>.jstree-ocl{background-position:-71px -39px}.jstree-default-dark-small.jstree-rtl>.jstree-no-dots .jstree-node,.jstree-default-dark-small.jstree-rtl>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-dark-small.jstree-rtl>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-39px -39px}.jstree-default-dark-small.jstree-rtl>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-7px -39px}.jstree-default-dark-small .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-dark-small>.jstree-container-ul .jstree-loading>.jstree-ocl{background:url(throbber.gif) center center no-repeat}.jstree-default-dark-small .jstree-file{background:url(32px.png) -103px -71px no-repeat}.jstree-default-dark-small .jstree-folder{background:url(32px.png) -263px -7px no-repeat}.jstree-default-dark-small>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}#jstree-dnd.jstree-default-dark-small{line-height:18px;padding:0 4px}#jstree-dnd.jstree-default-dark-small .jstree-ok,#jstree-dnd.jstree-default-dark-small .jstree-er{background-image:url(32px.png);background-repeat:no-repeat;background-color:transparent}#jstree-dnd.jstree-default-dark-small i{background:0 0;width:18px;height:18px;line-height:18px}#jstree-dnd.jstree-default-dark-small .jstree-ok{background-position:-7px -71px}#jstree-dnd.jstree-default-dark-small .jstree-er{background-position:-39px -71px}.jstree-default-dark-small .jstree-ellipsis{overflow:hidden}.jstree-default-dark-small .jstree-ellipsis .jstree-anchor{width:calc(100% - 23px);text-overflow:ellipsis;overflow:hidden}.jstree-default-dark-small .jstree-ellipsis.jstree-no-icons .jstree-anchor{width:calc(100% - 5px)}.jstree-default-dark-small.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAACAQMAAABv1h6PAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMHBgAAiABBI4gz9AAAAABJRU5ErkJggg==)}.jstree-default-dark-small.jstree-rtl .jstree-last{background:0 0}.jstree-default-dark-large .jstree-node{min-height:32px;line-height:32px;margin-left:32px;min-width:32px}.jstree-default-dark-large .jstree-anchor{line-height:32px;height:32px}.jstree-default-dark-large .jstree-icon{width:32px;height:32px;line-height:32px}.jstree-default-dark-large .jstree-icon:empty{width:32px;height:32px;line-height:32px}.jstree-default-dark-large.jstree-rtl .jstree-node{margin-right:32px}.jstree-default-dark-large .jstree-wholerow{height:32px}.jstree-default-dark-large .jstree-node,.jstree-default-dark-large .jstree-icon{background-image:url(32px.png)}.jstree-default-dark-large .jstree-node{background-position:-288px 0;background-repeat:repeat-y}.jstree-default-dark-large .jstree-last{background:0 0}.jstree-default-dark-large .jstree-open>.jstree-ocl{background-position:-128px 0}.jstree-default-dark-large .jstree-closed>.jstree-ocl{background-position:-96px 0}.jstree-default-dark-large .jstree-leaf>.jstree-ocl{background-position:-64px 0}.jstree-default-dark-large .jstree-themeicon{background-position:-256px 0}.jstree-default-dark-large>.jstree-no-dots .jstree-node,.jstree-default-dark-large>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-dark-large>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-32px 0}.jstree-default-dark-large>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:0 0}.jstree-default-dark-large .jstree-disabled{background:0 0}.jstree-default-dark-large .jstree-disabled.jstree-hovered{background:0 0}.jstree-default-dark-large .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default-dark-large .jstree-checkbox{background-position:-160px 0}.jstree-default-dark-large .jstree-checkbox:hover{background-position:-160px -32px}.jstree-default-dark-large.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default-dark-large .jstree-checked>.jstree-checkbox{background-position:-224px 0}.jstree-default-dark-large.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default-dark-large .jstree-checked>.jstree-checkbox:hover{background-position:-224px -32px}.jstree-default-dark-large .jstree-anchor>.jstree-undetermined{background-position:-192px 0}.jstree-default-dark-large .jstree-anchor>.jstree-undetermined:hover{background-position:-192px -32px}.jstree-default-dark-large .jstree-checkbox-disabled{opacity:.8;filter:url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'jstree-grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default-dark-large>.jstree-striped{background-size:auto 64px}.jstree-default-dark-large.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==);background-position:100% 1px;background-repeat:repeat-y}.jstree-default-dark-large.jstree-rtl .jstree-last{background:0 0}.jstree-default-dark-large.jstree-rtl .jstree-open>.jstree-ocl{background-position:-128px -32px}.jstree-default-dark-large.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-96px -32px}.jstree-default-dark-large.jstree-rtl .jstree-leaf>.jstree-ocl{background-position:-64px -32px}.jstree-default-dark-large.jstree-rtl>.jstree-no-dots .jstree-node,.jstree-default-dark-large.jstree-rtl>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-dark-large.jstree-rtl>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-32px -32px}.jstree-default-dark-large.jstree-rtl>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:0 -32px}.jstree-default-dark-large .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-dark-large>.jstree-container-ul .jstree-loading>.jstree-ocl{background:url(throbber.gif) center center no-repeat}.jstree-default-dark-large .jstree-file{background:url(32px.png) -96px -64px no-repeat}.jstree-default-dark-large .jstree-folder{background:url(32px.png) -256px 0 no-repeat}.jstree-default-dark-large>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}#jstree-dnd.jstree-default-dark-large{line-height:32px;padding:0 4px}#jstree-dnd.jstree-default-dark-large .jstree-ok,#jstree-dnd.jstree-default-dark-large .jstree-er{background-image:url(32px.png);background-repeat:no-repeat;background-color:transparent}#jstree-dnd.jstree-default-dark-large i{background:0 0;width:32px;height:32px;line-height:32px}#jstree-dnd.jstree-default-dark-large .jstree-ok{background-position:0 -64px}#jstree-dnd.jstree-default-dark-large .jstree-er{background-position:-32px -64px}.jstree-default-dark-large .jstree-ellipsis{overflow:hidden}.jstree-default-dark-large .jstree-ellipsis .jstree-anchor{width:calc(100% - 37px);text-overflow:ellipsis;overflow:hidden}.jstree-default-dark-large .jstree-ellipsis.jstree-no-icons .jstree-anchor{width:calc(100% - 5px)}.jstree-default-dark-large.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAACAQMAAAAD0EyKAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjgIIGBgABCgCBvVLXcAAAAABJRU5ErkJggg==)}.jstree-default-dark-large.jstree-rtl .jstree-last{background:0 0}@media (max-width:768px){#jstree-dnd.jstree-dnd-responsive{line-height:40px;font-weight:700;font-size:1.1em;text-shadow:1px 1px #fff}#jstree-dnd.jstree-dnd-responsive>i{background:0 0;width:40px;height:40px}#jstree-dnd.jstree-dnd-responsive>.jstree-ok{background-image:url(40px.png);background-position:0 -200px;background-size:120px 240px}#jstree-dnd.jstree-dnd-responsive>.jstree-er{background-image:url(40px.png);background-position:-40px -200px;background-size:120px 240px}#jstree-marker.jstree-dnd-responsive{border-left-width:10px;border-top-width:10px;border-bottom-width:10px;margin-top:-10px}}@media (max-width:768px){.jstree-default-dark-responsive .jstree-icon{background-image:url(40px.png)}.jstree-default-dark-responsive .jstree-node,.jstree-default-dark-responsive .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-dark-responsive .jstree-node{min-height:40px;line-height:40px;margin-left:40px;min-width:40px;white-space:nowrap}.jstree-default-dark-responsive .jstree-anchor{line-height:40px;height:40px}.jstree-default-dark-responsive .jstree-icon,.jstree-default-dark-responsive .jstree-icon:empty{width:40px;height:40px;line-height:40px}.jstree-default-dark-responsive>.jstree-container-ul>.jstree-node{margin-left:0}.jstree-default-dark-responsive.jstree-rtl .jstree-node{margin-left:0;margin-right:40px;background:0 0}.jstree-default-dark-responsive.jstree-rtl .jstree-container-ul>.jstree-node{margin-right:0}.jstree-default-dark-responsive .jstree-ocl,.jstree-default-dark-responsive .jstree-themeicon,.jstree-default-dark-responsive .jstree-checkbox{background-size:120px 240px}.jstree-default-dark-responsive .jstree-leaf>.jstree-ocl,.jstree-default-dark-responsive.jstree-rtl .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-dark-responsive .jstree-open>.jstree-ocl{background-position:0 0!important}.jstree-default-dark-responsive .jstree-closed>.jstree-ocl{background-position:0 -40px!important}.jstree-default-dark-responsive.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-40px 0!important}.jstree-default-dark-responsive .jstree-themeicon{background-position:-40px -40px}.jstree-default-dark-responsive .jstree-checkbox,.jstree-default-dark-responsive .jstree-checkbox:hover{background-position:-40px -80px}.jstree-default-dark-responsive.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default-dark-responsive.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default-dark-responsive .jstree-checked>.jstree-checkbox,.jstree-default-dark-responsive .jstree-checked>.jstree-checkbox:hover{background-position:0 -80px}.jstree-default-dark-responsive .jstree-anchor>.jstree-undetermined,.jstree-default-dark-responsive .jstree-anchor>.jstree-undetermined:hover{background-position:0 -120px}.jstree-default-dark-responsive .jstree-anchor{font-weight:700;font-size:1.1em;text-shadow:1px 1px #fff}.jstree-default-dark-responsive>.jstree-striped{background:0 0}.jstree-default-dark-responsive .jstree-wholerow{border-top:1px solid #666;border-bottom:1px solid #000;background:#333;height:40px}.jstree-default-dark-responsive .jstree-wholerow-hovered{background:#555}.jstree-default-dark-responsive .jstree-wholerow-clicked{background:#5fa2db}.jstree-default-dark-responsive .jstree-children .jstree-last>.jstree-wholerow{box-shadow:inset 0 -6px 3px -5px #111}.jstree-default-dark-responsive .jstree-children .jstree-open>.jstree-wholerow{box-shadow:inset 0 6px 3px -5px #111;border-top:0}.jstree-default-dark-responsive .jstree-children .jstree-open+.jstree-open{box-shadow:none}.jstree-default-dark-responsive .jstree-node,.jstree-default-dark-responsive .jstree-icon,.jstree-default-dark-responsive .jstree-node>.jstree-ocl,.jstree-default-dark-responsive .jstree-themeicon,.jstree-default-dark-responsive .jstree-checkbox{background-image:url(40px.png);background-size:120px 240px}.jstree-default-dark-responsive .jstree-node{background-position:-80px 0;background-repeat:repeat-y}.jstree-default-dark-responsive .jstree-last{background:0 0}.jstree-default-dark-responsive .jstree-leaf>.jstree-ocl{background-position:-40px -120px}.jstree-default-dark-responsive .jstree-last>.jstree-ocl{background-position:-40px -160px}.jstree-default-dark-responsive .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-dark-responsive .jstree-file{background:url(40px.png) 0 -160px no-repeat;background-size:120px 240px}.jstree-default-dark-responsive .jstree-folder{background:url(40px.png) -40px -40px no-repeat;background-size:120px 240px}.jstree-default-dark-responsive>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}}.jstree-default-dark{background:#333}.jstree-default-dark .jstree-anchor{color:#999;text-shadow:1px 1px 0 rgba(0,0,0,.5)}.jstree-default-dark .jstree-clicked,.jstree-default-dark .jstree-checked{color:#fff}.jstree-default-dark .jstree-hovered{color:#fff}#jstree-marker.jstree-default-dark{border-left-color:#999;background:0 0}.jstree-default-dark .jstree-anchor>.jstree-icon{opacity:.75}.jstree-default-dark .jstree-clicked>.jstree-icon,.jstree-default-dark .jstree-hovered>.jstree-icon,.jstree-default-dark .jstree-checked>.jstree-icon{opacity:1}.jstree-default-dark.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAACZmZl+9SADAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==)}.jstree-default-dark.jstree-rtl .jstree-last{background:0 0}.jstree-default-dark-small.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAACAQMAAABv1h6PAAAABlBMVEUAAACZmZl+9SADAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMHBgAAiABBI4gz9AAAAABJRU5ErkJggg==)}.jstree-default-dark-small.jstree-rtl .jstree-last{background:0 0}.jstree-default-dark-large.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAACAQMAAAAD0EyKAAAABlBMVEUAAACZmZl+9SADAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjgIIGBgABCgCBvVLXcAAAAABJRU5ErkJggg==)}.jstree-default-dark-large.jstree-rtl .jstree-last{background:0 0}
includes/jstree/themes/default-dark/throbber.gif ADDED
Binary file
includes/jstree/themes/default/32px.png ADDED
Binary file
includes/jstree/themes/default/40px.png ADDED
Binary file
includes/jstree/themes/default/style.css ADDED
@@ -0,0 +1,1102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* jsTree default theme */
2
+ .jstree-node,
3
+ .jstree-children,
4
+ .jstree-container-ul {
5
+ display: block;
6
+ margin: 0;
7
+ padding: 0;
8
+ list-style-type: none;
9
+ list-style-image: none;
10
+ }
11
+ .jstree-node {
12
+ white-space: nowrap;
13
+ }
14
+ .jstree-anchor {
15
+ display: inline-block;
16
+ color: black;
17
+ white-space: nowrap;
18
+ padding: 0 4px 0 1px;
19
+ margin: 0;
20
+ vertical-align: top;
21
+ }
22
+ .jstree-anchor:focus {
23
+ outline: 0;
24
+ }
25
+ .jstree-anchor,
26
+ .jstree-anchor:link,
27
+ .jstree-anchor:visited,
28
+ .jstree-anchor:hover,
29
+ .jstree-anchor:active {
30
+ text-decoration: none;
31
+ color: inherit;
32
+ }
33
+ .jstree-icon {
34
+ display: inline-block;
35
+ text-decoration: none;
36
+ margin: 0;
37
+ padding: 0;
38
+ vertical-align: top;
39
+ text-align: center;
40
+ }
41
+ .jstree-icon:empty {
42
+ display: inline-block;
43
+ text-decoration: none;
44
+ margin: 0;
45
+ padding: 0;
46
+ vertical-align: top;
47
+ text-align: center;
48
+ }
49
+ .jstree-ocl {
50
+ cursor: pointer;
51
+ }
52
+ .jstree-leaf > .jstree-ocl {
53
+ cursor: default;
54
+ }
55
+ .jstree .jstree-open > .jstree-children {
56
+ display: block;
57
+ }
58
+ .jstree .jstree-closed > .jstree-children,
59
+ .jstree .jstree-leaf > .jstree-children {
60
+ display: none;
61
+ }
62
+ .jstree-anchor > .jstree-themeicon {
63
+ margin-right: 2px;
64
+ }
65
+ .jstree-no-icons .jstree-themeicon,
66
+ .jstree-anchor > .jstree-themeicon-hidden {
67
+ display: none;
68
+ }
69
+ .jstree-hidden,
70
+ .jstree-node.jstree-hidden {
71
+ display: none;
72
+ }
73
+ .jstree-rtl .jstree-anchor {
74
+ padding: 0 1px 0 4px;
75
+ }
76
+ .jstree-rtl .jstree-anchor > .jstree-themeicon {
77
+ margin-left: 2px;
78
+ margin-right: 0;
79
+ }
80
+ .jstree-rtl .jstree-node {
81
+ margin-left: 0;
82
+ }
83
+ .jstree-rtl .jstree-container-ul > .jstree-node {
84
+ margin-right: 0;
85
+ }
86
+ .jstree-wholerow-ul {
87
+ position: relative;
88
+ display: inline-block;
89
+ min-width: 100%;
90
+ }
91
+ .jstree-wholerow-ul .jstree-leaf > .jstree-ocl {
92
+ cursor: pointer;
93
+ }
94
+ .jstree-wholerow-ul .jstree-anchor,
95
+ .jstree-wholerow-ul .jstree-icon {
96
+ position: relative;
97
+ }
98
+ .jstree-wholerow-ul .jstree-wholerow {
99
+ width: 100%;
100
+ cursor: pointer;
101
+ position: absolute;
102
+ left: 0;
103
+ -webkit-user-select: none;
104
+ -moz-user-select: none;
105
+ -ms-user-select: none;
106
+ user-select: none;
107
+ }
108
+ .vakata-context {
109
+ display: none;
110
+ }
111
+ .vakata-context,
112
+ .vakata-context ul {
113
+ margin: 0;
114
+ padding: 2px;
115
+ position: absolute;
116
+ background: #f5f5f5;
117
+ border: 1px solid #979797;
118
+ box-shadow: 2px 2px 2px #999999;
119
+ }
120
+ .vakata-context ul {
121
+ list-style: none;
122
+ left: 100%;
123
+ margin-top: -2.7em;
124
+ margin-left: -4px;
125
+ }
126
+ .vakata-context .vakata-context-right ul {
127
+ left: auto;
128
+ right: 100%;
129
+ margin-left: auto;
130
+ margin-right: -4px;
131
+ }
132
+ .vakata-context li {
133
+ list-style: none;
134
+ }
135
+ .vakata-context li > a {
136
+ display: block;
137
+ padding: 0 2em 0 2em;
138
+ text-decoration: none;
139
+ width: auto;
140
+ color: black;
141
+ white-space: nowrap;
142
+ line-height: 2.4em;
143
+ text-shadow: 1px 1px 0 white;
144
+ border-radius: 1px;
145
+ }
146
+ .vakata-context li > a:hover {
147
+ position: relative;
148
+ background-color: #e8eff7;
149
+ box-shadow: 0 0 2px #0a6aa1;
150
+ }
151
+ .vakata-context li > a.vakata-context-parent {
152
+ background-image: url("data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAIORI4JlrqN1oMSnmmZDQUAOw==");
153
+ background-position: right center;
154
+ background-repeat: no-repeat;
155
+ }
156
+ .vakata-context li > a:focus {
157
+ outline: 0;
158
+ }
159
+ .vakata-context .vakata-context-hover > a {
160
+ position: relative;
161
+ background-color: #e8eff7;
162
+ box-shadow: 0 0 2px #0a6aa1;
163
+ }
164
+ .vakata-context .vakata-context-separator > a,
165
+ .vakata-context .vakata-context-separator > a:hover {
166
+ background: white;
167
+ border: 0;
168
+ border-top: 1px solid #e2e3e3;
169
+ height: 1px;
170
+ min-height: 1px;
171
+ max-height: 1px;
172
+ padding: 0;
173
+ margin: 0 0 0 2.4em;
174
+ border-left: 1px solid #e0e0e0;
175
+ text-shadow: 0 0 0 transparent;
176
+ box-shadow: 0 0 0 transparent;
177
+ border-radius: 0;
178
+ }
179
+ .vakata-context .vakata-contextmenu-disabled a,
180
+ .vakata-context .vakata-contextmenu-disabled a:hover {
181
+ color: silver;
182
+ background-color: transparent;
183
+ border: 0;
184
+ box-shadow: 0 0 0;
185
+ }
186
+ .vakata-context li > a > i {
187
+ text-decoration: none;
188
+ display: inline-block;
189
+ width: 2.4em;
190
+ height: 2.4em;
191
+ background: transparent;
192
+ margin: 0 0 0 -2em;
193
+ vertical-align: top;
194
+ text-align: center;
195
+ line-height: 2.4em;
196
+ }
197
+ .vakata-context li > a > i:empty {
198
+ width: 2.4em;
199
+ line-height: 2.4em;
200
+ }
201
+ .vakata-context li > a .vakata-contextmenu-sep {
202
+ display: inline-block;
203
+ width: 1px;
204
+ height: 2.4em;
205
+ background: white;
206
+ margin: 0 0.5em 0 0;
207
+ border-left: 1px solid #e2e3e3;
208
+ }
209
+ .vakata-context .vakata-contextmenu-shortcut {
210
+ font-size: 0.8em;
211
+ color: silver;
212
+ opacity: 0.5;
213
+ display: none;
214
+ }
215
+ .vakata-context-rtl ul {
216
+ left: auto;
217
+ right: 100%;
218
+ margin-left: auto;
219
+ margin-right: -4px;
220
+ }
221
+ .vakata-context-rtl li > a.vakata-context-parent {
222
+ background-image: url("data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAINjI+AC7rWHIsPtmoxLAA7");
223
+ background-position: left center;
224
+ background-repeat: no-repeat;
225
+ }
226
+ .vakata-context-rtl .vakata-context-separator > a {
227
+ margin: 0 2.4em 0 0;
228
+ border-left: 0;
229
+ border-right: 1px solid #e2e3e3;
230
+ }
231
+ .vakata-context-rtl .vakata-context-left ul {
232
+ right: auto;
233
+ left: 100%;
234
+ margin-left: -4px;
235
+ margin-right: auto;
236
+ }
237
+ .vakata-context-rtl li > a > i {
238
+ margin: 0 -2em 0 0;
239
+ }
240
+ .vakata-context-rtl li > a .vakata-contextmenu-sep {
241
+ margin: 0 0 0 0.5em;
242
+ border-left-color: white;
243
+ background: #e2e3e3;
244
+ }
245
+ #jstree-marker {
246
+ position: absolute;
247
+ top: 0;
248
+ left: 0;
249
+ margin: -5px 0 0 0;
250
+ padding: 0;
251
+ border-right: 0;
252
+ border-top: 5px solid transparent;
253
+ border-bottom: 5px solid transparent;
254
+ border-left: 5px solid;
255
+ width: 0;
256
+ height: 0;
257
+ font-size: 0;
258
+ line-height: 0;
259
+ }
260
+ #jstree-dnd {
261
+ line-height: 16px;
262
+ margin: 0;
263
+ padding: 4px;
264
+ }
265
+ #jstree-dnd .jstree-icon,
266
+ #jstree-dnd .jstree-copy {
267
+ display: inline-block;
268
+ text-decoration: none;
269
+ margin: 0 2px 0 0;
270
+ padding: 0;
271
+ width: 16px;
272
+ height: 16px;
273
+ }
274
+ #jstree-dnd .jstree-ok {
275
+ background: green;
276
+ }
277
+ #jstree-dnd .jstree-er {
278
+ background: red;
279
+ }
280
+ #jstree-dnd .jstree-copy {
281
+ margin: 0 2px 0 2px;
282
+ }
283
+ .jstree-default .jstree-node,
284
+ .jstree-default .jstree-icon {
285
+ background-repeat: no-repeat;
286
+ background-color: transparent;
287
+ }
288
+ .jstree-default .jstree-anchor,
289
+ .jstree-default .jstree-animated,
290
+ .jstree-default .jstree-wholerow {
291
+ transition: background-color 0.15s, box-shadow 0.15s;
292
+ }
293
+ .jstree-default .jstree-hovered {
294
+ background: #e7f4f9;
295
+ border-radius: 2px;
296
+ box-shadow: inset 0 0 1px #cccccc;
297
+ }
298
+ .jstree-default .jstree-context {
299
+ background: #e7f4f9;
300
+ border-radius: 2px;
301
+ box-shadow: inset 0 0 1px #cccccc;
302
+ }
303
+ .jstree-default .jstree-clicked {
304
+ background: #beebff;
305
+ border-radius: 2px;
306
+ box-shadow: inset 0 0 1px #999999;
307
+ }
308
+ .jstree-default .jstree-no-icons .jstree-anchor > .jstree-themeicon {
309
+ display: none;
310
+ }
311
+ .jstree-default .jstree-disabled {
312
+ background: transparent;
313
+ color: #666666;
314
+ }
315
+ .jstree-default .jstree-disabled.jstree-hovered {
316
+ background: transparent;
317
+ box-shadow: none;
318
+ }
319
+ .jstree-default .jstree-disabled.jstree-clicked {
320
+ background: #efefef;
321
+ }
322
+ .jstree-default .jstree-disabled > .jstree-icon {
323
+ opacity: 0.8;
324
+ filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'jstree-grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#jstree-grayscale");
325
+ /* Firefox 10+ */
326
+ filter: gray;
327
+ /* IE6-9 */
328
+ -webkit-filter: grayscale(100%);
329
+ /* Chrome 19+ & Safari 6+ */
330
+ }
331
+ .jstree-default .jstree-search {
332
+ font-style: italic;
333
+ color: #8b0000;
334
+ font-weight: bold;
335
+ }
336
+ .jstree-default .jstree-no-checkboxes .jstree-checkbox {
337
+ display: none !important;
338
+ }
339
+ .jstree-default.jstree-checkbox-no-clicked .jstree-clicked {
340
+ background: transparent;
341
+ box-shadow: none;
342
+ }
343
+ .jstree-default.jstree-checkbox-no-clicked .jstree-clicked.jstree-hovered {
344
+ background: #e7f4f9;
345
+ }
346
+ .jstree-default.jstree-checkbox-no-clicked > .jstree-wholerow-ul .jstree-wholerow-clicked {
347
+ background: transparent;
348
+ }
349
+ .jstree-default.jstree-checkbox-no-clicked > .jstree-wholerow-ul .jstree-wholerow-clicked.jstree-wholerow-hovered {
350
+ background: #e7f4f9;
351
+ }
352
+ .jstree-default > .jstree-striped {
353
+ min-width: 100%;
354
+ display: inline-block;
355
+ background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAMAAAB/qqA+AAAABlBMVEUAAAAAAAClZ7nPAAAAAnRSTlMNAMM9s3UAAAAXSURBVHjajcEBAQAAAIKg/H/aCQZ70AUBjAATb6YPDgAAAABJRU5ErkJggg==") left top repeat;
356
+ }
357
+ .jstree-default > .jstree-wholerow-ul .jstree-hovered,
358
+ .jstree-default > .jstree-wholerow-ul .jstree-clicked {
359
+ background: transparent;
360
+ box-shadow: none;
361
+ border-radius: 0;
362
+ }
363
+ .jstree-default .jstree-wholerow {
364
+ -moz-box-sizing: border-box;
365
+ -webkit-box-sizing: border-box;
366
+ box-sizing: border-box;
367
+ }
368
+ .jstree-default .jstree-wholerow-hovered {
369
+ background: #e7f4f9;
370
+ }
371
+ .jstree-default .jstree-wholerow-clicked {
372
+ background: #beebff;
373
+ background: -webkit-linear-gradient(top, #beebff 0%, #a8e4ff 100%);
374
+ background: linear-gradient(to bottom, #beebff 0%, #a8e4ff 100%);
375
+ }
376
+ .jstree-default .jstree-node {
377
+ min-height: 24px;
378
+ line-height: 24px;
379
+ margin-left: 24px;
380
+ min-width: 24px;
381
+ }
382
+ .jstree-default .jstree-anchor {
383
+ line-height: 24px;
384
+ height: 24px;
385
+ }
386
+ .jstree-default .jstree-icon {
387
+ width: 24px;
388
+ height: 24px;
389
+ line-height: 24px;
390
+ }
391
+ .jstree-default .jstree-icon:empty {
392
+ width: 24px;
393
+ height: 24px;
394
+ line-height: 24px;
395
+ }
396
+ .jstree-default.jstree-rtl .jstree-node {
397
+ margin-right: 24px;
398
+ }
399
+ .jstree-default .jstree-wholerow {
400
+ height: 24px;
401
+ }
402
+ .jstree-default .jstree-node,
403
+ .jstree-default .jstree-icon {
404
+ background-image: url("32px.png");
405
+ }
406
+ .jstree-default .jstree-node {
407
+ background-position: -292px -4px;
408
+ background-repeat: repeat-y;
409
+ }
410
+ .jstree-default .jstree-last {
411
+ background: transparent;
412
+ }
413
+ .jstree-default .jstree-open > .jstree-ocl {
414
+ background-position: -132px -4px;
415
+ }
416
+ .jstree-default .jstree-closed > .jstree-ocl {
417
+ background-position: -100px -4px;
418
+ }
419
+ .jstree-default .jstree-leaf > .jstree-ocl {
420
+ background-position: -68px -4px;
421
+ }
422
+ .jstree-default .jstree-themeicon {
423
+ background-position: -260px -4px;
424
+ }
425
+ .jstree-default > .jstree-no-dots .jstree-node,
426
+ .jstree-default > .jstree-no-dots .jstree-leaf > .jstree-ocl {
427
+ background: transparent;
428
+ }
429
+ .jstree-default > .jstree-no-dots .jstree-open > .jstree-ocl {
430
+ background-position: -36px -4px;
431
+ }
432
+ .jstree-default > .jstree-no-dots .jstree-closed > .jstree-ocl {
433
+ background-position: -4px -4px;
434
+ }
435
+ .jstree-default .jstree-disabled {
436
+ background: transparent;
437
+ }
438
+ .jstree-default .jstree-disabled.jstree-hovered {
439
+ background: transparent;
440
+ }
441
+ .jstree-default .jstree-disabled.jstree-clicked {
442
+ background: #efefef;
443
+ }
444
+ .jstree-default .jstree-checkbox {
445
+ background-position: -164px -4px;
446
+ }
447
+ .jstree-default .jstree-checkbox:hover {
448
+ background-position: -164px -36px;
449
+ }
450
+ .jstree-default.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox,
451
+ .jstree-default .jstree-checked > .jstree-checkbox {
452
+ background-position: -228px -4px;
453
+ }
454
+ .jstree-default.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover,
455
+ .jstree-default .jstree-checked > .jstree-checkbox:hover {
456
+ background-position: -228px -36px;
457
+ }
458
+ .jstree-default .jstree-anchor > .jstree-undetermined {
459
+ background-position: -196px -4px;
460
+ }
461
+ .jstree-default .jstree-anchor > .jstree-undetermined:hover {
462
+ background-position: -196px -36px;
463
+ }
464
+ .jstree-default .jstree-checkbox-disabled {
465
+ opacity: 0.8;
466
+ filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'jstree-grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#jstree-grayscale");
467
+ /* Firefox 10+ */
468
+ filter: gray;
469
+ /* IE6-9 */
470
+ -webkit-filter: grayscale(100%);
471
+ /* Chrome 19+ & Safari 6+ */
472
+ }
473
+ .jstree-default > .jstree-striped {
474
+ background-size: auto 48px;
475
+ }
476
+ .jstree-default.jstree-rtl .jstree-node {
477
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");
478
+ background-position: 100% 1px;
479
+ background-repeat: repeat-y;
480
+ }
481
+ .jstree-default.jstree-rtl .jstree-last {
482
+ background: transparent;
483
+ }
484
+ .jstree-default.jstree-rtl .jstree-open > .jstree-ocl {
485
+ background-position: -132px -36px;
486
+ }
487
+ .jstree-default.jstree-rtl .jstree-closed > .jstree-ocl {
488
+ background-position: -100px -36px;
489
+ }
490
+ .jstree-default.jstree-rtl .jstree-leaf > .jstree-ocl {
491
+ background-position: -68px -36px;
492
+ }
493
+ .jstree-default.jstree-rtl > .jstree-no-dots .jstree-node,
494
+ .jstree-default.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl {
495
+ background: transparent;
496
+ }
497
+ .jstree-default.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl {
498
+ background-position: -36px -36px;
499
+ }
500
+ .jstree-default.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl {
501
+ background-position: -4px -36px;
502
+ }
503
+ .jstree-default .jstree-themeicon-custom {
504
+ background-color: transparent;
505
+ background-image: none;
506
+ background-position: 0 0;
507
+ }
508
+ .jstree-default > .jstree-container-ul .jstree-loading > .jstree-ocl {
509
+ background: url("throbber.gif") center center no-repeat;
510
+ }
511
+ .jstree-default .jstree-file {
512
+ background: url("32px.png") -100px -68px no-repeat;
513
+ }
514
+ .jstree-default .jstree-folder {
515
+ background: url("32px.png") -260px -4px no-repeat;
516
+ }
517
+ .jstree-default > .jstree-container-ul > .jstree-node {
518
+ margin-left: 0;
519
+ margin-right: 0;
520
+ }
521
+ #jstree-dnd.jstree-default {
522
+ line-height: 24px;
523
+ padding: 0 4px;
524
+ }
525
+ #jstree-dnd.jstree-default .jstree-ok,
526
+ #jstree-dnd.jstree-default .jstree-er {
527
+ background-image: url("32px.png");
528
+ background-repeat: no-repeat;
529
+ background-color: transparent;
530
+ }
531
+ #jstree-dnd.jstree-default i {
532
+ background: transparent;
533
+ width: 24px;
534
+ height: 24px;
535
+ line-height: 24px;
536
+ }
537
+ #jstree-dnd.jstree-default .jstree-ok {
538
+ background-position: -4px -68px;
539
+ }
540
+ #jstree-dnd.jstree-default .jstree-er {
541
+ background-position: -36px -68px;
542
+ }
543
+ .jstree-default .jstree-ellipsis {
544
+ overflow: hidden;
545
+ }
546
+ .jstree-default .jstree-ellipsis .jstree-anchor {
547
+ width: calc(100% - 29px);
548
+ text-overflow: ellipsis;
549
+ overflow: hidden;
550
+ }
551
+ .jstree-default .jstree-ellipsis.jstree-no-icons .jstree-anchor {
552
+ width: calc(100% - 5px);
553
+ }
554
+ .jstree-default.jstree-rtl .jstree-node {
555
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");
556
+ }
557
+ .jstree-default.jstree-rtl .jstree-last {
558
+ background: transparent;
559
+ }
560
+ .jstree-default-small .jstree-node {
561
+ min-height: 18px;
562
+ line-height: 18px;
563
+ margin-left: 18px;
564
+ min-width: 18px;
565
+ }
566
+ .jstree-default-small .jstree-anchor {
567
+ line-height: 18px;
568
+ height: 18px;
569
+ }
570
+ .jstree-default-small .jstree-icon {
571
+ width: 18px;
572
+ height: 18px;
573
+ line-height: 18px;
574
+ }
575
+ .jstree-default-small .jstree-icon:empty {
576
+ width: 18px;
577
+ height: 18px;
578
+ line-height: 18px;
579
+ }
580
+ .jstree-default-small.jstree-rtl .jstree-node {
581
+ margin-right: 18px;
582
+ }
583
+ .jstree-default-small .jstree-wholerow {
584
+ height: 18px;
585
+ }
586
+ .jstree-default-small .jstree-node,
587
+ .jstree-default-small .jstree-icon {
588
+ background-image: url("32px.png");
589
+ }
590
+ .jstree-default-small .jstree-node {
591
+ background-position: -295px -7px;
592
+ background-repeat: repeat-y;
593
+ }
594
+ .jstree-default-small .jstree-last {
595
+ background: transparent;
596
+ }
597
+ .jstree-default-small .jstree-open > .jstree-ocl {
598
+ background-position: -135px -7px;
599
+ }
600
+ .jstree-default-small .jstree-closed > .jstree-ocl {
601
+ background-position: -103px -7px;
602
+ }
603
+ .jstree-default-small .jstree-leaf > .jstree-ocl {
604
+ background-position: -71px -7px;
605
+ }
606
+ .jstree-default-small .jstree-themeicon {
607
+ background-position: -263px -7px;
608
+ }
609
+ .jstree-default-small > .jstree-no-dots .jstree-node,
610
+ .jstree-default-small > .jstree-no-dots .jstree-leaf > .jstree-ocl {
611
+ background: transparent;
612
+ }
613
+ .jstree-default-small > .jstree-no-dots .jstree-open > .jstree-ocl {
614
+ background-position: -39px -7px;
615
+ }
616
+ .jstree-default-small > .jstree-no-dots .jstree-closed > .jstree-ocl {
617
+ background-position: -7px -7px;
618
+ }
619
+ .jstree-default-small .jstree-disabled {
620
+ background: transparent;
621
+ }
622
+ .jstree-default-small .jstree-disabled.jstree-hovered {
623
+ background: transparent;
624
+ }
625
+ .jstree-default-small .jstree-disabled.jstree-clicked {
626
+ background: #efefef;
627
+ }
628
+ .jstree-default-small .jstree-checkbox {
629
+ background-position: -167px -7px;
630
+ }
631
+ .jstree-default-small .jstree-checkbox:hover {
632
+ background-position: -167px -39px;
633
+ }
634
+ .jstree-default-small.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox,
635
+ .jstree-default-small .jstree-checked > .jstree-checkbox {
636
+ background-position: -231px -7px;
637
+ }
638
+ .jstree-default-small.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover,
639
+ .jstree-default-small .jstree-checked > .jstree-checkbox:hover {
640
+ background-position: -231px -39px;
641
+ }
642
+ .jstree-default-small .jstree-anchor > .jstree-undetermined {
643
+ background-position: -199px -7px;
644
+ }
645
+ .jstree-default-small .jstree-anchor > .jstree-undetermined:hover {
646
+ background-position: -199px -39px;
647
+ }
648
+ .jstree-default-small .jstree-checkbox-disabled {
649
+ opacity: 0.8;
650
+ filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'jstree-grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#jstree-grayscale");
651
+ /* Firefox 10+ */
652
+ filter: gray;
653
+ /* IE6-9 */
654
+ -webkit-filter: grayscale(100%);
655
+ /* Chrome 19+ & Safari 6+ */
656
+ }
657
+ .jstree-default-small > .jstree-striped {
658
+ background-size: auto 36px;
659
+ }
660
+ .jstree-default-small.jstree-rtl .jstree-node {
661
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");
662
+ background-position: 100% 1px;
663
+ background-repeat: repeat-y;
664
+ }
665
+ .jstree-default-small.jstree-rtl .jstree-last {
666
+ background: transparent;
667
+ }
668
+ .jstree-default-small.jstree-rtl .jstree-open > .jstree-ocl {
669
+ background-position: -135px -39px;
670
+ }
671
+ .jstree-default-small.jstree-rtl .jstree-closed > .jstree-ocl {
672
+ background-position: -103px -39px;
673
+ }
674
+ .jstree-default-small.jstree-rtl .jstree-leaf > .jstree-ocl {
675
+ background-position: -71px -39px;
676
+ }
677
+ .jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-node,
678
+ .jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl {
679
+ background: transparent;
680
+ }
681
+ .jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl {
682
+ background-position: -39px -39px;
683
+ }
684
+ .jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl {
685
+ background-position: -7px -39px;
686
+ }
687
+ .jstree-default-small .jstree-themeicon-custom {
688
+ background-color: transparent;
689
+ background-image: none;
690
+ background-position: 0 0;
691
+ }
692
+ .jstree-default-small > .jstree-container-ul .jstree-loading > .jstree-ocl {
693
+ background: url("throbber.gif") center center no-repeat;
694
+ }
695
+ .jstree-default-small .jstree-file {
696
+ background: url("32px.png") -103px -71px no-repeat;
697
+ }
698
+ .jstree-default-small .jstree-folder {
699
+ background: url("32px.png") -263px -7px no-repeat;
700
+ }
701
+ .jstree-default-small > .jstree-container-ul > .jstree-node {
702
+ margin-left: 0;
703
+ margin-right: 0;
704
+ }
705
+ #jstree-dnd.jstree-default-small {
706
+ line-height: 18px;
707
+ padding: 0 4px;
708
+ }
709
+ #jstree-dnd.jstree-default-small .jstree-ok,
710
+ #jstree-dnd.jstree-default-small .jstree-er {
711
+ background-image: url("32px.png");
712
+ background-repeat: no-repeat;
713
+ background-color: transparent;
714
+ }
715
+ #jstree-dnd.jstree-default-small i {
716
+ background: transparent;
717
+ width: 18px;
718
+ height: 18px;
719
+ line-height: 18px;
720
+ }
721
+ #jstree-dnd.jstree-default-small .jstree-ok {
722
+ background-position: -7px -71px;
723
+ }
724
+ #jstree-dnd.jstree-default-small .jstree-er {
725
+ background-position: -39px -71px;
726
+ }
727
+ .jstree-default-small .jstree-ellipsis {
728
+ overflow: hidden;
729
+ }
730
+ .jstree-default-small .jstree-ellipsis .jstree-anchor {
731
+ width: calc(100% - 23px);
732
+ text-overflow: ellipsis;
733
+ overflow: hidden;
734
+ }
735
+ .jstree-default-small .jstree-ellipsis.jstree-no-icons .jstree-anchor {
736
+ width: calc(100% - 5px);
737
+ }
738
+ .jstree-default-small.jstree-rtl .jstree-node {
739
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAACAQMAAABv1h6PAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMHBgAAiABBI4gz9AAAAABJRU5ErkJggg==");
740
+ }
741
+ .jstree-default-small.jstree-rtl .jstree-last {
742
+ background: transparent;
743
+ }
744
+ .jstree-default-large .jstree-node {
745
+ min-height: 32px;
746
+ line-height: 32px;
747
+ margin-left: 32px;
748
+ min-width: 32px;
749
+ }
750
+ .jstree-default-large .jstree-anchor {
751
+ line-height: 32px;
752
+ height: 32px;
753
+ }
754
+ .jstree-default-large .jstree-icon {
755
+ width: 32px;
756
+ height: 32px;
757
+ line-height: 32px;
758
+ }
759
+ .jstree-default-large .jstree-icon:empty {
760
+ width: 32px;
761
+ height: 32px;
762
+ line-height: 32px;
763
+ }
764
+ .jstree-default-large.jstree-rtl .jstree-node {
765
+ margin-right: 32px;
766
+ }
767
+ .jstree-default-large .jstree-wholerow {
768
+ height: 32px;
769
+ }
770
+ .jstree-default-large .jstree-node,
771
+ .jstree-default-large .jstree-icon {
772
+ background-image: url("32px.png");
773
+ }
774
+ .jstree-default-large .jstree-node {
775
+ background-position: -288px 0px;
776
+ background-repeat: repeat-y;
777
+ }
778
+ .jstree-default-large .jstree-last {
779
+ background: transparent;
780
+ }
781
+ .jstree-default-large .jstree-open > .jstree-ocl {
782
+ background-position: -128px 0px;
783
+ }
784
+ .jstree-default-large .jstree-closed > .jstree-ocl {
785
+ background-position: -96px 0px;
786
+ }
787
+ .jstree-default-large .jstree-leaf > .jstree-ocl {
788
+ background-position: -64px 0px;
789
+ }
790
+ .jstree-default-large .jstree-themeicon {
791
+ background-position: -256px 0px;
792
+ }
793
+ .jstree-default-large > .jstree-no-dots .jstree-node,
794
+ .jstree-default-large > .jstree-no-dots .jstree-leaf > .jstree-ocl {
795
+ background: transparent;
796
+ }
797
+ .jstree-default-large > .jstree-no-dots .jstree-open > .jstree-ocl {
798
+ background-position: -32px 0px;
799
+ }
800
+ .jstree-default-large > .jstree-no-dots .jstree-closed > .jstree-ocl {
801
+ background-position: 0px 0px;
802
+ }
803
+ .jstree-default-large .jstree-disabled {
804
+ background: transparent;
805
+ }
806
+ .jstree-default-large .jstree-disabled.jstree-hovered {
807
+ background: transparent;
808
+ }
809
+ .jstree-default-large .jstree-disabled.jstree-clicked {
810
+ background: #efefef;
811
+ }
812
+ .jstree-default-large .jstree-checkbox {
813
+ background-position: -160px 0px;
814
+ }
815
+ .jstree-default-large .jstree-checkbox:hover {
816
+ background-position: -160px -32px;
817
+ }
818
+ .jstree-default-large.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox,
819
+ .jstree-default-large .jstree-checked > .jstree-checkbox {
820
+ background-position: -224px 0px;
821
+ }
822
+ .jstree-default-large.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover,
823
+ .jstree-default-large .jstree-checked > .jstree-checkbox:hover {
824
+ background-position: -224px -32px;
825
+ }
826
+ .jstree-default-large .jstree-anchor > .jstree-undetermined {
827
+ background-position: -192px 0px;
828
+ }
829
+ .jstree-default-large .jstree-anchor > .jstree-undetermined:hover {
830
+ background-position: -192px -32px;
831
+ }
832
+ .jstree-default-large .jstree-checkbox-disabled {
833
+ opacity: 0.8;
834
+ filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'jstree-grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#jstree-grayscale");
835
+ /* Firefox 10+ */
836
+ filter: gray;
837
+ /* IE6-9 */
838
+ -webkit-filter: grayscale(100%);
839
+ /* Chrome 19+ & Safari 6+ */
840
+ }
841
+ .jstree-default-large > .jstree-striped {
842
+ background-size: auto 64px;
843
+ }
844
+ .jstree-default-large.jstree-rtl .jstree-node {
845
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");
846
+ background-position: 100% 1px;
847
+ background-repeat: repeat-y;
848
+ }
849
+ .jstree-default-large.jstree-rtl .jstree-last {
850
+ background: transparent;
851
+ }
852
+ .jstree-default-large.jstree-rtl .jstree-open > .jstree-ocl {
853
+ background-position: -128px -32px;
854
+ }
855
+ .jstree-default-large.jstree-rtl .jstree-closed > .jstree-ocl {
856
+ background-position: -96px -32px;
857
+ }
858
+ .jstree-default-large.jstree-rtl .jstree-leaf > .jstree-ocl {
859
+ background-position: -64px -32px;
860
+ }
861
+ .jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-node,
862
+ .jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl {
863
+ background: transparent;
864
+ }
865
+ .jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl {
866
+ background-position: -32px -32px;
867
+ }
868
+ .jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl {
869
+ background-position: 0px -32px;
870
+ }
871
+ .jstree-default-large .jstree-themeicon-custom {
872
+ background-color: transparent;
873
+ background-image: none;
874
+ background-position: 0 0;
875
+ }
876
+ .jstree-default-large > .jstree-container-ul .jstree-loading > .jstree-ocl {
877
+ background: url("throbber.gif") center center no-repeat;
878
+ }
879
+ .jstree-default-large .jstree-file {
880
+ background: url("32px.png") -96px -64px no-repeat;
881
+ }
882
+ .jstree-default-large .jstree-folder {
883
+ background: url("32px.png") -256px 0px no-repeat;
884
+ }
885
+ .jstree-default-large > .jstree-container-ul > .jstree-node {
886
+ margin-left: 0;
887
+ margin-right: 0;
888
+ }
889
+ #jstree-dnd.jstree-default-large {
890
+ line-height: 32px;
891
+ padding: 0 4px;
892
+ }
893
+ #jstree-dnd.jstree-default-large .jstree-ok,
894
+ #jstree-dnd.jstree-default-large .jstree-er {
895
+ background-image: url("32px.png");
896
+ background-repeat: no-repeat;
897
+ background-color: transparent;
898
+ }
899
+ #jstree-dnd.jstree-default-large i {
900
+ background: transparent;
901
+ width: 32px;
902
+ height: 32px;
903
+ line-height: 32px;
904
+ }
905
+ #jstree-dnd.jstree-default-large .jstree-ok {
906
+ background-position: 0px -64px;
907
+ }
908
+ #jstree-dnd.jstree-default-large .jstree-er {
909
+ background-position: -32px -64px;
910
+ }
911
+ .jstree-default-large .jstree-ellipsis {
912
+ overflow: hidden;
913
+ }
914
+ .jstree-default-large .jstree-ellipsis .jstree-anchor {
915
+ width: calc(100% - 37px);
916
+ text-overflow: ellipsis;
917
+ overflow: hidden;
918
+ }
919
+ .jstree-default-large .jstree-ellipsis.jstree-no-icons .jstree-anchor {
920
+ width: calc(100% - 5px);
921
+ }
922
+ .jstree-default-large.jstree-rtl .jstree-node {
923
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAACAQMAAAAD0EyKAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjgIIGBgABCgCBvVLXcAAAAABJRU5ErkJggg==");
924
+ }
925
+ .jstree-default-large.jstree-rtl .jstree-last {
926
+ background: transparent;
927
+ }
928
+ @media (max-width: 768px) {
929
+ #jstree-dnd.jstree-dnd-responsive {
930
+ line-height: 40px;
931
+ font-weight: bold;
932
+ font-size: 1.1em;
933
+ text-shadow: 1px 1px white;
934
+ }
935
+ #jstree-dnd.jstree-dnd-responsive > i {
936
+ background: transparent;
937
+ width: 40px;
938
+ height: 40px;
939
+ }
940
+ #jstree-dnd.jstree-dnd-responsive > .jstree-ok {
941
+ background-image: url("40px.png");
942
+ background-position: 0 -200px;
943
+ background-size: 120px 240px;
944
+ }
945
+ #jstree-dnd.jstree-dnd-responsive > .jstree-er {
946
+ background-image: url("40px.png");
947
+ background-position: -40px -200px;
948
+ background-size: 120px 240px;
949
+ }
950
+ #jstree-marker.jstree-dnd-responsive {
951
+ border-left-width: 10px;
952
+ border-top-width: 10px;
953
+ border-bottom-width: 10px;
954
+ margin-top: -10px;
955
+ }
956
+ }
957
+ @media (max-width: 768px) {
958
+ .jstree-default-responsive {
959
+ /*
960
+ .jstree-open > .jstree-ocl,
961
+ .jstree-closed > .jstree-ocl { border-radius:20px; background-color:white; }
962
+ */
963
+ }
964
+ .jstree-default-responsive .jstree-icon {
965
+ background-image: url("40px.png");
966
+ }
967
+ .jstree-default-responsive .jstree-node,
968
+ .jstree-default-responsive .jstree-leaf > .jstree-ocl {
969
+ background: transparent;
970
+ }
971
+ .jstree-default-responsive .jstree-node {
972
+ min-height: 40px;
973
+ line-height: 40px;
974
+ margin-left: 40px;
975
+ min-width: 40px;
976
+ white-space: nowrap;
977
+ }
978
+ .jstree-default-responsive .jstree-anchor {
979
+ line-height: 40px;
980
+ height: 40px;
981
+ }
982
+ .jstree-default-responsive .jstree-icon,
983
+ .jstree-default-responsive .jstree-icon:empty {
984
+ width: 40px;
985
+ height: 40px;
986
+ line-height: 40px;
987
+ }
988
+ .jstree-default-responsive > .jstree-container-ul > .jstree-node {
989
+ margin-left: 0;
990
+ }
991
+ .jstree-default-responsive.jstree-rtl .jstree-node {
992
+ margin-left: 0;
993
+ margin-right: 40px;
994
+ background: transparent;
995
+ }
996
+ .jstree-default-responsive.jstree-rtl .jstree-container-ul > .jstree-node {
997
+ margin-right: 0;
998
+ }
999
+ .jstree-default-responsive .jstree-ocl,
1000
+ .jstree-default-responsive .jstree-themeicon,
1001
+ .jstree-default-responsive .jstree-checkbox {
1002
+ background-size: 120px 240px;
1003
+ }
1004
+ .jstree-default-responsive .jstree-leaf > .jstree-ocl,
1005
+ .jstree-default-responsive.jstree-rtl .jstree-leaf > .jstree-ocl {
1006
+ background: transparent;
1007
+ }
1008
+ .jstree-default-responsive .jstree-open > .jstree-ocl {
1009
+ background-position: 0 0px !important;
1010
+ }
1011
+ .jstree-default-responsive .jstree-closed > .jstree-ocl {
1012
+ background-position: 0 -40px !important;
1013
+ }
1014
+ .jstree-default-responsive.jstree-rtl .jstree-closed > .jstree-ocl {
1015
+ background-position: -40px 0px !important;
1016
+ }
1017
+ .jstree-default-responsive .jstree-themeicon {
1018
+ background-position: -40px -40px;
1019
+ }
1020
+ .jstree-default-responsive .jstree-checkbox,
1021
+ .jstree-default-responsive .jstree-checkbox:hover {
1022
+ background-position: -40px -80px;
1023
+ }
1024
+ .jstree-default-responsive.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox,
1025
+ .jstree-default-responsive.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover,
1026
+ .jstree-default-responsive .jstree-checked > .jstree-checkbox,
1027
+ .jstree-default-responsive .jstree-checked > .jstree-checkbox:hover {
1028
+ background-position: 0 -80px;
1029
+ }
1030
+ .jstree-default-responsive .jstree-anchor > .jstree-undetermined,
1031
+ .jstree-default-responsive .jstree-anchor > .jstree-undetermined:hover {
1032
+ background-position: 0 -120px;
1033
+ }
1034
+ .jstree-default-responsive .jstree-anchor {
1035
+ font-weight: bold;
1036
+ font-size: 1.1em;
1037
+ text-shadow: 1px 1px white;
1038
+ }
1039
+ .jstree-default-responsive > .jstree-striped {
1040
+ background: transparent;
1041
+ }
1042
+ .jstree-default-responsive .jstree-wholerow {
1043
+ border-top: 1px solid rgba(255, 255, 255, 0.7);
1044
+ border-bottom: 1px solid rgba(64, 64, 64, 0.2);
1045
+ background: #ebebeb;
1046
+ height: 40px;
1047
+ }
1048
+ .jstree-default-responsive .jstree-wholerow-hovered {
1049
+ background: #e7f4f9;
1050
+ }
1051
+ .jstree-default-responsive .jstree-wholerow-clicked {
1052
+ background: #beebff;
1053
+ }
1054
+ .jstree-default-responsive .jstree-children .jstree-last > .jstree-wholerow {
1055
+ box-shadow: inset 0 -6px 3px -5px #666666;
1056
+ }
1057
+ .jstree-default-responsive .jstree-children .jstree-open > .jstree-wholerow {
1058
+ box-shadow: inset 0 6px 3px -5px #666666;
1059
+ border-top: 0;
1060
+ }
1061
+ .jstree-default-responsive .jstree-children .jstree-open + .jstree-open {
1062
+ box-shadow: none;
1063
+ }
1064
+ .jstree-default-responsive .jstree-node,
1065
+ .jstree-default-responsive .jstree-icon,
1066
+ .jstree-default-responsive .jstree-node > .jstree-ocl,
1067
+ .jstree-default-responsive .jstree-themeicon,
1068
+ .jstree-default-responsive .jstree-checkbox {
1069
+ background-image: url("40px.png");
1070
+ background-size: 120px 240px;
1071
+ }
1072
+ .jstree-default-responsive .jstree-node {
1073
+ background-position: -80px 0;
1074
+ background-repeat: repeat-y;
1075
+ }
1076
+ .jstree-default-responsive .jstree-last {
1077
+ background: transparent;
1078
+ }
1079
+ .jstree-default-responsive .jstree-leaf > .jstree-ocl {
1080
+ background-position: -40px -120px;
1081
+ }
1082
+ .jstree-default-responsive .jstree-last > .jstree-ocl {
1083
+ background-position: -40px -160px;
1084
+ }
1085
+ .jstree-default-responsive .jstree-themeicon-custom {
1086
+ background-color: transparent;
1087
+ background-image: none;
1088
+ background-position: 0 0;
1089
+ }
1090
+ .jstree-default-responsive .jstree-file {
1091
+ background: url("40px.png") 0 -160px no-repeat;
1092
+ background-size: 120px 240px;
1093
+ }
1094
+ .jstree-default-responsive .jstree-folder {
1095
+ background: url("40px.png") -40px -40px no-repeat;
1096
+ background-size: 120px 240px;
1097
+ }
1098
+ .jstree-default-responsive > .jstree-container-ul > .jstree-node {
1099
+ margin-left: 0;
1100
+ margin-right: 0;
1101
+ }
1102
+ }
includes/jstree/themes/default/style.min.css ADDED
@@ -0,0 +1 @@
 
1
+ .jstree-node,.jstree-children,.jstree-container-ul{display:block;margin:0;padding:0;list-style-type:none;list-style-image:none}.jstree-node{white-space:nowrap}.jstree-anchor{display:inline-block;color:#000;white-space:nowrap;padding:0 4px 0 1px;margin:0;vertical-align:top}.jstree-anchor:focus{outline:0}.jstree-anchor,.jstree-anchor:link,.jstree-anchor:visited,.jstree-anchor:hover,.jstree-anchor:active{text-decoration:none;color:inherit}.jstree-icon{display:inline-block;text-decoration:none;margin:0;padding:0;vertical-align:top;text-align:center}.jstree-icon:empty{display:inline-block;text-decoration:none;margin:0;padding:0;vertical-align:top;text-align:center}.jstree-ocl{cursor:pointer}.jstree-leaf>.jstree-ocl{cursor:default}.jstree .jstree-open>.jstree-children{display:block}.jstree .jstree-closed>.jstree-children,.jstree .jstree-leaf>.jstree-children{display:none}.jstree-anchor>.jstree-themeicon{margin-right:2px}.jstree-no-icons .jstree-themeicon,.jstree-anchor>.jstree-themeicon-hidden{display:none}.jstree-hidden,.jstree-node.jstree-hidden{display:none}.jstree-rtl .jstree-anchor{padding:0 1px 0 4px}.jstree-rtl .jstree-anchor>.jstree-themeicon{margin-left:2px;margin-right:0}.jstree-rtl .jstree-node{margin-left:0}.jstree-rtl .jstree-container-ul>.jstree-node{margin-right:0}.jstree-wholerow-ul{position:relative;display:inline-block;min-width:100%}.jstree-wholerow-ul .jstree-leaf>.jstree-ocl{cursor:pointer}.jstree-wholerow-ul .jstree-anchor,.jstree-wholerow-ul .jstree-icon{position:relative}.jstree-wholerow-ul .jstree-wholerow{width:100%;cursor:pointer;position:absolute;left:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vakata-context{display:none}.vakata-context,.vakata-context ul{margin:0;padding:2px;position:absolute;background:#f5f5f5;border:1px solid #979797;box-shadow:2px 2px 2px #999}.vakata-context ul{list-style:none;left:100%;margin-top:-2.7em;margin-left:-4px}.vakata-context .vakata-context-right ul{left:auto;right:100%;margin-left:auto;margin-right:-4px}.vakata-context li{list-style:none}.vakata-context li>a{display:block;padding:0 2em;text-decoration:none;width:auto;color:#000;white-space:nowrap;line-height:2.4em;text-shadow:1px 1px 0 #fff;border-radius:1px}.vakata-context li>a:hover{position:relative;background-color:#e8eff7;box-shadow:0 0 2px #0a6aa1}.vakata-context li>a.vakata-context-parent{background-image:url(data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAIORI4JlrqN1oMSnmmZDQUAOw==);background-position:right center;background-repeat:no-repeat}.vakata-context li>a:focus{outline:0}.vakata-context .vakata-context-hover>a{position:relative;background-color:#e8eff7;box-shadow:0 0 2px #0a6aa1}.vakata-context .vakata-context-separator>a,.vakata-context .vakata-context-separator>a:hover{background:#fff;border:0;border-top:1px solid #e2e3e3;height:1px;min-height:1px;max-height:1px;padding:0;margin:0 0 0 2.4em;border-left:1px solid #e0e0e0;text-shadow:0 0 0 transparent;box-shadow:0 0 0 transparent;border-radius:0}.vakata-context .vakata-contextmenu-disabled a,.vakata-context .vakata-contextmenu-disabled a:hover{color:silver;background-color:transparent;border:0;box-shadow:0 0 0}.vakata-context li>a>i{text-decoration:none;display:inline-block;width:2.4em;height:2.4em;background:0 0;margin:0 0 0 -2em;vertical-align:top;text-align:center;line-height:2.4em}.vakata-context li>a>i:empty{width:2.4em;line-height:2.4em}.vakata-context li>a .vakata-contextmenu-sep{display:inline-block;width:1px;height:2.4em;background:#fff;margin:0 .5em 0 0;border-left:1px solid #e2e3e3}.vakata-context .vakata-contextmenu-shortcut{font-size:.8em;color:silver;opacity:.5;display:none}.vakata-context-rtl ul{left:auto;right:100%;margin-left:auto;margin-right:-4px}.vakata-context-rtl li>a.vakata-context-parent{background-image:url(data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAINjI+AC7rWHIsPtmoxLAA7);background-position:left center;background-repeat:no-repeat}.vakata-context-rtl .vakata-context-separator>a{margin:0 2.4em 0 0;border-left:0;border-right:1px solid #e2e3e3}.vakata-context-rtl .vakata-context-left ul{right:auto;left:100%;margin-left:-4px;margin-right:auto}.vakata-context-rtl li>a>i{margin:0 -2em 0 0}.vakata-context-rtl li>a .vakata-contextmenu-sep{margin:0 0 0 .5em;border-left-color:#fff;background:#e2e3e3}#jstree-marker{position:absolute;top:0;left:0;margin:-5px 0 0 0;padding:0;border-right:0;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid;width:0;height:0;font-size:0;line-height:0}#jstree-dnd{line-height:16px;margin:0;padding:4px}#jstree-dnd .jstree-icon,#jstree-dnd .jstree-copy{display:inline-block;text-decoration:none;margin:0 2px 0 0;padding:0;width:16px;height:16px}#jstree-dnd .jstree-ok{background:green}#jstree-dnd .jstree-er{background:red}#jstree-dnd .jstree-copy{margin:0 2px}.jstree-default .jstree-node,.jstree-default .jstree-icon{background-repeat:no-repeat;background-color:transparent}.jstree-default .jstree-anchor,.jstree-default .jstree-animated,.jstree-default .jstree-wholerow{transition:background-color .15s,box-shadow .15s}.jstree-default .jstree-hovered{background:#e7f4f9;border-radius:2px;box-shadow:inset 0 0 1px #ccc}.jstree-default .jstree-context{background:#e7f4f9;border-radius:2px;box-shadow:inset 0 0 1px #ccc}.jstree-default .jstree-clicked{background:#beebff;border-radius:2px;box-shadow:inset 0 0 1px #999}.jstree-default .jstree-no-icons .jstree-anchor>.jstree-themeicon{display:none}.jstree-default .jstree-disabled{background:0 0;color:#666}.jstree-default .jstree-disabled.jstree-hovered{background:0 0;box-shadow:none}.jstree-default .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default .jstree-disabled>.jstree-icon{opacity:.8;filter:url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'jstree-grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default .jstree-search{font-style:italic;color:#8b0000;font-weight:700}.jstree-default .jstree-no-checkboxes .jstree-checkbox{display:none!important}.jstree-default.jstree-checkbox-no-clicked .jstree-clicked{background:0 0;box-shadow:none}.jstree-default.jstree-checkbox-no-clicked .jstree-clicked.jstree-hovered{background:#e7f4f9}.jstree-default.jstree-checkbox-no-clicked>.jstree-wholerow-ul .jstree-wholerow-clicked{background:0 0}.jstree-default.jstree-checkbox-no-clicked>.jstree-wholerow-ul .jstree-wholerow-clicked.jstree-wholerow-hovered{background:#e7f4f9}.jstree-default>.jstree-striped{min-width:100%;display:inline-block;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAMAAAB/qqA+AAAABlBMVEUAAAAAAAClZ7nPAAAAAnRSTlMNAMM9s3UAAAAXSURBVHjajcEBAQAAAIKg/H/aCQZ70AUBjAATb6YPDgAAAABJRU5ErkJggg==) left top repeat}.jstree-default>.jstree-wholerow-ul .jstree-hovered,.jstree-default>.jstree-wholerow-ul .jstree-clicked{background:0 0;box-shadow:none;border-radius:0}.jstree-default .jstree-wholerow{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.jstree-default .jstree-wholerow-hovered{background:#e7f4f9}.jstree-default .jstree-wholerow-clicked{background:#beebff;background:-webkit-linear-gradient(top,#beebff 0,#a8e4ff 100%);background:linear-gradient(to bottom,#beebff 0,#a8e4ff 100%)}.jstree-default .jstree-node{min-height:24px;line-height:24px;margin-left:24px;min-width:24px}.jstree-default .jstree-anchor{line-height:24px;height:24px}.jstree-default .jstree-icon{width:24px;height:24px;line-height:24px}.jstree-default .jstree-icon:empty{width:24px;height:24px;line-height:24px}.jstree-default.jstree-rtl .jstree-node{margin-right:24px}.jstree-default .jstree-wholerow{height:24px}.jstree-default .jstree-node,.jstree-default .jstree-icon{background-image:url(32px.png)}.jstree-default .jstree-node{background-position:-292px -4px;background-repeat:repeat-y}.jstree-default .jstree-last{background:0 0}.jstree-default .jstree-open>.jstree-ocl{background-position:-132px -4px}.jstree-default .jstree-closed>.jstree-ocl{background-position:-100px -4px}.jstree-default .jstree-leaf>.jstree-ocl{background-position:-68px -4px}.jstree-default .jstree-themeicon{background-position:-260px -4px}.jstree-default>.jstree-no-dots .jstree-node,.jstree-default>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-36px -4px}.jstree-default>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-4px -4px}.jstree-default .jstree-disabled{background:0 0}.jstree-default .jstree-disabled.jstree-hovered{background:0 0}.jstree-default .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default .jstree-checkbox{background-position:-164px -4px}.jstree-default .jstree-checkbox:hover{background-position:-164px -36px}.jstree-default.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default .jstree-checked>.jstree-checkbox{background-position:-228px -4px}.jstree-default.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default .jstree-checked>.jstree-checkbox:hover{background-position:-228px -36px}.jstree-default .jstree-anchor>.jstree-undetermined{background-position:-196px -4px}.jstree-default .jstree-anchor>.jstree-undetermined:hover{background-position:-196px -36px}.jstree-default .jstree-checkbox-disabled{opacity:.8;filter:url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'jstree-grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default>.jstree-striped{background-size:auto 48px}.jstree-default.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==);background-position:100% 1px;background-repeat:repeat-y}.jstree-default.jstree-rtl .jstree-last{background:0 0}.jstree-default.jstree-rtl .jstree-open>.jstree-ocl{background-position:-132px -36px}.jstree-default.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-100px -36px}.jstree-default.jstree-rtl .jstree-leaf>.jstree-ocl{background-position:-68px -36px}.jstree-default.jstree-rtl>.jstree-no-dots .jstree-node,.jstree-default.jstree-rtl>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default.jstree-rtl>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-36px -36px}.jstree-default.jstree-rtl>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-4px -36px}.jstree-default .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default>.jstree-container-ul .jstree-loading>.jstree-ocl{background:url(throbber.gif) center center no-repeat}.jstree-default .jstree-file{background:url(32px.png) -100px -68px no-repeat}.jstree-default .jstree-folder{background:url(32px.png) -260px -4px no-repeat}.jstree-default>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}#jstree-dnd.jstree-default{line-height:24px;padding:0 4px}#jstree-dnd.jstree-default .jstree-ok,#jstree-dnd.jstree-default .jstree-er{background-image:url(32px.png);background-repeat:no-repeat;background-color:transparent}#jstree-dnd.jstree-default i{background:0 0;width:24px;height:24px;line-height:24px}#jstree-dnd.jstree-default .jstree-ok{background-position:-4px -68px}#jstree-dnd.jstree-default .jstree-er{background-position:-36px -68px}.jstree-default .jstree-ellipsis{overflow:hidden}.jstree-default .jstree-ellipsis .jstree-anchor{width:calc(100% - 29px);text-overflow:ellipsis;overflow:hidden}.jstree-default .jstree-ellipsis.jstree-no-icons .jstree-anchor{width:calc(100% - 5px)}.jstree-default.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==)}.jstree-default.jstree-rtl .jstree-last{background:0 0}.jstree-default-small .jstree-node{min-height:18px;line-height:18px;margin-left:18px;min-width:18px}.jstree-default-small .jstree-anchor{line-height:18px;height:18px}.jstree-default-small .jstree-icon{width:18px;height:18px;line-height:18px}.jstree-default-small .jstree-icon:empty{width:18px;height:18px;line-height:18px}.jstree-default-small.jstree-rtl .jstree-node{margin-right:18px}.jstree-default-small .jstree-wholerow{height:18px}.jstree-default-small .jstree-node,.jstree-default-small .jstree-icon{background-image:url(32px.png)}.jstree-default-small .jstree-node{background-position:-295px -7px;background-repeat:repeat-y}.jstree-default-small .jstree-last{background:0 0}.jstree-default-small .jstree-open>.jstree-ocl{background-position:-135px -7px}.jstree-default-small .jstree-closed>.jstree-ocl{background-position:-103px -7px}.jstree-default-small .jstree-leaf>.jstree-ocl{background-position:-71px -7px}.jstree-default-small .jstree-themeicon{background-position:-263px -7px}.jstree-default-small>.jstree-no-dots .jstree-node,.jstree-default-small>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-small>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-39px -7px}.jstree-default-small>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-7px -7px}.jstree-default-small .jstree-disabled{background:0 0}.jstree-default-small .jstree-disabled.jstree-hovered{background:0 0}.jstree-default-small .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default-small .jstree-checkbox{background-position:-167px -7px}.jstree-default-small .jstree-checkbox:hover{background-position:-167px -39px}.jstree-default-small.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default-small .jstree-checked>.jstree-checkbox{background-position:-231px -7px}.jstree-default-small.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default-small .jstree-checked>.jstree-checkbox:hover{background-position:-231px -39px}.jstree-default-small .jstree-anchor>.jstree-undetermined{background-position:-199px -7px}.jstree-default-small .jstree-anchor>.jstree-undetermined:hover{background-position:-199px -39px}.jstree-default-small .jstree-checkbox-disabled{opacity:.8;filter:url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'jstree-grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default-small>.jstree-striped{background-size:auto 36px}.jstree-default-small.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==);background-position:100% 1px;background-repeat:repeat-y}.jstree-default-small.jstree-rtl .jstree-last{background:0 0}.jstree-default-small.jstree-rtl .jstree-open>.jstree-ocl{background-position:-135px -39px}.jstree-default-small.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-103px -39px}.jstree-default-small.jstree-rtl .jstree-leaf>.jstree-ocl{background-position:-71px -39px}.jstree-default-small.jstree-rtl>.jstree-no-dots .jstree-node,.jstree-default-small.jstree-rtl>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-small.jstree-rtl>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-39px -39px}.jstree-default-small.jstree-rtl>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-7px -39px}.jstree-default-small .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-small>.jstree-container-ul .jstree-loading>.jstree-ocl{background:url(throbber.gif) center center no-repeat}.jstree-default-small .jstree-file{background:url(32px.png) -103px -71px no-repeat}.jstree-default-small .jstree-folder{background:url(32px.png) -263px -7px no-repeat}.jstree-default-small>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}#jstree-dnd.jstree-default-small{line-height:18px;padding:0 4px}#jstree-dnd.jstree-default-small .jstree-ok,#jstree-dnd.jstree-default-small .jstree-er{background-image:url(32px.png);background-repeat:no-repeat;background-color:transparent}#jstree-dnd.jstree-default-small i{background:0 0;width:18px;height:18px;line-height:18px}#jstree-dnd.jstree-default-small .jstree-ok{background-position:-7px -71px}#jstree-dnd.jstree-default-small .jstree-er{background-position:-39px -71px}.jstree-default-small .jstree-ellipsis{overflow:hidden}.jstree-default-small .jstree-ellipsis .jstree-anchor{width:calc(100% - 23px);text-overflow:ellipsis;overflow:hidden}.jstree-default-small .jstree-ellipsis.jstree-no-icons .jstree-anchor{width:calc(100% - 5px)}.jstree-default-small.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAACAQMAAABv1h6PAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMHBgAAiABBI4gz9AAAAABJRU5ErkJggg==)}.jstree-default-small.jstree-rtl .jstree-last{background:0 0}.jstree-default-large .jstree-node{min-height:32px;line-height:32px;margin-left:32px;min-width:32px}.jstree-default-large .jstree-anchor{line-height:32px;height:32px}.jstree-default-large .jstree-icon{width:32px;height:32px;line-height:32px}.jstree-default-large .jstree-icon:empty{width:32px;height:32px;line-height:32px}.jstree-default-large.jstree-rtl .jstree-node{margin-right:32px}.jstree-default-large .jstree-wholerow{height:32px}.jstree-default-large .jstree-node,.jstree-default-large .jstree-icon{background-image:url(32px.png)}.jstree-default-large .jstree-node{background-position:-288px 0;background-repeat:repeat-y}.jstree-default-large .jstree-last{background:0 0}.jstree-default-large .jstree-open>.jstree-ocl{background-position:-128px 0}.jstree-default-large .jstree-closed>.jstree-ocl{background-position:-96px 0}.jstree-default-large .jstree-leaf>.jstree-ocl{background-position:-64px 0}.jstree-default-large .jstree-themeicon{background-position:-256px 0}.jstree-default-large>.jstree-no-dots .jstree-node,.jstree-default-large>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-large>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-32px 0}.jstree-default-large>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:0 0}.jstree-default-large .jstree-disabled{background:0 0}.jstree-default-large .jstree-disabled.jstree-hovered{background:0 0}.jstree-default-large .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default-large .jstree-checkbox{background-position:-160px 0}.jstree-default-large .jstree-checkbox:hover{background-position:-160px -32px}.jstree-default-large.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default-large .jstree-checked>.jstree-checkbox{background-position:-224px 0}.jstree-default-large.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default-large .jstree-checked>.jstree-checkbox:hover{background-position:-224px -32px}.jstree-default-large .jstree-anchor>.jstree-undetermined{background-position:-192px 0}.jstree-default-large .jstree-anchor>.jstree-undetermined:hover{background-position:-192px -32px}.jstree-default-large .jstree-checkbox-disabled{opacity:.8;filter:url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'jstree-grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default-large>.jstree-striped{background-size:auto 64px}.jstree-default-large.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==);background-position:100% 1px;background-repeat:repeat-y}.jstree-default-large.jstree-rtl .jstree-last{background:0 0}.jstree-default-large.jstree-rtl .jstree-open>.jstree-ocl{background-position:-128px -32px}.jstree-default-large.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-96px -32px}.jstree-default-large.jstree-rtl .jstree-leaf>.jstree-ocl{background-position:-64px -32px}.jstree-default-large.jstree-rtl>.jstree-no-dots .jstree-node,.jstree-default-large.jstree-rtl>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-large.jstree-rtl>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-32px -32px}.jstree-default-large.jstree-rtl>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:0 -32px}.jstree-default-large .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-large>.jstree-container-ul .jstree-loading>.jstree-ocl{background:url(throbber.gif) center center no-repeat}.jstree-default-large .jstree-file{background:url(32px.png) -96px -64px no-repeat}.jstree-default-large .jstree-folder{background:url(32px.png) -256px 0 no-repeat}.jstree-default-large>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}#jstree-dnd.jstree-default-large{line-height:32px;padding:0 4px}#jstree-dnd.jstree-default-large .jstree-ok,#jstree-dnd.jstree-default-large .jstree-er{background-image:url(32px.png);background-repeat:no-repeat;background-color:transparent}#jstree-dnd.jstree-default-large i{background:0 0;width:32px;height:32px;line-height:32px}#jstree-dnd.jstree-default-large .jstree-ok{background-position:0 -64px}#jstree-dnd.jstree-default-large .jstree-er{background-position:-32px -64px}.jstree-default-large .jstree-ellipsis{overflow:hidden}.jstree-default-large .jstree-ellipsis .jstree-anchor{width:calc(100% - 37px);text-overflow:ellipsis;overflow:hidden}.jstree-default-large .jstree-ellipsis.jstree-no-icons .jstree-anchor{width:calc(100% - 5px)}.jstree-default-large.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAACAQMAAAAD0EyKAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjgIIGBgABCgCBvVLXcAAAAABJRU5ErkJggg==)}.jstree-default-large.jstree-rtl .jstree-last{background:0 0}@media (max-width:768px){#jstree-dnd.jstree-dnd-responsive{line-height:40px;font-weight:700;font-size:1.1em;text-shadow:1px 1px #fff}#jstree-dnd.jstree-dnd-responsive>i{background:0 0;width:40px;height:40px}#jstree-dnd.jstree-dnd-responsive>.jstree-ok{background-image:url(40px.png);background-position:0 -200px;background-size:120px 240px}#jstree-dnd.jstree-dnd-responsive>.jstree-er{background-image:url(40px.png);background-position:-40px -200px;background-size:120px 240px}#jstree-marker.jstree-dnd-responsive{border-left-width:10px;border-top-width:10px;border-bottom-width:10px;margin-top:-10px}}@media (max-width:768px){.jstree-default-responsive .jstree-icon{background-image:url(40px.png)}.jstree-default-responsive .jstree-node,.jstree-default-responsive .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-responsive .jstree-node{min-height:40px;line-height:40px;margin-left:40px;min-width:40px;white-space:nowrap}.jstree-default-responsive .jstree-anchor{line-height:40px;height:40px}.jstree-default-responsive .jstree-icon,.jstree-default-responsive .jstree-icon:empty{width:40px;height:40px;line-height:40px}.jstree-default-responsive>.jstree-container-ul>.jstree-node{margin-left:0}.jstree-default-responsive.jstree-rtl .jstree-node{margin-left:0;margin-right:40px;background:0 0}.jstree-default-responsive.jstree-rtl .jstree-container-ul>.jstree-node{margin-right:0}.jstree-default-responsive .jstree-ocl,.jstree-default-responsive .jstree-themeicon,.jstree-default-responsive .jstree-checkbox{background-size:120px 240px}.jstree-default-responsive .jstree-leaf>.jstree-ocl,.jstree-default-responsive.jstree-rtl .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-responsive .jstree-open>.jstree-ocl{background-position:0 0!important}.jstree-default-responsive .jstree-closed>.jstree-ocl{background-position:0 -40px!important}.jstree-default-responsive.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-40px 0!important}.jstree-default-responsive .jstree-themeicon{background-position:-40px -40px}.jstree-default-responsive .jstree-checkbox,.jstree-default-responsive .jstree-checkbox:hover{background-position:-40px -80px}.jstree-default-responsive.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default-responsive.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default-responsive .jstree-checked>.jstree-checkbox,.jstree-default-responsive .jstree-checked>.jstree-checkbox:hover{background-position:0 -80px}.jstree-default-responsive .jstree-anchor>.jstree-undetermined,.jstree-default-responsive .jstree-anchor>.jstree-undetermined:hover{background-position:0 -120px}.jstree-default-responsive .jstree-anchor{font-weight:700;font-size:1.1em;text-shadow:1px 1px #fff}.jstree-default-responsive>.jstree-striped{background:0 0}.jstree-default-responsive .jstree-wholerow{border-top:1px solid rgba(255,255,255,.7);border-bottom:1px solid rgba(64,64,64,.2);background:#ebebeb;height:40px}.jstree-default-responsive .jstree-wholerow-hovered{background:#e7f4f9}.jstree-default-responsive .jstree-wholerow-clicked{background:#beebff}.jstree-default-responsive .jstree-children .jstree-last>.jstree-wholerow{box-shadow:inset 0 -6px 3px -5px #666}.jstree-default-responsive .jstree-children .jstree-open>.jstree-wholerow{box-shadow:inset 0 6px 3px -5px #666;border-top:0}.jstree-default-responsive .jstree-children .jstree-open+.jstree-open{box-shadow:none}.jstree-default-responsive .jstree-node,.jstree-default-responsive .jstree-icon,.jstree-default-responsive .jstree-node>.jstree-ocl,.jstree-default-responsive .jstree-themeicon,.jstree-default-responsive .jstree-checkbox{background-image:url(40px.png);background-size:120px 240px}.jstree-default-responsive .jstree-node{background-position:-80px 0;background-repeat:repeat-y}.jstree-default-responsive .jstree-last{background:0 0}.jstree-default-responsive .jstree-leaf>.jstree-ocl{background-position:-40px -120px}.jstree-default-responsive .jstree-last>.jstree-ocl{background-position:-40px -160px}.jstree-default-responsive .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-responsive .jstree-file{background:url(40px.png) 0 -160px no-repeat;background-size:120px 240px}.jstree-default-responsive .jstree-folder{background:url(40px.png) -40px -40px no-repeat;background-size:120px 240px}.jstree-default-responsive>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}}
includes/jstree/themes/default/throbber.gif ADDED
Binary file
includes/updraft-admin.js CHANGED
@@ -1318,12 +1318,16 @@ jQuery(document).ready(function($){
1318
  $(".updraft_webdav_settings").on("change keyup paste", function(){
1319
 
1320
  var updraft_webdav_settings = [];
 
1321
  $('.updraft_webdav_settings').each(function(index, item) {
1322
 
1323
  var id = $(item).attr('id');
1324
 
1325
- if (id && 'updraft_webdav_settings_' == id.substring(0, 24)) {
1326
- var which_one = id.substring(24);
 
 
 
1327
  updraft_webdav_settings[which_one] = this.value;
1328
  }
1329
  });
@@ -1357,7 +1361,7 @@ jQuery(document).ready(function($){
1357
 
1358
  updraft_webdav_url = updraft_webdav_settings['webdav'] + updraft_webdav_settings['user'] + colon + updraft_webdav_settings['pass'] + host +encodeURIComponent(updraft_webdav_settings['host']) + colon_port + updraft_webdav_settings['port'] + slash + updraft_webdav_settings['path'];
1359
 
1360
- $('#updraft_webdav_settings_url').val(updraft_webdav_url);
1361
  });
1362
 
1363
  $('#updraft-navtab-backups-content').on('click', '.updraft_existing_backups .updraft_existing_backups_row', function(e) {
@@ -2472,10 +2476,11 @@ jQuery(document).ready(function($){
2472
  e.preventDefault();
2473
  $.blockUI({ message: '<div style="margin: 8px; font-size:150%;"><img src="'+updraftlion.ud_url+'/images/udlogo-rotating.gif" height="80" width="80" style="padding-bottom:10px;"><br>'+updraftlion.saving+'</div>'});
2474
 
2475
- var form_data = gather_updraft_settings();
2476
  // POST the settings back to the AJAX handler
2477
  updraft_send_command('savesettings', {
2478
  settings: form_data,
 
2479
  }, function(response) {
2480
  // Add page updates etc based on response
2481
  updraft_handle_page_updates(response);
@@ -2516,46 +2521,20 @@ jQuery(document).ready(function($){
2516
  });
2517
 
2518
  function export_settings() {
2519
- var form_data = gather_updraft_settings().split('&');
2520
- var input = {};
2521
-
2522
- //Function to convert serialized settings to the correct format ready for json encoding
2523
- $.each(form_data, function(key, value) {
2524
- var data = value.split('=');
2525
-
2526
- var name = decodeURIComponent(data[0]);
2527
- if (name.indexOf("option_page") >= 0 || name.indexOf("_wpnonce") >= 0 || name.indexOf("_wp_http_referer") >= 0){
2528
- return true;
2529
- }
2530
-
2531
- if (name.indexOf("[") >= 0){
2532
- var extract = name.match(/\[(.*)\]/).pop();
2533
- name = name.substring(0, name.indexOf('['));
2534
- //some options either have a blank or 0 as their nested array key and need to be delt with differently
2535
- if (!extract || extract === '0'){
2536
- if(typeof input[name] === "undefined") input[name] = [];
2537
- input[name].push(decodeURIComponent(data[1]));
2538
- }else{
2539
- if(typeof input[name] === "undefined") input[name] = {};
2540
- input[name][extract] = decodeURIComponent(data[1]);
2541
- }
2542
- } else {
2543
- input[name] = decodeURIComponent(data[1]);
2544
- }
2545
- });
2546
 
2547
  var date_now = new Date();
2548
 
2549
  form_data = JSON.stringify({
2550
  // Indicate the last time the format changed - i.e. do not update this unless there is a format change
2551
- version: '1.12.19',
2552
  epoch_date: date_now.getTime(),
2553
  local_date: date_now.toLocaleString(),
2554
  network_site_url: updraftlion.network_site_url,
2555
- data: input
2556
  });
2557
 
2558
- //Attach this data to an anchor on page
2559
  var link = document.body.appendChild(document.createElement('a'));
2560
  link.setAttribute('download', 'updraftplus-settings.json');
2561
  link.setAttribute('style', "display:none;");
@@ -2574,6 +2553,7 @@ jQuery(document).ready(function($){
2574
  data = JSON.stringify(data['data']);
2575
  updraft_send_command('importsettings', {
2576
  settings: data,
 
2577
  }, function(response) {
2578
  updraft_handle_page_updates(response);
2579
  // Prevent the user being told they have unsaved settings
@@ -2585,23 +2565,39 @@ jQuery(document).ready(function($){
2585
  $.unblockUI();
2586
  }
2587
  }
2588
-
2589
- function gather_updraft_settings() {
2590
- // Excluding the unnecessary 'action' input avoids triggering a very mis-conceived mod_security rule seen on one user's site
2591
- var form_data = $("#updraft-navtab-settings-content form input[name!='action'], #updraft-navtab-settings-content form textarea, #updraft-navtab-settings-content form select").serialize();
2592
-
2593
- //include unchecked checkboxes. user filter to only include unchecked boxes.
2594
- $.each($('#updraft-navtab-settings-content form input[type=checkbox]')
2595
- .filter(function(idx){
2596
- return $(this).prop('checked') == false
2597
- }),
2598
- function(idx, el){
2599
- //attach matched element names to the form_data with chosen value.
2600
- var empty_val = '0';
2601
- form_data += '&' + $(el).attr('name') + '=' + empty_val;
2602
- }
2603
- );
2604
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2605
  return form_data;
2606
  }
2607
 
1318
  $(".updraft_webdav_settings").on("change keyup paste", function(){
1319
 
1320
  var updraft_webdav_settings = [];
1321
+ var instance_id = "";
1322
  $('.updraft_webdav_settings').each(function(index, item) {
1323
 
1324
  var id = $(item).attr('id');
1325
 
1326
+ if (id && 'updraft_webdav_' == id.substring(0, 15)) {
1327
+ var which_one = id.substring(15);
1328
+ id_split = which_one.split('_');
1329
+ which_one = id_split[0];
1330
+ instance_id = id_split[1];
1331
  updraft_webdav_settings[which_one] = this.value;
1332
  }
1333
  });
1361
 
1362
  updraft_webdav_url = updraft_webdav_settings['webdav'] + updraft_webdav_settings['user'] + colon + updraft_webdav_settings['pass'] + host +encodeURIComponent(updraft_webdav_settings['host']) + colon_port + updraft_webdav_settings['port'] + slash + updraft_webdav_settings['path'];
1363
 
1364
+ $('#updraft_webdav_url_' + instance_id).val(updraft_webdav_url);
1365
  });
1366
 
1367
  $('#updraft-navtab-backups-content').on('click', '.updraft_existing_backups .updraft_existing_backups_row', function(e) {
2476
  e.preventDefault();
2477
  $.blockUI({ message: '<div style="margin: 8px; font-size:150%;"><img src="'+updraftlion.ud_url+'/images/udlogo-rotating.gif" height="80" width="80" style="padding-bottom:10px;"><br>'+updraftlion.saving+'</div>'});
2478
 
2479
+ var form_data = gather_updraft_settings('string');
2480
  // POST the settings back to the AJAX handler
2481
  updraft_send_command('savesettings', {
2482
  settings: form_data,
2483
+ updraftplus_version: updraftlion.updraftplus_version
2484
  }, function(response) {
2485
  // Add page updates etc based on response
2486
  updraft_handle_page_updates(response);
2521
  });
2522
 
2523
  function export_settings() {
2524
+ var form_data = gather_updraft_settings('object');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2525
 
2526
  var date_now = new Date();
2527
 
2528
  form_data = JSON.stringify({
2529
  // Indicate the last time the format changed - i.e. do not update this unless there is a format change
2530
+ version: '1.12.40',
2531
  epoch_date: date_now.getTime(),
2532
  local_date: date_now.toLocaleString(),
2533
  network_site_url: updraftlion.network_site_url,
2534
+ data: form_data
2535
  });
2536
 
2537
+ // Attach this data to an anchor on page
2538
  var link = document.body.appendChild(document.createElement('a'));
2539
  link.setAttribute('download', 'updraftplus-settings.json');
2540
  link.setAttribute('style', "display:none;");
2553
  data = JSON.stringify(data['data']);
2554
  updraft_send_command('importsettings', {
2555
  settings: data,
2556
+ updraftplus_version: updraftlion.updraftplus_version,
2557
  }, function(response) {
2558
  updraft_handle_page_updates(response);
2559
  // Prevent the user being told they have unsaved settings
2565
  $.unblockUI();
2566
  }
2567
  }
2568
+
2569
+ /**
2570
+ * Retrieve the current settings from the DOM
2571
+ *
2572
+ * @param {string} [output_format='string'] - the output format; valid values are 'string' or 'object'
2573
+ *
2574
+ * @returns String|Object
2575
+ */
2576
+ function gather_updraft_settings(output_format) {
2577
+
2578
+ var form_data = '';
2579
+ var output_format = ('object' === typeof output_format) ? output_format : 'string';
 
 
 
 
2580
 
2581
+ if ('object' == output_format) {
2582
+ // Excluding the unnecessary 'action' input avoids triggering a very mis-conceived mod_security rule seen on one user's site
2583
+ form_data = $("#updraft-navtab-settings-content form input[name!='action'][name!='option_page'][name!='_wpnonce'][name!='_wp_http_referer'], #updraft-navtab-settings-content form textarea, #updraft-navtab-settings-content form select, #updraft-navtab-settings-content form input[type=checkbox]").serializeJSON({checkboxUncheckedValue: '0', useIntKeysAsArrayIndex: true});
2584
+ } else {
2585
+ // Excluding the unnecessary 'action' input avoids triggering a very mis-conceived mod_security rule seen on one user's site
2586
+ form_data = $("#updraft-navtab-settings-content form input[name!='action'], #updraft-navtab-settings-content form textarea, #updraft-navtab-settings-content form select").serialize();
2587
+
2588
+ //include unchecked checkboxes. user filter to only include unchecked boxes.
2589
+ $.each($('#updraft-navtab-settings-content form input[type=checkbox]')
2590
+ .filter(function(idx){
2591
+ return $(this).prop('checked') == false
2592
+ }),
2593
+ function(idx, el){
2594
+ //attach matched element names to the form_data with chosen value.
2595
+ var empty_val = '0';
2596
+ form_data += '&' + $(el).attr('name') + '=' + empty_val;
2597
+ }
2598
+ );
2599
+ }
2600
+
2601
  return form_data;
2602
  }
2603
 
languages/updraftplus-af.po CHANGED
@@ -11,7 +11,23 @@ msgstr ""
11
  "Language: af_ZA\n"
12
  "Project-Id-Version: UpdraftPlus\n"
13
 
14
- #: methods/updraftvault.php:49
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
  msgid "UpdraftVault"
16
  msgstr ""
17
 
@@ -39,43 +55,43 @@ msgstr ""
39
  msgid "Extra database"
40
  msgstr ""
41
 
42
- #: admin.php:3302
43
  msgid "Press here to download or browse"
44
  msgstr ""
45
 
46
- #: admin.php:1018 admin.php:1028
47
  msgid "Error: invalid path"
48
  msgstr ""
49
 
50
- #: admin.php:876
51
  msgid "An error occurred when fetching storage module options: "
52
  msgstr ""
53
 
54
- #: admin.php:705
55
  msgid "Loading log file"
56
  msgstr ""
57
 
58
- #: admin.php:704
59
  msgid "Unable to download file. This could be caused by a timeout. It would be best to download the zip to your computer."
60
  msgstr ""
61
 
62
- #: admin.php:703
63
  msgid "Search"
64
  msgstr ""
65
 
66
- #: admin.php:702
67
  msgid "Select a file to view information about it"
68
  msgstr ""
69
 
70
- #: admin.php:701
71
  msgid "Browsing zip file"
72
  msgstr ""
73
 
74
- #: admin.php:671
75
  msgid "With UpdraftPlus Premium, you can directly download individual files from here."
76
  msgstr ""
77
 
78
- #: admin.php:619
79
  msgid "Browse contents"
80
  msgstr ""
81
 
@@ -83,43 +99,43 @@ msgstr ""
83
  msgid "Skipped tables:"
84
  msgstr ""
85
 
86
- #: class-updraftplus.php:4173
87
  msgid "This database backup has the following WordPress tables excluded: %s"
88
  msgstr ""
89
 
90
- #: admin.php:2319
91
  msgid "With UpdraftPlus Premium, you can choose to backup non-WordPress tables, backup only specified tables, and backup other databases too."
92
  msgstr ""
93
 
94
- #: admin.php:2319
95
  msgid "All WordPress tables will be backed up."
96
  msgstr ""
97
 
98
- #: admin.php:700
99
  msgid "Further information may be found in the browser JavaScript console, and the server PHP error logs."
100
  msgstr ""
101
 
102
- #: admin.php:700
103
  msgid "That you are attempting to upload a zip file previously created by UpdraftPlus."
104
  msgstr ""
105
 
106
- #: admin.php:700
107
  msgid "The available memory on the server."
108
  msgstr ""
109
 
110
- #: admin.php:700
111
  msgid "Any settings in your .htaccess or web.config file that affects the maximum upload or post size."
112
  msgstr ""
113
 
114
- #: admin.php:700
115
  msgid "The file failed to upload. Please check the following:"
116
  msgstr ""
117
 
118
- #: admin.php:699
119
  msgid "HTTP code:"
120
  msgstr ""
121
 
122
- #: admin.php:596
123
  msgid "You have chosen to backup a database, but no tables have been selected"
124
  msgstr ""
125
 
@@ -282,7 +298,7 @@ msgstr ""
282
  msgid "UpdraftPlus"
283
  msgstr ""
284
 
285
- #: templates/wp-admin/settings/form-contents.php:274
286
  msgid "Recommended: optimize your database with WP-Optimize."
287
  msgstr ""
288
 
@@ -353,15 +369,15 @@ msgstr ""
353
  msgid "Comments"
354
  msgstr ""
355
 
356
- #: addons/s3-enhanced.php:327
357
  msgid "Europe (Frankfurt)"
358
  msgstr ""
359
 
360
- #: addons/s3-enhanced.php:326
361
  msgid "Europe (London)"
362
  msgstr ""
363
 
364
- #: addons/s3-enhanced.php:325
365
  msgid "Europe (Ireland)"
366
  msgstr ""
367
 
@@ -546,7 +562,7 @@ msgstr ""
546
  msgid "Then, try out our \"Migrator\" add-on which can perform a direct site-to-site migration. After using it once, you'll have saved the purchase price compared to the time needed to copy a site by hand."
547
  msgstr ""
548
 
549
- #: addons/s3-enhanced.php:324
550
  msgid "Canada Central"
551
  msgstr ""
552
 
@@ -609,15 +625,15 @@ msgstr ""
609
  msgid "The client has been deleted from the Google Drive API console. Please create a new Google Drive project and reconnect with UpdraftPlus."
610
  msgstr ""
611
 
612
- #: methods/dropbox.php:556
613
  msgid "%s de-authentication"
614
  msgstr ""
615
 
616
- #: methods/dropbox.php:524
617
  msgid "You must add the following as the authorised redirect URI in your Dropbox console (under \"API Settings\") when asked"
618
  msgstr ""
619
 
620
- #: methods/dropbox.php:498
621
  msgid "Follow this link to deauthenticate with %s."
622
  msgstr ""
623
 
@@ -633,47 +649,47 @@ msgstr ""
633
  msgid "You have selected a remote storage option which has an authorization step to complete:"
634
  msgstr ""
635
 
636
- #: admin.php:1440
637
  msgid "Remote files deleted:"
638
  msgstr ""
639
 
640
- #: admin.php:1439
641
  msgid "Local files deleted:"
642
  msgstr ""
643
 
644
- #: admin.php:921 admin.php:925 admin.php:933 admin.php:937
645
  msgid "Follow this link to authorize access to your %s account (you will not be able to back up to %s without it)."
646
  msgstr ""
647
 
648
- #: admin.php:698
649
  msgid "remote files deleted"
650
  msgstr ""
651
 
652
- #: admin.php:696
653
  msgid "Complete"
654
  msgstr ""
655
 
656
- #: admin.php:695
657
  msgid "Do you want to carry out the import?"
658
  msgstr ""
659
 
660
- #: admin.php:694
661
  msgid "Which was exported on:"
662
  msgstr ""
663
 
664
- #: admin.php:693
665
  msgid "This will import data from:"
666
  msgstr ""
667
 
668
- #: admin.php:692
669
  msgid "Importing..."
670
  msgstr ""
671
 
672
- #: admin.php:689
673
  msgid "You have not yet selected a file to import."
674
  msgstr ""
675
 
676
- #: admin.php:673
677
  msgid "Your export file will be of your displayed settings, not your saved ones."
678
  msgstr ""
679
 
@@ -681,32 +697,32 @@ msgstr ""
681
  msgid "template not found"
682
  msgstr ""
683
 
684
- #: addons/s3-enhanced.php:320
685
  msgid "US East (Ohio)"
686
  msgstr ""
687
 
688
- #: addons/onedrive.php:953
689
  msgid "This site uses a URL which is either non-HTTPS, or is localhost or 127.0.0.1 URL. As such, you must use the main %s %s App to authenticate with your account."
690
  msgstr ""
691
 
692
- #: addons/onedrive.php:635
693
  msgid "Account is not authorized (%s)."
694
  msgstr ""
695
 
696
- #: addons/onedrive.php:596 udaddons/updraftplus-addons.php:732
697
  msgid "Your IP address:"
698
  msgstr ""
699
 
700
- #: addons/onedrive.php:596 udaddons/updraftplus-addons.php:732
701
  #: udaddons/updraftplus-addons.php:747
702
  msgid "To remove any block, please go here."
703
  msgstr ""
704
 
705
- #: addons/onedrive.php:581 udaddons/updraftplus-addons.php:717
706
  msgid "An error response was received; HTTP code:"
707
  msgstr ""
708
 
709
- #: includes/class-commands.php:309
710
  msgid "%s add-on not found"
711
  msgstr ""
712
 
@@ -718,39 +734,39 @@ msgstr ""
718
  msgid "This makes time-outs much more likely. You are recommended to turn safe_mode off, or to restore only one entity at a time"
719
  msgstr ""
720
 
721
- #: admin.php:2144
722
  msgid "To fix this problem go here."
723
  msgstr ""
724
 
725
- #: admin.php:2144
726
  msgid "OptimizePress 2.0 encodes its contents, so search/replace does not work."
727
  msgstr ""
728
 
729
- #: admin.php:657
730
  msgid "your PHP install lacks the openssl module; as a result, this can take minutes; if nothing has happened by then, then you should either try a smaller key size, or ask your web hosting company how to enable this PHP module on your setup."
731
  msgstr ""
732
 
733
- #: addons/webdav.php:92
734
  msgid "Path"
735
  msgstr ""
736
 
737
- #: addons/webdav.php:87
738
  msgid "Leave this blank to use the default (80 for webdav, 443 for webdavs)"
739
  msgstr ""
740
 
741
- #: addons/webdav.php:79
742
  msgid "Enter any path in the field below."
743
  msgstr ""
744
 
745
- #: addons/webdav.php:79
746
  msgid "A host name cannot contain a slash."
747
  msgstr ""
748
 
749
- #: addons/webdav.php:54
750
  msgid "Protocol (SSL or not)"
751
  msgstr ""
752
 
753
- #: addons/webdav.php:49
754
  msgid "This WebDAV URL is generated by filling in the options below. If you do not know the details, then you will need to ask your WebDAV provider."
755
  msgstr ""
756
 
@@ -758,11 +774,11 @@ msgstr ""
758
  msgid "No response data was received. This usually indicates a network connectivity issue (e.g. an outgoing firewall or overloaded network) between this site and UpdraftPlus.com."
759
  msgstr ""
760
 
761
- #: methods/s3.php:1014
762
  msgid "The AWS access key looks to be wrong (valid %s access keys begin with \"AK\")"
763
  msgstr ""
764
 
765
- #: methods/s3.php:91
766
  msgid "No settings were found - please go to the Settings tab and check your settings"
767
  msgstr ""
768
 
@@ -770,15 +786,15 @@ msgstr ""
770
  msgid "Backup using %s?"
771
  msgstr ""
772
 
773
- #: addons/s3-enhanced.php:331
774
  msgid "Asia Pacific (Mumbai)"
775
  msgstr ""
776
 
777
- #: addons/s3-enhanced.php:55
778
  msgid "Reduced redundancy"
779
  msgstr ""
780
 
781
- #: addons/s3-enhanced.php:54
782
  msgid "Standard (infrequent access)"
783
  msgstr ""
784
 
@@ -900,7 +916,7 @@ msgstr ""
900
  msgid "This backup archive is %s MB in size - the attempt to send this via email is likely to fail (few email servers allow attachments of this size). If so, you should switch to using a different remote storage method."
901
  msgstr ""
902
 
903
- #: class-updraftplus.php:1557
904
  msgid "Size: %s MB"
905
  msgstr ""
906
 
@@ -912,7 +928,7 @@ msgstr ""
912
  msgid "i.e. you have an account there"
913
  msgstr ""
914
 
915
- #: templates/wp-admin/settings/form-contents.php:359
916
  msgid "UpdraftPlus will split up backup archives when they exceed this file size. The default value is %s megabytes. Be careful to leave some margin if your web-server has a hard size limit (e.g. the 2 GB / 2048 MB limit on some 32-bit servers/file systems)."
917
  msgstr ""
918
 
@@ -920,7 +936,7 @@ msgstr ""
920
  msgid "Now"
921
  msgstr ""
922
 
923
- #: class-updraftplus.php:4037 restorer.php:996
924
  msgid "You should enable %s to make any pretty permalinks (e.g. %s) work"
925
  msgstr ""
926
 
@@ -928,21 +944,21 @@ msgstr ""
928
  msgid "(tap on an icon to select or unselect)"
929
  msgstr ""
930
 
931
- #: methods/updraftvault.php:289 methods/updraftvault.php:295
932
- #: methods/updraftvault.php:301
933
  msgid "%s per year"
934
  msgstr ""
935
 
936
- #: methods/updraftvault.php:288 methods/updraftvault.php:294
937
- #: methods/updraftvault.php:300
938
  msgid "or (annual discount)"
939
  msgstr ""
940
 
941
- #: methods/updraftvault.php:233
942
  msgid "No Vault connection was found for this site (has it moved?); please disconnect and re-connect."
943
  msgstr ""
944
 
945
- #: class-updraftplus.php:418 class-updraftplus.php:463
946
  msgid "The given file was not found, or could not be read."
947
  msgstr ""
948
 
@@ -1042,23 +1058,23 @@ msgstr ""
1042
  msgid "UpdraftCentral Connection"
1043
  msgstr ""
1044
 
1045
- #: backup.php:849 class-updraftplus.php:2813
1046
  msgid "The backup was aborted by the user"
1047
  msgstr ""
1048
 
1049
- #: admin.php:4003
1050
  msgid "Your settings have been saved."
1051
  msgstr ""
1052
 
1053
- #: admin.php:3196
1054
  msgid "Total backup size:"
1055
  msgstr ""
1056
 
1057
- #: admin.php:2641
1058
  msgid "stop"
1059
  msgstr ""
1060
 
1061
- #: admin.php:2479
1062
  msgid "The backup has finished running"
1063
  msgstr ""
1064
 
@@ -1084,31 +1100,31 @@ msgstr ""
1084
  msgid "calculate"
1085
  msgstr ""
1086
 
1087
- #: admin.php:672
1088
  msgid "You should save your changes to ensure that they are used for making your backup."
1089
  msgstr ""
1090
 
1091
- #: admin.php:665
1092
  msgid "We requested to delete the file, but could not understand the server's response"
1093
  msgstr ""
1094
 
1095
- #: admin.php:664
1096
  msgid "Please enter a valid URL"
1097
  msgstr ""
1098
 
1099
- #: admin.php:647
1100
  msgid "Saving..."
1101
  msgstr ""
1102
 
1103
- #: admin.php:610
1104
  msgid "Error: the server sent us a response which we did not understand."
1105
  msgstr ""
1106
 
1107
- #: admin.php:602
1108
  msgid "Fetching..."
1109
  msgstr ""
1110
 
1111
- #: addons/s3-enhanced.php:328
1112
  msgid "Asia Pacific (Seoul)"
1113
  msgstr ""
1114
 
@@ -1120,7 +1136,7 @@ msgstr ""
1120
  msgid "Unexpected error: no class '%s' was found (your UpdraftPlus installation seems broken - try re-installing)"
1121
  msgstr ""
1122
 
1123
- #: addons/onedrive.php:56
1124
  msgid "The required %s PHP module is not installed - ask your web hosting company to enable it."
1125
  msgstr ""
1126
 
@@ -1128,24 +1144,24 @@ msgstr ""
1128
  msgid "Skipping table %s: this table will not be restored"
1129
  msgstr ""
1130
 
1131
- #: class-updraftplus.php:4088 restorer.php:1642
1132
  msgid "To import an ordinary WordPress site into a multisite installation requires %s."
1133
  msgstr ""
1134
 
1135
- #: class-updraftplus.php:4084
1136
  msgid "Please read this link for important information on this process."
1137
  msgstr ""
1138
 
1139
- #: class-updraftplus.php:4084
1140
  msgid "It will be imported as a new site."
1141
  msgstr ""
1142
 
1143
- #: admin.php:2292 templates/wp-admin/notices/horizontal-notice.php:16
1144
  #: templates/wp-admin/notices/horizontal-notice.php:18
1145
  msgid "Dismiss"
1146
  msgstr ""
1147
 
1148
- #: admin.php:684
1149
  msgid "Please fill in the required information."
1150
  msgstr ""
1151
 
@@ -1217,15 +1233,15 @@ msgstr ""
1217
  msgid "Call WordPress action:"
1218
  msgstr ""
1219
 
1220
- #: admin.php:2327
1221
  msgid "Your saved settings also affect what is backed up - e.g. files excluded."
1222
  msgstr ""
1223
 
1224
- #: admin.php:3604
1225
  msgid "Skipping: this archive was already restored."
1226
  msgstr ""
1227
 
1228
- #: templates/wp-admin/settings/form-contents.php:200
1229
  msgid "File Options"
1230
  msgstr ""
1231
 
@@ -1253,51 +1269,51 @@ msgstr ""
1253
  msgid "This button will delete all UpdraftPlus settings and progress information for in-progress backups (but not any of your existing backups from your cloud storage)."
1254
  msgstr ""
1255
 
1256
- #: admin.php:3885
1257
  msgid "Send this backup to remote storage"
1258
  msgstr ""
1259
 
1260
- #: admin.php:3883
1261
  msgid "Check out UpdraftPlus Vault."
1262
  msgstr ""
1263
 
1264
- #: admin.php:3883
1265
  msgid "Not got any remote storage?"
1266
  msgstr ""
1267
 
1268
- #: admin.php:3883
1269
  msgid "settings"
1270
  msgstr ""
1271
 
1272
- #: admin.php:3883
1273
  msgid "Backup won't be sent to any remote storage - none has been saved in the %s"
1274
  msgstr ""
1275
 
1276
- #: admin.php:2325
1277
  msgid "Include any files in the backup"
1278
  msgstr ""
1279
 
1280
- #: admin.php:2311
1281
  msgid "Include the database in the backup"
1282
  msgstr ""
1283
 
1284
- #: admin.php:2291
1285
  msgid "Continue restoration"
1286
  msgstr ""
1287
 
1288
- #: admin.php:2286
1289
  msgid "You have an unfinished restoration operation, begun %s ago."
1290
  msgstr ""
1291
 
1292
- #: admin.php:2285
1293
  msgid "Unfinished restoration"
1294
  msgstr ""
1295
 
1296
- #: admin.php:2283
1297
  msgid "%s minutes, %s seconds"
1298
  msgstr ""
1299
 
1300
- #: admin.php:2230
1301
  msgid "Backup Contents And Schedule"
1302
  msgstr ""
1303
 
@@ -1305,48 +1321,48 @@ msgstr ""
1305
  msgid "Premium / Extensions"
1306
  msgstr ""
1307
 
1308
- #: admin.php:2010 admin.php:2019
1309
  msgid "Sufficient information about the in-progress restoration operation could not be found."
1310
  msgstr ""
1311
 
1312
- #: addons/morefiles.php:53 admin.php:670
1313
  msgctxt "(verb)"
1314
  msgid "Download"
1315
  msgstr ""
1316
 
1317
- #: admin.php:595
1318
  msgid "You have chosen to backup files, but no file entities have been selected"
1319
  msgstr ""
1320
 
1321
- #: admin.php:504
1322
  msgid "Extensions"
1323
  msgstr ""
1324
 
1325
- #: admin.php:496 templates/wp-admin/settings/tab-bar.php:8
1326
  msgid "Advanced Tools"
1327
  msgstr ""
1328
 
1329
- #: addons/googlecloud.php:880
1330
  msgid "Bucket location"
1331
  msgstr ""
1332
 
1333
- #: addons/googlecloud.php:875
1334
  msgid "Note that Google do not support every storage class in every location - you should read their documentation to learn about current availability."
1335
  msgstr ""
1336
 
1337
- #: addons/googlecloud.php:875 addons/googlecloud.php:890
1338
  msgid "This setting applies only when a new bucket is being created."
1339
  msgstr ""
1340
 
1341
- #: addons/googlecloud.php:860
1342
  msgid "You must use a bucket name that is unique, for all %s users."
1343
  msgstr ""
1344
 
1345
- #: addons/googlecloud.php:816
1346
  msgid "Do not confuse %s with %s - they are separate things."
1347
  msgstr ""
1348
 
1349
- #: addons/googlecloud.php:268
1350
  msgid "You do not have access to this bucket"
1351
  msgstr ""
1352
 
@@ -1399,63 +1415,63 @@ msgstr ""
1399
  msgid "Durable reduced availability"
1400
  msgstr ""
1401
 
1402
- #: addons/googlecloud.php:35 addons/s3-enhanced.php:53
1403
  msgid "Standard"
1404
  msgstr ""
1405
 
1406
- #: addons/azure.php:523
1407
  msgid "container"
1408
  msgstr ""
1409
 
1410
- #: addons/azure.php:523
1411
  msgid "You can enter the path of any %s virtual folder you wish to use here."
1412
  msgstr ""
1413
 
1414
- #: addons/azure.php:522
1415
  msgid "optional"
1416
  msgstr ""
1417
 
1418
- #: addons/azure.php:522
1419
  msgid "Prefix"
1420
  msgstr ""
1421
 
1422
- #: addons/azure.php:517
1423
  msgid "See Microsoft's guidelines on container naming by following this link."
1424
  msgstr ""
1425
 
1426
- #: addons/azure.php:517
1427
  msgid "If the %s does not already exist, then it will be created."
1428
  msgstr ""
1429
 
1430
- #: addons/azure.php:517
1431
  msgid "Enter the path of the %s you wish to use here."
1432
  msgstr ""
1433
 
1434
- #: addons/azure.php:506
1435
  msgid "This is not your Azure login - see the instructions if needing more guidance."
1436
  msgstr ""
1437
 
1438
- #: addons/azure.php:505
1439
  msgid "Account Name"
1440
  msgstr ""
1441
 
1442
- #: addons/azure.php:505 addons/azure.php:509
1443
  msgid "Azure"
1444
  msgstr ""
1445
 
1446
- #: addons/azure.php:501
1447
  msgid "Create Azure credentials in your Azure developer console."
1448
  msgstr ""
1449
 
1450
- #: addons/azure.php:449
1451
  msgid "Could not create the container"
1452
  msgstr ""
1453
 
1454
- #: addons/azure.php:343
1455
  msgid "Could not access container"
1456
  msgstr ""
1457
 
1458
- #: class-updraftplus.php:2830
1459
  msgid "To complete your migration/clone, you should now log in to the remote site and restore the backup set."
1460
  msgstr ""
1461
 
@@ -1483,75 +1499,75 @@ msgstr ""
1483
  msgid "Not installed"
1484
  msgstr ""
1485
 
1486
- #: addons/googlecloud.php:865 addons/s3-enhanced.php:46
1487
  msgid "Storage class"
1488
  msgstr ""
1489
 
1490
- #: addons/googlecloud.php:860
1491
  msgid "See Google's guidelines on bucket naming by following this link."
1492
  msgstr ""
1493
 
1494
- #: addons/googlecloud.php:860
1495
  msgid "Bucket names have to be globally unique. If the bucket does not already exist, then it will be created."
1496
  msgstr ""
1497
 
1498
- #: addons/googlecloud.php:860
1499
  msgid "Enter the name of the %s bucket you wish to use here."
1500
  msgstr ""
1501
 
1502
- #: addons/googlecloud.php:859
1503
  msgid "Bucket"
1504
  msgstr ""
1505
 
1506
- #: addons/googlecloud.php:855
1507
  msgid "Otherwise, you can leave it blank."
1508
  msgstr ""
1509
 
1510
- #: addons/googlecloud.php:855
1511
  msgid "N.B. This is only needed if you have not already created the bucket, and you wish UpdraftPlus to create it for you."
1512
  msgstr ""
1513
 
1514
- #: addons/googlecloud.php:855
1515
  msgid "Enter the ID of the %s project you wish to use here."
1516
  msgstr ""
1517
 
1518
- #: addons/googlecloud.php:828
1519
  msgid "Follow this link to your Google API Console, and there activate the Storage API and create a Client ID in the API Access section."
1520
  msgstr ""
1521
 
1522
- #: addons/googlecloud.php:743
1523
  msgid "You must enter a project ID in order to be able to create a new bucket."
1524
  msgstr ""
1525
 
1526
- #: addons/googlecloud.php:854
1527
  msgid "Project ID"
1528
  msgstr ""
1529
 
1530
- #: addons/googlecloud.php:609
1531
  msgid "You must save and authenticate before you can test your settings."
1532
  msgstr ""
1533
 
1534
- #: addons/googlecloud.php:479
1535
  msgid "Have not yet obtained an access token from Google - you need to authorise or re-authorise your connection to Google Cloud."
1536
  msgstr ""
1537
 
1538
- #: addons/googlecloud.php:215 addons/googlecloud.php:288
1539
- #: addons/googlecloud.php:735 addons/googlecloud.php:782
1540
  msgid "You do not have access to this bucket."
1541
  msgstr ""
1542
 
1543
- #: addons/googlecloud.php:215 addons/googlecloud.php:268
1544
- #: addons/googlecloud.php:278 addons/googlecloud.php:288
1545
- #: addons/googlecloud.php:579 addons/googlecloud.php:735
1546
- #: addons/googlecloud.php:782 addons/googlecloud.php:822
1547
- #: addons/googlecloud.php:839 addons/googlecloud.php:847
1548
- #: addons/googlecloud.php:860
1549
  msgid "Google Cloud"
1550
  msgstr ""
1551
 
1552
- #: addons/googlecloud.php:215 addons/googlecloud.php:268
1553
- #: addons/googlecloud.php:288 addons/googlecloud.php:735
1554
- #: addons/googlecloud.php:782
1555
  msgid "%s Service Exception."
1556
  msgstr ""
1557
 
@@ -1588,35 +1604,35 @@ msgstr ""
1588
  msgid "Press here to look inside your remote storage methods for any existing backup sets (from any site, if they are stored in the same folder)."
1589
  msgstr ""
1590
 
1591
- #: admin.php:1438
1592
  msgid "Backup sets removed:"
1593
  msgstr ""
1594
 
1595
- #: admin.php:683
1596
  msgid "Processing..."
1597
  msgstr ""
1598
 
1599
- #: admin.php:681
1600
  msgid "For backups older than"
1601
  msgstr ""
1602
 
1603
- #: admin.php:680
1604
  msgid "week(s)"
1605
  msgstr ""
1606
 
1607
- #: admin.php:679
1608
  msgid "hour(s)"
1609
  msgstr ""
1610
 
1611
- #: admin.php:678
1612
  msgid "day(s)"
1613
  msgstr ""
1614
 
1615
- #: admin.php:677
1616
  msgid "in the month"
1617
  msgstr ""
1618
 
1619
- #: admin.php:676
1620
  msgid "day"
1621
  msgstr ""
1622
 
@@ -1636,187 +1652,187 @@ msgstr ""
1636
  msgid "This problem is caused by trying to restore a database on a very old MySQL version that is incompatible with the source database."
1637
  msgstr ""
1638
 
1639
- #: methods/updraftvault.php:595
1640
  msgid "You do not currently have any UpdraftPlus Vault quota"
1641
  msgstr ""
1642
 
1643
- #: class-updraftplus.php:4123
1644
  msgid "You must upgrade MySQL to be able to use this database."
1645
  msgstr ""
1646
 
1647
- #: class-updraftplus.php:4123
1648
  msgid "The database backup uses MySQL features not available in the old MySQL version (%s) that this site is running on."
1649
  msgstr ""
1650
 
1651
- #: admin.php:2129
1652
  msgid "The UpdraftPlus directory in wp-content/plugins has white-space in it; WordPress does not like this. You should rename the directory to wp-content/plugins/updraftplus to fix this problem."
1653
  msgstr ""
1654
 
1655
- #: methods/updraftvault.php:322
1656
  msgid "Don't know your email address, or forgotten your password?"
1657
  msgstr ""
1658
 
1659
- #: methods/updraftvault.php:315
1660
  msgid "Enter your UpdraftPlus.Com email / password here to connect:"
1661
  msgstr ""
1662
 
1663
- #: methods/updraftvault.php:277 methods/updraftvault.php:307
1664
  msgid "Read the FAQs here."
1665
  msgstr ""
1666
 
1667
- #: addons/s3-enhanced.php:61
1668
  msgid "Check this box to use Amazon's server-side encryption"
1669
  msgstr ""
1670
 
1671
- #: addons/s3-enhanced.php:60
1672
  msgid "Server-side encryption"
1673
  msgstr ""
1674
 
1675
- #: methods/updraftvault.php:604
1676
  msgid "If you have forgotten your password, then go here to change your password on updraftplus.com."
1677
  msgstr ""
1678
 
1679
- #: admin.php:929
1680
  msgid "Go to the remote storage settings in order to connect."
1681
  msgstr ""
1682
 
1683
- #: admin.php:929
1684
  msgid "%s has been chosen for remote storage, but you are not currently connected."
1685
  msgstr ""
1686
 
1687
- #: methods/updraftvault.php:304
1688
  msgid "Payments can be made in US dollars, euros or GB pounds sterling, via card or PayPal."
1689
  msgstr ""
1690
 
1691
- #: admin.php:653
1692
  msgid "Update quota count"
1693
  msgstr ""
1694
 
1695
- #: admin.php:652
1696
  msgid "Counting..."
1697
  msgstr ""
1698
 
1699
- #: admin.php:651
1700
  msgid "Disconnecting..."
1701
  msgstr ""
1702
 
1703
- #: admin.php:649
1704
  msgid "Connecting..."
1705
  msgstr ""
1706
 
1707
- #: methods/updraftvault.php:378 methods/updraftvault.php:447
1708
  msgid "Refresh current status"
1709
  msgstr ""
1710
 
1711
- #: methods/updraftvault.php:376 methods/updraftvault.php:392
1712
- #: methods/updraftvault.php:394 methods/updraftvault.php:447
1713
  msgid "Get more quota"
1714
  msgstr ""
1715
 
1716
- #: methods/updraftvault.php:373 methods/updraftvault.php:389
1717
- #: methods/updraftvault.php:428
1718
  msgid "Current use:"
1719
  msgstr ""
1720
 
1721
- #: methods/updraftvault.php:368
1722
  msgid "You can get more quota here"
1723
  msgstr ""
1724
 
1725
- #: methods/updraftvault.php:368
1726
  msgid "%s Error: you have insufficient storage quota available (%s) to upload this archive (%s)."
1727
  msgstr ""
1728
 
1729
- #: admin.php:650 methods/updraftvault.php:360
1730
  msgid "Disconnect"
1731
  msgstr ""
1732
 
1733
- #: methods/updraftvault.php:352
1734
  msgid "Quota:"
1735
  msgstr ""
1736
 
1737
- #: methods/updraftvault.php:350
1738
  msgid "Vault owner"
1739
  msgstr ""
1740
 
1741
- #: methods/updraftvault.php:350
1742
  msgid "Well done - there's nothing more needed to set up."
1743
  msgstr ""
1744
 
1745
- #: methods/updraftvault.php:350
1746
  msgid "This site is <strong>connected</strong> to UpdraftPlus Vault."
1747
  msgstr ""
1748
 
1749
- #: methods/updraftvault.php:346
1750
  msgid "You are <strong>not connected</strong> to UpdraftPlus Vault."
1751
  msgstr ""
1752
 
1753
- #: methods/updraftvault.php:322
1754
  msgid "Go here for help"
1755
  msgstr ""
1756
 
1757
- #: methods/updraftvault.php:317
1758
  msgid "E-mail"
1759
  msgstr ""
1760
 
1761
- #: methods/updraftvault.php:310 methods/updraftvault.php:325
1762
  msgid "Back..."
1763
  msgstr ""
1764
 
1765
- #: methods/updraftvault.php:304
1766
  msgid "Subscriptions can be cancelled at any time."
1767
  msgstr ""
1768
 
1769
- #: methods/updraftvault.php:287 methods/updraftvault.php:293
1770
- #: methods/updraftvault.php:299
1771
  msgid "%s per quarter"
1772
  msgstr ""
1773
 
1774
- #: central/bootstrap.php:542 methods/updraftvault.php:277
1775
- #: methods/updraftvault.php:307
1776
  msgid "Read more about it here."
1777
  msgstr ""
1778
 
1779
- #: methods/updraftvault.php:277 methods/updraftvault.php:307
1780
  msgid "UpdraftPlus Vault is built on top of Amazon's world-leading data-centres, with redundant data storage to achieve 99.999999999% reliability."
1781
  msgstr ""
1782
 
1783
- #: methods/updraftvault.php:273
1784
  msgid "Already purchased space?"
1785
  msgstr ""
1786
 
1787
- #: methods/updraftvault.php:270
1788
  msgid "Show the options"
1789
  msgstr ""
1790
 
1791
- #: methods/updraftvault.php:269
1792
  msgid "First time user?"
1793
  msgstr ""
1794
 
1795
- #: methods/updraftvault.php:266 methods/updraftvault.php:283
1796
  msgid "Press a button to get started."
1797
  msgstr ""
1798
 
1799
- #: methods/updraftvault.php:266 methods/updraftvault.php:283
1800
  msgid "UpdraftPlus Vault brings you storage that is <strong>reliable, easy to use and a great price</strong>."
1801
  msgstr ""
1802
 
1803
- #: methods/updraftvault.php:229
1804
  msgid "You have an UpdraftPlus Vault subscription that has not been renewed, and the grace period has expired. In a few days' time, your stored data will be permanently removed. If you do not wish this to happen, then you should renew as soon as possible."
1805
  msgstr ""
1806
 
1807
- #: methods/updraftvault.php:226
1808
  msgid "You have an UpdraftPlus Vault subscription with overdue payment. You are within the few days of grace period before it will be suspended, and you will lose your quota and access to data stored within it. Please renew as soon as possible!"
1809
  msgstr ""
1810
 
1811
- #: methods/updraftvault.php:223
1812
  msgid "Your UpdraftPlus Premium purchase is over a year ago. You should renew immediately to avoid losing the 12 months of free storage allowance that you get for being a current UpdraftPlus Premium customer."
1813
  msgstr ""
1814
 
1815
- #: methods/updraftvault.php:77
1816
  msgid "Updraft Vault"
1817
  msgstr ""
1818
 
1819
- #: addons/azure.php:365 addons/googlecloud.php:693 methods/s3.php:1042
1820
  msgid "Delete failed:"
1821
  msgstr ""
1822
 
@@ -1824,19 +1840,19 @@ msgstr ""
1824
  msgid "The zip engine returned the message: %s."
1825
  msgstr ""
1826
 
1827
- #: addons/s3-enhanced.php:352
1828
  msgid "Without this permission, UpdraftPlus cannot delete backups - you should also set your 'retain' settings very high to prevent seeing deletion errors."
1829
  msgstr ""
1830
 
1831
- #: addons/s3-enhanced.php:350
1832
  msgid "Allow deletion"
1833
  msgstr ""
1834
 
1835
- #: addons/s3-enhanced.php:348
1836
  msgid "Without this permission, you cannot directly download or restore using UpdraftPlus, and will instead need to visit the AWS website."
1837
  msgstr ""
1838
 
1839
- #: addons/s3-enhanced.php:346
1840
  msgid "Allow download"
1841
  msgstr ""
1842
 
@@ -1844,7 +1860,7 @@ msgstr ""
1844
  msgid "If sending directly from site to site does not work for you, then there are three other methods - please try one of these instead."
1845
  msgstr ""
1846
 
1847
- #: addons/migrator.php:1742 admin.php:659
1848
  msgid "You should check that the remote site is online, not firewalled, does not have security modules that may be blocking access, has UpdraftPlus version %s or later active and that the keys have been entered correctly."
1849
  msgstr ""
1850
 
@@ -1912,19 +1928,19 @@ msgstr ""
1912
  msgid "Backup made by %s"
1913
  msgstr ""
1914
 
1915
- #: methods/addon-base-v2.php:187
1916
  msgid "This storage method does not allow downloading"
1917
  msgstr ""
1918
 
1919
- #: admin.php:3364
1920
  msgid "(backup set imported from remote location)"
1921
  msgstr ""
1922
 
1923
- #: templates/wp-admin/settings/existing-backups-table.php:65
1924
  msgid "Site"
1925
  msgstr ""
1926
 
1927
- #: templates/wp-admin/settings/existing-backups-table.php:64
1928
  msgid "Backup sent to remote site - not available for download."
1929
  msgstr ""
1930
 
@@ -1936,23 +1952,23 @@ msgstr ""
1936
  msgid "This backup set was not known by UpdraftPlus to be created by the current WordPress installation, but was either found in remote storage, or was sent from a remote site."
1937
  msgstr ""
1938
 
1939
- #: addons/migrator.php:1770 admin.php:666
1940
  msgid "Testing connection..."
1941
  msgstr ""
1942
 
1943
- #: admin.php:663
1944
  msgid "Deleting..."
1945
  msgstr ""
1946
 
1947
- #: admin.php:662
1948
  msgid "key name"
1949
  msgstr ""
1950
 
1951
- #: admin.php:660
1952
  msgid "Please give this key a name (e.g. indicate the site it is for):"
1953
  msgstr ""
1954
 
1955
- #: admin.php:657
1956
  msgid "Creating..."
1957
  msgstr ""
1958
 
@@ -1976,11 +1992,11 @@ msgstr ""
1976
  msgid "Or, send a backup to another site"
1977
  msgstr ""
1978
 
1979
- #: addons/migrator.php:1937 admin.php:667
1980
  msgid "Send"
1981
  msgstr ""
1982
 
1983
- #: addons/migrator.php:1931 admin.php:658
1984
  msgid "Send to site:"
1985
  msgstr ""
1986
 
@@ -2044,11 +2060,11 @@ msgstr ""
2044
  msgid "A \"migration\" is ultimately the same as a restoration - but using backup archives that you import from another site."
2045
  msgstr ""
2046
 
2047
- #: addons/migrator.php:2180 admin.php:655
2048
  msgid "Add site"
2049
  msgstr ""
2050
 
2051
- #: admin.php:654
2052
  msgid "Adding..."
2053
  msgstr ""
2054
 
@@ -2080,39 +2096,39 @@ msgstr ""
2080
  msgid "To import a backup set, go to the \"Existing Backups\" tab"
2081
  msgstr ""
2082
 
2083
- #: admin.php:646 admin.php:672 admin.php:673
2084
  msgid "You have made changes to your settings, and not saved."
2085
  msgstr ""
2086
 
2087
- #: addons/onedrive.php:989
2088
  msgid "N.B. %s is not case-sensitive."
2089
  msgstr ""
2090
 
2091
- #: addons/onedrive.php:977
2092
  msgid "If OneDrive later shows you the message \"unauthorized_client\", then you did not enter a valid client ID here."
2093
  msgstr ""
2094
 
2095
- #: addons/azure.php:501 addons/migrator.php:1757 addons/onedrive.php:961
2096
  msgid "For longer help, including screenshots, follow this link."
2097
  msgstr ""
2098
 
2099
- #: addons/onedrive.php:961
2100
  msgid "Create OneDrive credentials in your OneDrive developer console."
2101
  msgstr ""
2102
 
2103
- #: addons/onedrive.php:956
2104
  msgid "You must add the following as the authorised redirect URI in your OneDrive console (under \"API Settings\") when asked"
2105
  msgstr ""
2106
 
2107
- #: addons/onedrive.php:931 addons/onedrive.php:933
2108
  msgid "%s authorisation failed:"
2109
  msgstr ""
2110
 
2111
- #: addons/onedrive.php:793 addons/onedrive.php:976 addons/onedrive.php:980
2112
  msgid "OneDrive"
2113
  msgstr ""
2114
 
2115
- #: addons/onedrive.php:626
2116
  msgid "Please re-authorize the connection to your %s account."
2117
  msgstr ""
2118
 
@@ -2120,152 +2136,152 @@ msgstr ""
2120
  msgid "configure it here"
2121
  msgstr ""
2122
 
2123
- #: addons/onedrive.php:619 methods/updraftvault.php:568
2124
  msgid "To remove the block, please go here."
2125
  msgstr ""
2126
 
2127
- #: addons/s3-enhanced.php:439
2128
  msgid "Do remember to save your settings."
2129
  msgstr ""
2130
 
2131
- #: addons/s3-enhanced.php:439
2132
  msgid "You are now using a IAM user account to access your bucket."
2133
  msgstr ""
2134
 
2135
- #: addons/s3-enhanced.php:344
2136
  msgid "S3 bucket"
2137
  msgstr ""
2138
 
2139
- #: addons/s3-enhanced.php:334
2140
  msgid "China (Beijing) (restricted)"
2141
  msgstr ""
2142
 
2143
- #: addons/s3-enhanced.php:333
2144
  msgid "South America (Sao Paulo)"
2145
  msgstr ""
2146
 
2147
- #: addons/s3-enhanced.php:332
2148
  msgid "Asia Pacific (Tokyo)"
2149
  msgstr ""
2150
 
2151
- #: addons/s3-enhanced.php:330
2152
  msgid "Asia Pacific (Sydney)"
2153
  msgstr ""
2154
 
2155
- #: addons/s3-enhanced.php:329
2156
  msgid "Asia Pacific (Singapore)"
2157
  msgstr ""
2158
 
2159
- #: addons/s3-enhanced.php:323
2160
  msgid "US Government West (restricted)"
2161
  msgstr ""
2162
 
2163
- #: addons/s3-enhanced.php:322
2164
  msgid "US West (N. California)"
2165
  msgstr ""
2166
 
2167
- #: addons/s3-enhanced.php:321
2168
  msgid "US West (Oregon)"
2169
  msgstr ""
2170
 
2171
- #: addons/s3-enhanced.php:319
2172
  msgid "US Standard (default)"
2173
  msgstr ""
2174
 
2175
- #: addons/s3-enhanced.php:315
2176
  msgid "S3 storage region"
2177
  msgstr ""
2178
 
2179
- #: addons/s3-enhanced.php:313
2180
  msgid "New IAM username"
2181
  msgstr ""
2182
 
2183
- #: addons/s3-enhanced.php:312
2184
  msgid "Admin secret key"
2185
  msgstr ""
2186
 
2187
- #: addons/s3-enhanced.php:311
2188
  msgid "Admin access key"
2189
  msgstr ""
2190
 
2191
- #: addons/s3-enhanced.php:304
2192
  msgid "Then, these lower-powered access credentials can be used, instead of storing your administrative keys."
2193
  msgstr ""
2194
 
2195
- #: addons/s3-enhanced.php:304
2196
  msgid "These will be used to create a new user and key pair with an IAM policy attached which will only allow it to access the indicated bucket."
2197
  msgstr ""
2198
 
2199
- #: addons/s3-enhanced.php:304
2200
  msgid "Enter your administrative Amazon S3 access/secret keys (this needs to be a key pair with enough rights to create new users and buckets), and a new (unique) username for the new user and a bucket name."
2201
  msgstr ""
2202
 
2203
- #: addons/s3-enhanced.php:381
2204
  msgid "Create new IAM user and S3 bucket"
2205
  msgstr ""
2206
 
2207
- #: addons/s3-enhanced.php:294
2208
  msgid "Secret Key: %s"
2209
  msgstr ""
2210
 
2211
- #: addons/s3-enhanced.php:294
2212
  msgid "Access Key: %s"
2213
  msgstr ""
2214
 
2215
- #: addons/s3-enhanced.php:282 addons/s3-enhanced.php:284
2216
  msgid "Failed to apply User Policy"
2217
  msgstr ""
2218
 
2219
- #: addons/s3-enhanced.php:223 addons/s3-enhanced.php:227
2220
  msgid "Operation to create user Access Key failed"
2221
  msgstr ""
2222
 
2223
- #: addons/s3-enhanced.php:221
2224
  msgid "Failed to create user Access Key"
2225
  msgstr ""
2226
 
2227
- #: addons/s3-enhanced.php:201 addons/s3-enhanced.php:204
2228
- #: addons/s3-enhanced.php:208
2229
  msgid "IAM operation failed (%s)"
2230
  msgstr ""
2231
 
2232
- #: addons/s3-enhanced.php:199
2233
  msgid "Conflict: that user already exists"
2234
  msgstr ""
2235
 
2236
- #: addons/s3-enhanced.php:171
2237
  msgid "Failure: We could not successfully access or create such a bucket. Please check your access credentials, and if those are correct then try another bucket name (as another AWS user may already have taken your name)."
2238
  msgstr ""
2239
 
2240
- #: addons/s3-enhanced.php:124
2241
  msgid "AWS authentication failed"
2242
  msgstr ""
2243
 
2244
- #: addons/s3-enhanced.php:117
2245
  msgid "Cannot create new AWS user, since the old AWS toolkit is being used."
2246
  msgstr ""
2247
 
2248
- #: addons/s3-enhanced.php:92
2249
  msgid "You need to enter a bucket"
2250
  msgstr ""
2251
 
2252
- #: addons/s3-enhanced.php:89
2253
  msgid "You need to enter a new IAM username"
2254
  msgstr ""
2255
 
2256
- #: addons/s3-enhanced.php:86
2257
  msgid "You need to enter an admin secret key"
2258
  msgstr ""
2259
 
2260
- #: addons/s3-enhanced.php:83
2261
  msgid "You need to enter an admin access key"
2262
  msgstr ""
2263
 
2264
- #: addons/s3-enhanced.php:71
2265
  msgid "If you have an AWS admin user, then you can use this wizard to quickly create a new AWS (IAM) user with access to only this bucket (rather than your whole account)"
2266
  msgstr ""
2267
 
2268
- #: methods/s3.php:844
2269
  msgid "To create a new IAM sub-user and access key that has access only to this bucket, use this add-on."
2270
  msgstr ""
2271
 
@@ -2281,17 +2297,17 @@ msgstr ""
2281
  msgid "Uploads path (%s) has changed during a migration - resetting (to: %s)"
2282
  msgstr ""
2283
 
2284
- #: addons/onedrive.php:596 addons/onedrive.php:619 methods/updraftvault.php:568
2285
  #: udaddons/updraftplus-addons.php:732 udaddons/updraftplus-addons.php:747
2286
  msgid "This most likely means that you share a webserver with a hacked website that has been used in previous attacks."
2287
  msgstr ""
2288
 
2289
- #: addons/onedrive.php:619 methods/updraftvault.php:568
2290
  #: udaddons/updraftplus-addons.php:747
2291
  msgid "It appears that your web server's IP Address (%s) is blocked."
2292
  msgstr ""
2293
 
2294
- #: addons/onedrive.php:619 methods/updraftvault.php:568
2295
  #: udaddons/updraftplus-addons.php:747
2296
  msgid "UpdraftPlus.com has responded with 'Access Denied'."
2297
  msgstr ""
@@ -2342,7 +2358,7 @@ msgstr ""
2342
  msgid "(at same time as files backup)"
2343
  msgstr ""
2344
 
2345
- #: admin.php:2888
2346
  msgid "No backup has been completed"
2347
  msgstr ""
2348
 
@@ -2390,12 +2406,12 @@ msgstr ""
2390
  msgid "Backup (where relevant) plugins, themes and the WordPress database with UpdraftPlus before updating"
2391
  msgstr ""
2392
 
2393
- #: methods/s3.php:138 methods/s3.php:139 methods/s3.php:140 methods/s3.php:148
2394
- #: methods/s3.php:149 methods/s3.php:150
2395
  msgid "%s Error: Failed to initialise"
2396
  msgstr ""
2397
 
2398
- #: templates/wp-admin/settings/form-contents.php:249
2399
  msgctxt "Uploader: Drop db.gz.crypt files here to upload them for decryption - or - Select Files"
2400
  msgid "or"
2401
  msgstr ""
@@ -2405,38 +2421,38 @@ msgctxt "Uploader: Drop backup files here - or - Select Files"
2405
  msgid "or"
2406
  msgstr ""
2407
 
2408
- #: admin.php:640
2409
  msgid "You did not select any components to restore. Please select at least one, and then try again."
2410
  msgstr ""
2411
 
2412
- #: addons/sftp.php:380
2413
  msgctxt "Do not translate BEGIN RSA PRIVATE KEY. PCKS1, XML, PEM and PuTTY are also technical acronyms which should not be translated."
2414
  msgid "PKCS1 (PEM header: BEGIN RSA PRIVATE KEY), XML and PuTTY format keys are accepted."
2415
  msgstr ""
2416
 
2417
- #: addons/sftp.php:343
2418
  msgid "Resuming partial uploads is supported for SFTP, but not for SCP. Thus, if using SCP then you will need to ensure that your webserver allows PHP processes to run long enough to upload your largest backup file."
2419
  msgstr ""
2420
 
2421
- #: methods/openstack2.php:156
2422
  msgctxt "\"tenant\" is a term used with OpenStack storage - Google for \"OpenStack tenant\" to get more help on its meaning"
2423
  msgid "tenant"
2424
  msgstr ""
2425
 
2426
- #: methods/openstack2.php:106
2427
  msgctxt "Keystone and swauth are technical terms which cannot be translated"
2428
  msgid "This needs to be a v2 (Keystone) authentication URI; v1 (Swauth) is not supported."
2429
  msgstr ""
2430
 
2431
- #: templates/wp-admin/settings/form-contents.php:320
2432
  msgid "your site's admin address"
2433
  msgstr ""
2434
 
2435
- #: templates/wp-admin/settings/form-contents.php:320
2436
  msgid "Check this box to have a basic report sent to"
2437
  msgstr ""
2438
 
2439
- #: admin.php:2897
2440
  msgctxt "i.e. Non-automatic"
2441
  msgid "Manual"
2442
  msgstr ""
@@ -2454,7 +2470,7 @@ msgstr ""
2454
  msgid "Any other file/directory on your server that you wish to back up"
2455
  msgstr ""
2456
 
2457
- #: admin.php:2146
2458
  msgid "For even more features and personal support, check out "
2459
  msgstr ""
2460
 
@@ -2470,7 +2486,7 @@ msgstr ""
2470
  msgid "Database decryption phrase"
2471
  msgstr ""
2472
 
2473
- #: addons/autobackup.php:131 addons/autobackup.php:966 admin.php:645
2474
  msgid "Automatic backup before update"
2475
  msgstr ""
2476
 
@@ -2558,15 +2574,15 @@ msgstr ""
2558
  msgid "Note that after you have claimed your add-ons, you can remove your password (but not the email address) from the settings below, without affecting this site's access to updates."
2559
  msgstr ""
2560
 
2561
- #: admin.php:2479 admin.php:3387
2562
  msgid "View Log"
2563
  msgstr ""
2564
 
2565
- #: templates/wp-admin/settings/existing-backups-table.php:13
2566
  msgid "Backup data (click to download)"
2567
  msgstr ""
2568
 
2569
- #: templates/wp-admin/settings/existing-backups-table.php:12
2570
  msgid "Backup date"
2571
  msgstr ""
2572
 
@@ -2575,7 +2591,7 @@ msgstr ""
2575
  msgid "and retain this many scheduled backups"
2576
  msgstr ""
2577
 
2578
- #: admin.php:2858
2579
  msgid "incremental backup; base backup: %s"
2580
  msgstr ""
2581
 
@@ -2587,16 +2603,16 @@ msgstr ""
2587
  msgid "Upload files into UpdraftPlus."
2588
  msgstr ""
2589
 
2590
- #: admin.php:880 includes/class-commands.php:363
2591
  #: templates/wp-admin/settings/tab-status.php:22
2592
  msgid "The 'Backup Now' button is disabled as your backup directory is not writable (go to the 'Settings' tab and find the relevant option)."
2593
  msgstr ""
2594
 
2595
- #: class-updraftplus.php:4073
2596
  msgid "Backup label:"
2597
  msgstr ""
2598
 
2599
- #: admin.php:1674
2600
  msgid "Error: unexpected file read fail"
2601
  msgstr ""
2602
 
@@ -2616,19 +2632,19 @@ msgstr ""
2616
  msgid "Your label for this backup (optional)"
2617
  msgstr ""
2618
 
2619
- #: addons/googlecloud.php:822 methods/googledrive.php:902
2620
  msgid "%s does not allow authorisation of sites hosted on direct IP addresses. You will need to change your site's address (%s) before you can use %s for storage."
2621
  msgstr ""
2622
 
2623
- #: methods/updraftvault.php:607 udaddons/updraftplus-addons.php:789
2624
  msgid "You entered an email address that was not recognised by UpdraftPlus.Com"
2625
  msgstr ""
2626
 
2627
- #: methods/updraftvault.php:604 udaddons/updraftplus-addons.php:785
2628
  msgid "Your email address was valid, but your password was not recognised by UpdraftPlus.Com."
2629
  msgstr ""
2630
 
2631
- #: methods/updraftvault.php:544 udaddons/updraftplus-addons.php:655
2632
  msgid "You need to supply both an email address and a password"
2633
  msgstr ""
2634
 
@@ -2636,11 +2652,11 @@ msgstr ""
2636
  msgid "To proceed, press 'Backup Now'. Then, watch the 'Last Log Message' field for activity."
2637
  msgstr ""
2638
 
2639
- #: class-updraftplus.php:4092
2640
  msgid "If you want to restore a multisite backup, you should first set up your WordPress installation as a multisite."
2641
  msgstr ""
2642
 
2643
- #: class-updraftplus.php:4092
2644
  msgid "Your backup is of a WordPress multisite install; but this site is not. Only the first site of the network will be accessible."
2645
  msgstr ""
2646
 
@@ -2676,19 +2692,19 @@ msgstr ""
2676
  msgid "You need to connect to receive future updates to UpdraftPlus."
2677
  msgstr ""
2678
 
2679
- #: class-updraftplus.php:4065
2680
  msgid "Any support requests to do with %s should be raised with your web hosting company."
2681
  msgstr ""
2682
 
2683
- #: class-updraftplus.php:4065
2684
  msgid "You should only proceed if you cannot update the current server and are confident (or willing to risk) that your plugins/themes/etc. are compatible with the older %s version."
2685
  msgstr ""
2686
 
2687
- #: class-updraftplus.php:4065
2688
  msgid "This is significantly newer than the server which you are now restoring onto (version %s)."
2689
  msgstr ""
2690
 
2691
- #: class-updraftplus.php:4065
2692
  msgid "The site in this backup was running on a webserver with version %s of %s. "
2693
  msgstr ""
2694
 
@@ -2713,7 +2729,7 @@ msgstr ""
2713
  msgid "UpdraftPlus is on social media - check us out!"
2714
  msgstr ""
2715
 
2716
- #: admin.php:3448
2717
  msgid "Why am I seeing this?"
2718
  msgstr ""
2719
 
@@ -2725,15 +2741,15 @@ msgstr ""
2725
  msgid "Press here to look inside your UpdraftPlus directory (in your web hosting space) for any new backup sets that you have uploaded."
2726
  msgstr ""
2727
 
2728
- #: admin.php:1622 admin.php:1634
2729
  msgid "Start backup"
2730
  msgstr ""
2731
 
2732
- #: class-updraftplus.php:4037 restorer.php:996
2733
  msgid "You are using the %s webserver, but do not seem to have the %s module loaded."
2734
  msgstr ""
2735
 
2736
- #: admin.php:2802
2737
  msgid "You will need to consult with your web hosting provider to find out how to set permissions for a WordPress plugin to write to the directory."
2738
  msgstr ""
2739
 
@@ -2741,11 +2757,11 @@ msgstr ""
2741
  msgid "Unless you have a problem, you can completely ignore everything here."
2742
  msgstr ""
2743
 
2744
- #: admin.php:1832
2745
  msgid "This file could not be uploaded"
2746
  msgstr ""
2747
 
2748
- #: admin.php:1797
2749
  msgid "You will find more information about this in the Settings section."
2750
  msgstr ""
2751
 
@@ -2765,7 +2781,7 @@ msgstr ""
2765
  msgid "Memory limit"
2766
  msgstr ""
2767
 
2768
- #: class-updraftplus.php:4195 restorer.php:1441
2769
  msgid "restoration"
2770
  msgstr ""
2771
 
@@ -2793,7 +2809,7 @@ msgstr ""
2793
  msgid "Backup succeeded"
2794
  msgstr ""
2795
 
2796
- #: admin.php:2898 admin.php:2899 admin.php:2900 updraftplus.php:92
2797
  #: updraftplus.php:93
2798
  msgid "Every %s hours"
2799
  msgstr ""
@@ -2848,11 +2864,11 @@ msgstr ""
2848
  msgid "N.B. If you install UpdraftPlus on several WordPress sites, then you cannot re-use your project; you must create a new one from your Google API console for each site."
2849
  msgstr ""
2850
 
2851
- #: admin.php:3216
2852
  msgid "You have not yet made any backups."
2853
  msgstr ""
2854
 
2855
- #: templates/wp-admin/settings/form-contents.php:212
2856
  msgid "Database Options"
2857
  msgstr ""
2858
 
@@ -2868,30 +2884,30 @@ msgstr ""
2868
  msgid "Free disk space in account:"
2869
  msgstr ""
2870
 
2871
- #: admin.php:3974 templates/wp-admin/settings/tab-status.php:27
2872
  msgid "This button is disabled because your backup directory is not writable (see the settings)."
2873
  msgstr ""
2874
 
2875
- #: admin.php:480 admin.php:614 admin.php:1487
2876
  #: includes/deprecated-actions.php:30
2877
  #: templates/wp-admin/settings/downloading-and-restoring.php:22
2878
  #: templates/wp-admin/settings/tab-bar.php:6
2879
  msgid "Existing Backups"
2880
  msgstr ""
2881
 
2882
- #: admin.php:472 templates/wp-admin/settings/tab-bar.php:5
2883
  msgid "Current Status"
2884
  msgstr ""
2885
 
2886
- #: admin.php:885
2887
  msgid "To change any of the default settings of what is backed up, to configure scheduled backups, to send your backups to remote storage (recommended), and more, go to the settings tab."
2888
  msgstr ""
2889
 
2890
- #: admin.php:885
2891
  msgid "To make a backup, just press the Backup Now button."
2892
  msgstr ""
2893
 
2894
- #: admin.php:885
2895
  msgid "Welcome to UpdraftPlus!"
2896
  msgstr ""
2897
 
@@ -2963,7 +2979,7 @@ msgstr ""
2963
  msgid "user"
2964
  msgstr ""
2965
 
2966
- #: class-updraftplus.php:1554
2967
  msgid "External database (%s)"
2968
  msgstr ""
2969
 
@@ -2975,36 +2991,36 @@ msgstr ""
2975
  msgid "failed to access parent folder"
2976
  msgstr ""
2977
 
2978
- #: addons/googlecloud.php:559 addons/onedrive.php:761 addons/onedrive.php:772
2979
  #: methods/googledrive.php:328
2980
  msgid "However, subsequent access attempts failed:"
2981
  msgstr ""
2982
 
2983
- #: admin.php:3241
2984
  msgid "External database"
2985
  msgstr ""
2986
 
2987
- #: templates/wp-admin/settings/form-contents.php:354
2988
  msgid "This will also cause debugging output from all plugins to be shown upon this screen - please do not be surprised to see these."
2989
  msgstr ""
2990
 
2991
- #: templates/wp-admin/settings/form-contents.php:294
2992
  msgid "Back up more databases"
2993
  msgstr ""
2994
 
2995
- #: templates/wp-admin/settings/form-contents.php:251
2996
  msgid "First, enter the decryption key"
2997
  msgstr ""
2998
 
2999
- #: templates/wp-admin/settings/form-contents.php:233
3000
  msgid "You can manually decrypt an encrypted database here."
3001
  msgstr ""
3002
 
3003
- #: templates/wp-admin/settings/form-contents.php:221
3004
  msgid "It can also backup external databases."
3005
  msgstr ""
3006
 
3007
- #: templates/wp-admin/settings/form-contents.php:221
3008
  msgid "Don't want to be spied on? UpdraftPlus Premium can encrypt your database backup."
3009
  msgstr ""
3010
 
@@ -3012,7 +3028,7 @@ msgstr ""
3012
  msgid "use UpdraftPlus Premium"
3013
  msgstr ""
3014
 
3015
- #: class-updraftplus.php:3955
3016
  msgid "Decryption failed. The database file is encrypted."
3017
  msgstr ""
3018
 
@@ -3040,52 +3056,52 @@ msgstr ""
3040
  msgid "In %s, path names are case sensitive."
3041
  msgstr ""
3042
 
3043
- #: addons/azure.php:523 addons/google-enhanced.php:82 addons/onedrive.php:989
3044
  msgid "If you leave it blank, then the backup will be placed in the root of your %s"
3045
  msgstr ""
3046
 
3047
- #: addons/google-enhanced.php:82 addons/googlecloud.php:860
3048
- #: addons/onedrive.php:989
3049
  msgid "e.g. %s"
3050
  msgstr ""
3051
 
3052
- #: addons/google-enhanced.php:82 addons/onedrive.php:989
3053
  msgid "If the folder does not already exist, then it will be created."
3054
  msgstr ""
3055
 
3056
- #: addons/google-enhanced.php:82 addons/onedrive.php:989
3057
  msgid "Enter the path of the %s folder you wish to use here."
3058
  msgstr ""
3059
 
3060
- #: addons/azure.php:516 methods/openstack2.php:137
3061
  msgid "Container"
3062
  msgstr ""
3063
 
3064
- #: methods/openstack2.php:120
3065
  msgid "Leave this blank, and a default will be chosen."
3066
  msgstr ""
3067
 
3068
- #: methods/openstack2.php:111
3069
  msgid "Tenant"
3070
  msgstr ""
3071
 
3072
- #: methods/openstack2.php:111
3073
  msgid "Follow this link for more information"
3074
  msgstr ""
3075
 
3076
- #: methods/openstack2.php:103 methods/openstack2.php:161
3077
  msgid "authentication URI"
3078
  msgstr ""
3079
 
3080
- #: methods/openstack2.php:98
3081
  msgid "Get your access credentials from your OpenStack Swift provider, and then pick a container name to use for storage. This container will be created for you if it does not already exist."
3082
  msgstr ""
3083
 
3084
- #: methods/addon-base-v2.php:204 methods/addon-base-v2.php:224
3085
  msgid "Failed to download %s"
3086
  msgstr ""
3087
 
3088
- #: methods/addon-base-v2.php:218
3089
  msgid "Failed to download"
3090
  msgstr ""
3091
 
@@ -3097,27 +3113,27 @@ msgstr ""
3097
  msgid "Failed to upload %s"
3098
  msgstr ""
3099
 
3100
- #: methods/dropbox.php:599 methods/dropbox.php:601
3101
  msgid "Success:"
3102
  msgstr ""
3103
 
3104
- #: addons/onedrive.php:997 methods/dropbox.php:500
3105
  msgid "<strong>After</strong> you have saved your settings (by clicking 'Save Changes' below), then come back here once and click this link to complete authentication with %s."
3106
  msgstr ""
3107
 
3108
- #: addons/onedrive.php:995 methods/dropbox.php:497
3109
  msgid "(You appear to be already authenticated)."
3110
  msgstr ""
3111
 
3112
- #: methods/dropbox.php:492 methods/dropbox.php:498 methods/dropbox.php:500
3113
  msgid "Dropbox"
3114
  msgstr ""
3115
 
3116
- #: addons/onedrive.php:994 methods/dropbox.php:492
3117
  msgid "Authenticate with %s"
3118
  msgstr ""
3119
 
3120
- #: methods/cloudfiles.php:396
3121
  msgid "Error downloading remote file: Failed to download"
3122
  msgstr ""
3123
 
@@ -3144,7 +3160,7 @@ msgstr ""
3144
  msgid "%s error - failed to access the container"
3145
  msgstr ""
3146
 
3147
- #: addons/googlecloud.php:902 addons/onedrive.php:996 methods/dropbox.php:507
3148
  #: methods/googledrive.php:957
3149
  msgid "Account holder's name: %s."
3150
  msgstr ""
@@ -3161,17 +3177,17 @@ msgstr ""
3161
  msgid "<strong>This is NOT a folder name</strong>."
3162
  msgstr ""
3163
 
3164
- #: addons/google-enhanced.php:81 addons/onedrive.php:988
3165
  #: methods/googledrive.php:933 methods/googledrive.php:943
3166
  msgid "Folder"
3167
  msgstr ""
3168
 
3169
- #: addons/googlecloud.php:254 addons/onedrive.php:373
3170
  #: methods/googledrive.php:863
3171
  msgid "%s download: failed: file not found"
3172
  msgstr ""
3173
 
3174
- #: addons/googlecloud.php:579 methods/googledrive.php:348
3175
  msgid "Name: %s."
3176
  msgstr ""
3177
 
@@ -3191,7 +3207,7 @@ msgstr ""
3191
  msgid "This remote storage method (%s) requires PHP %s or later."
3192
  msgstr ""
3193
 
3194
- #: admin.php:3793
3195
  msgid "Theme directory (%s) not found, but lower-case version exists; updating database option accordingly"
3196
  msgstr ""
3197
 
@@ -3205,7 +3221,7 @@ msgstr ""
3205
 
3206
  #: addons/migrator.php:375
3207
  #: templates/wp-admin/settings/downloading-and-restoring.php:56
3208
- #: templates/wp-admin/settings/form-contents.php:241
3209
  msgid "This feature requires %s version %s or later"
3210
  msgstr ""
3211
 
@@ -3221,7 +3237,7 @@ msgstr ""
3221
  msgid "Failed to unpack the archive"
3222
  msgstr ""
3223
 
3224
- #: class-updraftplus.php:1112
3225
  msgid "Error - failed to download the file"
3226
  msgstr ""
3227
 
@@ -3241,16 +3257,16 @@ msgstr ""
3241
  msgid "The installed version of UpdraftPlus Backup/Restore has not been tested on your version of WordPress (%s)."
3242
  msgstr ""
3243
 
3244
- #: addons/sftp.php:426
3245
  msgid "password/key"
3246
  msgstr ""
3247
 
3248
- #: addons/azure.php:509 addons/migrator.php:2198 addons/sftp.php:377
3249
- #: admin.php:661
3250
  msgid "Key"
3251
  msgstr ""
3252
 
3253
- #: addons/sftp.php:372
3254
  msgid "Your login may be either password or key-based - you only need to enter one, not both."
3255
  msgstr ""
3256
 
@@ -3262,23 +3278,23 @@ msgstr ""
3262
  msgid "SCP/SFTP password/key"
3263
  msgstr ""
3264
 
3265
- #: admin.php:3276
3266
  msgid "Files backup (created by %s)"
3267
  msgstr ""
3268
 
3269
- #: admin.php:3276
3270
  msgid "Files and database WordPress backup (created by %s)"
3271
  msgstr ""
3272
 
3273
- #: addons/importer.php:261 admin.php:3270 class-updraftplus.php:2612
3274
  msgid "Backup created by: %s."
3275
  msgstr ""
3276
 
3277
- #: admin.php:3239
3278
  msgid "Database (created by %s)"
3279
  msgstr ""
3280
 
3281
- #: admin.php:3233 admin.php:3272
3282
  msgid "unknown source"
3283
  msgstr ""
3284
 
@@ -3290,31 +3306,31 @@ msgstr ""
3290
  msgid "Upload backup files"
3291
  msgstr ""
3292
 
3293
- #: admin.php:1876
3294
  msgid "This backup was created by %s, and can be imported."
3295
  msgstr ""
3296
 
3297
- #: admin.php:914
3298
  msgid "Read this page for a guide to possible causes and how to fix it."
3299
  msgstr ""
3300
 
3301
- #: admin.php:914
3302
  msgid "WordPress has a number (%d) of scheduled tasks which are overdue. Unless this is a development site, this probably means that the scheduler in your WordPress install is not working."
3303
  msgstr ""
3304
 
3305
- #: admin.php:626 class-updraftplus.php:2619
3306
  msgid "If this is a backup created by a different backup plugin, then UpdraftPlus Premium may be able to help you."
3307
  msgstr ""
3308
 
3309
- #: admin.php:625
3310
  msgid "However, UpdraftPlus archives are standard zip/SQL files - so if you are sure that your file has the right format, then you can rename it to match that pattern."
3311
  msgstr ""
3312
 
3313
- #: admin.php:625 admin.php:626 class-updraftplus.php:2619
3314
  msgid "This file does not appear to be an UpdraftPlus backup archive (such files are .zip or .gz files which have a name like: backup_(time)_(site name)_(code)_(type).(zip|gz))."
3315
  msgstr ""
3316
 
3317
- #: admin.php:3273 includes/class-wpadmin-commands.php:143 restorer.php:1410
3318
  msgid "Backup created by unknown source (%s) - cannot be restored."
3319
  msgstr ""
3320
 
@@ -3326,29 +3342,29 @@ msgstr ""
3326
  msgid "This version of UpdraftPlus does not know how to handle this type of foreign backup"
3327
  msgstr ""
3328
 
3329
- #: methods/dropbox.php:285
3330
  msgid "%s returned an unexpected HTTP response: %s"
3331
  msgstr ""
3332
 
3333
- #: addons/sftp.php:886
3334
  msgid "The UpdraftPlus module for this file access method (%s) does not support listing files"
3335
  msgstr ""
3336
 
3337
- #: methods/cloudfiles.php:221 methods/dropbox.php:266
3338
  #: methods/openstack-base.php:107
3339
  msgid "No settings were found"
3340
  msgstr ""
3341
 
3342
- #: class-updraftplus.php:2740
3343
  msgid "One or more backups has been added from scanning remote storage; note that these backups will not be automatically deleted through the \"retain\" settings; if/when you wish to delete them then you must do so manually."
3344
  msgstr ""
3345
 
3346
- #: admin.php:592
3347
  msgid "Rescanning remote and local storage for backup sets..."
3348
  msgstr ""
3349
 
3350
- #: addons/googlecloud.php:865 addons/googlecloud.php:880
3351
- #: addons/s3-enhanced.php:46 addons/s3-enhanced.php:60
3352
  msgid "(Read more)"
3353
  msgstr ""
3354
 
@@ -3369,15 +3385,15 @@ msgstr ""
3369
  msgid "Remove"
3370
  msgstr ""
3371
 
3372
- #: methods/s3.php:816
3373
  msgid "Other %s FAQs."
3374
  msgstr ""
3375
 
3376
- #: templates/wp-admin/settings/form-contents.php:354
3377
  msgid "Check this to receive more information and emails on the backup process - useful if something is going wrong."
3378
  msgstr ""
3379
 
3380
- #: addons/morefiles.php:442 admin.php:2990
3381
  msgid "If entering multiple files/directories, then separate them with commas. For entities at the top level, you can use a * at the start or end of the entry as a wildcard."
3382
  msgstr ""
3383
 
@@ -3385,11 +3401,11 @@ msgstr ""
3385
  msgid "Custom content type manager plugin data detected: clearing option cache"
3386
  msgstr ""
3387
 
3388
- #: class-updraftplus.php:4195 methods/ftp.php:291 restorer.php:1441
3389
  msgid "Your hosting company must enable these functions before %s can work."
3390
  msgstr ""
3391
 
3392
- #: class-updraftplus.php:4195 methods/ftp.php:291 restorer.php:1440
3393
  msgid "Your web server's PHP installation has these functions disabled: %s."
3394
  msgstr ""
3395
 
@@ -3457,15 +3473,15 @@ msgstr ""
3457
  msgid "Dismiss from main dashboard (for %s weeks)"
3458
  msgstr ""
3459
 
3460
- #: class-updraftplus.php:4245
3461
  msgid "The attempt to undo the double-compression succeeded."
3462
  msgstr ""
3463
 
3464
- #: class-updraftplus.php:4222 class-updraftplus.php:4243
3465
  msgid "The attempt to undo the double-compression failed."
3466
  msgstr ""
3467
 
3468
- #: class-updraftplus.php:4215
3469
  msgid "The database file appears to have been compressed twice - probably the website you downloaded it from had a mis-configured webserver."
3470
  msgstr ""
3471
 
@@ -3501,7 +3517,7 @@ msgstr ""
3501
  msgid "Skipping this table: data in this table (%s) should not be search/replaced"
3502
  msgstr ""
3503
 
3504
- #: addons/onedrive.php:97
3505
  msgid "Account full: your %s account has only %d bytes left, but the file to be uploaded has %d bytes remaining (total size: %d bytes)"
3506
  msgstr ""
3507
 
@@ -3509,11 +3525,11 @@ msgstr ""
3509
  msgid "Errors occurred:"
3510
  msgstr ""
3511
 
3512
- #: admin.php:3468
3513
  msgid "Follow this link to download the log file for this restoration (needed for any support requests)."
3514
  msgstr ""
3515
 
3516
- #: templates/wp-admin/settings/form-contents.php:398
3517
  msgid "See this FAQ also."
3518
  msgstr ""
3519
 
@@ -3533,7 +3549,7 @@ msgstr ""
3533
  msgid "Existing unremoved folders from a previous restore exist (please use the \"Delete Old Directories\" button to delete them before trying again): %s"
3534
  msgstr ""
3535
 
3536
- #: admin.php:889 class-updraftplus.php:661
3537
  msgid "The amount of time allowed for WordPress plugins to run is very low (%s seconds) - you should increase it to avoid backup failures due to time-outs (consult your web hosting company for more help - it is the max_execution_time PHP setting; the recommended value is %s seconds or more)"
3538
  msgstr ""
3539
 
@@ -3549,20 +3565,20 @@ msgstr ""
3549
  msgid "Disabled this plugin: %s: re-activate it manually when you are ready."
3550
  msgstr ""
3551
 
3552
- #: addons/sftp.php:641 addons/sftp.php:644 includes/ftp.class.php:44
3553
  #: includes/ftp.class.php:47
3554
  msgid "The %s connection timed out; if you entered the server correctly, then this is usually caused by a firewall blocking the connection - you should check with your web hosting company."
3555
  msgstr ""
3556
 
3557
- #: admin.php:3801
3558
  msgid "The current theme was not found; to prevent this stopping the site from loading, your theme has been reverted to the default theme"
3559
  msgstr ""
3560
 
3561
- #: admin.php:2054 admin.php:2064
3562
  msgid "Restore failed..."
3563
  msgstr ""
3564
 
3565
- #: addons/moredatabase.php:130 admin.php:1276
3566
  msgid "Messages:"
3567
  msgstr ""
3568
 
@@ -3610,7 +3626,7 @@ msgstr ""
3610
  msgid "Password: %s"
3611
  msgstr ""
3612
 
3613
- #: addons/cloudfiles-enhanced.php:181 addons/s3-enhanced.php:294
3614
  msgid "Username: %s"
3615
  msgstr ""
3616
 
@@ -3656,98 +3672,98 @@ msgstr ""
3656
  msgid "Rackspace Cloud Files, enhanced"
3657
  msgstr ""
3658
 
3659
- #: addons/cloudfiles-enhanced.php:275 methods/cloudfiles-new.php:143
3660
  msgid "Cloud Files Container"
3661
  msgstr ""
3662
 
3663
- #: methods/cloudfiles-new.php:138
3664
  msgid "Cloud Files API Key"
3665
  msgstr ""
3666
 
3667
- #: methods/cloudfiles-new.php:133
3668
  msgid "To create a new Rackspace API sub-user and API key that has access only to this Rackspace container, use this add-on."
3669
  msgstr ""
3670
 
3671
- #: methods/cloudfiles-new.php:130
3672
  msgid "Cloud Files Username"
3673
  msgstr ""
3674
 
3675
- #: addons/cloudfiles-enhanced.php:45 methods/cloudfiles-new.php:116
3676
  msgid "London (LON)"
3677
  msgstr ""
3678
 
3679
- #: addons/cloudfiles-enhanced.php:44 methods/cloudfiles-new.php:115
3680
  msgid "Hong Kong (HKG)"
3681
  msgstr ""
3682
 
3683
- #: addons/cloudfiles-enhanced.php:43 methods/cloudfiles-new.php:114
3684
  msgid "Northern Virginia (IAD)"
3685
  msgstr ""
3686
 
3687
- #: addons/cloudfiles-enhanced.php:42 methods/cloudfiles-new.php:113
3688
  msgid "Chicago (ORD)"
3689
  msgstr ""
3690
 
3691
- #: addons/cloudfiles-enhanced.php:41 methods/cloudfiles-new.php:112
3692
  msgid "Sydney (SYD)"
3693
  msgstr ""
3694
 
3695
- #: addons/cloudfiles-enhanced.php:40 methods/cloudfiles-new.php:111
3696
  msgid "Dallas (DFW) (default)"
3697
  msgstr ""
3698
 
3699
- #: addons/cloudfiles-enhanced.php:271 methods/cloudfiles-new.php:106
3700
  msgid "Cloud Files Storage Region"
3701
  msgstr ""
3702
 
3703
- #: methods/cloudfiles-new.php:98
3704
  msgid "Accounts created at rackspacecloud.com are US-accounts; accounts created at rackspace.co.uk are UK-based"
3705
  msgstr ""
3706
 
3707
- #: methods/cloudfiles-new.php:96
3708
  msgid "US or UK-based Rackspace Account"
3709
  msgstr ""
3710
 
3711
- #: addons/cloudfiles-enhanced.php:255 methods/cloudfiles-new.php:96
3712
  msgid "Accounts created at rackspacecloud.com are US accounts; accounts created at rackspace.co.uk are UK accounts."
3713
  msgstr ""
3714
 
3715
- #: addons/cloudfiles-enhanced.php:136 addons/s3-enhanced.php:197
3716
  #: methods/cloudfiles-new.php:39 methods/openstack-base.php:435
3717
  #: methods/openstack-base.php:437 methods/openstack-base.php:457
3718
  #: methods/openstack2.php:25
3719
  msgid "Authorisation failed (check your credentials)"
3720
  msgstr ""
3721
 
3722
- #: methods/updraftvault.php:524 udaddons/options.php:272
3723
  msgid "An unknown error occurred when trying to connect to UpdraftPlus.Com"
3724
  msgstr ""
3725
 
3726
- #: admin.php:639 central/bootstrap.php:513
3727
  msgid "Create"
3728
  msgstr ""
3729
 
3730
- #: admin.php:601
3731
  msgid "Trying..."
3732
  msgstr ""
3733
 
3734
- #: admin.php:600
3735
  msgid "The new user's RackSpace console password is (this will not be shown again):"
3736
  msgstr ""
3737
 
3738
- #: class-updraftplus.php:1566
3739
  msgid "(when decrypted)"
3740
  msgstr ""
3741
 
3742
- #: admin.php:611 admin.php:3743
3743
  msgid "Error data:"
3744
  msgstr ""
3745
 
3746
- #: admin.php:3419
3747
  msgid "Backup does not exist in the backup history"
3748
  msgstr ""
3749
 
3750
- #: admin.php:2423
3751
  msgid "Your WordPress install has old directories from its state before you restored/migrated (technical information: these are suffixed with -old). You should press this button to delete them as soon as you have verified that the restoration worked."
3752
  msgstr ""
3753
 
@@ -3799,11 +3815,11 @@ msgstr ""
3799
  msgid "Email reports"
3800
  msgstr ""
3801
 
3802
- #: class-updraftplus.php:1562 class-updraftplus.php:1567
3803
  msgid "%s checksum: %s"
3804
  msgstr ""
3805
 
3806
- #: class-updraftplus.php:1535 class-updraftplus.php:1537
3807
  msgid "files: %s"
3808
  msgstr ""
3809
 
@@ -3823,7 +3839,7 @@ msgstr ""
3823
  msgid "Debugging information"
3824
  msgstr ""
3825
 
3826
- #: addons/reporting.php:194 admin.php:3179
3827
  msgid "Uploaded to:"
3828
  msgstr ""
3829
 
@@ -3863,24 +3879,24 @@ msgstr ""
3863
  msgid "%d errors, %d warnings"
3864
  msgstr ""
3865
 
3866
- #: addons/onedrive.php:717 methods/dropbox.php:583
3867
  msgid "%s authentication"
3868
  msgstr ""
3869
 
3870
- #: addons/onedrive.php:717 class-updraftplus.php:366 methods/dropbox.php:556
3871
- #: methods/dropbox.php:583 methods/dropbox.php:596 methods/dropbox.php:727
3872
  msgid "%s error: %s"
3873
  msgstr ""
3874
 
3875
- #: addons/googlecloud.php:815 methods/dropbox.php:467
3876
  msgid "%s logo"
3877
  msgstr ""
3878
 
3879
- #: methods/dropbox.php:199
3880
  msgid "%s did not return the expected response - check your log file for more details"
3881
  msgstr ""
3882
 
3883
- #: methods/s3.php:281
3884
  msgid "The required %s PHP module is not installed - ask your web hosting company to enable it"
3885
  msgstr ""
3886
 
@@ -3892,24 +3908,24 @@ msgstr ""
3892
  msgid "Your site's admin email address (%s) will be used."
3893
  msgstr ""
3894
 
3895
- #: admin.php:648 methods/updraftvault.php:274 methods/updraftvault.php:319
3896
  #: udaddons/options.php:251
3897
  msgid "Connect"
3898
  msgstr ""
3899
 
3900
- #: templates/wp-admin/settings/form-contents.php:322
3901
  msgid "For more reporting features, use the Reporting add-on."
3902
  msgstr ""
3903
 
3904
- #: class-updraftplus.php:4025
3905
  msgid "(version: %s)"
3906
  msgstr ""
3907
 
3908
- #: addons/reporting.php:438 admin.php:590
3909
  msgid "Be aware that mail servers tend to have size limits; typically around %s Mb; backups larger than any limits will likely not arrive."
3910
  msgstr ""
3911
 
3912
- #: addons/reporting.php:438 admin.php:589
3913
  msgid "When the Email storage method is enabled, also send the entire backup"
3914
  msgstr ""
3915
 
@@ -3949,7 +3965,7 @@ msgstr ""
3949
  msgid "Files (database backup has not completed)"
3950
  msgstr ""
3951
 
3952
- #: admin.php:253 backup.php:851
3953
  msgid "Files and database"
3954
  msgstr ""
3955
 
@@ -4013,16 +4029,16 @@ msgstr ""
4013
  msgid "An update is available for UpdraftPlus - please follow this link to get it."
4014
  msgstr ""
4015
 
4016
- #: methods/updraftvault.php:597 methods/updraftvault.php:615
4017
  #: udaddons/updraftplus-addons.php:795
4018
  msgid "UpdraftPlus.Com returned a response, but we could not understand it"
4019
  msgstr ""
4020
 
4021
- #: methods/updraftvault.php:611 udaddons/updraftplus-addons.php:792
4022
  msgid "Your email address and password were not recognised by UpdraftPlus.Com"
4023
  msgstr ""
4024
 
4025
- #: methods/updraftvault.php:570 udaddons/updraftplus-addons.php:752
4026
  msgid "UpdraftPlus.Com returned a response which we could not understand (data: %s)"
4027
  msgstr ""
4028
 
@@ -4034,16 +4050,16 @@ msgstr ""
4034
  msgid "We failed to successfully connect to UpdraftPlus.Com"
4035
  msgstr ""
4036
 
4037
- #: methods/email.php:76 templates/wp-admin/settings/form-contents.php:303
4038
  #: templates/wp-admin/settings/tab-addons.php:200
4039
  msgid "Reporting"
4040
  msgstr ""
4041
 
4042
- #: admin.php:4154
4043
  msgid "Options (raw)"
4044
  msgstr ""
4045
 
4046
- #: addons/reporting.php:436 admin.php:588
4047
  msgid "Send a report only when there are warnings/errors"
4048
  msgstr ""
4049
 
@@ -4055,15 +4071,15 @@ msgstr ""
4055
  msgid "You should check the file ownerships and permissions in your WordPress installation"
4056
  msgstr ""
4057
 
4058
- #: templates/wp-admin/settings/form-contents.php:207
4059
  msgid "See also the \"More Files\" add-on from our shop."
4060
  msgstr ""
4061
 
4062
- #: backup.php:3012 class-updraftplus.php:674
4063
  msgid "Your free space in your hosting account is very low - only %s Mb remain"
4064
  msgstr ""
4065
 
4066
- #: class-updraftplus.php:658
4067
  msgid "The amount of memory (RAM) allowed for PHP is very low (%s Mb) - you should increase it to avoid failures due to insufficient memory (consult your web hosting company for more help)"
4068
  msgstr ""
4069
 
@@ -4195,7 +4211,7 @@ msgstr ""
4195
  msgid "Your web-server does not have the %s module installed."
4196
  msgstr ""
4197
 
4198
- #: addons/googlecloud.php:898 methods/googledrive.php:953
4199
  msgid "<strong>(You appear to be already authenticated,</strong> though you can authenticate again to refresh your access if you've had a problem)."
4200
  msgstr ""
4201
 
@@ -4203,15 +4219,15 @@ msgstr ""
4203
  msgid "Drop backup files here"
4204
  msgstr ""
4205
 
4206
- #: admin.php:599
4207
  msgid "The web server returned an error code (try again, or check your web server logs)"
4208
  msgstr ""
4209
 
4210
- #: admin.php:597
4211
  msgid "The restore operation has begun. Do not press stop or close your browser until it reports itself as having finished."
4212
  msgstr ""
4213
 
4214
- #: admin.php:594
4215
  msgid "If you exclude both the database and the files, then you have excluded everything!"
4216
  msgstr ""
4217
 
@@ -4231,7 +4247,7 @@ msgstr ""
4231
  msgid "Remember this choice for next time (you will still have the chance to change it)"
4232
  msgstr ""
4233
 
4234
- #: addons/azure.php:350 methods/stream-base.php:121 methods/stream-base.php:126
4235
  msgid "Upload failed"
4236
  msgstr ""
4237
 
@@ -4239,11 +4255,11 @@ msgstr ""
4239
  msgid "You can send a backup to more than one destination with an add-on."
4240
  msgstr ""
4241
 
4242
- #: admin.php:2641
4243
  msgid "Note: the progress bar below is based on stages, NOT time. Do not stop the backup simply because it seems to have remained in the same place for a while - that is normal."
4244
  msgstr ""
4245
 
4246
- #: admin.php:2539
4247
  msgid "(%s%%, file %s of %s)"
4248
  msgstr ""
4249
 
@@ -4252,15 +4268,15 @@ msgstr ""
4252
  msgid "Read more about how this works..."
4253
  msgstr ""
4254
 
4255
- #: addons/sftp.php:486
4256
  msgid "Failed: We were able to log in, but failed to successfully create a file in that location."
4257
  msgstr ""
4258
 
4259
- #: addons/sftp.php:484
4260
  msgid "Failed: We were able to log in and move to the indicated directory, but failed to successfully create a file in that location."
4261
  msgstr ""
4262
 
4263
- #: addons/sftp.php:403
4264
  msgid "Use SCP instead of SFTP"
4265
  msgstr ""
4266
 
@@ -4280,96 +4296,96 @@ msgstr ""
4280
  msgid "Backup is of: %s."
4281
  msgstr ""
4282
 
4283
- #: admin.php:687
4284
  msgid "%s settings test result:"
4285
  msgstr ""
4286
 
4287
- #: admin.php:3337 admin.php:3339
4288
  msgid "(Not finished)"
4289
  msgstr ""
4290
 
4291
- #: admin.php:3339
4292
  msgid "If you are seeing more backups than you expect, then it is probably because the deletion of old backup sets does not happen until a fresh backup completes."
4293
  msgstr ""
4294
 
4295
- #: templates/wp-admin/settings/form-contents.php:381
4296
  msgid "<b>Do not</b> place it inside your uploads or plugins directory, as that will cause recursion (backups of backups of backups of...)."
4297
  msgstr ""
4298
 
4299
- #: templates/wp-admin/settings/form-contents.php:381
4300
  msgid "This is where UpdraftPlus will write the zip files it creates initially. This directory must be writable by your web server. It is relative to your content directory (which by default is called wp-content)."
4301
  msgstr ""
4302
 
4303
- #: admin.php:2636
4304
  msgid "Job ID: %s"
4305
  msgstr ""
4306
 
4307
- #: admin.php:2621
4308
  msgid "last activity: %ss ago"
4309
  msgstr ""
4310
 
4311
- #: admin.php:2620
4312
  msgid "next resumption: %d (after %ss)"
4313
  msgstr ""
4314
 
4315
- #: admin.php:2603 central/bootstrap.php:405 central/bootstrap.php:412
4316
- #: methods/updraftvault.php:354 methods/updraftvault.php:434
4317
  msgid "Unknown"
4318
  msgstr ""
4319
 
4320
- #: admin.php:2553
4321
  msgid "Backup finished"
4322
  msgstr ""
4323
 
4324
- #: admin.php:2548
4325
  msgid "Waiting until scheduled time to retry because of errors"
4326
  msgstr ""
4327
 
4328
- #: admin.php:2544
4329
  msgid "Pruning old backup sets"
4330
  msgstr ""
4331
 
4332
- #: admin.php:2532
4333
  msgid "Uploading files to remote storage"
4334
  msgstr ""
4335
 
4336
- #: admin.php:2601
4337
  msgid "Encrypted database"
4338
  msgstr ""
4339
 
4340
- #: admin.php:2593
4341
  msgid "Encrypting database"
4342
  msgstr ""
4343
 
4344
- #: admin.php:2567
4345
  msgid "Created database backup"
4346
  msgstr ""
4347
 
4348
- #: admin.php:2580
4349
  msgid "table: %s"
4350
  msgstr ""
4351
 
4352
- #: admin.php:2578
4353
  msgid "Creating database backup"
4354
  msgstr ""
4355
 
4356
- #: admin.php:2526
4357
  msgid "Created file backup zips"
4358
  msgstr ""
4359
 
4360
- #: admin.php:2513
4361
  msgid "Creating file backup zips"
4362
  msgstr ""
4363
 
4364
- #: admin.php:2508
4365
  msgid "Backup begun"
4366
  msgstr ""
4367
 
4368
- #: admin.php:2351
4369
  msgid "Backups in progress:"
4370
  msgstr ""
4371
 
4372
- #: admin.php:893
4373
  msgid "The scheduler is disabled in your WordPress install, via the DISABLE_WP_CRON setting. No backups can run (even &quot;Backup Now&quot;) unless either you have set up a facility to call the scheduler manually, or until it is enabled."
4374
  msgstr ""
4375
 
@@ -4385,26 +4401,26 @@ msgstr ""
4385
  msgid "UpdraftPlus needed to create a %s in your content directory, but failed - please check your file permissions and enable the access (%s)"
4386
  msgstr ""
4387
 
4388
- #: class-updraftplus.php:2837
4389
  msgid "The backup has not finished; a resumption is scheduled"
4390
  msgstr ""
4391
 
4392
- #: class-updraftplus.php:1807
4393
  msgid "Your website is visited infrequently and UpdraftPlus is not getting the resources it hoped for; please read this page:"
4394
  msgstr ""
4395
 
4396
- #: addons/googlecloud.php:337 addons/onedrive.php:880
4397
  #: includes/Dropbox/OAuth/Consumer/ConsumerAbstract.php:115
4398
  #: includes/Dropbox2/OAuth/Consumer/ConsumerAbstract.php:118
4399
  #: methods/googledrive.php:229
4400
  msgid "The %s authentication could not go ahead, because something else on your site is breaking it. Try disabling your other plugins and switching to a default theme. (Specifically, you are looking for the component that sends output (most likely PHP warnings/errors) before the page begins. Turning off any debugging settings may also help)."
4401
  msgstr ""
4402
 
4403
- #: admin.php:2174
4404
  msgid "Your PHP memory limit (set by your web hosting company) is very low. UpdraftPlus attempted to raise it but was unsuccessful. This plugin may struggle with a memory limit of less than 64 Mb - especially if you have very large files uploaded (though on the other hand, many sites will be successful with a 32Mb limit - your experience may vary)."
4405
  msgstr ""
4406
 
4407
- #: addons/autobackup.php:1006 admin.php:641
4408
  msgid "Proceed with update"
4409
  msgstr ""
4410
 
@@ -4482,31 +4498,31 @@ msgstr ""
4482
  msgid "Support"
4483
  msgstr ""
4484
 
4485
- #: class-updraftplus.php:4178
4486
  msgid "UpdraftPlus was unable to find the table prefix when scanning the database backup."
4487
  msgstr ""
4488
 
4489
- #: class-updraftplus.php:4170
4490
  msgid "This database backup is missing core WordPress tables: %s"
4491
  msgstr ""
4492
 
4493
- #: class-updraftplus.php:4058
4494
  msgid "You are importing from a newer version of WordPress (%s) into an older one (%s). There are no guarantees that WordPress can handle this."
4495
  msgstr ""
4496
 
4497
- #: class-updraftplus.php:3974
4498
  msgid "The database is too small to be a valid WordPress database (size: %s Kb)."
4499
  msgstr ""
4500
 
4501
- #: addons/autobackup.php:556 admin.php:857
4502
  msgid "Update Theme"
4503
  msgstr ""
4504
 
4505
- #: addons/autobackup.php:505 admin.php:853
4506
  msgid "Update Plugin"
4507
  msgstr ""
4508
 
4509
- #: addons/autobackup.php:985 admin.php:726 includes/updraftplus-notices.php:171
4510
  msgid "Be safe with an automatic backup"
4511
  msgstr ""
4512
 
@@ -4514,71 +4530,71 @@ msgstr ""
4514
  msgid "Uploads path (%s) does not exist - resetting (%s)"
4515
  msgstr ""
4516
 
4517
- #: admin.php:2126
4518
  msgid "If you can still read these words after the page finishes loading, then there is a JavaScript or jQuery problem in the site."
4519
  msgstr ""
4520
 
4521
- #: admin.php:635
4522
  msgid "The file was uploaded."
4523
  msgstr ""
4524
 
4525
- #: admin.php:634
4526
  msgid "Unknown server response status:"
4527
  msgstr ""
4528
 
4529
- #: admin.php:633
4530
  msgid "Unknown server response:"
4531
  msgstr ""
4532
 
4533
- #: admin.php:632
4534
  msgid "This decryption key will be attempted:"
4535
  msgstr ""
4536
 
4537
- #: admin.php:631
4538
  msgid "Follow this link to attempt decryption and download the database file to your computer."
4539
  msgstr ""
4540
 
4541
- #: admin.php:630
4542
  msgid "Upload error"
4543
  msgstr ""
4544
 
4545
- #: admin.php:629
4546
  msgid "This file does not appear to be an UpdraftPlus encrypted database archive (such files are .gz.crypt files which have a name like: backup_(time)_(site name)_(code)_db.crypt.gz)."
4547
  msgstr ""
4548
 
4549
- #: admin.php:628
4550
  msgid "Upload error:"
4551
  msgstr ""
4552
 
4553
- #: admin.php:627
4554
  msgid "(make sure that you were trying to upload a zip file previously created by UpdraftPlus)"
4555
  msgstr ""
4556
 
4557
- #: admin.php:618
4558
  msgid "Download to your computer"
4559
  msgstr ""
4560
 
4561
- #: admin.php:617
4562
  msgid "Delete from your web server"
4563
  msgstr ""
4564
 
4565
- #: methods/s3.php:776
4566
  msgid "Examples of S3-compatible storage providers:"
4567
  msgstr ""
4568
 
4569
- #: admin.php:3693
4570
  msgid "Will not delete any archives after unpacking them, because there was no cloud storage for this backup"
4571
  msgstr ""
4572
 
4573
- #: admin.php:3310
4574
  msgid "You appear to be missing one or more archives from this multi-archive set."
4575
  msgstr ""
4576
 
4577
- #: admin.php:3307
4578
  msgid "(%d archive(s) in set)."
4579
  msgstr ""
4580
 
4581
- #: templates/wp-admin/settings/form-contents.php:358
4582
  msgid "Split archives every:"
4583
  msgstr ""
4584
 
@@ -4586,15 +4602,15 @@ msgstr ""
4586
  msgid "Error: the server sent us a response (JSON) which we did not understand."
4587
  msgstr ""
4588
 
4589
- #: admin.php:608
4590
  msgid "Warnings:"
4591
  msgstr ""
4592
 
4593
- #: admin.php:607
4594
  msgid "Error: the server sent an empty response."
4595
  msgstr ""
4596
 
4597
- #: admin.php:1887
4598
  msgid "This looks like a file created by UpdraftPlus, but this install does not know about this type of object: %s. Perhaps you need to install an add-on?"
4599
  msgstr ""
4600
 
@@ -4630,7 +4646,7 @@ msgstr ""
4630
  msgid "No such backup set exists"
4631
  msgstr ""
4632
 
4633
- #: admin.php:1164
4634
  msgid "The backup archive for this file could not be found. The remote storage method in use (%s) does not allow us to retrieve files. To perform any restoration using UpdraftPlus, you will need to obtain a copy of this file and place it inside UpdraftPlus's working folder"
4635
  msgstr ""
4636
 
@@ -4654,43 +4670,43 @@ msgstr ""
4654
  msgid "WordPress root directory server path: %s"
4655
  msgstr ""
4656
 
4657
- #: methods/s3.php:821
4658
  msgid "%s end-point"
4659
  msgstr ""
4660
 
4661
- #: methods/s3.php:783
4662
  msgid "... and many more!"
4663
  msgstr ""
4664
 
4665
- #: methods/s3generic.php:41 methods/s3generic.php:49
4666
  msgid "S3 (Compatible)"
4667
  msgstr ""
4668
 
4669
- #: admin.php:3614
4670
  msgid "File is not locally present - needs retrieving from remote storage"
4671
  msgstr ""
4672
 
4673
- #: admin.php:3601
4674
  msgid "Looking for %s archive: file name: %s"
4675
  msgstr ""
4676
 
4677
- #: admin.php:3562
4678
  msgid "Final checks"
4679
  msgstr ""
4680
 
4681
- #: templates/wp-admin/settings/form-contents.php:364
4682
  msgid "Check this to delete any superfluous backup files from your server after the backup run finishes (i.e. if you uncheck, then any files despatched remotely will also remain locally, and any files being kept locally will not be subject to the retention limits)."
4683
  msgstr ""
4684
 
4685
- #: templates/wp-admin/settings/form-contents.php:248
4686
  msgid "Drop encrypted database files (db.gz.crypt files) here to upload them for decryption"
4687
  msgstr ""
4688
 
4689
- #: admin.php:2979
4690
  msgid "Your wp-content directory server path: %s"
4691
  msgstr ""
4692
 
4693
- #: admin.php:624
4694
  msgid "Raw backup history"
4695
  msgstr ""
4696
 
@@ -4698,11 +4714,11 @@ msgstr ""
4698
  msgid "Show raw backup and file list"
4699
  msgstr ""
4700
 
4701
- #: admin.php:606
4702
  msgid "Processing files - please wait..."
4703
  msgstr ""
4704
 
4705
- #: admin.php:3745 templates/wp-admin/settings/downloading-and-restoring.php:29
4706
  msgid "Please consult this FAQ for help on what to do about it."
4707
  msgstr ""
4708
 
@@ -4710,11 +4726,11 @@ msgstr ""
4710
  msgid "Your WordPress installation has a problem with outputting extra whitespace. This can corrupt backups that you download from here."
4711
  msgstr ""
4712
 
4713
- #: class-updraftplus.php:3982
4714
  msgid "Failed to open database file."
4715
  msgstr ""
4716
 
4717
- #: admin.php:4124
4718
  msgid "Known backups (raw)"
4719
  msgstr ""
4720
 
@@ -4738,21 +4754,21 @@ msgstr ""
4738
  msgid "This looks like a migration (the backup is from a site with a different address/URL), but you did not check the option to search-and-replace the database. That is usually a mistake."
4739
  msgstr ""
4740
 
4741
- #: admin.php:3634
4742
  msgid "file is size:"
4743
  msgstr ""
4744
 
4745
- #: addons/googlecloud.php:855 addons/migrator.php:363 addons/migrator.php:366
4746
- #: addons/migrator.php:369 admin.php:893 admin.php:2131 backup.php:3019
4747
  #: updraftplus.php:147
4748
  msgid "Go here for more information."
4749
  msgstr ""
4750
 
4751
- #: admin.php:605
4752
  msgid "Some files are still downloading or being processed - please wait."
4753
  msgstr ""
4754
 
4755
- #: class-updraftplus.php:4030 class-updraftplus.php:4048
4756
  msgid "This backup set is from a different site - this is not a restoration, but a migration. You need the Migrator add-on in order to make this work."
4757
  msgstr ""
4758
 
@@ -4772,49 +4788,49 @@ msgstr ""
4772
  msgid "%s login failure"
4773
  msgstr ""
4774
 
4775
- #: methods/dropbox.php:410
4776
  msgid "You do not appear to be authenticated with %s"
4777
  msgstr ""
4778
 
4779
- #: methods/dropbox.php:377
4780
  msgid "Failed to access %s when deleting (see log file for more)"
4781
  msgstr ""
4782
 
4783
- #: methods/dropbox.php:369
4784
  msgid "You do not appear to be authenticated with %s (whilst deleting)"
4785
  msgstr ""
4786
 
4787
- #: methods/dropbox.php:104
4788
  msgid "Dropbox error: %s (see log file for more)"
4789
  msgstr ""
4790
 
4791
- #: methods/cloudfiles.php:409
4792
  msgid "Error - failed to download the file from %s"
4793
  msgstr ""
4794
 
4795
- #: methods/cloudfiles.php:405
4796
  msgid "Error - no such file exists at %s"
4797
  msgstr ""
4798
 
4799
- #: addons/azure.php:216 methods/addon-base-v2.php:218
4800
- #: methods/cloudfiles.php:379 methods/cloudfiles.php:396
4801
  #: methods/googledrive.php:823 methods/openstack-base.php:407
4802
- #: methods/stream-base.php:262 methods/stream-base.php:269
4803
- #: methods/stream-base.php:282
4804
  msgid "%s Error"
4805
  msgstr ""
4806
 
4807
- #: methods/cloudfiles.php:206 methods/openstack-base.php:82
4808
  msgid "%s error - failed to upload file"
4809
  msgstr ""
4810
 
4811
- #: class-updraftplus.php:1004 methods/cloudfiles.php:198
4812
  msgid "%s error - failed to re-assemble chunks"
4813
  msgstr ""
4814
 
4815
- #: methods/cloudfiles.php:82 methods/cloudfiles.php:86
4816
- #: methods/cloudfiles.php:227 methods/cloudfiles.php:272
4817
- #: methods/cloudfiles.php:323 methods/cloudfiles.php:327
4818
  #: methods/openstack-base.php:40 methods/openstack-base.php:304
4819
  #: methods/openstack-base.php:369 methods/openstack-base.php:441
4820
  #: methods/openstack-base.php:444 methods/openstack-base.php:461
@@ -4822,24 +4838,25 @@ msgstr ""
4822
  msgid "%s authentication failed"
4823
  msgstr ""
4824
 
4825
- #: addons/googlecloud.php:384 addons/migrator.php:462 admin.php:1832
4826
- #: admin.php:1879 admin.php:1887 class-updraftplus.php:789
4827
- #: class-updraftplus.php:795 class-updraftplus.php:3953
4828
- #: class-updraftplus.php:3955 class-updraftplus.php:4088
4829
- #: class-updraftplus.php:4123 methods/googledrive.php:289 restorer.php:944
 
4830
  msgid "Error: %s"
4831
  msgstr ""
4832
 
4833
- #: admin.php:2916
4834
  msgid "Backup directory specified exists, but is <b>not</b> writable."
4835
  msgstr ""
4836
 
4837
- #: admin.php:2914
4838
  msgid "Backup directory specified does <b>not</b> exist."
4839
  msgstr ""
4840
 
4841
- #: admin.php:2648 admin.php:2870 class-updraftplus.php:4030
4842
- #: class-updraftplus.php:4048
4843
  msgid "Warning: %s"
4844
  msgstr ""
4845
 
@@ -4867,11 +4884,11 @@ msgstr ""
4867
  msgid "Warnings encountered:"
4868
  msgstr ""
4869
 
4870
- #: class-updraftplus.php:2825
4871
  msgid "The backup apparently succeeded (with warnings) and is now complete"
4872
  msgstr ""
4873
 
4874
- #: class-updraftplus.php:687
4875
  msgid "Your free disk space is very low - only %s Mb remain"
4876
  msgstr ""
4877
 
@@ -4911,15 +4928,15 @@ msgstr ""
4911
  msgid "Some servers advertise encrypted FTP as available, but then time-out (after a long time) when you attempt to use it. If you find this happenning, then go into the \"Expert Options\" (below) and turn off SSL there."
4912
  msgstr ""
4913
 
4914
- #: methods/s3.php:797
4915
  msgid "Your web server's PHP installation does not included a required module (%s). Please contact your web hosting provider's support and ask for them to enable it."
4916
  msgstr ""
4917
 
4918
- #: methods/s3.php:1035
4919
  msgid "Please check your access credentials."
4920
  msgstr ""
4921
 
4922
- #: addons/s3-enhanced.php:172 methods/s3.php:1013
4923
  msgid "The error reported by %s was:"
4924
  msgstr ""
4925
 
@@ -4935,7 +4952,7 @@ msgstr ""
4935
  msgid "Cannot create new tables, so skipping this command (%s)"
4936
  msgstr ""
4937
 
4938
- #: class-updraftplus.php:4099 restorer.php:1648
4939
  msgid "Site information:"
4940
  msgstr ""
4941
 
@@ -4943,38 +4960,38 @@ msgstr ""
4943
  msgid "Your database user does not have permission to create tables. We will attempt to restore by simply emptying the tables; this should work as long as a) you are restoring from a WordPress version with the same database structure, and b) Your imported database does not contain any tables which are not already present on the importing site."
4944
  msgstr ""
4945
 
4946
- #: addons/migrator.php:325 admin.php:2126 class-updraftplus.php:4092
4947
  #: restorer.php:1970
4948
  msgid "Warning:"
4949
  msgstr ""
4950
 
4951
- #: class-updraftplus.php:4084 restorer.php:162
4952
  msgid "You are running on WordPress multisite - but your backup is not of a multisite site."
4953
  msgstr ""
4954
 
4955
- #: admin.php:3589
4956
  msgid "Skipping restoration of WordPress core when importing a single site into a multisite installation. If you had anything necessary in your WordPress directory then you will need to re-add it manually from the zip file."
4957
  msgstr ""
4958
 
4959
- #: admin.php:3035 methods/updraftvault.php:258
4960
  msgid "Your web server's PHP installation does not included a <strong>required</strong> (for %s) module (%s). Please contact your web hosting provider's support and ask for them to enable it."
4961
  msgstr ""
4962
 
4963
- #: admin.php:642
4964
  msgid "Close"
4965
  msgstr ""
4966
 
4967
- #: addons/autobackup.php:298 addons/autobackup.php:386 admin.php:598
4968
  #: methods/remotesend.php:64 methods/remotesend.php:72
4969
  #: methods/remotesend.php:213 methods/remotesend.php:230
4970
  msgid "Unexpected response:"
4971
  msgstr ""
4972
 
4973
- #: addons/reporting.php:434 admin.php:593
4974
  msgid "To send to more than one address, separate each address with a comma."
4975
  msgstr ""
4976
 
4977
- #: admin.php:622
4978
  msgid "PHP information"
4979
  msgstr ""
4980
 
@@ -5010,7 +5027,7 @@ msgstr ""
5010
  msgid "Also delete from remote storage"
5011
  msgstr ""
5012
 
5013
- #: admin.php:2378
5014
  msgid "Latest UpdraftPlus.com news:"
5015
  msgstr ""
5016
 
@@ -5027,7 +5044,7 @@ msgstr ""
5027
  msgid "News"
5028
  msgstr ""
5029
 
5030
- #: admin.php:1318 includes/class-wpadmin-commands.php:444
5031
  msgid "Backup set not found"
5032
  msgstr ""
5033
 
@@ -5045,7 +5062,7 @@ msgstr ""
5045
  msgid "Blog link"
5046
  msgstr ""
5047
 
5048
- #: admin.php:686
5049
  msgid "Testing %s Settings..."
5050
  msgstr ""
5051
 
@@ -5053,11 +5070,11 @@ msgstr ""
5053
  msgid "Or, you can place them manually into your UpdraftPlus directory (usually wp-content/updraft), e.g. via FTP, and then use the \"rescan\" link above."
5054
  msgstr ""
5055
 
5056
- #: admin.php:909
5057
  msgid "UpdraftPlus's debug mode is on. You may see debugging notices on this page not just from UpdraftPlus, but from any other plugin installed. Please try to make sure that the notice you are seeing is from UpdraftPlus before you raise a support request."
5058
  msgstr ""
5059
 
5060
- #: admin.php:909
5061
  msgid "Notice"
5062
  msgstr ""
5063
 
@@ -5065,11 +5082,11 @@ msgstr ""
5065
  msgid "Errors encountered:"
5066
  msgstr ""
5067
 
5068
- #: admin.php:591
5069
  msgid "Rescanning (looking for backups that you have uploaded manually into the internal backup store)..."
5070
  msgstr ""
5071
 
5072
- #: admin.php:604
5073
  msgid "Begun looking for this entity"
5074
  msgstr ""
5075
 
@@ -5089,7 +5106,7 @@ msgstr ""
5089
  msgid "Time taken (seconds):"
5090
  msgstr ""
5091
 
5092
- #: addons/migrator.php:1113 admin.php:609
5093
  msgid "Errors:"
5094
  msgstr ""
5095
 
@@ -5182,41 +5199,41 @@ msgstr ""
5182
  msgid "starting from next time it is"
5183
  msgstr ""
5184
 
5185
- #: addons/sftp.php:431
5186
  msgid "Failure: Port must be an integer."
5187
  msgstr ""
5188
 
5189
- #: methods/ftp.php:366 methods/openstack2.php:151
5190
  msgid "password"
5191
  msgstr ""
5192
 
5193
- #: addons/sftp.php:422 methods/openstack2.php:146
5194
  msgid "username"
5195
  msgstr ""
5196
 
5197
- #: addons/sftp.php:418
5198
  msgid "host name"
5199
  msgstr ""
5200
 
5201
- #: addons/sftp.php:396
5202
  msgid "Where to change directory to after logging in - often this is relative to your home directory."
5203
  msgstr ""
5204
 
5205
- #: addons/sftp.php:394
5206
  msgid "Directory path"
5207
  msgstr ""
5208
 
5209
- #: addons/lockadmin.php:153 addons/moredatabase.php:239 addons/sftp.php:369
5210
- #: addons/webdav.php:69 methods/openstack2.php:131 methods/updraftvault.php:318
5211
  #: udaddons/options.php:152
5212
  msgid "Password"
5213
  msgstr ""
5214
 
5215
- #: addons/sftp.php:355 addons/webdav.php:83
5216
  msgid "Port"
5217
  msgstr ""
5218
 
5219
- #: addons/moredatabase.php:237 addons/sftp.php:348 addons/webdav.php:75
5220
  msgid "Host"
5221
  msgstr ""
5222
 
@@ -5224,7 +5241,7 @@ msgstr ""
5224
  msgid "%s Error: Failed to download"
5225
  msgstr ""
5226
 
5227
- #: addons/sftp.php:461
5228
  msgid "Check your file permissions: Could not successfully create and enter:"
5229
  msgstr ""
5230
 
@@ -5273,25 +5290,25 @@ msgstr ""
5273
  msgid "WordPress Core"
5274
  msgstr ""
5275
 
5276
- #: methods/addon-base-v2.php:303 methods/stream-base.php:312
5277
  msgid "Failed: We were not able to place a file in that directory - please check your credentials."
5278
  msgstr ""
5279
 
5280
- #: addons/googlecloud.php:626 addons/googlecloud.php:660
5281
- #: addons/googlecloud.php:666 addons/sftp.php:448 admin.php:2702 admin.php:2737
5282
- #: admin.php:2746 methods/addon-base-v2.php:293 methods/stream-base.php:298
5283
  msgid "Failed"
5284
  msgstr ""
5285
 
5286
- #: addons/webdav.php:45
5287
  msgid "WebDAV URL"
5288
  msgstr ""
5289
 
5290
- #: methods/stream-base.php:282
5291
  msgid "Local write failed: Failed to download"
5292
  msgstr ""
5293
 
5294
- #: methods/stream-base.php:269
5295
  msgid "Error opening remote file: Failed to download"
5296
  msgstr ""
5297
 
@@ -5299,12 +5316,12 @@ msgstr ""
5299
  msgid "Chunk %s: A %s error occurred"
5300
  msgstr ""
5301
 
5302
- #: addons/googlecloud.php:278 addons/sftp.php:44 methods/addon-base-v2.php:65
5303
  #: methods/addon-base-v2.php:106 methods/addon-base-v2.php:138
5304
- #: methods/addon-base-v2.php:194 methods/addon-base-v2.php:273
5305
  #: methods/ftp.php:31 methods/googledrive.php:130 methods/stream-base.php:27
5306
  #: methods/stream-base.php:141 methods/stream-base.php:147
5307
- #: methods/stream-base.php:181 methods/stream-base.php:246
5308
  msgid "No %s settings were found"
5309
  msgstr ""
5310
 
@@ -5336,129 +5353,129 @@ msgstr ""
5336
  msgid "Only non-encrypted FTP is supported by regular UpdraftPlus."
5337
  msgstr ""
5338
 
5339
- #: addons/onedrive.php:755 methods/dropbox.php:614
5340
  msgid "Your %s account name: %s"
5341
  msgstr ""
5342
 
5343
- #: methods/dropbox.php:604 methods/dropbox.php:631
5344
  msgid "though part of the returned information was not as expected - your mileage may vary"
5345
  msgstr ""
5346
 
5347
- #: methods/dropbox.php:599 methods/dropbox.php:601
5348
  msgid "you have authenticated your %s account"
5349
  msgstr ""
5350
 
5351
- #: methods/dropbox.php:486 methods/dropbox.php:488
5352
  msgid "there's an add-on for that."
5353
  msgstr ""
5354
 
5355
- #: methods/dropbox.php:486 methods/dropbox.php:488
5356
  msgid "If you back up several sites into the same Dropbox and want to organise with sub-folders, then "
5357
  msgstr ""
5358
 
5359
- #: methods/dropbox.php:486 methods/dropbox.php:488
5360
  msgid "Backups are saved in"
5361
  msgstr ""
5362
 
5363
- #: methods/dropbox.php:486 methods/dropbox.php:488
5364
  msgid "Need to use sub-folders?"
5365
  msgstr ""
5366
 
5367
- #: methods/dropbox.php:197 methods/dropbox.php:218 methods/dropbox.php:234
5368
  msgid "error: failed to upload file to %s (see log file for more)"
5369
  msgstr ""
5370
 
5371
- #: methods/dropbox.php:82 methods/dropbox.php:99
5372
  msgid "You do not appear to be authenticated with Dropbox"
5373
  msgstr ""
5374
 
5375
- #: methods/s3.php:1030
5376
  msgid "The communication with %s was not encrypted."
5377
  msgstr ""
5378
 
5379
- #: methods/s3.php:1028
5380
  msgid "The communication with %s was encrypted."
5381
  msgstr ""
5382
 
5383
- #: addons/googlecloud.php:689 methods/s3.php:1025
5384
  msgid "We accessed the bucket, and were able to create files within it."
5385
  msgstr ""
5386
 
5387
- #: addons/googlecloud.php:683 addons/googlecloud.php:697 methods/s3.php:1023
5388
- #: methods/s3.php:1035
5389
  msgid "We successfully accessed the bucket, but the attempt to create a file in it failed."
5390
  msgstr ""
5391
 
5392
- #: addons/googlecloud.php:683 addons/googlecloud.php:697 methods/s3.php:1023
5393
- #: methods/s3.php:1035
5394
  msgid "Failure"
5395
  msgstr ""
5396
 
5397
- #: methods/s3.php:1011
5398
  msgid "Failure: We could not successfully access or create such a bucket. Please check your access credentials, and if those are correct then try another bucket name (as another %s user may already have taken your name)."
5399
  msgstr ""
5400
 
5401
- #: addons/s3-enhanced.php:145 methods/openstack2.php:117 methods/s3.php:1005
5402
  msgid "Region"
5403
  msgstr ""
5404
 
5405
- #: addons/googlecloud.php:78 addons/googlecloud.php:643 methods/s3.php:987
5406
  msgid "Failure: No bucket details were given."
5407
  msgstr ""
5408
 
5409
- #: methods/s3.php:965
5410
  msgid "API secret"
5411
  msgstr ""
5412
 
5413
- #: methods/s3.php:858
5414
  msgid "Enter only a bucket name or a bucket and path. Examples: mybucket, mybucket/mypath"
5415
  msgstr ""
5416
 
5417
- #: methods/s3.php:857
5418
  msgid "%s location"
5419
  msgstr ""
5420
 
5421
- #: methods/s3.php:853
5422
  msgid "%s secret key"
5423
  msgstr ""
5424
 
5425
- #: methods/s3.php:849
5426
  msgid "%s access key"
5427
  msgstr ""
5428
 
5429
- #: methods/s3.php:814
5430
  msgid "If you see errors about SSL certificates, then please go here for help."
5431
  msgstr ""
5432
 
5433
- #: methods/s3.php:812
5434
  msgid "Get your access key and secret key <a href=\"%s\">from your %s console</a>, then pick a (globally unique - all %s users) bucket name (letters and numbers) (and optionally a path) to use for storage. This bucket will be created for you if it does not already exist."
5435
  msgstr ""
5436
 
5437
- #: methods/s3.php:446 methods/s3.php:620 methods/s3.php:722
5438
  msgid "%s Error: Failed to access bucket %s. Check your permissions and credentials."
5439
  msgstr ""
5440
 
5441
- #: methods/s3.php:705 methods/s3.php:751
5442
  msgid "%s Error: Failed to download %s. Check your permissions and credentials."
5443
  msgstr ""
5444
 
5445
- #: methods/s3.php:424
5446
  msgid "%s re-assembly error (%s): (see log file for more)"
5447
  msgstr ""
5448
 
5449
- #: methods/s3.php:420
5450
  msgid "%s upload (%s): re-assembly failed (see log for more details)"
5451
  msgstr ""
5452
 
5453
- #: methods/s3.php:404
5454
  msgid "%s chunk %s: upload failed"
5455
  msgstr ""
5456
 
5457
- #: methods/s3.php:394
5458
  msgid "%s error: file %s was shortened unexpectedly"
5459
  msgstr ""
5460
 
5461
- #: methods/s3.php:371
5462
  msgid "%s upload: getting uploadID for multipart upload failed - see log file for more details"
5463
  msgstr ""
5464
 
@@ -5470,84 +5487,81 @@ msgstr ""
5470
  msgid "WordPress Backup"
5471
  msgstr ""
5472
 
5473
- #: methods/cloudfiles.php:547 methods/openstack-base.php:480
5474
  msgid "We accessed the container, and were able to create files within it."
5475
  msgstr ""
5476
 
5477
- #: methods/cloudfiles.php:543
5478
  msgid "Cloud Files error - we accessed the container, but failed to create a file within it"
5479
  msgstr ""
5480
 
5481
- #: methods/cloudfiles.php:516 methods/openstack-base.php:424
5482
  msgid "Failure: No container details were given."
5483
  msgstr ""
5484
 
5485
- #: addons/moredatabase.php:238 addons/sftp.php:362 addons/webdav.php:63
5486
- #: methods/cloudfiles-new.php:158 methods/cloudfiles.php:496
5487
- #: methods/openstack2.php:125
5488
  msgid "Username"
5489
  msgstr ""
5490
 
5491
- #: methods/cloudfiles-new.php:153 methods/cloudfiles.php:491 methods/s3.php:961
5492
  msgid "API key"
5493
  msgstr ""
5494
 
5495
  #: addons/migrator.php:278 addons/migrator.php:1871 addons/moredatabase.php:75
5496
- #: addons/moredatabase.php:77 addons/moredatabase.php:79 addons/sftp.php:418
5497
- #: addons/sftp.php:422 addons/sftp.php:426 addons/webdav.php:103 admin.php:662
5498
- #: methods/addon-base-v2.php:286 methods/cloudfiles-new.php:153
5499
- #: methods/cloudfiles-new.php:158 methods/cloudfiles.php:491
5500
- #: methods/cloudfiles.php:496 methods/ftp.php:362 methods/ftp.php:366
5501
- #: methods/openstack2.php:146 methods/openstack2.php:151
5502
- #: methods/openstack2.php:156 methods/openstack2.php:161 methods/s3.php:961
5503
- #: methods/s3.php:965
5504
  msgid "Failure: No %s was given."
5505
  msgstr ""
5506
 
5507
- #: methods/cloudfiles-new.php:87 methods/cloudfiles.php:435
5508
- #: methods/openstack-base.php:517 methods/s3.php:801
5509
  msgid "UpdraftPlus's %s module <strong>requires</strong> %s. Please do not file any support requests; there is no alternative."
5510
  msgstr ""
5511
 
5512
- #: methods/cloudfiles.php:477
5513
  msgid "Cloud Files container"
5514
  msgstr ""
5515
 
5516
- #: methods/cloudfiles.php:473
5517
  msgid "Cloud Files API key"
5518
  msgstr ""
5519
 
5520
- #: methods/cloudfiles.php:469
5521
  msgid "Cloud Files username"
5522
  msgstr ""
5523
 
5524
- #: addons/cloudfiles-enhanced.php:36 methods/cloudfiles-new.php:100
5525
- #: methods/cloudfiles.php:453
5526
  msgid "UK"
5527
  msgstr ""
5528
 
5529
- #: addons/cloudfiles-enhanced.php:35 methods/cloudfiles-new.php:99
5530
- #: methods/cloudfiles.php:452
5531
  msgid "US (default)"
5532
  msgstr ""
5533
 
5534
- #: methods/cloudfiles.php:449
5535
  msgid "US or UK Cloud"
5536
  msgstr ""
5537
 
5538
- #: methods/cloudfiles-new.php:92 methods/cloudfiles.php:445
5539
- #: methods/openstack2.php:98
5540
  msgid "Also, you should read this important FAQ."
5541
  msgstr ""
5542
 
5543
- #: methods/cloudfiles-new.php:92 methods/cloudfiles.php:445
5544
  msgid "Get your API key <a href=\"https://mycloud.rackspace.com/\">from your Rackspace Cloud console</a> (read instructions <a href=\"http://www.rackspace.com/knowledge_center/article/rackspace-cloud-essentials-1-generating-your-api-key\">here</a>), then pick a container name to use for storage. This container will be created for you if it does not already exist."
5545
  msgstr ""
5546
 
5547
- #: addons/sftp.php:409 admin.php:685 methods/addon-base-v2.php:252
5548
- #: methods/backup-module.php:186 methods/cloudfiles.php:483
5549
- #: methods/openstack-base.php:528 methods/s3.php:863
5550
- #: methods/stream-base.php:220
5551
  msgid "Test %s Settings"
5552
  msgstr ""
5553
 
@@ -5555,82 +5569,82 @@ msgstr ""
5555
  msgid "Error downloading remote file: Failed to download ("
5556
  msgstr ""
5557
 
5558
- #: class-updraftplus.php:1044 class-updraftplus.php:1088
5559
- #: methods/cloudfiles.php:379 methods/stream-base.php:262
5560
  msgid "Error opening local file: Failed to download"
5561
  msgstr ""
5562
 
5563
- #: methods/cloudfiles.php:205
5564
  msgid "Cloud Files error - failed to upload file"
5565
  msgstr ""
5566
 
5567
- #: addons/sftp.php:135 addons/sftp.php:147 methods/cloudfiles.php:134
5568
- #: methods/cloudfiles.php:176 methods/openstack-base.php:77
5569
- #: methods/openstack-base.php:266 methods/s3.php:339 methods/s3.php:351
5570
- #: methods/s3.php:352
5571
  msgid "%s Error: Failed to upload"
5572
  msgstr ""
5573
 
5574
- #: addons/googlecloud.php:161 addons/googlecloud.php:166
5575
- #: class-updraftplus.php:906 methods/cloudfiles.php:117
5576
  #: methods/googledrive.php:741 methods/googledrive.php:746
5577
  msgid "%s Error: Failed to open local file"
5578
  msgstr ""
5579
 
5580
- #: methods/cloudfiles.php:90 methods/cloudfiles.php:331
5581
- #: methods/cloudfiles.php:350
5582
  msgid "Cloud Files error - failed to create and access the container"
5583
  msgstr ""
5584
 
5585
  #: addons/cloudfiles-enhanced.php:96 addons/cloudfiles-enhanced.php:109
5586
- #: addons/cloudfiles-enhanced.php:113 methods/cloudfiles.php:526
5587
- #: methods/cloudfiles.php:529 methods/cloudfiles.php:532
5588
  msgid "Cloud Files authentication failed"
5589
  msgstr ""
5590
 
5591
- #: addons/googlecloud.php:907 methods/googledrive.php:963
5592
  msgid "<strong>After</strong> you have saved your settings (by clicking 'Save Changes' below), then come back here once and click this link to complete authentication with Google."
5593
  msgstr ""
5594
 
5595
- #: addons/googlecloud.php:896 methods/googledrive.php:952
5596
  msgid "Authenticate with Google"
5597
  msgstr ""
5598
 
5599
- #: addons/googlecloud.php:847 addons/onedrive.php:980
5600
  #: methods/googledrive.php:922
5601
  msgid "Client Secret"
5602
  msgstr ""
5603
 
5604
- #: addons/googlecloud.php:842 methods/googledrive.php:919
5605
  msgid "If Google later shows you the message \"invalid_client\", then you did not enter a valid client ID here."
5606
  msgstr ""
5607
 
5608
- #: addons/googlecloud.php:839 addons/onedrive.php:976
5609
  #: methods/googledrive.php:918
5610
  msgid "Client ID"
5611
  msgstr ""
5612
 
5613
- #: addons/googlecloud.php:828 methods/googledrive.php:908
5614
  msgid "You must add the following as the authorised redirect URI (under \"More Options\") when asked"
5615
  msgstr ""
5616
 
5617
- #: addons/googlecloud.php:828 methods/googledrive.php:908
5618
  msgid "Select 'Web Application' as the application type."
5619
  msgstr ""
5620
 
5621
- #: addons/googlecloud.php:826 methods/googledrive.php:906
5622
  msgid "For longer help, including screenshots, follow this link. The description below is sufficient for more expert users."
5623
  msgstr ""
5624
 
5625
- #: methods/addon-base-v2.php:240 methods/cloudfiles.php:425
5626
- #: methods/dropbox.php:468 methods/ftp.php:305 methods/googledrive.php:891
5627
- #: methods/openstack-base.php:507 methods/s3.php:773
5628
- #: methods/stream-base.php:213
5629
  msgid "%s is a great choice, because UpdraftPlus supports chunked uploads - no matter how big your site is, UpdraftPlus can upload it a little at a time, and not get thwarted by timeouts."
5630
  msgstr ""
5631
 
5632
- #: addons/googlecloud.php:445 addons/googlecloud.php:446
5633
- #: addons/googlecloud.php:709 methods/googledrive.php:445
5634
  #: methods/googledrive.php:446
5635
  msgid "Account is not authorized."
5636
  msgstr ""
@@ -5649,29 +5663,29 @@ msgstr ""
5649
  msgid "Have not yet obtained an access token from Google - you need to authorise or re-authorise your connection to Google Drive."
5650
  msgstr ""
5651
 
5652
- #: addons/googlecloud.php:579 addons/onedrive.php:793
5653
  #: methods/googledrive.php:348
5654
  msgid "you have authenticated your %s account."
5655
  msgstr ""
5656
 
5657
- #: addons/googlecloud.php:579 addons/googlecloud.php:689
5658
- #: addons/onedrive.php:793 addons/sftp.php:481 methods/addon-base-v2.php:300
5659
- #: methods/cloudfiles.php:547 methods/googledrive.php:348
5660
- #: methods/openstack-base.php:480 methods/s3.php:1025
5661
- #: methods/stream-base.php:309
5662
  msgid "Success"
5663
  msgstr ""
5664
 
5665
- #: addons/onedrive.php:747 methods/dropbox.php:642 methods/dropbox.php:651
5666
  #: methods/googledrive.php:322
5667
  msgid "Your %s quota usage: %s %% used, %s available"
5668
  msgstr ""
5669
 
5670
- #: addons/googlecloud.php:390 methods/googledrive.php:295
5671
  msgid "Authorization failed"
5672
  msgstr ""
5673
 
5674
- #: addons/googlecloud.php:382 methods/googledrive.php:287
5675
  msgid "No refresh token was received from Google. This often means that you entered your client secret wrongly, or that you have not yet re-authenticated (below) since correcting it. Re-check it, then follow the link to authenticate again. Finally, if that does not work, then use expert mode to wipe all your settings, create a new Google client ID/secret, and start again."
5676
  msgstr ""
5677
 
@@ -5693,8 +5707,8 @@ msgstr ""
5693
  msgid "You need to re-authenticate with %s, as your existing credentials are not working."
5694
  msgstr ""
5695
 
5696
- #: addons/migrator.php:1770 admin.php:2705 admin.php:2739 admin.php:2743
5697
- #: admin.php:3619 admin.php:3632 restorer.php:2203 restorer.php:2309
5698
  msgid "OK"
5699
  msgstr ""
5700
 
@@ -5719,7 +5733,7 @@ msgid "Old table prefix:"
5719
  msgstr ""
5720
 
5721
  #: addons/reporting.php:65 addons/reporting.php:152 backup.php:942
5722
- #: class-updraftplus.php:4025
5723
  msgid "Backup of:"
5724
  msgstr ""
5725
 
@@ -5795,152 +5809,152 @@ msgstr ""
5795
  msgid "UpdraftPlus is not able to directly restore this kind of entity. It must be restored manually."
5796
  msgstr ""
5797
 
5798
- #: admin.php:3640 admin.php:3641
5799
  msgid "Could not find one of the files for restoration"
5800
  msgstr ""
5801
 
5802
- #: admin.php:3735
5803
  msgid "Error message"
5804
  msgstr ""
5805
 
5806
- #: admin.php:3637
5807
  msgid "The backup records do not contain information about the proper size of this file."
5808
  msgstr ""
5809
 
5810
- #: admin.php:3629
5811
  msgid "Archive is expected to be size:"
5812
  msgstr ""
5813
 
5814
- #: admin.php:3513
5815
  msgid "If making a request for support, please include this information:"
5816
  msgstr ""
5817
 
5818
- #: admin.php:3512
5819
  msgid "ABORT: Could not find the information on which entities to restore."
5820
  msgstr ""
5821
 
5822
- #: admin.php:3466
5823
  msgid "UpdraftPlus Restoration: Progress"
5824
  msgstr ""
5825
 
5826
- #: admin.php:3418
5827
  msgid "This backup does not exist in the backup history - restoration aborted. Timestamp:"
5828
  msgstr ""
5829
 
5830
- #: admin.php:3367
5831
  msgid "After pressing this button, you will be given the option to choose which components you wish to restore"
5832
  msgstr ""
5833
 
5834
- #: admin.php:3376
5835
  msgid "Delete this backup set"
5836
  msgstr ""
5837
 
5838
- #: admin.php:3047
5839
  msgid "Good news: Your site's communications with %s can be encrypted. If you see any errors to do with encryption, then look in the 'Expert Settings' for more help."
5840
  msgstr ""
5841
 
5842
- #: admin.php:3044
5843
  msgid "Your web server's PHP/Curl installation does not support https access. We cannot access %s without this support. Please contact your web hosting provider's support. %s <strong>requires</strong> Curl+https. Please do not file any support requests; there is no alternative."
5844
  msgstr ""
5845
 
5846
- #: admin.php:3042
5847
  msgid "Your web server's PHP/Curl installation does not support https access. Communications with %s will be unencrypted. ask your web host to install Curl/SSL in order to gain the ability for encryption (via an add-on)."
5848
  msgstr ""
5849
 
5850
- #: methods/cloudfiles-new.php:87 methods/cloudfiles.php:435
5851
- #: methods/openstack-base.php:517 methods/s3.php:801
5852
  msgid "Your web server's PHP installation does not included a required module (%s). Please contact your web hosting provider's support."
5853
  msgstr ""
5854
 
5855
- #: templates/wp-admin/settings/form-contents.php:421
5856
  msgid "Save Changes"
5857
  msgstr ""
5858
 
5859
- #: templates/wp-admin/settings/form-contents.php:398
5860
  msgid "Choosing this option lowers your security by stopping UpdraftPlus from using SSL for authentication and encrypted transport at all, where possible. Note that some cloud storage providers do not allow this (e.g. Dropbox), so with those providers this setting will have no effect."
5861
  msgstr ""
5862
 
5863
- #: templates/wp-admin/settings/form-contents.php:397
5864
  msgid "Disable SSL entirely where possible"
5865
  msgstr ""
5866
 
5867
- #: templates/wp-admin/settings/form-contents.php:393
5868
  msgid "Note that not all cloud backup methods are necessarily using SSL authentication."
5869
  msgstr ""
5870
 
5871
- #: templates/wp-admin/settings/form-contents.php:393
5872
  msgid "Choosing this option lowers your security by stopping UpdraftPlus from verifying the identity of encrypted sites that it connects to (e.g. Dropbox, Google Drive). It means that UpdraftPlus will be using SSL only for encryption of traffic, and not for authentication."
5873
  msgstr ""
5874
 
5875
- #: templates/wp-admin/settings/form-contents.php:392
5876
  msgid "Do not verify SSL certificates"
5877
  msgstr ""
5878
 
5879
- #: templates/wp-admin/settings/form-contents.php:388
5880
  msgid "By default UpdraftPlus uses its own store of SSL certificates to verify the identity of remote sites (i.e. to make sure it is talking to the real Dropbox, Amazon S3, etc., and not an attacker). We keep these up to date. However, if you get an SSL error, then choosing this option (which causes UpdraftPlus to use your web server's collection instead) may help."
5881
  msgstr ""
5882
 
5883
- #: templates/wp-admin/settings/form-contents.php:387
5884
  msgid "Use the server's SSL certificates"
5885
  msgstr ""
5886
 
5887
- #: admin.php:2918
5888
  msgid "If that is unsuccessful check the permissions on your server or change it to another directory that is writable by your web server process."
5889
  msgstr ""
5890
 
5891
- #: admin.php:2918
5892
  msgid "click here"
5893
  msgstr ""
5894
 
5895
- #: admin.php:2918
5896
  msgid "or, to reset this option"
5897
  msgstr ""
5898
 
5899
- #: admin.php:2918
5900
  msgid "Follow this link to attempt to create the directory and set the permissions"
5901
  msgstr ""
5902
 
5903
- #: admin.php:2910
5904
  msgid "Backup directory specified is writable, which is good."
5905
  msgstr ""
5906
 
5907
- #: templates/wp-admin/settings/form-contents.php:368
5908
  msgid "Backup directory"
5909
  msgstr ""
5910
 
5911
- #: templates/wp-admin/settings/form-contents.php:363
5912
  msgid "Delete local backup"
5913
  msgstr ""
5914
 
5915
- #: templates/wp-admin/settings/form-contents.php:343
5916
  msgid "click this to show some further options; don't bother with this unless you have a problem or are curious."
5917
  msgstr ""
5918
 
5919
- #: templates/wp-admin/settings/form-contents.php:343
5920
  msgid "Show expert settings"
5921
  msgstr ""
5922
 
5923
- #: templates/wp-admin/settings/form-contents.php:342
5924
  msgid "Expert settings"
5925
  msgstr ""
5926
 
5927
- #: templates/wp-admin/settings/form-contents.php:353
5928
  msgid "Debug mode"
5929
  msgstr ""
5930
 
5931
- #: templates/wp-admin/settings/form-contents.php:338
5932
  msgid "Advanced / Debugging Settings"
5933
  msgstr ""
5934
 
5935
- #: admin.php:621
5936
  msgid "Requesting start of backup..."
5937
  msgstr ""
5938
 
5939
- #: addons/morefiles.php:294 admin.php:637
5940
  msgid "Cancel"
5941
  msgstr ""
5942
 
5943
- #: addons/reporting.php:216 admin.php:3191
5944
  msgid "None"
5945
  msgstr ""
5946
 
@@ -5948,31 +5962,31 @@ msgstr ""
5948
  msgid "Choose your remote storage"
5949
  msgstr ""
5950
 
5951
- #: templates/wp-admin/settings/form-contents.php:236
5952
  msgid "Manually decrypt a database backup file"
5953
  msgstr ""
5954
 
5955
- #: templates/wp-admin/settings/form-contents.php:217
5956
  msgid "Database encryption phrase"
5957
  msgstr ""
5958
 
5959
- #: templates/wp-admin/settings/form-contents.php:315 udaddons/options.php:150
5960
  msgid "Email"
5961
  msgstr ""
5962
 
5963
- #: templates/wp-admin/settings/form-contents.php:207
5964
  msgid "The above directories are everything, except for WordPress core itself which you can download afresh from WordPress.org."
5965
  msgstr ""
5966
 
5967
- #: addons/morefiles.php:440 admin.php:2988
5968
  msgid "Exclude these:"
5969
  msgstr ""
5970
 
5971
- #: admin.php:2979
5972
  msgid "Any other directories found inside wp-content"
5973
  msgstr ""
5974
 
5975
- #: templates/wp-admin/settings/form-contents.php:204
5976
  msgid "Include in files backup"
5977
  msgstr ""
5978
 
@@ -5984,44 +5998,44 @@ msgstr ""
5984
  msgid "To fix the time at which a backup should take place,"
5985
  msgstr ""
5986
 
5987
- #: admin.php:2904
5988
  msgid "Monthly"
5989
  msgstr ""
5990
 
5991
- #: admin.php:2903
5992
  msgid "Fortnightly"
5993
  msgstr ""
5994
 
5995
- #: admin.php:2902
5996
  msgid "Weekly"
5997
  msgstr ""
5998
 
5999
- #: admin.php:2901
6000
  msgid "Daily"
6001
  msgstr ""
6002
 
6003
- #: admin.php:644 admin.php:2884
6004
  msgid "Download log file"
6005
  msgstr ""
6006
 
6007
- #: admin.php:2802
6008
  msgid "The folder exists, but your webserver does not have permission to write to it."
6009
  msgstr ""
6010
 
6011
- #: admin.php:2797
6012
  msgid "The folder was created, but we had to change its file permissions to 777 (world-writable) to be able to write to it. You should check with your hosting provider that this will not cause any problems"
6013
  msgstr ""
6014
 
6015
- #: admin.php:2783
6016
  msgid "The request to the filesystem to create the directory failed."
6017
  msgstr ""
6018
 
6019
- #: addons/migrator.php:2243 admin.php:638 admin.php:2699 admin.php:2732
6020
- #: admin.php:3376 templates/wp-admin/settings/delete-and-restore-modals.php:5
6021
  msgid "Delete"
6022
  msgstr ""
6023
 
6024
- #: admin.php:2639
6025
  msgid "show log"
6026
  msgstr ""
6027
 
@@ -6134,7 +6148,7 @@ msgstr ""
6134
  msgid "Delete backup set"
6135
  msgstr ""
6136
 
6137
- #: admin.php:620
6138
  msgid "Download error: the server sent us a response which we did not understand."
6139
  msgstr ""
6140
 
@@ -6143,15 +6157,15 @@ msgstr ""
6143
  #: addons/migrator.php:1368 addons/migrator.php:1709 addons/migrator.php:1736
6144
  #: addons/migrator.php:1742 addons/migrator.php:1804 addons/migrator.php:1840
6145
  #: addons/migrator.php:1879 addons/migrator.php:1889 addons/migrator.php:1894
6146
- #: addons/s3-enhanced.php:120 addons/s3-enhanced.php:125
6147
- #: addons/s3-enhanced.php:127 addons/sftp.php:737 addons/webdav.php:79
6148
- #: admin.php:82 admin.php:612 admin.php:3634 admin.php:3664
6149
  #: methods/remotesend.php:69 methods/remotesend.php:227
6150
- #: methods/updraftvault.php:432 restorer.php:1364
6151
  msgid "Error:"
6152
  msgstr ""
6153
 
6154
- #: admin.php:603 templates/wp-admin/settings/downloading-and-restoring.php:34
6155
  msgid "calculating..."
6156
  msgstr ""
6157
 
@@ -6194,38 +6208,38 @@ msgstr ""
6194
  msgid "More tasks:"
6195
  msgstr ""
6196
 
6197
- #: admin.php:2402
6198
  msgid "Download most recently modified log file"
6199
  msgstr ""
6200
 
6201
- #: admin.php:2361 admin.php:2367 central/bootstrap.php:161
6202
  msgid "(Nothing yet logged)"
6203
  msgstr ""
6204
 
6205
- #: addons/autobackup.php:293 addons/autobackup.php:384 admin.php:2360
6206
- #: admin.php:2365
6207
  msgid "Last log message"
6208
  msgstr ""
6209
 
6210
- #: addons/migrator.php:218 admin.php:643 admin.php:3367
6211
  #: templates/wp-admin/settings/tab-status.php:30
6212
  msgid "Restore"
6213
  msgstr ""
6214
 
6215
- #: admin.php:472 admin.php:636 templates/wp-admin/settings/tab-status.php:27
6216
  msgid "Backup Now"
6217
  msgstr ""
6218
 
6219
  #: addons/migrator.php:1774 addons/moredatabase.php:240
6220
- #: addons/reporting.php:231 admin.php:257 admin.php:3166 admin.php:3239
6221
- #: admin.php:3718 includes/class-wpadmin-commands.php:138
6222
  #: includes/class-wpadmin-commands.php:459
6223
  #: templates/wp-admin/settings/delete-and-restore-modals.php:81
6224
  #: templates/wp-admin/settings/delete-and-restore-modals.php:83
6225
  msgid "Database"
6226
  msgstr ""
6227
 
6228
- #: admin.php:253 admin.php:4130
6229
  msgid "Files"
6230
  msgstr ""
6231
 
@@ -6233,11 +6247,11 @@ msgstr ""
6233
  msgid "Next scheduled backups"
6234
  msgstr ""
6235
 
6236
- #: admin.php:233
6237
  msgid "At the same time as the files backup"
6238
  msgstr ""
6239
 
6240
- #: admin.php:223 admin.php:244 admin.php:251
6241
  msgid "Nothing currently scheduled"
6242
  msgstr ""
6243
 
@@ -6249,15 +6263,15 @@ msgstr ""
6249
  msgid "JavaScript warning"
6250
  msgstr ""
6251
 
6252
- #: admin.php:623 admin.php:2429
6253
  msgid "Delete Old Directories"
6254
  msgstr ""
6255
 
6256
- #: admin.php:2174
6257
  msgid "Current limit is:"
6258
  msgstr ""
6259
 
6260
- #: admin.php:2148
6261
  msgid "Your backup has been restored."
6262
  msgstr ""
6263
 
@@ -6269,127 +6283,127 @@ msgstr ""
6269
  msgid "Lead developer's homepage"
6270
  msgstr ""
6271
 
6272
- #: admin.php:4050
6273
  msgid "Your settings have been wiped."
6274
  msgstr ""
6275
 
6276
- #: admin.php:2108
6277
  msgid "Backup directory successfully created."
6278
  msgstr ""
6279
 
6280
- #: admin.php:2101
6281
  msgid "Backup directory could not be created"
6282
  msgstr ""
6283
 
6284
- #: admin.php:2671
6285
  msgid "Old directory removal failed for some reason. You may want to do this manually."
6286
  msgstr ""
6287
 
6288
- #: admin.php:2669
6289
  msgid "Old directories successfully removed."
6290
  msgstr ""
6291
 
6292
- #: admin.php:2666
6293
  msgid "Remove old directories"
6294
  msgstr ""
6295
 
6296
- #: addons/migrator.php:281 addons/migrator.php:296 admin.php:2050
6297
- #: admin.php:2059 admin.php:2068 admin.php:2110 admin.php:2673
6298
  msgid "Return to UpdraftPlus Configuration"
6299
  msgstr ""
6300
 
6301
- #: admin.php:616 admin.php:2050 admin.php:2059 admin.php:2068 admin.php:2110
6302
- #: admin.php:2673 templates/wp-admin/settings/existing-backups-table.php:14
6303
  msgid "Actions"
6304
  msgstr ""
6305
 
6306
- #: admin.php:2039
6307
  msgid "Restore successful!"
6308
  msgstr ""
6309
 
6310
- #: admin.php:1969
6311
  msgid "Bad filename format - this does not look like an encrypted database file created by UpdraftPlus"
6312
  msgstr ""
6313
 
6314
- #: admin.php:1879
6315
  msgid "Bad filename format - this does not look like a file created by UpdraftPlus"
6316
  msgstr ""
6317
 
6318
- #: admin.php:1760
6319
  msgid "No local copy present."
6320
  msgstr ""
6321
 
6322
- #: admin.php:1757
6323
  msgid "Download in progress"
6324
  msgstr ""
6325
 
6326
- #: admin.php:615 admin.php:1746
6327
  msgid "File ready."
6328
  msgstr ""
6329
 
6330
- #: admin.php:1727
6331
  msgid "Download failed"
6332
  msgstr ""
6333
 
6334
- #: admin.php:613 admin.php:1518 admin.php:3617 class-updraftplus.php:1044
6335
- #: class-updraftplus.php:1088 methods/addon-base-v2.php:84
6336
- #: methods/addon-base-v2.php:89 methods/addon-base-v2.php:204
6337
- #: methods/addon-base-v2.php:224 methods/stream-base.php:197 restorer.php:2199
6338
  #: restorer.php:2224 restorer.php:2306 updraftplus.php:147
6339
  msgid "Error"
6340
  msgstr ""
6341
 
6342
- #: admin.php:1546
6343
  msgid "Could not find that job - perhaps it has already finished?"
6344
  msgstr ""
6345
 
6346
- #: admin.php:1538
6347
  msgid "Job deleted"
6348
  msgstr ""
6349
 
6350
- #: admin.php:1622
6351
  msgid "OK. You should soon see activity in the \"Last log message\" field below."
6352
  msgstr ""
6353
 
6354
- #: admin.php:688
6355
  msgid "Nothing yet logged"
6356
  msgstr ""
6357
 
6358
- #: admin.php:905
6359
  msgid "Please consult this FAQ if you have problems backing up."
6360
  msgstr ""
6361
 
6362
- #: admin.php:905
6363
  msgid "Your website is hosted using the %s web server."
6364
  msgstr ""
6365
 
6366
- #: admin.php:901
6367
  msgid "UpdraftPlus does not officially support versions of WordPress before %s. It may work for you, but if it does not, then please be aware that no support is available until you upgrade WordPress."
6368
  msgstr ""
6369
 
6370
- #: admin.php:897
6371
  msgid "You have less than %s of free disk space on the disk which UpdraftPlus is configured to use to create backups. UpdraftPlus could well run out of space. Contact your the operator of your server (e.g. your web hosting company) to resolve this issue."
6372
  msgstr ""
6373
 
6374
- #: admin.php:889 admin.php:893 admin.php:897 admin.php:901 admin.php:905
6375
- #: admin.php:914 admin.php:3035 admin.php:3042 admin.php:3044
6376
- #: methods/cloudfiles-new.php:87 methods/cloudfiles.php:435 methods/ftp.php:291
6377
- #: methods/openstack-base.php:517 methods/s3.php:797 methods/s3.php:801
6378
- #: methods/updraftvault.php:258
6379
  #: templates/wp-admin/settings/downloading-and-restoring.php:29
6380
  #: udaddons/updraftplus-addons.php:208
6381
  msgid "Warning"
6382
  msgstr ""
6383
 
6384
- #: admin.php:834
6385
  msgid "Add-Ons / Pro Support"
6386
  msgstr ""
6387
 
6388
- #: admin.php:488 admin.php:830 templates/wp-admin/settings/tab-bar.php:7
6389
  msgid "Settings"
6390
  msgstr ""
6391
 
6392
- #: admin.php:803
6393
  msgid "Allowed Files"
6394
  msgstr ""
6395
 
@@ -6409,19 +6423,20 @@ msgstr ""
6409
  msgid "Like UpdraftPlus and can spare one minute?"
6410
  msgstr ""
6411
 
6412
- #: addons/azure.php:216 class-updraftplus.php:3784 methods/googledrive.php:823
 
6413
  msgid "File not found"
6414
  msgstr ""
6415
 
6416
- #: class-updraftplus.php:3695
6417
  msgid "The decryption key used:"
6418
  msgstr ""
6419
 
6420
- #: class-updraftplus.php:3695 class-updraftplus.php:3965 restorer.php:390
6421
  msgid "Decryption failed. The most likely cause is that you used the wrong key."
6422
  msgstr ""
6423
 
6424
- #: class-updraftplus.php:3676 class-updraftplus.php:3953 restorer.php:377
6425
  msgid "Decryption failed. The database file is encrypted, but you have no encryption key entered."
6426
  msgstr ""
6427
 
@@ -6429,15 +6444,15 @@ msgstr ""
6429
  msgid "Could not open the backup file for writing"
6430
  msgstr ""
6431
 
6432
- #: class-updraftplus.php:3288
6433
  msgid "Could not save backup history because we have no backup array. Backup probably failed."
6434
  msgstr ""
6435
 
6436
- #: class-updraftplus.php:3265
6437
  msgid "Could not read the directory"
6438
  msgstr ""
6439
 
6440
- #: admin.php:1797 backup.php:1139 restorer.php:225
6441
  msgid "Backup directory (%s) is not writable, or does not exist."
6442
  msgstr ""
6443
 
@@ -6445,11 +6460,11 @@ msgstr ""
6445
  msgid "WordPress backup is complete"
6446
  msgstr ""
6447
 
6448
- #: class-updraftplus.php:2834
6449
  msgid "The backup attempt has finished, apparently unsuccessfully"
6450
  msgstr ""
6451
 
6452
- #: class-updraftplus.php:2819
6453
  msgid "The backup apparently succeeded and is now complete"
6454
  msgstr ""
6455
 
@@ -6457,37 +6472,37 @@ msgstr ""
6457
  msgid "Encryption error occurred when encrypting database. Encryption aborted."
6458
  msgstr ""
6459
 
6460
- #: class-updraftplus.php:2246
6461
  msgid "Could not create files in the backup directory. Backup aborted - check your UpdraftPlus settings."
6462
  msgstr ""
6463
 
6464
- #: class-updraftplus.php:1613
6465
  msgid "Others"
6466
  msgstr ""
6467
 
6468
- #: addons/multisite.php:446 class-updraftplus.php:1598
6469
  msgid "Uploads"
6470
  msgstr ""
6471
 
6472
- #: class-updraftplus.php:1597
6473
  msgid "Themes"
6474
  msgstr ""
6475
 
6476
- #: class-updraftplus.php:1596
6477
  msgid "Plugins"
6478
  msgstr ""
6479
 
6480
- #: class-updraftplus.php:458
6481
  msgid "No log files were found."
6482
  msgstr ""
6483
 
6484
- #: admin.php:1681 admin.php:1685 class-updraftplus.php:453
6485
  msgid "The log file could not be read."
6486
  msgstr ""
6487
 
6488
- #: admin.php:921 admin.php:925 admin.php:929 admin.php:933 admin.php:937
6489
- #: class-updraftplus.php:418 class-updraftplus.php:453
6490
- #: class-updraftplus.php:458 class-updraftplus.php:463
6491
  msgid "UpdraftPlus notice:"
6492
  msgstr ""
6493
 
11
  "Language: af_ZA\n"
12
  "Project-Id-Version: UpdraftPlus\n"
13
 
14
+ #: templates/wp-admin/settings/existing-backups-table.php:69
15
+ msgid "Stored at: %s"
16
+ msgstr ""
17
+
18
+ #: methods/cloudfiles.php:500
19
+ msgid "Cloud Files"
20
+ msgstr ""
21
+
22
+ #: admin.php:4114
23
+ msgid "Your settings failed to save. Please refresh the settings page and try again"
24
+ msgstr ""
25
+
26
+ #: admin.php:4073
27
+ msgid "UpdraftPlus seems to have been updated to version (%s) different to the version running when this settings page was loaded. Please reload the settings page before trying to save settings."
28
+ msgstr ""
29
+
30
+ #: methods/updraftvault.php:62
31
  msgid "UpdraftVault"
32
  msgstr ""
33
 
55
  msgid "Extra database"
56
  msgstr ""
57
 
58
+ #: admin.php:3372
59
  msgid "Press here to download or browse"
60
  msgstr ""
61
 
62
+ #: admin.php:1059 admin.php:1069
63
  msgid "Error: invalid path"
64
  msgstr ""
65
 
66
+ #: admin.php:917
67
  msgid "An error occurred when fetching storage module options: "
68
  msgstr ""
69
 
70
+ #: admin.php:745
71
  msgid "Loading log file"
72
  msgstr ""
73
 
74
+ #: admin.php:744
75
  msgid "Unable to download file. This could be caused by a timeout. It would be best to download the zip to your computer."
76
  msgstr ""
77
 
78
+ #: admin.php:743
79
  msgid "Search"
80
  msgstr ""
81
 
82
+ #: admin.php:742
83
  msgid "Select a file to view information about it"
84
  msgstr ""
85
 
86
+ #: admin.php:741
87
  msgid "Browsing zip file"
88
  msgstr ""
89
 
90
+ #: admin.php:711
91
  msgid "With UpdraftPlus Premium, you can directly download individual files from here."
92
  msgstr ""
93
 
94
+ #: admin.php:659
95
  msgid "Browse contents"
96
  msgstr ""
97
 
99
  msgid "Skipped tables:"
100
  msgstr ""
101
 
102
+ #: class-updraftplus.php:4327
103
  msgid "This database backup has the following WordPress tables excluded: %s"
104
  msgstr ""
105
 
106
+ #: admin.php:2368
107
  msgid "With UpdraftPlus Premium, you can choose to backup non-WordPress tables, backup only specified tables, and backup other databases too."
108
  msgstr ""
109
 
110
+ #: admin.php:2368
111
  msgid "All WordPress tables will be backed up."
112
  msgstr ""
113
 
114
+ #: admin.php:740
115
  msgid "Further information may be found in the browser JavaScript console, and the server PHP error logs."
116
  msgstr ""
117
 
118
+ #: admin.php:740
119
  msgid "That you are attempting to upload a zip file previously created by UpdraftPlus."
120
  msgstr ""
121
 
122
+ #: admin.php:740
123
  msgid "The available memory on the server."
124
  msgstr ""
125
 
126
+ #: admin.php:740
127
  msgid "Any settings in your .htaccess or web.config file that affects the maximum upload or post size."
128
  msgstr ""
129
 
130
+ #: admin.php:740
131
  msgid "The file failed to upload. Please check the following:"
132
  msgstr ""
133
 
134
+ #: admin.php:739
135
  msgid "HTTP code:"
136
  msgstr ""
137
 
138
+ #: admin.php:636
139
  msgid "You have chosen to backup a database, but no tables have been selected"
140
  msgstr ""
141
 
298
  msgid "UpdraftPlus"
299
  msgstr ""
300
 
301
+ #: templates/wp-admin/settings/form-contents.php:286
302
  msgid "Recommended: optimize your database with WP-Optimize."
303
  msgstr ""
304
 
369
  msgid "Comments"
370
  msgstr ""
371
 
372
+ #: addons/s3-enhanced.php:335
373
  msgid "Europe (Frankfurt)"
374
  msgstr ""
375
 
376
+ #: addons/s3-enhanced.php:334
377
  msgid "Europe (London)"
378
  msgstr ""
379
 
380
+ #: addons/s3-enhanced.php:333
381
  msgid "Europe (Ireland)"
382
  msgstr ""
383
 
562
  msgid "Then, try out our \"Migrator\" add-on which can perform a direct site-to-site migration. After using it once, you'll have saved the purchase price compared to the time needed to copy a site by hand."
563
  msgstr ""
564
 
565
+ #: addons/s3-enhanced.php:332
566
  msgid "Canada Central"
567
  msgstr ""
568
 
625
  msgid "The client has been deleted from the Google Drive API console. Please create a new Google Drive project and reconnect with UpdraftPlus."
626
  msgstr ""
627
 
628
+ #: methods/dropbox.php:571
629
  msgid "%s de-authentication"
630
  msgstr ""
631
 
632
+ #: methods/dropbox.php:536
633
  msgid "You must add the following as the authorised redirect URI in your Dropbox console (under \"API Settings\") when asked"
634
  msgstr ""
635
 
636
+ #: methods/dropbox.php:510
637
  msgid "Follow this link to deauthenticate with %s."
638
  msgstr ""
639
 
649
  msgid "You have selected a remote storage option which has an authorization step to complete:"
650
  msgstr ""
651
 
652
+ #: admin.php:1488
653
  msgid "Remote files deleted:"
654
  msgstr ""
655
 
656
+ #: admin.php:1487
657
  msgid "Local files deleted:"
658
  msgstr ""
659
 
660
+ #: admin.php:962 admin.php:966 admin.php:974 admin.php:978
661
  msgid "Follow this link to authorize access to your %s account (you will not be able to back up to %s without it)."
662
  msgstr ""
663
 
664
+ #: admin.php:738
665
  msgid "remote files deleted"
666
  msgstr ""
667
 
668
+ #: admin.php:736
669
  msgid "Complete"
670
  msgstr ""
671
 
672
+ #: admin.php:735
673
  msgid "Do you want to carry out the import?"
674
  msgstr ""
675
 
676
+ #: admin.php:734
677
  msgid "Which was exported on:"
678
  msgstr ""
679
 
680
+ #: admin.php:733
681
  msgid "This will import data from:"
682
  msgstr ""
683
 
684
+ #: admin.php:732
685
  msgid "Importing..."
686
  msgstr ""
687
 
688
+ #: admin.php:729
689
  msgid "You have not yet selected a file to import."
690
  msgstr ""
691
 
692
+ #: admin.php:713
693
  msgid "Your export file will be of your displayed settings, not your saved ones."
694
  msgstr ""
695
 
697
  msgid "template not found"
698
  msgstr ""
699
 
700
+ #: addons/s3-enhanced.php:328
701
  msgid "US East (Ohio)"
702
  msgstr ""
703
 
704
+ #: addons/onedrive.php:962
705
  msgid "This site uses a URL which is either non-HTTPS, or is localhost or 127.0.0.1 URL. As such, you must use the main %s %s App to authenticate with your account."
706
  msgstr ""
707
 
708
+ #: addons/onedrive.php:637
709
  msgid "Account is not authorized (%s)."
710
  msgstr ""
711
 
712
+ #: addons/onedrive.php:598 udaddons/updraftplus-addons.php:732
713
  msgid "Your IP address:"
714
  msgstr ""
715
 
716
+ #: addons/onedrive.php:598 udaddons/updraftplus-addons.php:732
717
  #: udaddons/updraftplus-addons.php:747
718
  msgid "To remove any block, please go here."
719
  msgstr ""
720
 
721
+ #: addons/onedrive.php:583 udaddons/updraftplus-addons.php:717
722
  msgid "An error response was received; HTTP code:"
723
  msgstr ""
724
 
725
+ #: includes/class-commands.php:310
726
  msgid "%s add-on not found"
727
  msgstr ""
728
 
734
  msgid "This makes time-outs much more likely. You are recommended to turn safe_mode off, or to restore only one entity at a time"
735
  msgstr ""
736
 
737
+ #: admin.php:2193
738
  msgid "To fix this problem go here."
739
  msgstr ""
740
 
741
+ #: admin.php:2193
742
  msgid "OptimizePress 2.0 encodes its contents, so search/replace does not work."
743
  msgstr ""
744
 
745
+ #: admin.php:697
746
  msgid "your PHP install lacks the openssl module; as a result, this can take minutes; if nothing has happened by then, then you should either try a smaller key size, or ask your web hosting company how to enable this PHP module on your setup."
747
  msgstr ""
748
 
749
+ #: addons/webdav.php:115
750
  msgid "Path"
751
  msgstr ""
752
 
753
+ #: addons/webdav.php:110
754
  msgid "Leave this blank to use the default (80 for webdav, 443 for webdavs)"
755
  msgstr ""
756
 
757
+ #: addons/webdav.php:102
758
  msgid "Enter any path in the field below."
759
  msgstr ""
760
 
761
+ #: addons/webdav.php:102
762
  msgid "A host name cannot contain a slash."
763
  msgstr ""
764
 
765
+ #: addons/webdav.php:77
766
  msgid "Protocol (SSL or not)"
767
  msgstr ""
768
 
769
+ #: addons/webdav.php:72
770
  msgid "This WebDAV URL is generated by filling in the options below. If you do not know the details, then you will need to ask your WebDAV provider."
771
  msgstr ""
772
 
774
  msgid "No response data was received. This usually indicates a network connectivity issue (e.g. an outgoing firewall or overloaded network) between this site and UpdraftPlus.com."
775
  msgstr ""
776
 
777
+ #: methods/s3.php:1031
778
  msgid "The AWS access key looks to be wrong (valid %s access keys begin with \"AK\")"
779
  msgstr ""
780
 
781
+ #: methods/s3.php:101
782
  msgid "No settings were found - please go to the Settings tab and check your settings"
783
  msgstr ""
784
 
786
  msgid "Backup using %s?"
787
  msgstr ""
788
 
789
+ #: addons/s3-enhanced.php:339
790
  msgid "Asia Pacific (Mumbai)"
791
  msgstr ""
792
 
793
+ #: addons/s3-enhanced.php:63
794
  msgid "Reduced redundancy"
795
  msgstr ""
796
 
797
+ #: addons/s3-enhanced.php:62
798
  msgid "Standard (infrequent access)"
799
  msgstr ""
800
 
916
  msgid "This backup archive is %s MB in size - the attempt to send this via email is likely to fail (few email servers allow attachments of this size). If so, you should switch to using a different remote storage method."
917
  msgstr ""
918
 
919
+ #: class-updraftplus.php:1590
920
  msgid "Size: %s MB"
921
  msgstr ""
922
 
928
  msgid "i.e. you have an account there"
929
  msgstr ""
930
 
931
+ #: templates/wp-admin/settings/form-contents.php:371
932
  msgid "UpdraftPlus will split up backup archives when they exceed this file size. The default value is %s megabytes. Be careful to leave some margin if your web-server has a hard size limit (e.g. the 2 GB / 2048 MB limit on some 32-bit servers/file systems)."
933
  msgstr ""
934
 
936
  msgid "Now"
937
  msgstr ""
938
 
939
+ #: class-updraftplus.php:4191 restorer.php:996
940
  msgid "You should enable %s to make any pretty permalinks (e.g. %s) work"
941
  msgstr ""
942
 
944
  msgid "(tap on an icon to select or unselect)"
945
  msgstr ""
946
 
947
+ #: methods/updraftvault.php:310 methods/updraftvault.php:316
948
+ #: methods/updraftvault.php:322
949
  msgid "%s per year"
950
  msgstr ""
951
 
952
+ #: methods/updraftvault.php:309 methods/updraftvault.php:315
953
+ #: methods/updraftvault.php:321
954
  msgid "or (annual discount)"
955
  msgstr ""
956
 
957
+ #: methods/updraftvault.php:246
958
  msgid "No Vault connection was found for this site (has it moved?); please disconnect and re-connect."
959
  msgstr ""
960
 
961
+ #: class-updraftplus.php:451 class-updraftplus.php:496
962
  msgid "The given file was not found, or could not be read."
963
  msgstr ""
964
 
1058
  msgid "UpdraftCentral Connection"
1059
  msgstr ""
1060
 
1061
+ #: backup.php:849 class-updraftplus.php:2846
1062
  msgid "The backup was aborted by the user"
1063
  msgstr ""
1064
 
1065
+ #: admin.php:4109
1066
  msgid "Your settings have been saved."
1067
  msgstr ""
1068
 
1069
+ #: admin.php:3266
1070
  msgid "Total backup size:"
1071
  msgstr ""
1072
 
1073
+ #: admin.php:2690
1074
  msgid "stop"
1075
  msgstr ""
1076
 
1077
+ #: admin.php:2528
1078
  msgid "The backup has finished running"
1079
  msgstr ""
1080
 
1100
  msgid "calculate"
1101
  msgstr ""
1102
 
1103
+ #: admin.php:712
1104
  msgid "You should save your changes to ensure that they are used for making your backup."
1105
  msgstr ""
1106
 
1107
+ #: admin.php:705
1108
  msgid "We requested to delete the file, but could not understand the server's response"
1109
  msgstr ""
1110
 
1111
+ #: admin.php:704
1112
  msgid "Please enter a valid URL"
1113
  msgstr ""
1114
 
1115
+ #: admin.php:687
1116
  msgid "Saving..."
1117
  msgstr ""
1118
 
1119
+ #: admin.php:650
1120
  msgid "Error: the server sent us a response which we did not understand."
1121
  msgstr ""
1122
 
1123
+ #: admin.php:642
1124
  msgid "Fetching..."
1125
  msgstr ""
1126
 
1127
+ #: addons/s3-enhanced.php:336
1128
  msgid "Asia Pacific (Seoul)"
1129
  msgstr ""
1130
 
1136
  msgid "Unexpected error: no class '%s' was found (your UpdraftPlus installation seems broken - try re-installing)"
1137
  msgstr ""
1138
 
1139
+ #: addons/onedrive.php:58
1140
  msgid "The required %s PHP module is not installed - ask your web hosting company to enable it."
1141
  msgstr ""
1142
 
1144
  msgid "Skipping table %s: this table will not be restored"
1145
  msgstr ""
1146
 
1147
+ #: class-updraftplus.php:4242 restorer.php:1642
1148
  msgid "To import an ordinary WordPress site into a multisite installation requires %s."
1149
  msgstr ""
1150
 
1151
+ #: class-updraftplus.php:4238
1152
  msgid "Please read this link for important information on this process."
1153
  msgstr ""
1154
 
1155
+ #: class-updraftplus.php:4238
1156
  msgid "It will be imported as a new site."
1157
  msgstr ""
1158
 
1159
+ #: admin.php:2341 templates/wp-admin/notices/horizontal-notice.php:16
1160
  #: templates/wp-admin/notices/horizontal-notice.php:18
1161
  msgid "Dismiss"
1162
  msgstr ""
1163
 
1164
+ #: admin.php:724
1165
  msgid "Please fill in the required information."
1166
  msgstr ""
1167
 
1233
  msgid "Call WordPress action:"
1234
  msgstr ""
1235
 
1236
+ #: admin.php:2376
1237
  msgid "Your saved settings also affect what is backed up - e.g. files excluded."
1238
  msgstr ""
1239
 
1240
+ #: admin.php:3677
1241
  msgid "Skipping: this archive was already restored."
1242
  msgstr ""
1243
 
1244
+ #: templates/wp-admin/settings/form-contents.php:212
1245
  msgid "File Options"
1246
  msgstr ""
1247
 
1269
  msgid "This button will delete all UpdraftPlus settings and progress information for in-progress backups (but not any of your existing backups from your cloud storage)."
1270
  msgstr ""
1271
 
1272
+ #: admin.php:3986
1273
  msgid "Send this backup to remote storage"
1274
  msgstr ""
1275
 
1276
+ #: admin.php:3984
1277
  msgid "Check out UpdraftPlus Vault."
1278
  msgstr ""
1279
 
1280
+ #: admin.php:3984
1281
  msgid "Not got any remote storage?"
1282
  msgstr ""
1283
 
1284
+ #: admin.php:3984
1285
  msgid "settings"
1286
  msgstr ""
1287
 
1288
+ #: admin.php:3984
1289
  msgid "Backup won't be sent to any remote storage - none has been saved in the %s"
1290
  msgstr ""
1291
 
1292
+ #: admin.php:2374
1293
  msgid "Include any files in the backup"
1294
  msgstr ""
1295
 
1296
+ #: admin.php:2360
1297
  msgid "Include the database in the backup"
1298
  msgstr ""
1299
 
1300
+ #: admin.php:2340
1301
  msgid "Continue restoration"
1302
  msgstr ""
1303
 
1304
+ #: admin.php:2335
1305
  msgid "You have an unfinished restoration operation, begun %s ago."
1306
  msgstr ""
1307
 
1308
+ #: admin.php:2334
1309
  msgid "Unfinished restoration"
1310
  msgstr ""
1311
 
1312
+ #: admin.php:2332
1313
  msgid "%s minutes, %s seconds"
1314
  msgstr ""
1315
 
1316
+ #: admin.php:2279
1317
  msgid "Backup Contents And Schedule"
1318
  msgstr ""
1319
 
1321
  msgid "Premium / Extensions"
1322
  msgstr ""
1323
 
1324
+ #: admin.php:2059 admin.php:2068
1325
  msgid "Sufficient information about the in-progress restoration operation could not be found."
1326
  msgstr ""
1327
 
1328
+ #: addons/morefiles.php:53 admin.php:710
1329
  msgctxt "(verb)"
1330
  msgid "Download"
1331
  msgstr ""
1332
 
1333
+ #: admin.php:635
1334
  msgid "You have chosen to backup files, but no file entities have been selected"
1335
  msgstr ""
1336
 
1337
+ #: admin.php:542
1338
  msgid "Extensions"
1339
  msgstr ""
1340
 
1341
+ #: admin.php:534 templates/wp-admin/settings/tab-bar.php:8
1342
  msgid "Advanced Tools"
1343
  msgstr ""
1344
 
1345
+ #: addons/googlecloud.php:926
1346
  msgid "Bucket location"
1347
  msgstr ""
1348
 
1349
+ #: addons/googlecloud.php:921
1350
  msgid "Note that Google do not support every storage class in every location - you should read their documentation to learn about current availability."
1351
  msgstr ""
1352
 
1353
+ #: addons/googlecloud.php:921 addons/googlecloud.php:936
1354
  msgid "This setting applies only when a new bucket is being created."
1355
  msgstr ""
1356
 
1357
+ #: addons/googlecloud.php:906
1358
  msgid "You must use a bucket name that is unique, for all %s users."
1359
  msgstr ""
1360
 
1361
+ #: addons/googlecloud.php:862
1362
  msgid "Do not confuse %s with %s - they are separate things."
1363
  msgstr ""
1364
 
1365
+ #: addons/googlecloud.php:294
1366
  msgid "You do not have access to this bucket"
1367
  msgstr ""
1368
 
1415
  msgid "Durable reduced availability"
1416
  msgstr ""
1417
 
1418
+ #: addons/googlecloud.php:35 addons/s3-enhanced.php:61
1419
  msgid "Standard"
1420
  msgstr ""
1421
 
1422
+ #: addons/azure.php:553
1423
  msgid "container"
1424
  msgstr ""
1425
 
1426
+ #: addons/azure.php:553
1427
  msgid "You can enter the path of any %s virtual folder you wish to use here."
1428
  msgstr ""
1429
 
1430
+ #: addons/azure.php:552
1431
  msgid "optional"
1432
  msgstr ""
1433
 
1434
+ #: addons/azure.php:552
1435
  msgid "Prefix"
1436
  msgstr ""
1437
 
1438
+ #: addons/azure.php:547
1439
  msgid "See Microsoft's guidelines on container naming by following this link."
1440
  msgstr ""
1441
 
1442
+ #: addons/azure.php:547
1443
  msgid "If the %s does not already exist, then it will be created."
1444
  msgstr ""
1445
 
1446
+ #: addons/azure.php:547
1447
  msgid "Enter the path of the %s you wish to use here."
1448
  msgstr ""
1449
 
1450
+ #: addons/azure.php:536
1451
  msgid "This is not your Azure login - see the instructions if needing more guidance."
1452
  msgstr ""
1453
 
1454
+ #: addons/azure.php:535
1455
  msgid "Account Name"
1456
  msgstr ""
1457
 
1458
+ #: addons/azure.php:535 addons/azure.php:539
1459
  msgid "Azure"
1460
  msgstr ""
1461
 
1462
+ #: addons/azure.php:531
1463
  msgid "Create Azure credentials in your Azure developer console."
1464
  msgstr ""
1465
 
1466
+ #: addons/azure.php:480
1467
  msgid "Could not create the container"
1468
  msgstr ""
1469
 
1470
+ #: addons/azure.php:353
1471
  msgid "Could not access container"
1472
  msgstr ""
1473
 
1474
+ #: class-updraftplus.php:2863
1475
  msgid "To complete your migration/clone, you should now log in to the remote site and restore the backup set."
1476
  msgstr ""
1477
 
1499
  msgid "Not installed"
1500
  msgstr ""
1501
 
1502
+ #: addons/googlecloud.php:911 addons/s3-enhanced.php:54
1503
  msgid "Storage class"
1504
  msgstr ""
1505
 
1506
+ #: addons/googlecloud.php:906
1507
  msgid "See Google's guidelines on bucket naming by following this link."
1508
  msgstr ""
1509
 
1510
+ #: addons/googlecloud.php:906
1511
  msgid "Bucket names have to be globally unique. If the bucket does not already exist, then it will be created."
1512
  msgstr ""
1513
 
1514
+ #: addons/googlecloud.php:906
1515
  msgid "Enter the name of the %s bucket you wish to use here."
1516
  msgstr ""
1517
 
1518
+ #: addons/googlecloud.php:905
1519
  msgid "Bucket"
1520
  msgstr ""
1521
 
1522
+ #: addons/googlecloud.php:901
1523
  msgid "Otherwise, you can leave it blank."
1524
  msgstr ""
1525
 
1526
+ #: addons/googlecloud.php:901
1527
  msgid "N.B. This is only needed if you have not already created the bucket, and you wish UpdraftPlus to create it for you."
1528
  msgstr ""
1529
 
1530
+ #: addons/googlecloud.php:901
1531
  msgid "Enter the ID of the %s project you wish to use here."
1532
  msgstr ""
1533
 
1534
+ #: addons/googlecloud.php:874
1535
  msgid "Follow this link to your Google API Console, and there activate the Storage API and create a Client ID in the API Access section."
1536
  msgstr ""
1537
 
1538
+ #: addons/googlecloud.php:779
1539
  msgid "You must enter a project ID in order to be able to create a new bucket."
1540
  msgstr ""
1541
 
1542
+ #: addons/googlecloud.php:900
1543
  msgid "Project ID"
1544
  msgstr ""
1545
 
1546
+ #: addons/googlecloud.php:645
1547
  msgid "You must save and authenticate before you can test your settings."
1548
  msgstr ""
1549
 
1550
+ #: addons/googlecloud.php:510
1551
  msgid "Have not yet obtained an access token from Google - you need to authorise or re-authorise your connection to Google Cloud."
1552
  msgstr ""
1553
 
1554
+ #: addons/googlecloud.php:241 addons/googlecloud.php:314
1555
+ #: addons/googlecloud.php:771 addons/googlecloud.php:818
1556
  msgid "You do not have access to this bucket."
1557
  msgstr ""
1558
 
1559
+ #: addons/googlecloud.php:241 addons/googlecloud.php:294
1560
+ #: addons/googlecloud.php:304 addons/googlecloud.php:314
1561
+ #: addons/googlecloud.php:610 addons/googlecloud.php:771
1562
+ #: addons/googlecloud.php:818 addons/googlecloud.php:868
1563
+ #: addons/googlecloud.php:885 addons/googlecloud.php:893
1564
+ #: addons/googlecloud.php:906
1565
  msgid "Google Cloud"
1566
  msgstr ""
1567
 
1568
+ #: addons/googlecloud.php:241 addons/googlecloud.php:294
1569
+ #: addons/googlecloud.php:314 addons/googlecloud.php:771
1570
+ #: addons/googlecloud.php:818
1571
  msgid "%s Service Exception."
1572
  msgstr ""
1573
 
1604
  msgid "Press here to look inside your remote storage methods for any existing backup sets (from any site, if they are stored in the same folder)."
1605
  msgstr ""
1606
 
1607
+ #: admin.php:1486
1608
  msgid "Backup sets removed:"
1609
  msgstr ""
1610
 
1611
+ #: admin.php:723
1612
  msgid "Processing..."
1613
  msgstr ""
1614
 
1615
+ #: admin.php:721
1616
  msgid "For backups older than"
1617
  msgstr ""
1618
 
1619
+ #: admin.php:720
1620
  msgid "week(s)"
1621
  msgstr ""
1622
 
1623
+ #: admin.php:719
1624
  msgid "hour(s)"
1625
  msgstr ""
1626
 
1627
+ #: admin.php:718
1628
  msgid "day(s)"
1629
  msgstr ""
1630
 
1631
+ #: admin.php:717
1632
  msgid "in the month"
1633
  msgstr ""
1634
 
1635
+ #: admin.php:716
1636
  msgid "day"
1637
  msgstr ""
1638
 
1652
  msgid "This problem is caused by trying to restore a database on a very old MySQL version that is incompatible with the source database."
1653
  msgstr ""
1654
 
1655
+ #: methods/updraftvault.php:616
1656
  msgid "You do not currently have any UpdraftPlus Vault quota"
1657
  msgstr ""
1658
 
1659
+ #: class-updraftplus.php:4277
1660
  msgid "You must upgrade MySQL to be able to use this database."
1661
  msgstr ""
1662
 
1663
+ #: class-updraftplus.php:4277
1664
  msgid "The database backup uses MySQL features not available in the old MySQL version (%s) that this site is running on."
1665
  msgstr ""
1666
 
1667
+ #: admin.php:2178
1668
  msgid "The UpdraftPlus directory in wp-content/plugins has white-space in it; WordPress does not like this. You should rename the directory to wp-content/plugins/updraftplus to fix this problem."
1669
  msgstr ""
1670
 
1671
+ #: methods/updraftvault.php:343
1672
  msgid "Don't know your email address, or forgotten your password?"
1673
  msgstr ""
1674
 
1675
+ #: methods/updraftvault.php:336
1676
  msgid "Enter your UpdraftPlus.Com email / password here to connect:"
1677
  msgstr ""
1678
 
1679
+ #: methods/updraftvault.php:298 methods/updraftvault.php:328
1680
  msgid "Read the FAQs here."
1681
  msgstr ""
1682
 
1683
+ #: addons/s3-enhanced.php:69
1684
  msgid "Check this box to use Amazon's server-side encryption"
1685
  msgstr ""
1686
 
1687
+ #: addons/s3-enhanced.php:68
1688
  msgid "Server-side encryption"
1689
  msgstr ""
1690
 
1691
+ #: methods/updraftvault.php:625
1692
  msgid "If you have forgotten your password, then go here to change your password on updraftplus.com."
1693
  msgstr ""
1694
 
1695
+ #: admin.php:970
1696
  msgid "Go to the remote storage settings in order to connect."
1697
  msgstr ""
1698
 
1699
+ #: admin.php:970
1700
  msgid "%s has been chosen for remote storage, but you are not currently connected."
1701
  msgstr ""
1702
 
1703
+ #: methods/updraftvault.php:325
1704
  msgid "Payments can be made in US dollars, euros or GB pounds sterling, via card or PayPal."
1705
  msgstr ""
1706
 
1707
+ #: admin.php:693
1708
  msgid "Update quota count"
1709
  msgstr ""
1710
 
1711
+ #: admin.php:692
1712
  msgid "Counting..."
1713
  msgstr ""
1714
 
1715
+ #: admin.php:691
1716
  msgid "Disconnecting..."
1717
  msgstr ""
1718
 
1719
+ #: admin.php:689
1720
  msgid "Connecting..."
1721
  msgstr ""
1722
 
1723
+ #: methods/updraftvault.php:399 methods/updraftvault.php:468
1724
  msgid "Refresh current status"
1725
  msgstr ""
1726
 
1727
+ #: methods/updraftvault.php:397 methods/updraftvault.php:413
1728
+ #: methods/updraftvault.php:415 methods/updraftvault.php:468
1729
  msgid "Get more quota"
1730
  msgstr ""
1731
 
1732
+ #: methods/updraftvault.php:394 methods/updraftvault.php:410
1733
+ #: methods/updraftvault.php:449
1734
  msgid "Current use:"
1735
  msgstr ""
1736
 
1737
+ #: methods/updraftvault.php:389
1738
  msgid "You can get more quota here"
1739
  msgstr ""
1740
 
1741
+ #: methods/updraftvault.php:389
1742
  msgid "%s Error: you have insufficient storage quota available (%s) to upload this archive (%s)."
1743
  msgstr ""
1744
 
1745
+ #: admin.php:690 methods/updraftvault.php:381
1746
  msgid "Disconnect"
1747
  msgstr ""
1748
 
1749
+ #: methods/updraftvault.php:373
1750
  msgid "Quota:"
1751
  msgstr ""
1752
 
1753
+ #: methods/updraftvault.php:371
1754
  msgid "Vault owner"
1755
  msgstr ""
1756
 
1757
+ #: methods/updraftvault.php:371
1758
  msgid "Well done - there's nothing more needed to set up."
1759
  msgstr ""
1760
 
1761
+ #: methods/updraftvault.php:371
1762
  msgid "This site is <strong>connected</strong> to UpdraftPlus Vault."
1763
  msgstr ""
1764
 
1765
+ #: methods/updraftvault.php:367
1766
  msgid "You are <strong>not connected</strong> to UpdraftPlus Vault."
1767
  msgstr ""
1768
 
1769
+ #: methods/updraftvault.php:343
1770
  msgid "Go here for help"
1771
  msgstr ""
1772
 
1773
+ #: methods/updraftvault.php:338
1774
  msgid "E-mail"
1775
  msgstr ""
1776
 
1777
+ #: methods/updraftvault.php:331 methods/updraftvault.php:346
1778
  msgid "Back..."
1779
  msgstr ""
1780
 
1781
+ #: methods/updraftvault.php:325
1782
  msgid "Subscriptions can be cancelled at any time."
1783
  msgstr ""
1784
 
1785
+ #: methods/updraftvault.php:308 methods/updraftvault.php:314
1786
+ #: methods/updraftvault.php:320
1787
  msgid "%s per quarter"
1788
  msgstr ""
1789
 
1790
+ #: central/bootstrap.php:542 methods/updraftvault.php:298
1791
+ #: methods/updraftvault.php:328
1792
  msgid "Read more about it here."
1793
  msgstr ""
1794
 
1795
+ #: methods/updraftvault.php:298 methods/updraftvault.php:328
1796
  msgid "UpdraftPlus Vault is built on top of Amazon's world-leading data-centres, with redundant data storage to achieve 99.999999999% reliability."
1797
  msgstr ""
1798
 
1799
+ #: methods/updraftvault.php:294
1800
  msgid "Already purchased space?"
1801
  msgstr ""
1802
 
1803
+ #: methods/updraftvault.php:291
1804
  msgid "Show the options"
1805
  msgstr ""
1806
 
1807
+ #: methods/updraftvault.php:290
1808
  msgid "First time user?"
1809
  msgstr ""
1810
 
1811
+ #: methods/updraftvault.php:287 methods/updraftvault.php:304
1812
  msgid "Press a button to get started."
1813
  msgstr ""
1814
 
1815
+ #: methods/updraftvault.php:287 methods/updraftvault.php:304
1816
  msgid "UpdraftPlus Vault brings you storage that is <strong>reliable, easy to use and a great price</strong>."
1817
  msgstr ""
1818
 
1819
+ #: methods/updraftvault.php:242
1820
  msgid "You have an UpdraftPlus Vault subscription that has not been renewed, and the grace period has expired. In a few days' time, your stored data will be permanently removed. If you do not wish this to happen, then you should renew as soon as possible."
1821
  msgstr ""
1822
 
1823
+ #: methods/updraftvault.php:239
1824
  msgid "You have an UpdraftPlus Vault subscription with overdue payment. You are within the few days of grace period before it will be suspended, and you will lose your quota and access to data stored within it. Please renew as soon as possible!"
1825
  msgstr ""
1826
 
1827
+ #: methods/updraftvault.php:236
1828
  msgid "Your UpdraftPlus Premium purchase is over a year ago. You should renew immediately to avoid losing the 12 months of free storage allowance that you get for being a current UpdraftPlus Premium customer."
1829
  msgstr ""
1830
 
1831
+ #: methods/updraftvault.php:90
1832
  msgid "Updraft Vault"
1833
  msgstr ""
1834
 
1835
+ #: addons/azure.php:375 addons/googlecloud.php:729 methods/s3.php:1059
1836
  msgid "Delete failed:"
1837
  msgstr ""
1838
 
1840
  msgid "The zip engine returned the message: %s."
1841
  msgstr ""
1842
 
1843
+ #: addons/s3-enhanced.php:360
1844
  msgid "Without this permission, UpdraftPlus cannot delete backups - you should also set your 'retain' settings very high to prevent seeing deletion errors."
1845
  msgstr ""
1846
 
1847
+ #: addons/s3-enhanced.php:358
1848
  msgid "Allow deletion"
1849
  msgstr ""
1850
 
1851
+ #: addons/s3-enhanced.php:356
1852
  msgid "Without this permission, you cannot directly download or restore using UpdraftPlus, and will instead need to visit the AWS website."
1853
  msgstr ""
1854
 
1855
+ #: addons/s3-enhanced.php:354
1856
  msgid "Allow download"
1857
  msgstr ""
1858
 
1860
  msgid "If sending directly from site to site does not work for you, then there are three other methods - please try one of these instead."
1861
  msgstr ""
1862
 
1863
+ #: addons/migrator.php:1742 admin.php:699
1864
  msgid "You should check that the remote site is online, not firewalled, does not have security modules that may be blocking access, has UpdraftPlus version %s or later active and that the keys have been entered correctly."
1865
  msgstr ""
1866
 
1928
  msgid "Backup made by %s"
1929
  msgstr ""
1930
 
1931
+ #: methods/addon-base-v2.php:177
1932
  msgid "This storage method does not allow downloading"
1933
  msgstr ""
1934
 
1935
+ #: admin.php:3437
1936
  msgid "(backup set imported from remote location)"
1937
  msgstr ""
1938
 
1939
+ #: templates/wp-admin/settings/existing-backups-table.php:82
1940
  msgid "Site"
1941
  msgstr ""
1942
 
1943
+ #: templates/wp-admin/settings/existing-backups-table.php:81
1944
  msgid "Backup sent to remote site - not available for download."
1945
  msgstr ""
1946
 
1952
  msgid "This backup set was not known by UpdraftPlus to be created by the current WordPress installation, but was either found in remote storage, or was sent from a remote site."
1953
  msgstr ""
1954
 
1955
+ #: addons/migrator.php:1770 admin.php:706
1956
  msgid "Testing connection..."
1957
  msgstr ""
1958
 
1959
+ #: admin.php:703
1960
  msgid "Deleting..."
1961
  msgstr ""
1962
 
1963
+ #: admin.php:702
1964
  msgid "key name"
1965
  msgstr ""
1966
 
1967
+ #: admin.php:700
1968
  msgid "Please give this key a name (e.g. indicate the site it is for):"
1969
  msgstr ""
1970
 
1971
+ #: admin.php:697
1972
  msgid "Creating..."
1973
  msgstr ""
1974
 
1992
  msgid "Or, send a backup to another site"
1993
  msgstr ""
1994
 
1995
+ #: addons/migrator.php:1937 admin.php:707
1996
  msgid "Send"
1997
  msgstr ""
1998
 
1999
+ #: addons/migrator.php:1931 admin.php:698
2000
  msgid "Send to site:"
2001
  msgstr ""
2002
 
2060
  msgid "A \"migration\" is ultimately the same as a restoration - but using backup archives that you import from another site."
2061
  msgstr ""
2062
 
2063
+ #: addons/migrator.php:2180 admin.php:695
2064
  msgid "Add site"
2065
  msgstr ""
2066
 
2067
+ #: admin.php:694
2068
  msgid "Adding..."
2069
  msgstr ""
2070
 
2096
  msgid "To import a backup set, go to the \"Existing Backups\" tab"
2097
  msgstr ""
2098
 
2099
+ #: admin.php:686 admin.php:712 admin.php:713
2100
  msgid "You have made changes to your settings, and not saved."
2101
  msgstr ""
2102
 
2103
+ #: addons/onedrive.php:998
2104
  msgid "N.B. %s is not case-sensitive."
2105
  msgstr ""
2106
 
2107
+ #: addons/onedrive.php:986
2108
  msgid "If OneDrive later shows you the message \"unauthorized_client\", then you did not enter a valid client ID here."
2109
  msgstr ""
2110
 
2111
+ #: addons/azure.php:531 addons/migrator.php:1757 addons/onedrive.php:970
2112
  msgid "For longer help, including screenshots, follow this link."
2113
  msgstr ""
2114
 
2115
+ #: addons/onedrive.php:970
2116
  msgid "Create OneDrive credentials in your OneDrive developer console."
2117
  msgstr ""
2118
 
2119
+ #: addons/onedrive.php:965
2120
  msgid "You must add the following as the authorised redirect URI in your OneDrive console (under \"API Settings\") when asked"
2121
  msgstr ""
2122
 
2123
+ #: addons/onedrive.php:938 addons/onedrive.php:940
2124
  msgid "%s authorisation failed:"
2125
  msgstr ""
2126
 
2127
+ #: addons/onedrive.php:795 addons/onedrive.php:985 addons/onedrive.php:989
2128
  msgid "OneDrive"
2129
  msgstr ""
2130
 
2131
+ #: addons/onedrive.php:628
2132
  msgid "Please re-authorize the connection to your %s account."
2133
  msgstr ""
2134
 
2136
  msgid "configure it here"
2137
  msgstr ""
2138
 
2139
+ #: addons/onedrive.php:621 methods/updraftvault.php:589
2140
  msgid "To remove the block, please go here."
2141
  msgstr ""
2142
 
2143
+ #: addons/s3-enhanced.php:447
2144
  msgid "Do remember to save your settings."
2145
  msgstr ""
2146
 
2147
+ #: addons/s3-enhanced.php:447
2148
  msgid "You are now using a IAM user account to access your bucket."
2149
  msgstr ""
2150
 
2151
+ #: addons/s3-enhanced.php:352
2152
  msgid "S3 bucket"
2153
  msgstr ""
2154
 
2155
+ #: addons/s3-enhanced.php:342
2156
  msgid "China (Beijing) (restricted)"
2157
  msgstr ""
2158
 
2159
+ #: addons/s3-enhanced.php:341
2160
  msgid "South America (Sao Paulo)"
2161
  msgstr ""
2162
 
2163
+ #: addons/s3-enhanced.php:340
2164
  msgid "Asia Pacific (Tokyo)"
2165
  msgstr ""
2166
 
2167
+ #: addons/s3-enhanced.php:338
2168
  msgid "Asia Pacific (Sydney)"
2169
  msgstr ""
2170
 
2171
+ #: addons/s3-enhanced.php:337
2172
  msgid "Asia Pacific (Singapore)"
2173
  msgstr ""
2174
 
2175
+ #: addons/s3-enhanced.php:331
2176
  msgid "US Government West (restricted)"
2177
  msgstr ""
2178
 
2179
+ #: addons/s3-enhanced.php:330
2180
  msgid "US West (N. California)"
2181
  msgstr ""
2182
 
2183
+ #: addons/s3-enhanced.php:329
2184
  msgid "US West (Oregon)"
2185
  msgstr ""
2186
 
2187
+ #: addons/s3-enhanced.php:327
2188
  msgid "US Standard (default)"
2189
  msgstr ""
2190
 
2191
+ #: addons/s3-enhanced.php:323
2192
  msgid "S3 storage region"
2193
  msgstr ""
2194
 
2195
+ #: addons/s3-enhanced.php:321
2196
  msgid "New IAM username"
2197
  msgstr ""
2198
 
2199
+ #: addons/s3-enhanced.php:320
2200
  msgid "Admin secret key"
2201
  msgstr ""
2202
 
2203
+ #: addons/s3-enhanced.php:319
2204
  msgid "Admin access key"
2205
  msgstr ""
2206
 
2207
+ #: addons/s3-enhanced.php:312
2208
  msgid "Then, these lower-powered access credentials can be used, instead of storing your administrative keys."
2209
  msgstr ""
2210
 
2211
+ #: addons/s3-enhanced.php:312
2212
  msgid "These will be used to create a new user and key pair with an IAM policy attached which will only allow it to access the indicated bucket."
2213
  msgstr ""
2214
 
2215
+ #: addons/s3-enhanced.php:312
2216
  msgid "Enter your administrative Amazon S3 access/secret keys (this needs to be a key pair with enough rights to create new users and buckets), and a new (unique) username for the new user and a bucket name."
2217
  msgstr ""
2218
 
2219
+ #: addons/s3-enhanced.php:389
2220
  msgid "Create new IAM user and S3 bucket"
2221
  msgstr ""
2222
 
2223
+ #: addons/s3-enhanced.php:302
2224
  msgid "Secret Key: %s"
2225
  msgstr ""
2226
 
2227
+ #: addons/s3-enhanced.php:302
2228
  msgid "Access Key: %s"
2229
  msgstr ""
2230
 
2231
+ #: addons/s3-enhanced.php:290 addons/s3-enhanced.php:292
2232
  msgid "Failed to apply User Policy"
2233
  msgstr ""
2234
 
2235
+ #: addons/s3-enhanced.php:231 addons/s3-enhanced.php:235
2236
  msgid "Operation to create user Access Key failed"
2237
  msgstr ""
2238
 
2239
+ #: addons/s3-enhanced.php:229
2240
  msgid "Failed to create user Access Key"
2241
  msgstr ""
2242
 
2243
+ #: addons/s3-enhanced.php:209 addons/s3-enhanced.php:212
2244
+ #: addons/s3-enhanced.php:216
2245
  msgid "IAM operation failed (%s)"
2246
  msgstr ""
2247
 
2248
+ #: addons/s3-enhanced.php:207
2249
  msgid "Conflict: that user already exists"
2250
  msgstr ""
2251
 
2252
+ #: addons/s3-enhanced.php:179
2253
  msgid "Failure: We could not successfully access or create such a bucket. Please check your access credentials, and if those are correct then try another bucket name (as another AWS user may already have taken your name)."
2254
  msgstr ""
2255
 
2256
+ #: addons/s3-enhanced.php:132
2257
  msgid "AWS authentication failed"
2258
  msgstr ""
2259
 
2260
+ #: addons/s3-enhanced.php:125
2261
  msgid "Cannot create new AWS user, since the old AWS toolkit is being used."
2262
  msgstr ""
2263
 
2264
+ #: addons/s3-enhanced.php:100
2265
  msgid "You need to enter a bucket"
2266
  msgstr ""
2267
 
2268
+ #: addons/s3-enhanced.php:97
2269
  msgid "You need to enter a new IAM username"
2270
  msgstr ""
2271
 
2272
+ #: addons/s3-enhanced.php:94
2273
  msgid "You need to enter an admin secret key"
2274
  msgstr ""
2275
 
2276
+ #: addons/s3-enhanced.php:91
2277
  msgid "You need to enter an admin access key"
2278
  msgstr ""
2279
 
2280
+ #: addons/s3-enhanced.php:79
2281
  msgid "If you have an AWS admin user, then you can use this wizard to quickly create a new AWS (IAM) user with access to only this bucket (rather than your whole account)"
2282
  msgstr ""
2283
 
2284
+ #: methods/s3.php:862
2285
  msgid "To create a new IAM sub-user and access key that has access only to this bucket, use this add-on."
2286
  msgstr ""
2287
 
2297
  msgid "Uploads path (%s) has changed during a migration - resetting (to: %s)"
2298
  msgstr ""
2299
 
2300
+ #: addons/onedrive.php:598 addons/onedrive.php:621 methods/updraftvault.php:589
2301
  #: udaddons/updraftplus-addons.php:732 udaddons/updraftplus-addons.php:747
2302
  msgid "This most likely means that you share a webserver with a hacked website that has been used in previous attacks."
2303
  msgstr ""
2304
 
2305
+ #: addons/onedrive.php:621 methods/updraftvault.php:589
2306
  #: udaddons/updraftplus-addons.php:747
2307
  msgid "It appears that your web server's IP Address (%s) is blocked."
2308
  msgstr ""
2309
 
2310
+ #: addons/onedrive.php:621 methods/updraftvault.php:589
2311
  #: udaddons/updraftplus-addons.php:747
2312
  msgid "UpdraftPlus.com has responded with 'Access Denied'."
2313
  msgstr ""
2358
  msgid "(at same time as files backup)"
2359
  msgstr ""
2360
 
2361
+ #: admin.php:2958
2362
  msgid "No backup has been completed"
2363
  msgstr ""
2364
 
2406
  msgid "Backup (where relevant) plugins, themes and the WordPress database with UpdraftPlus before updating"
2407
  msgstr ""
2408
 
2409
+ #: methods/s3.php:148 methods/s3.php:149 methods/s3.php:150 methods/s3.php:158
2410
+ #: methods/s3.php:159 methods/s3.php:160
2411
  msgid "%s Error: Failed to initialise"
2412
  msgstr ""
2413
 
2414
+ #: templates/wp-admin/settings/form-contents.php:261
2415
  msgctxt "Uploader: Drop db.gz.crypt files here to upload them for decryption - or - Select Files"
2416
  msgid "or"
2417
  msgstr ""
2421
  msgid "or"
2422
  msgstr ""
2423
 
2424
+ #: admin.php:680
2425
  msgid "You did not select any components to restore. Please select at least one, and then try again."
2426
  msgstr ""
2427
 
2428
+ #: addons/sftp.php:399
2429
  msgctxt "Do not translate BEGIN RSA PRIVATE KEY. PCKS1, XML, PEM and PuTTY are also technical acronyms which should not be translated."
2430
  msgid "PKCS1 (PEM header: BEGIN RSA PRIVATE KEY), XML and PuTTY format keys are accepted."
2431
  msgstr ""
2432
 
2433
+ #: addons/sftp.php:362
2434
  msgid "Resuming partial uploads is supported for SFTP, but not for SCP. Thus, if using SCP then you will need to ensure that your webserver allows PHP processes to run long enough to upload your largest backup file."
2435
  msgstr ""
2436
 
2437
+ #: methods/openstack2.php:173
2438
  msgctxt "\"tenant\" is a term used with OpenStack storage - Google for \"OpenStack tenant\" to get more help on its meaning"
2439
  msgid "tenant"
2440
  msgstr ""
2441
 
2442
+ #: methods/openstack2.php:123
2443
  msgctxt "Keystone and swauth are technical terms which cannot be translated"
2444
  msgid "This needs to be a v2 (Keystone) authentication URI; v1 (Swauth) is not supported."
2445
  msgstr ""
2446
 
2447
+ #: templates/wp-admin/settings/form-contents.php:332
2448
  msgid "your site's admin address"
2449
  msgstr ""
2450
 
2451
+ #: templates/wp-admin/settings/form-contents.php:332
2452
  msgid "Check this box to have a basic report sent to"
2453
  msgstr ""
2454
 
2455
+ #: admin.php:2967
2456
  msgctxt "i.e. Non-automatic"
2457
  msgid "Manual"
2458
  msgstr ""
2470
  msgid "Any other file/directory on your server that you wish to back up"
2471
  msgstr ""
2472
 
2473
+ #: admin.php:2195
2474
  msgid "For even more features and personal support, check out "
2475
  msgstr ""
2476
 
2486
  msgid "Database decryption phrase"
2487
  msgstr ""
2488
 
2489
+ #: addons/autobackup.php:131 addons/autobackup.php:966 admin.php:685
2490
  msgid "Automatic backup before update"
2491
  msgstr ""
2492
 
2574
  msgid "Note that after you have claimed your add-ons, you can remove your password (but not the email address) from the settings below, without affecting this site's access to updates."
2575
  msgstr ""
2576
 
2577
+ #: admin.php:2528 admin.php:3460
2578
  msgid "View Log"
2579
  msgstr ""
2580
 
2581
+ #: templates/wp-admin/settings/existing-backups-table.php:15
2582
  msgid "Backup data (click to download)"
2583
  msgstr ""
2584
 
2585
+ #: templates/wp-admin/settings/existing-backups-table.php:14
2586
  msgid "Backup date"
2587
  msgstr ""
2588
 
2591
  msgid "and retain this many scheduled backups"
2592
  msgstr ""
2593
 
2594
+ #: admin.php:2928
2595
  msgid "incremental backup; base backup: %s"
2596
  msgstr ""
2597
 
2603
  msgid "Upload files into UpdraftPlus."
2604
  msgstr ""
2605
 
2606
+ #: admin.php:921 includes/class-commands.php:364
2607
  #: templates/wp-admin/settings/tab-status.php:22
2608
  msgid "The 'Backup Now' button is disabled as your backup directory is not writable (go to the 'Settings' tab and find the relevant option)."
2609
  msgstr ""
2610
 
2611
+ #: class-updraftplus.php:4227
2612
  msgid "Backup label:"
2613
  msgstr ""
2614
 
2615
+ #: admin.php:1722
2616
  msgid "Error: unexpected file read fail"
2617
  msgstr ""
2618
 
2632
  msgid "Your label for this backup (optional)"
2633
  msgstr ""
2634
 
2635
+ #: addons/googlecloud.php:868 methods/googledrive.php:902
2636
  msgid "%s does not allow authorisation of sites hosted on direct IP addresses. You will need to change your site's address (%s) before you can use %s for storage."
2637
  msgstr ""
2638
 
2639
+ #: methods/updraftvault.php:628 udaddons/updraftplus-addons.php:789
2640
  msgid "You entered an email address that was not recognised by UpdraftPlus.Com"
2641
  msgstr ""
2642
 
2643
+ #: methods/updraftvault.php:625 udaddons/updraftplus-addons.php:785
2644
  msgid "Your email address was valid, but your password was not recognised by UpdraftPlus.Com."
2645
  msgstr ""
2646
 
2647
+ #: methods/updraftvault.php:565 udaddons/updraftplus-addons.php:655
2648
  msgid "You need to supply both an email address and a password"
2649
  msgstr ""
2650
 
2652
  msgid "To proceed, press 'Backup Now'. Then, watch the 'Last Log Message' field for activity."
2653
  msgstr ""
2654
 
2655
+ #: class-updraftplus.php:4246
2656
  msgid "If you want to restore a multisite backup, you should first set up your WordPress installation as a multisite."
2657
  msgstr ""
2658
 
2659
+ #: class-updraftplus.php:4246
2660
  msgid "Your backup is of a WordPress multisite install; but this site is not. Only the first site of the network will be accessible."
2661
  msgstr ""
2662
 
2692
  msgid "You need to connect to receive future updates to UpdraftPlus."
2693
  msgstr ""
2694
 
2695
+ #: class-updraftplus.php:4219
2696
  msgid "Any support requests to do with %s should be raised with your web hosting company."
2697
  msgstr ""
2698
 
2699
+ #: class-updraftplus.php:4219
2700
  msgid "You should only proceed if you cannot update the current server and are confident (or willing to risk) that your plugins/themes/etc. are compatible with the older %s version."
2701
  msgstr ""
2702
 
2703
+ #: class-updraftplus.php:4219
2704
  msgid "This is significantly newer than the server which you are now restoring onto (version %s)."
2705
  msgstr ""
2706
 
2707
+ #: class-updraftplus.php:4219
2708
  msgid "The site in this backup was running on a webserver with version %s of %s. "
2709
  msgstr ""
2710
 
2729
  msgid "UpdraftPlus is on social media - check us out!"
2730
  msgstr ""
2731
 
2732
+ #: admin.php:3521
2733
  msgid "Why am I seeing this?"
2734
  msgstr ""
2735
 
2741
  msgid "Press here to look inside your UpdraftPlus directory (in your web hosting space) for any new backup sets that you have uploaded."
2742
  msgstr ""
2743
 
2744
+ #: admin.php:1670 admin.php:1682
2745
  msgid "Start backup"
2746
  msgstr ""
2747
 
2748
+ #: class-updraftplus.php:4191 restorer.php:996
2749
  msgid "You are using the %s webserver, but do not seem to have the %s module loaded."
2750
  msgstr ""
2751
 
2752
+ #: admin.php:2851
2753
  msgid "You will need to consult with your web hosting provider to find out how to set permissions for a WordPress plugin to write to the directory."
2754
  msgstr ""
2755
 
2757
  msgid "Unless you have a problem, you can completely ignore everything here."
2758
  msgstr ""
2759
 
2760
+ #: admin.php:1881
2761
  msgid "This file could not be uploaded"
2762
  msgstr ""
2763
 
2764
+ #: admin.php:1846
2765
  msgid "You will find more information about this in the Settings section."
2766
  msgstr ""
2767
 
2781
  msgid "Memory limit"
2782
  msgstr ""
2783
 
2784
+ #: class-updraftplus.php:4349 restorer.php:1441
2785
  msgid "restoration"
2786
  msgstr ""
2787
 
2809
  msgid "Backup succeeded"
2810
  msgstr ""
2811
 
2812
+ #: admin.php:2968 admin.php:2969 admin.php:2970 updraftplus.php:92
2813
  #: updraftplus.php:93
2814
  msgid "Every %s hours"
2815
  msgstr ""
2864
  msgid "N.B. If you install UpdraftPlus on several WordPress sites, then you cannot re-use your project; you must create a new one from your Google API console for each site."
2865
  msgstr ""
2866
 
2867
+ #: admin.php:3286
2868
  msgid "You have not yet made any backups."
2869
  msgstr ""
2870
 
2871
+ #: templates/wp-admin/settings/form-contents.php:224
2872
  msgid "Database Options"
2873
  msgstr ""
2874
 
2884
  msgid "Free disk space in account:"
2885
  msgstr ""
2886
 
2887
+ #: admin.php:4080 templates/wp-admin/settings/tab-status.php:27
2888
  msgid "This button is disabled because your backup directory is not writable (see the settings)."
2889
  msgstr ""
2890
 
2891
+ #: admin.php:518 admin.php:654 admin.php:1535
2892
  #: includes/deprecated-actions.php:30
2893
  #: templates/wp-admin/settings/downloading-and-restoring.php:22
2894
  #: templates/wp-admin/settings/tab-bar.php:6
2895
  msgid "Existing Backups"
2896
  msgstr ""
2897
 
2898
+ #: admin.php:510 templates/wp-admin/settings/tab-bar.php:5
2899
  msgid "Current Status"
2900
  msgstr ""
2901
 
2902
+ #: admin.php:926
2903
  msgid "To change any of the default settings of what is backed up, to configure scheduled backups, to send your backups to remote storage (recommended), and more, go to the settings tab."
2904
  msgstr ""
2905
 
2906
+ #: admin.php:926
2907
  msgid "To make a backup, just press the Backup Now button."
2908
  msgstr ""
2909
 
2910
+ #: admin.php:926
2911
  msgid "Welcome to UpdraftPlus!"
2912
  msgstr ""
2913
 
2979
  msgid "user"
2980
  msgstr ""
2981
 
2982
+ #: class-updraftplus.php:1587
2983
  msgid "External database (%s)"
2984
  msgstr ""
2985
 
2991
  msgid "failed to access parent folder"
2992
  msgstr ""
2993
 
2994
+ #: addons/googlecloud.php:590 addons/onedrive.php:763 addons/onedrive.php:774
2995
  #: methods/googledrive.php:328
2996
  msgid "However, subsequent access attempts failed:"
2997
  msgstr ""
2998
 
2999
+ #: admin.php:3311
3000
  msgid "External database"
3001
  msgstr ""
3002
 
3003
+ #: templates/wp-admin/settings/form-contents.php:366
3004
  msgid "This will also cause debugging output from all plugins to be shown upon this screen - please do not be surprised to see these."
3005
  msgstr ""
3006
 
3007
+ #: templates/wp-admin/settings/form-contents.php:306
3008
  msgid "Back up more databases"
3009
  msgstr ""
3010
 
3011
+ #: templates/wp-admin/settings/form-contents.php:263
3012
  msgid "First, enter the decryption key"
3013
  msgstr ""
3014
 
3015
+ #: templates/wp-admin/settings/form-contents.php:245
3016
  msgid "You can manually decrypt an encrypted database here."
3017
  msgstr ""
3018
 
3019
+ #: templates/wp-admin/settings/form-contents.php:233
3020
  msgid "It can also backup external databases."
3021
  msgstr ""
3022
 
3023
+ #: templates/wp-admin/settings/form-contents.php:233
3024
  msgid "Don't want to be spied on? UpdraftPlus Premium can encrypt your database backup."
3025
  msgstr ""
3026
 
3028
  msgid "use UpdraftPlus Premium"
3029
  msgstr ""
3030
 
3031
+ #: class-updraftplus.php:4109
3032
  msgid "Decryption failed. The database file is encrypted."
3033
  msgstr ""
3034
 
3056
  msgid "In %s, path names are case sensitive."
3057
  msgstr ""
3058
 
3059
+ #: addons/azure.php:553 addons/google-enhanced.php:82 addons/onedrive.php:998
3060
  msgid "If you leave it blank, then the backup will be placed in the root of your %s"
3061
  msgstr ""
3062
 
3063
+ #: addons/google-enhanced.php:82 addons/googlecloud.php:906
3064
+ #: addons/onedrive.php:998
3065
  msgid "e.g. %s"
3066
  msgstr ""
3067
 
3068
+ #: addons/google-enhanced.php:82 addons/onedrive.php:998
3069
  msgid "If the folder does not already exist, then it will be created."
3070
  msgstr ""
3071
 
3072
+ #: addons/google-enhanced.php:82 addons/onedrive.php:998
3073
  msgid "Enter the path of the %s folder you wish to use here."
3074
  msgstr ""
3075
 
3076
+ #: addons/azure.php:546 methods/openstack2.php:154
3077
  msgid "Container"
3078
  msgstr ""
3079
 
3080
+ #: methods/openstack2.php:137
3081
  msgid "Leave this blank, and a default will be chosen."
3082
  msgstr ""
3083
 
3084
+ #: methods/openstack2.php:128
3085
  msgid "Tenant"
3086
  msgstr ""
3087
 
3088
+ #: methods/openstack2.php:128
3089
  msgid "Follow this link for more information"
3090
  msgstr ""
3091
 
3092
+ #: methods/openstack2.php:120 methods/openstack2.php:178
3093
  msgid "authentication URI"
3094
  msgstr ""
3095
 
3096
+ #: methods/openstack2.php:115
3097
  msgid "Get your access credentials from your OpenStack Swift provider, and then pick a container name to use for storage. This container will be created for you if it does not already exist."
3098
  msgstr ""
3099
 
3100
+ #: methods/addon-base-v2.php:194 methods/addon-base-v2.php:214
3101
  msgid "Failed to download %s"
3102
  msgstr ""
3103
 
3104
+ #: methods/addon-base-v2.php:208
3105
  msgid "Failed to download"
3106
  msgstr ""
3107
 
3113
  msgid "Failed to upload %s"
3114
  msgstr ""
3115
 
3116
+ #: methods/dropbox.php:614 methods/dropbox.php:616
3117
  msgid "Success:"
3118
  msgstr ""
3119
 
3120
+ #: addons/onedrive.php:1006 methods/dropbox.php:512
3121
  msgid "<strong>After</strong> you have saved your settings (by clicking 'Save Changes' below), then come back here once and click this link to complete authentication with %s."
3122
  msgstr ""
3123
 
3124
+ #: addons/onedrive.php:1004 methods/dropbox.php:509
3125
  msgid "(You appear to be already authenticated)."
3126
  msgstr ""
3127
 
3128
+ #: methods/dropbox.php:504 methods/dropbox.php:510 methods/dropbox.php:512
3129
  msgid "Dropbox"
3130
  msgstr ""
3131
 
3132
+ #: addons/onedrive.php:1003 methods/dropbox.php:504
3133
  msgid "Authenticate with %s"
3134
  msgstr ""
3135
 
3136
+ #: methods/cloudfiles.php:407
3137
  msgid "Error downloading remote file: Failed to download"
3138
  msgstr ""
3139
 
3160
  msgid "%s error - failed to access the container"
3161
  msgstr ""
3162
 
3163
+ #: addons/googlecloud.php:948 addons/onedrive.php:1005 methods/dropbox.php:519
3164
  #: methods/googledrive.php:957
3165
  msgid "Account holder's name: %s."
3166
  msgstr ""
3177
  msgid "<strong>This is NOT a folder name</strong>."
3178
  msgstr ""
3179
 
3180
+ #: addons/google-enhanced.php:81 addons/onedrive.php:997
3181
  #: methods/googledrive.php:933 methods/googledrive.php:943
3182
  msgid "Folder"
3183
  msgstr ""
3184
 
3185
+ #: addons/googlecloud.php:280 addons/onedrive.php:375
3186
  #: methods/googledrive.php:863
3187
  msgid "%s download: failed: file not found"
3188
  msgstr ""
3189
 
3190
+ #: addons/googlecloud.php:610 methods/googledrive.php:348
3191
  msgid "Name: %s."
3192
  msgstr ""
3193
 
3207
  msgid "This remote storage method (%s) requires PHP %s or later."
3208
  msgstr ""
3209
 
3210
+ #: admin.php:3866
3211
  msgid "Theme directory (%s) not found, but lower-case version exists; updating database option accordingly"
3212
  msgstr ""
3213
 
3221
 
3222
  #: addons/migrator.php:375
3223
  #: templates/wp-admin/settings/downloading-and-restoring.php:56
3224
+ #: templates/wp-admin/settings/form-contents.php:253
3225
  msgid "This feature requires %s version %s or later"
3226
  msgstr ""
3227
 
3237
  msgid "Failed to unpack the archive"
3238
  msgstr ""
3239
 
3240
+ #: class-updraftplus.php:1145
3241
  msgid "Error - failed to download the file"
3242
  msgstr ""
3243
 
3257
  msgid "The installed version of UpdraftPlus Backup/Restore has not been tested on your version of WordPress (%s)."
3258
  msgstr ""
3259
 
3260
+ #: addons/sftp.php:443
3261
  msgid "password/key"
3262
  msgstr ""
3263
 
3264
+ #: addons/azure.php:539 addons/migrator.php:2198 addons/sftp.php:396
3265
+ #: admin.php:701
3266
  msgid "Key"
3267
  msgstr ""
3268
 
3269
+ #: addons/sftp.php:391
3270
  msgid "Your login may be either password or key-based - you only need to enter one, not both."
3271
  msgstr ""
3272
 
3278
  msgid "SCP/SFTP password/key"
3279
  msgstr ""
3280
 
3281
+ #: admin.php:3346
3282
  msgid "Files backup (created by %s)"
3283
  msgstr ""
3284
 
3285
+ #: admin.php:3346
3286
  msgid "Files and database WordPress backup (created by %s)"
3287
  msgstr ""
3288
 
3289
+ #: addons/importer.php:261 admin.php:3340 class-updraftplus.php:2645
3290
  msgid "Backup created by: %s."
3291
  msgstr ""
3292
 
3293
+ #: admin.php:3309
3294
  msgid "Database (created by %s)"
3295
  msgstr ""
3296
 
3297
+ #: admin.php:3303 admin.php:3342
3298
  msgid "unknown source"
3299
  msgstr ""
3300
 
3306
  msgid "Upload backup files"
3307
  msgstr ""
3308
 
3309
+ #: admin.php:1925
3310
  msgid "This backup was created by %s, and can be imported."
3311
  msgstr ""
3312
 
3313
+ #: admin.php:955
3314
  msgid "Read this page for a guide to possible causes and how to fix it."
3315
  msgstr ""
3316
 
3317
+ #: admin.php:955
3318
  msgid "WordPress has a number (%d) of scheduled tasks which are overdue. Unless this is a development site, this probably means that the scheduler in your WordPress install is not working."
3319
  msgstr ""
3320
 
3321
+ #: admin.php:666 class-updraftplus.php:2652
3322
  msgid "If this is a backup created by a different backup plugin, then UpdraftPlus Premium may be able to help you."
3323
  msgstr ""
3324
 
3325
+ #: admin.php:665
3326
  msgid "However, UpdraftPlus archives are standard zip/SQL files - so if you are sure that your file has the right format, then you can rename it to match that pattern."
3327
  msgstr ""
3328
 
3329
+ #: admin.php:665 admin.php:666 class-updraftplus.php:2652
3330
  msgid "This file does not appear to be an UpdraftPlus backup archive (such files are .zip or .gz files which have a name like: backup_(time)_(site name)_(code)_(type).(zip|gz))."
3331
  msgstr ""
3332
 
3333
+ #: admin.php:3343 includes/class-wpadmin-commands.php:143 restorer.php:1410
3334
  msgid "Backup created by unknown source (%s) - cannot be restored."
3335
  msgstr ""
3336
 
3342
  msgid "This version of UpdraftPlus does not know how to handle this type of foreign backup"
3343
  msgstr ""
3344
 
3345
+ #: methods/dropbox.php:294
3346
  msgid "%s returned an unexpected HTTP response: %s"
3347
  msgstr ""
3348
 
3349
+ #: addons/sftp.php:903
3350
  msgid "The UpdraftPlus module for this file access method (%s) does not support listing files"
3351
  msgstr ""
3352
 
3353
+ #: methods/cloudfiles.php:232 methods/dropbox.php:275
3354
  #: methods/openstack-base.php:107
3355
  msgid "No settings were found"
3356
  msgstr ""
3357
 
3358
+ #: class-updraftplus.php:2773
3359
  msgid "One or more backups has been added from scanning remote storage; note that these backups will not be automatically deleted through the \"retain\" settings; if/when you wish to delete them then you must do so manually."
3360
  msgstr ""
3361
 
3362
+ #: admin.php:632
3363
  msgid "Rescanning remote and local storage for backup sets..."
3364
  msgstr ""
3365
 
3366
+ #: addons/googlecloud.php:911 addons/googlecloud.php:926
3367
+ #: addons/s3-enhanced.php:54 addons/s3-enhanced.php:68
3368
  msgid "(Read more)"
3369
  msgstr ""
3370
 
3385
  msgid "Remove"
3386
  msgstr ""
3387
 
3388
+ #: methods/s3.php:834
3389
  msgid "Other %s FAQs."
3390
  msgstr ""
3391
 
3392
+ #: templates/wp-admin/settings/form-contents.php:366
3393
  msgid "Check this to receive more information and emails on the backup process - useful if something is going wrong."
3394
  msgstr ""
3395
 
3396
+ #: addons/morefiles.php:442 admin.php:3060
3397
  msgid "If entering multiple files/directories, then separate them with commas. For entities at the top level, you can use a * at the start or end of the entry as a wildcard."
3398
  msgstr ""
3399
 
3401
  msgid "Custom content type manager plugin data detected: clearing option cache"
3402
  msgstr ""
3403
 
3404
+ #: class-updraftplus.php:4349 methods/ftp.php:291 restorer.php:1441
3405
  msgid "Your hosting company must enable these functions before %s can work."
3406
  msgstr ""
3407
 
3408
+ #: class-updraftplus.php:4349 methods/ftp.php:291 restorer.php:1440
3409
  msgid "Your web server's PHP installation has these functions disabled: %s."
3410
  msgstr ""
3411
 
3473
  msgid "Dismiss from main dashboard (for %s weeks)"
3474
  msgstr ""
3475
 
3476
+ #: class-updraftplus.php:4399
3477
  msgid "The attempt to undo the double-compression succeeded."
3478
  msgstr ""
3479
 
3480
+ #: class-updraftplus.php:4376 class-updraftplus.php:4397
3481
  msgid "The attempt to undo the double-compression failed."
3482
  msgstr ""
3483
 
3484
+ #: class-updraftplus.php:4369
3485
  msgid "The database file appears to have been compressed twice - probably the website you downloaded it from had a mis-configured webserver."
3486
  msgstr ""
3487
 
3517
  msgid "Skipping this table: data in this table (%s) should not be search/replaced"
3518
  msgstr ""
3519
 
3520
+ #: addons/onedrive.php:99
3521
  msgid "Account full: your %s account has only %d bytes left, but the file to be uploaded has %d bytes remaining (total size: %d bytes)"
3522
  msgstr ""
3523
 
3525
  msgid "Errors occurred:"
3526
  msgstr ""
3527
 
3528
+ #: admin.php:3541
3529
  msgid "Follow this link to download the log file for this restoration (needed for any support requests)."
3530
  msgstr ""
3531
 
3532
+ #: templates/wp-admin/settings/form-contents.php:410
3533
  msgid "See this FAQ also."
3534
  msgstr ""
3535
 
3549
  msgid "Existing unremoved folders from a previous restore exist (please use the \"Delete Old Directories\" button to delete them before trying again): %s"
3550
  msgstr ""
3551
 
3552
+ #: admin.php:930 class-updraftplus.php:694
3553
  msgid "The amount of time allowed for WordPress plugins to run is very low (%s seconds) - you should increase it to avoid backup failures due to time-outs (consult your web hosting company for more help - it is the max_execution_time PHP setting; the recommended value is %s seconds or more)"
3554
  msgstr ""
3555
 
3565
  msgid "Disabled this plugin: %s: re-activate it manually when you are ready."
3566
  msgstr ""
3567
 
3568
+ #: addons/sftp.php:658 addons/sftp.php:661 includes/ftp.class.php:44
3569
  #: includes/ftp.class.php:47
3570
  msgid "The %s connection timed out; if you entered the server correctly, then this is usually caused by a firewall blocking the connection - you should check with your web hosting company."
3571
  msgstr ""
3572
 
3573
+ #: admin.php:3874
3574
  msgid "The current theme was not found; to prevent this stopping the site from loading, your theme has been reverted to the default theme"
3575
  msgstr ""
3576
 
3577
+ #: admin.php:2103 admin.php:2113
3578
  msgid "Restore failed..."
3579
  msgstr ""
3580
 
3581
+ #: addons/moredatabase.php:130 admin.php:1324
3582
  msgid "Messages:"
3583
  msgstr ""
3584
 
3626
  msgid "Password: %s"
3627
  msgstr ""
3628
 
3629
+ #: addons/cloudfiles-enhanced.php:181 addons/s3-enhanced.php:302
3630
  msgid "Username: %s"
3631
  msgstr ""
3632
 
3672
  msgid "Rackspace Cloud Files, enhanced"
3673
  msgstr ""
3674
 
3675
+ #: addons/cloudfiles-enhanced.php:275 methods/cloudfiles-new.php:161
3676
  msgid "Cloud Files Container"
3677
  msgstr ""
3678
 
3679
+ #: methods/cloudfiles-new.php:156
3680
  msgid "Cloud Files API Key"
3681
  msgstr ""
3682
 
3683
+ #: methods/cloudfiles-new.php:151
3684
  msgid "To create a new Rackspace API sub-user and API key that has access only to this Rackspace container, use this add-on."
3685
  msgstr ""
3686
 
3687
+ #: methods/cloudfiles-new.php:148
3688
  msgid "Cloud Files Username"
3689
  msgstr ""
3690
 
3691
+ #: addons/cloudfiles-enhanced.php:45 methods/cloudfiles-new.php:134
3692
  msgid "London (LON)"
3693
  msgstr ""
3694
 
3695
+ #: addons/cloudfiles-enhanced.php:44 methods/cloudfiles-new.php:133
3696
  msgid "Hong Kong (HKG)"
3697
  msgstr ""
3698
 
3699
+ #: addons/cloudfiles-enhanced.php:43 methods/cloudfiles-new.php:132
3700
  msgid "Northern Virginia (IAD)"
3701
  msgstr ""
3702
 
3703
+ #: addons/cloudfiles-enhanced.php:42 methods/cloudfiles-new.php:131
3704
  msgid "Chicago (ORD)"
3705
  msgstr ""
3706
 
3707
+ #: addons/cloudfiles-enhanced.php:41 methods/cloudfiles-new.php:130
3708
  msgid "Sydney (SYD)"
3709
  msgstr ""
3710
 
3711
+ #: addons/cloudfiles-enhanced.php:40 methods/cloudfiles-new.php:129
3712
  msgid "Dallas (DFW) (default)"
3713
  msgstr ""
3714
 
3715
+ #: addons/cloudfiles-enhanced.php:271 methods/cloudfiles-new.php:124
3716
  msgid "Cloud Files Storage Region"
3717
  msgstr ""
3718
 
3719
+ #: methods/cloudfiles-new.php:116
3720
  msgid "Accounts created at rackspacecloud.com are US-accounts; accounts created at rackspace.co.uk are UK-based"
3721
  msgstr ""
3722
 
3723
+ #: methods/cloudfiles-new.php:114
3724
  msgid "US or UK-based Rackspace Account"
3725
  msgstr ""
3726
 
3727
+ #: addons/cloudfiles-enhanced.php:255 methods/cloudfiles-new.php:114
3728
  msgid "Accounts created at rackspacecloud.com are US accounts; accounts created at rackspace.co.uk are UK accounts."
3729
  msgstr ""
3730
 
3731
+ #: addons/cloudfiles-enhanced.php:136 addons/s3-enhanced.php:205
3732
  #: methods/cloudfiles-new.php:39 methods/openstack-base.php:435
3733
  #: methods/openstack-base.php:437 methods/openstack-base.php:457
3734
  #: methods/openstack2.php:25
3735
  msgid "Authorisation failed (check your credentials)"
3736
  msgstr ""
3737
 
3738
+ #: methods/updraftvault.php:545 udaddons/options.php:272
3739
  msgid "An unknown error occurred when trying to connect to UpdraftPlus.Com"
3740
  msgstr ""
3741
 
3742
+ #: admin.php:679 central/bootstrap.php:513
3743
  msgid "Create"
3744
  msgstr ""
3745
 
3746
+ #: admin.php:641
3747
  msgid "Trying..."
3748
  msgstr ""
3749
 
3750
+ #: admin.php:640
3751
  msgid "The new user's RackSpace console password is (this will not be shown again):"
3752
  msgstr ""
3753
 
3754
+ #: class-updraftplus.php:1599
3755
  msgid "(when decrypted)"
3756
  msgstr ""
3757
 
3758
+ #: admin.php:651 admin.php:3816
3759
  msgid "Error data:"
3760
  msgstr ""
3761
 
3762
+ #: admin.php:3492
3763
  msgid "Backup does not exist in the backup history"
3764
  msgstr ""
3765
 
3766
+ #: admin.php:2472
3767
  msgid "Your WordPress install has old directories from its state before you restored/migrated (technical information: these are suffixed with -old). You should press this button to delete them as soon as you have verified that the restoration worked."
3768
  msgstr ""
3769
 
3815
  msgid "Email reports"
3816
  msgstr ""
3817
 
3818
+ #: class-updraftplus.php:1595 class-updraftplus.php:1600
3819
  msgid "%s checksum: %s"
3820
  msgstr ""
3821
 
3822
+ #: class-updraftplus.php:1568 class-updraftplus.php:1570
3823
  msgid "files: %s"
3824
  msgstr ""
3825
 
3839
  msgid "Debugging information"
3840
  msgstr ""
3841
 
3842
+ #: addons/reporting.php:194 admin.php:3249
3843
  msgid "Uploaded to:"
3844
  msgstr ""
3845
 
3879
  msgid "%d errors, %d warnings"
3880
  msgstr ""
3881
 
3882
+ #: addons/onedrive.php:719 methods/dropbox.php:598
3883
  msgid "%s authentication"
3884
  msgstr ""
3885
 
3886
+ #: addons/onedrive.php:719 class-updraftplus.php:399 methods/dropbox.php:571
3887
+ #: methods/dropbox.php:598 methods/dropbox.php:611 methods/dropbox.php:742
3888
  msgid "%s error: %s"
3889
  msgstr ""
3890
 
3891
+ #: addons/googlecloud.php:861 methods/dropbox.php:477
3892
  msgid "%s logo"
3893
  msgstr ""
3894
 
3895
+ #: methods/dropbox.php:208
3896
  msgid "%s did not return the expected response - check your log file for more details"
3897
  msgstr ""
3898
 
3899
+ #: methods/s3.php:291
3900
  msgid "The required %s PHP module is not installed - ask your web hosting company to enable it"
3901
  msgstr ""
3902
 
3908
  msgid "Your site's admin email address (%s) will be used."
3909
  msgstr ""
3910
 
3911
+ #: admin.php:688 methods/updraftvault.php:295 methods/updraftvault.php:340
3912
  #: udaddons/options.php:251
3913
  msgid "Connect"
3914
  msgstr ""
3915
 
3916
+ #: templates/wp-admin/settings/form-contents.php:334
3917
  msgid "For more reporting features, use the Reporting add-on."
3918
  msgstr ""
3919
 
3920
+ #: class-updraftplus.php:4179
3921
  msgid "(version: %s)"
3922
  msgstr ""
3923
 
3924
+ #: addons/reporting.php:438 admin.php:630
3925
  msgid "Be aware that mail servers tend to have size limits; typically around %s Mb; backups larger than any limits will likely not arrive."
3926
  msgstr ""
3927
 
3928
+ #: addons/reporting.php:438 admin.php:629
3929
  msgid "When the Email storage method is enabled, also send the entire backup"
3930
  msgstr ""
3931
 
3965
  msgid "Files (database backup has not completed)"
3966
  msgstr ""
3967
 
3968
+ #: admin.php:291 backup.php:851
3969
  msgid "Files and database"
3970
  msgstr ""
3971
 
4029
  msgid "An update is available for UpdraftPlus - please follow this link to get it."
4030
  msgstr ""
4031
 
4032
+ #: methods/updraftvault.php:618 methods/updraftvault.php:636
4033
  #: udaddons/updraftplus-addons.php:795
4034
  msgid "UpdraftPlus.Com returned a response, but we could not understand it"
4035
  msgstr ""
4036
 
4037
+ #: methods/updraftvault.php:632 udaddons/updraftplus-addons.php:792
4038
  msgid "Your email address and password were not recognised by UpdraftPlus.Com"
4039
  msgstr ""
4040
 
4041
+ #: methods/updraftvault.php:591 udaddons/updraftplus-addons.php:752
4042
  msgid "UpdraftPlus.Com returned a response which we could not understand (data: %s)"
4043
  msgstr ""
4044
 
4050
  msgid "We failed to successfully connect to UpdraftPlus.Com"
4051
  msgstr ""
4052
 
4053
+ #: methods/email.php:76 templates/wp-admin/settings/form-contents.php:315
4054
  #: templates/wp-admin/settings/tab-addons.php:200
4055
  msgid "Reporting"
4056
  msgstr ""
4057
 
4058
+ #: admin.php:4266
4059
  msgid "Options (raw)"
4060
  msgstr ""
4061
 
4062
+ #: addons/reporting.php:436 admin.php:628
4063
  msgid "Send a report only when there are warnings/errors"
4064
  msgstr ""
4065
 
4071
  msgid "You should check the file ownerships and permissions in your WordPress installation"
4072
  msgstr ""
4073
 
4074
+ #: templates/wp-admin/settings/form-contents.php:219
4075
  msgid "See also the \"More Files\" add-on from our shop."
4076
  msgstr ""
4077
 
4078
+ #: backup.php:3012 class-updraftplus.php:707
4079
  msgid "Your free space in your hosting account is very low - only %s Mb remain"
4080
  msgstr ""
4081
 
4082
+ #: class-updraftplus.php:691
4083
  msgid "The amount of memory (RAM) allowed for PHP is very low (%s Mb) - you should increase it to avoid failures due to insufficient memory (consult your web hosting company for more help)"
4084
  msgstr ""
4085
 
4211
  msgid "Your web-server does not have the %s module installed."
4212
  msgstr ""
4213
 
4214
+ #: addons/googlecloud.php:944 methods/googledrive.php:953
4215
  msgid "<strong>(You appear to be already authenticated,</strong> though you can authenticate again to refresh your access if you've had a problem)."
4216
  msgstr ""
4217
 
4219
  msgid "Drop backup files here"
4220
  msgstr ""
4221
 
4222
+ #: admin.php:639
4223
  msgid "The web server returned an error code (try again, or check your web server logs)"
4224
  msgstr ""
4225
 
4226
+ #: admin.php:637
4227
  msgid "The restore operation has begun. Do not press stop or close your browser until it reports itself as having finished."
4228
  msgstr ""
4229
 
4230
+ #: admin.php:634
4231
  msgid "If you exclude both the database and the files, then you have excluded everything!"
4232
  msgstr ""
4233
 
4247
  msgid "Remember this choice for next time (you will still have the chance to change it)"
4248
  msgstr ""
4249
 
4250
+ #: addons/azure.php:360 methods/stream-base.php:121 methods/stream-base.php:126
4251
  msgid "Upload failed"
4252
  msgstr ""
4253
 
4255
  msgid "You can send a backup to more than one destination with an add-on."
4256
  msgstr ""
4257
 
4258
+ #: admin.php:2690
4259
  msgid "Note: the progress bar below is based on stages, NOT time. Do not stop the backup simply because it seems to have remained in the same place for a while - that is normal."
4260
  msgstr ""
4261
 
4262
+ #: admin.php:2588
4263
  msgid "(%s%%, file %s of %s)"
4264
  msgstr ""
4265
 
4268
  msgid "Read more about how this works..."
4269
  msgstr ""
4270
 
4271
+ #: addons/sftp.php:503
4272
  msgid "Failed: We were able to log in, but failed to successfully create a file in that location."
4273
  msgstr ""
4274
 
4275
+ #: addons/sftp.php:501
4276
  msgid "Failed: We were able to log in and move to the indicated directory, but failed to successfully create a file in that location."
4277
  msgstr ""
4278
 
4279
+ #: addons/sftp.php:422
4280
  msgid "Use SCP instead of SFTP"
4281
  msgstr ""
4282
 
4296
  msgid "Backup is of: %s."
4297
  msgstr ""
4298
 
4299
+ #: admin.php:727
4300
  msgid "%s settings test result:"
4301
  msgstr ""
4302
 
4303
+ #: admin.php:3410 admin.php:3412
4304
  msgid "(Not finished)"
4305
  msgstr ""
4306
 
4307
+ #: admin.php:3412
4308
  msgid "If you are seeing more backups than you expect, then it is probably because the deletion of old backup sets does not happen until a fresh backup completes."
4309
  msgstr ""
4310
 
4311
+ #: templates/wp-admin/settings/form-contents.php:393
4312
  msgid "<b>Do not</b> place it inside your uploads or plugins directory, as that will cause recursion (backups of backups of backups of...)."
4313
  msgstr ""
4314
 
4315
+ #: templates/wp-admin/settings/form-contents.php:393
4316
  msgid "This is where UpdraftPlus will write the zip files it creates initially. This directory must be writable by your web server. It is relative to your content directory (which by default is called wp-content)."
4317
  msgstr ""
4318
 
4319
+ #: admin.php:2685
4320
  msgid "Job ID: %s"
4321
  msgstr ""
4322
 
4323
+ #: admin.php:2670
4324
  msgid "last activity: %ss ago"
4325
  msgstr ""
4326
 
4327
+ #: admin.php:2669
4328
  msgid "next resumption: %d (after %ss)"
4329
  msgstr ""
4330
 
4331
+ #: admin.php:2652 central/bootstrap.php:405 central/bootstrap.php:412
4332
+ #: methods/updraftvault.php:375 methods/updraftvault.php:455
4333
  msgid "Unknown"
4334
  msgstr ""
4335
 
4336
+ #: admin.php:2602
4337
  msgid "Backup finished"
4338
  msgstr ""
4339
 
4340
+ #: admin.php:2597
4341
  msgid "Waiting until scheduled time to retry because of errors"
4342
  msgstr ""
4343
 
4344
+ #: admin.php:2593
4345
  msgid "Pruning old backup sets"
4346
  msgstr ""
4347
 
4348
+ #: admin.php:2581
4349
  msgid "Uploading files to remote storage"
4350
  msgstr ""
4351
 
4352
+ #: admin.php:2650
4353
  msgid "Encrypted database"
4354
  msgstr ""
4355
 
4356
+ #: admin.php:2642
4357
  msgid "Encrypting database"
4358
  msgstr ""
4359
 
4360
+ #: admin.php:2616
4361
  msgid "Created database backup"
4362
  msgstr ""
4363
 
4364
+ #: admin.php:2629
4365
  msgid "table: %s"
4366
  msgstr ""
4367
 
4368
+ #: admin.php:2627
4369
  msgid "Creating database backup"
4370
  msgstr ""
4371
 
4372
+ #: admin.php:2575
4373
  msgid "Created file backup zips"
4374
  msgstr ""
4375
 
4376
+ #: admin.php:2562
4377
  msgid "Creating file backup zips"
4378
  msgstr ""
4379
 
4380
+ #: admin.php:2557
4381
  msgid "Backup begun"
4382
  msgstr ""
4383
 
4384
+ #: admin.php:2400
4385
  msgid "Backups in progress:"
4386
  msgstr ""
4387
 
4388
+ #: admin.php:934
4389
  msgid "The scheduler is disabled in your WordPress install, via the DISABLE_WP_CRON setting. No backups can run (even &quot;Backup Now&quot;) unless either you have set up a facility to call the scheduler manually, or until it is enabled."
4390
  msgstr ""
4391
 
4401
  msgid "UpdraftPlus needed to create a %s in your content directory, but failed - please check your file permissions and enable the access (%s)"
4402
  msgstr ""
4403
 
4404
+ #: class-updraftplus.php:2870
4405
  msgid "The backup has not finished; a resumption is scheduled"
4406
  msgstr ""
4407
 
4408
+ #: class-updraftplus.php:1840
4409
  msgid "Your website is visited infrequently and UpdraftPlus is not getting the resources it hoped for; please read this page:"
4410
  msgstr ""
4411
 
4412
+ #: addons/googlecloud.php:366 addons/onedrive.php:887
4413
  #: includes/Dropbox/OAuth/Consumer/ConsumerAbstract.php:115
4414
  #: includes/Dropbox2/OAuth/Consumer/ConsumerAbstract.php:118
4415
  #: methods/googledrive.php:229
4416
  msgid "The %s authentication could not go ahead, because something else on your site is breaking it. Try disabling your other plugins and switching to a default theme. (Specifically, you are looking for the component that sends output (most likely PHP warnings/errors) before the page begins. Turning off any debugging settings may also help)."
4417
  msgstr ""
4418
 
4419
+ #: admin.php:2223
4420
  msgid "Your PHP memory limit (set by your web hosting company) is very low. UpdraftPlus attempted to raise it but was unsuccessful. This plugin may struggle with a memory limit of less than 64 Mb - especially if you have very large files uploaded (though on the other hand, many sites will be successful with a 32Mb limit - your experience may vary)."
4421
  msgstr ""
4422
 
4423
+ #: addons/autobackup.php:1006 admin.php:681
4424
  msgid "Proceed with update"
4425
  msgstr ""
4426
 
4498
  msgid "Support"
4499
  msgstr ""
4500
 
4501
+ #: class-updraftplus.php:4332
4502
  msgid "UpdraftPlus was unable to find the table prefix when scanning the database backup."
4503
  msgstr ""
4504
 
4505
+ #: class-updraftplus.php:4324
4506
  msgid "This database backup is missing core WordPress tables: %s"
4507
  msgstr ""
4508
 
4509
+ #: class-updraftplus.php:4212
4510
  msgid "You are importing from a newer version of WordPress (%s) into an older one (%s). There are no guarantees that WordPress can handle this."
4511
  msgstr ""
4512
 
4513
+ #: class-updraftplus.php:4128
4514
  msgid "The database is too small to be a valid WordPress database (size: %s Kb)."
4515
  msgstr ""
4516
 
4517
+ #: addons/autobackup.php:556 admin.php:898
4518
  msgid "Update Theme"
4519
  msgstr ""
4520
 
4521
+ #: addons/autobackup.php:505 admin.php:894
4522
  msgid "Update Plugin"
4523
  msgstr ""
4524
 
4525
+ #: addons/autobackup.php:985 admin.php:767 includes/updraftplus-notices.php:171
4526
  msgid "Be safe with an automatic backup"
4527
  msgstr ""
4528
 
4530
  msgid "Uploads path (%s) does not exist - resetting (%s)"
4531
  msgstr ""
4532
 
4533
+ #: admin.php:2175
4534
  msgid "If you can still read these words after the page finishes loading, then there is a JavaScript or jQuery problem in the site."
4535
  msgstr ""
4536
 
4537
+ #: admin.php:675
4538
  msgid "The file was uploaded."
4539
  msgstr ""
4540
 
4541
+ #: admin.php:674
4542
  msgid "Unknown server response status:"
4543
  msgstr ""
4544
 
4545
+ #: admin.php:673
4546
  msgid "Unknown server response:"
4547
  msgstr ""
4548
 
4549
+ #: admin.php:672
4550
  msgid "This decryption key will be attempted:"
4551
  msgstr ""
4552
 
4553
+ #: admin.php:671
4554
  msgid "Follow this link to attempt decryption and download the database file to your computer."
4555
  msgstr ""
4556
 
4557
+ #: admin.php:670
4558
  msgid "Upload error"
4559
  msgstr ""
4560
 
4561
+ #: admin.php:669
4562
  msgid "This file does not appear to be an UpdraftPlus encrypted database archive (such files are .gz.crypt files which have a name like: backup_(time)_(site name)_(code)_db.crypt.gz)."
4563
  msgstr ""
4564
 
4565
+ #: admin.php:668
4566
  msgid "Upload error:"
4567
  msgstr ""
4568
 
4569
+ #: admin.php:667
4570
  msgid "(make sure that you were trying to upload a zip file previously created by UpdraftPlus)"
4571
  msgstr ""
4572
 
4573
+ #: admin.php:658
4574
  msgid "Download to your computer"
4575
  msgstr ""
4576
 
4577
+ #: admin.php:657
4578
  msgid "Delete from your web server"
4579
  msgstr ""
4580
 
4581
+ #: methods/s3.php:794
4582
  msgid "Examples of S3-compatible storage providers:"
4583
  msgstr ""
4584
 
4585
+ #: admin.php:3766
4586
  msgid "Will not delete any archives after unpacking them, because there was no cloud storage for this backup"
4587
  msgstr ""
4588
 
4589
+ #: admin.php:3380
4590
  msgid "You appear to be missing one or more archives from this multi-archive set."
4591
  msgstr ""
4592
 
4593
+ #: admin.php:3377
4594
  msgid "(%d archive(s) in set)."
4595
  msgstr ""
4596
 
4597
+ #: templates/wp-admin/settings/form-contents.php:370
4598
  msgid "Split archives every:"
4599
  msgstr ""
4600
 
4602
  msgid "Error: the server sent us a response (JSON) which we did not understand."
4603
  msgstr ""
4604
 
4605
+ #: admin.php:648
4606
  msgid "Warnings:"
4607
  msgstr ""
4608
 
4609
+ #: admin.php:647
4610
  msgid "Error: the server sent an empty response."
4611
  msgstr ""
4612
 
4613
+ #: admin.php:1936
4614
  msgid "This looks like a file created by UpdraftPlus, but this install does not know about this type of object: %s. Perhaps you need to install an add-on?"
4615
  msgstr ""
4616
 
4646
  msgid "No such backup set exists"
4647
  msgstr ""
4648
 
4649
+ #: admin.php:1212
4650
  msgid "The backup archive for this file could not be found. The remote storage method in use (%s) does not allow us to retrieve files. To perform any restoration using UpdraftPlus, you will need to obtain a copy of this file and place it inside UpdraftPlus's working folder"
4651
  msgstr ""
4652
 
4670
  msgid "WordPress root directory server path: %s"
4671
  msgstr ""
4672
 
4673
+ #: methods/s3.php:839
4674
  msgid "%s end-point"
4675
  msgstr ""
4676
 
4677
+ #: methods/s3.php:801
4678
  msgid "... and many more!"
4679
  msgstr ""
4680
 
4681
+ #: methods/s3generic.php:48 methods/s3generic.php:56
4682
  msgid "S3 (Compatible)"
4683
  msgstr ""
4684
 
4685
+ #: admin.php:3687
4686
  msgid "File is not locally present - needs retrieving from remote storage"
4687
  msgstr ""
4688
 
4689
+ #: admin.php:3674
4690
  msgid "Looking for %s archive: file name: %s"
4691
  msgstr ""
4692
 
4693
+ #: admin.php:3635
4694
  msgid "Final checks"
4695
  msgstr ""
4696
 
4697
+ #: templates/wp-admin/settings/form-contents.php:376
4698
  msgid "Check this to delete any superfluous backup files from your server after the backup run finishes (i.e. if you uncheck, then any files despatched remotely will also remain locally, and any files being kept locally will not be subject to the retention limits)."
4699
  msgstr ""
4700
 
4701
+ #: templates/wp-admin/settings/form-contents.php:260
4702
  msgid "Drop encrypted database files (db.gz.crypt files) here to upload them for decryption"
4703
  msgstr ""
4704
 
4705
+ #: admin.php:3049
4706
  msgid "Your wp-content directory server path: %s"
4707
  msgstr ""
4708
 
4709
+ #: admin.php:664
4710
  msgid "Raw backup history"
4711
  msgstr ""
4712
 
4714
  msgid "Show raw backup and file list"
4715
  msgstr ""
4716
 
4717
+ #: admin.php:646
4718
  msgid "Processing files - please wait..."
4719
  msgstr ""
4720
 
4721
+ #: admin.php:3818 templates/wp-admin/settings/downloading-and-restoring.php:29
4722
  msgid "Please consult this FAQ for help on what to do about it."
4723
  msgstr ""
4724
 
4726
  msgid "Your WordPress installation has a problem with outputting extra whitespace. This can corrupt backups that you download from here."
4727
  msgstr ""
4728
 
4729
+ #: class-updraftplus.php:4136
4730
  msgid "Failed to open database file."
4731
  msgstr ""
4732
 
4733
+ #: admin.php:4236
4734
  msgid "Known backups (raw)"
4735
  msgstr ""
4736
 
4754
  msgid "This looks like a migration (the backup is from a site with a different address/URL), but you did not check the option to search-and-replace the database. That is usually a mistake."
4755
  msgstr ""
4756
 
4757
+ #: admin.php:3707
4758
  msgid "file is size:"
4759
  msgstr ""
4760
 
4761
+ #: addons/googlecloud.php:901 addons/migrator.php:363 addons/migrator.php:366
4762
+ #: addons/migrator.php:369 admin.php:934 admin.php:2180 backup.php:3019
4763
  #: updraftplus.php:147
4764
  msgid "Go here for more information."
4765
  msgstr ""
4766
 
4767
+ #: admin.php:645
4768
  msgid "Some files are still downloading or being processed - please wait."
4769
  msgstr ""
4770
 
4771
+ #: class-updraftplus.php:4184 class-updraftplus.php:4202
4772
  msgid "This backup set is from a different site - this is not a restoration, but a migration. You need the Migrator add-on in order to make this work."
4773
  msgstr ""
4774
 
4788
  msgid "%s login failure"
4789
  msgstr ""
4790
 
4791
+ #: methods/dropbox.php:419
4792
  msgid "You do not appear to be authenticated with %s"
4793
  msgstr ""
4794
 
4795
+ #: methods/dropbox.php:386
4796
  msgid "Failed to access %s when deleting (see log file for more)"
4797
  msgstr ""
4798
 
4799
+ #: methods/dropbox.php:378
4800
  msgid "You do not appear to be authenticated with %s (whilst deleting)"
4801
  msgstr ""
4802
 
4803
+ #: methods/dropbox.php:113
4804
  msgid "Dropbox error: %s (see log file for more)"
4805
  msgstr ""
4806
 
4807
+ #: methods/cloudfiles.php:420
4808
  msgid "Error - failed to download the file from %s"
4809
  msgstr ""
4810
 
4811
+ #: methods/cloudfiles.php:416
4812
  msgid "Error - no such file exists at %s"
4813
  msgstr ""
4814
 
4815
+ #: addons/azure.php:221 methods/addon-base-v2.php:208
4816
+ #: methods/cloudfiles.php:390 methods/cloudfiles.php:407
4817
  #: methods/googledrive.php:823 methods/openstack-base.php:407
4818
+ #: methods/stream-base.php:259 methods/stream-base.php:266
4819
+ #: methods/stream-base.php:279
4820
  msgid "%s Error"
4821
  msgstr ""
4822
 
4823
+ #: methods/cloudfiles.php:217 methods/openstack-base.php:82
4824
  msgid "%s error - failed to upload file"
4825
  msgstr ""
4826
 
4827
+ #: class-updraftplus.php:1037 methods/cloudfiles.php:209
4828
  msgid "%s error - failed to re-assemble chunks"
4829
  msgstr ""
4830
 
4831
+ #: methods/cloudfiles.php:93 methods/cloudfiles.php:97
4832
+ #: methods/cloudfiles.php:238 methods/cloudfiles.php:283
4833
+ #: methods/cloudfiles.php:334 methods/cloudfiles.php:338
4834
  #: methods/openstack-base.php:40 methods/openstack-base.php:304
4835
  #: methods/openstack-base.php:369 methods/openstack-base.php:441
4836
  #: methods/openstack-base.php:444 methods/openstack-base.php:461
4838
  msgid "%s authentication failed"
4839
  msgstr ""
4840
 
4841
+ #: addons/googlecloud.php:415 addons/migrator.php:462 admin.php:1881
4842
+ #: admin.php:1928 admin.php:1936 class-updraftplus.php:822
4843
+ #: class-updraftplus.php:828 class-updraftplus.php:4107
4844
+ #: class-updraftplus.php:4109 class-updraftplus.php:4242
4845
+ #: class-updraftplus.php:4277 methods/googledrive.php:289 methods/s3.php:320
4846
+ #: restorer.php:944
4847
  msgid "Error: %s"
4848
  msgstr ""
4849
 
4850
+ #: admin.php:2986
4851
  msgid "Backup directory specified exists, but is <b>not</b> writable."
4852
  msgstr ""
4853
 
4854
+ #: admin.php:2984
4855
  msgid "Backup directory specified does <b>not</b> exist."
4856
  msgstr ""
4857
 
4858
+ #: admin.php:2697 admin.php:2940 class-updraftplus.php:4184
4859
+ #: class-updraftplus.php:4202
4860
  msgid "Warning: %s"
4861
  msgstr ""
4862
 
4884
  msgid "Warnings encountered:"
4885
  msgstr ""
4886
 
4887
+ #: class-updraftplus.php:2858
4888
  msgid "The backup apparently succeeded (with warnings) and is now complete"
4889
  msgstr ""
4890
 
4891
+ #: class-updraftplus.php:720
4892
  msgid "Your free disk space is very low - only %s Mb remain"
4893
  msgstr ""
4894
 
4928
  msgid "Some servers advertise encrypted FTP as available, but then time-out (after a long time) when you attempt to use it. If you find this happenning, then go into the \"Expert Options\" (below) and turn off SSL there."
4929
  msgstr ""
4930
 
4931
+ #: methods/s3.php:815
4932
  msgid "Your web server's PHP installation does not included a required module (%s). Please contact your web hosting provider's support and ask for them to enable it."
4933
  msgstr ""
4934
 
4935
+ #: methods/s3.php:1052
4936
  msgid "Please check your access credentials."
4937
  msgstr ""
4938
 
4939
+ #: addons/s3-enhanced.php:180 methods/s3.php:1030
4940
  msgid "The error reported by %s was:"
4941
  msgstr ""
4942
 
4952
  msgid "Cannot create new tables, so skipping this command (%s)"
4953
  msgstr ""
4954
 
4955
+ #: class-updraftplus.php:4253 restorer.php:1648
4956
  msgid "Site information:"
4957
  msgstr ""
4958
 
4960
  msgid "Your database user does not have permission to create tables. We will attempt to restore by simply emptying the tables; this should work as long as a) you are restoring from a WordPress version with the same database structure, and b) Your imported database does not contain any tables which are not already present on the importing site."
4961
  msgstr ""
4962
 
4963
+ #: addons/migrator.php:325 admin.php:2175 class-updraftplus.php:4246
4964
  #: restorer.php:1970
4965
  msgid "Warning:"
4966
  msgstr ""
4967
 
4968
+ #: class-updraftplus.php:4238 restorer.php:162
4969
  msgid "You are running on WordPress multisite - but your backup is not of a multisite site."
4970
  msgstr ""
4971
 
4972
+ #: admin.php:3662
4973
  msgid "Skipping restoration of WordPress core when importing a single site into a multisite installation. If you had anything necessary in your WordPress directory then you will need to re-add it manually from the zip file."
4974
  msgstr ""
4975
 
4976
+ #: admin.php:3105 methods/updraftvault.php:279
4977
  msgid "Your web server's PHP installation does not included a <strong>required</strong> (for %s) module (%s). Please contact your web hosting provider's support and ask for them to enable it."
4978
  msgstr ""
4979
 
4980
+ #: admin.php:682
4981
  msgid "Close"
4982
  msgstr ""
4983
 
4984
+ #: addons/autobackup.php:298 addons/autobackup.php:386 admin.php:638
4985
  #: methods/remotesend.php:64 methods/remotesend.php:72
4986
  #: methods/remotesend.php:213 methods/remotesend.php:230
4987
  msgid "Unexpected response:"
4988
  msgstr ""
4989
 
4990
+ #: addons/reporting.php:434 admin.php:633
4991
  msgid "To send to more than one address, separate each address with a comma."
4992
  msgstr ""
4993
 
4994
+ #: admin.php:662
4995
  msgid "PHP information"
4996
  msgstr ""
4997
 
5027
  msgid "Also delete from remote storage"
5028
  msgstr ""
5029
 
5030
+ #: admin.php:2427
5031
  msgid "Latest UpdraftPlus.com news:"
5032
  msgstr ""
5033
 
5044
  msgid "News"
5045
  msgstr ""
5046
 
5047
+ #: admin.php:1366 includes/class-wpadmin-commands.php:444
5048
  msgid "Backup set not found"
5049
  msgstr ""
5050
 
5062
  msgid "Blog link"
5063
  msgstr ""
5064
 
5065
+ #: admin.php:726
5066
  msgid "Testing %s Settings..."
5067
  msgstr ""
5068
 
5070
  msgid "Or, you can place them manually into your UpdraftPlus directory (usually wp-content/updraft), e.g. via FTP, and then use the \"rescan\" link above."
5071
  msgstr ""
5072
 
5073
+ #: admin.php:950
5074
  msgid "UpdraftPlus's debug mode is on. You may see debugging notices on this page not just from UpdraftPlus, but from any other plugin installed. Please try to make sure that the notice you are seeing is from UpdraftPlus before you raise a support request."
5075
  msgstr ""
5076
 
5077
+ #: admin.php:950
5078
  msgid "Notice"
5079
  msgstr ""
5080
 
5082
  msgid "Errors encountered:"
5083
  msgstr ""
5084
 
5085
+ #: admin.php:631
5086
  msgid "Rescanning (looking for backups that you have uploaded manually into the internal backup store)..."
5087
  msgstr ""
5088
 
5089
+ #: admin.php:644
5090
  msgid "Begun looking for this entity"
5091
  msgstr ""
5092
 
5106
  msgid "Time taken (seconds):"
5107
  msgstr ""
5108
 
5109
+ #: addons/migrator.php:1113 admin.php:649
5110
  msgid "Errors:"
5111
  msgstr ""
5112
 
5199
  msgid "starting from next time it is"
5200
  msgstr ""
5201
 
5202
+ #: addons/sftp.php:448
5203
  msgid "Failure: Port must be an integer."
5204
  msgstr ""
5205
 
5206
+ #: methods/ftp.php:366 methods/openstack2.php:168
5207
  msgid "password"
5208
  msgstr ""
5209
 
5210
+ #: addons/sftp.php:439 methods/openstack2.php:163
5211
  msgid "username"
5212
  msgstr ""
5213
 
5214
+ #: addons/sftp.php:435
5215
  msgid "host name"
5216
  msgstr ""
5217
 
5218
+ #: addons/sftp.php:415
5219
  msgid "Where to change directory to after logging in - often this is relative to your home directory."
5220
  msgstr ""
5221
 
5222
+ #: addons/sftp.php:413
5223
  msgid "Directory path"
5224
  msgstr ""
5225
 
5226
+ #: addons/lockadmin.php:153 addons/moredatabase.php:239 addons/sftp.php:388
5227
+ #: addons/webdav.php:92 methods/openstack2.php:148 methods/updraftvault.php:339
5228
  #: udaddons/options.php:152
5229
  msgid "Password"
5230
  msgstr ""
5231
 
5232
+ #: addons/sftp.php:374 addons/webdav.php:106
5233
  msgid "Port"
5234
  msgstr ""
5235
 
5236
+ #: addons/moredatabase.php:237 addons/sftp.php:367 addons/webdav.php:98
5237
  msgid "Host"
5238
  msgstr ""
5239
 
5241
  msgid "%s Error: Failed to download"
5242
  msgstr ""
5243
 
5244
+ #: addons/sftp.php:478
5245
  msgid "Check your file permissions: Could not successfully create and enter:"
5246
  msgstr ""
5247
 
5290
  msgid "WordPress Core"
5291
  msgstr ""
5292
 
5293
+ #: methods/addon-base-v2.php:287 methods/stream-base.php:309
5294
  msgid "Failed: We were not able to place a file in that directory - please check your credentials."
5295
  msgstr ""
5296
 
5297
+ #: addons/googlecloud.php:662 addons/googlecloud.php:696
5298
+ #: addons/googlecloud.php:702 addons/sftp.php:465 admin.php:2751 admin.php:2786
5299
+ #: admin.php:2795 methods/addon-base-v2.php:277 methods/stream-base.php:295
5300
  msgid "Failed"
5301
  msgstr ""
5302
 
5303
+ #: addons/webdav.php:68
5304
  msgid "WebDAV URL"
5305
  msgstr ""
5306
 
5307
+ #: methods/stream-base.php:279
5308
  msgid "Local write failed: Failed to download"
5309
  msgstr ""
5310
 
5311
+ #: methods/stream-base.php:266
5312
  msgid "Error opening remote file: Failed to download"
5313
  msgstr ""
5314
 
5316
  msgid "Chunk %s: A %s error occurred"
5317
  msgstr ""
5318
 
5319
+ #: addons/googlecloud.php:304 addons/sftp.php:44 methods/addon-base-v2.php:65
5320
  #: methods/addon-base-v2.php:106 methods/addon-base-v2.php:138
5321
+ #: methods/addon-base-v2.php:184 methods/addon-base-v2.php:257
5322
  #: methods/ftp.php:31 methods/googledrive.php:130 methods/stream-base.php:27
5323
  #: methods/stream-base.php:141 methods/stream-base.php:147
5324
+ #: methods/stream-base.php:181 methods/stream-base.php:243
5325
  msgid "No %s settings were found"
5326
  msgstr ""
5327
 
5353
  msgid "Only non-encrypted FTP is supported by regular UpdraftPlus."
5354
  msgstr ""
5355
 
5356
+ #: addons/onedrive.php:757 methods/dropbox.php:629
5357
  msgid "Your %s account name: %s"
5358
  msgstr ""
5359
 
5360
+ #: methods/dropbox.php:619 methods/dropbox.php:646
5361
  msgid "though part of the returned information was not as expected - your mileage may vary"
5362
  msgstr ""
5363
 
5364
+ #: methods/dropbox.php:614 methods/dropbox.php:616
5365
  msgid "you have authenticated your %s account"
5366
  msgstr ""
5367
 
5368
+ #: methods/dropbox.php:494 methods/dropbox.php:496
5369
  msgid "there's an add-on for that."
5370
  msgstr ""
5371
 
5372
+ #: methods/dropbox.php:494 methods/dropbox.php:496
5373
  msgid "If you back up several sites into the same Dropbox and want to organise with sub-folders, then "
5374
  msgstr ""
5375
 
5376
+ #: methods/dropbox.php:494 methods/dropbox.php:496
5377
  msgid "Backups are saved in"
5378
  msgstr ""
5379
 
5380
+ #: methods/dropbox.php:494 methods/dropbox.php:496
5381
  msgid "Need to use sub-folders?"
5382
  msgstr ""
5383
 
5384
+ #: methods/dropbox.php:206 methods/dropbox.php:227 methods/dropbox.php:243
5385
  msgid "error: failed to upload file to %s (see log file for more)"
5386
  msgstr ""
5387
 
5388
+ #: methods/dropbox.php:91 methods/dropbox.php:108
5389
  msgid "You do not appear to be authenticated with Dropbox"
5390
  msgstr ""
5391
 
5392
+ #: methods/s3.php:1047
5393
  msgid "The communication with %s was not encrypted."
5394
  msgstr ""
5395
 
5396
+ #: methods/s3.php:1045
5397
  msgid "The communication with %s was encrypted."
5398
  msgstr ""
5399
 
5400
+ #: addons/googlecloud.php:725 methods/s3.php:1042
5401
  msgid "We accessed the bucket, and were able to create files within it."
5402
  msgstr ""
5403
 
5404
+ #: addons/googlecloud.php:719 addons/googlecloud.php:733 methods/s3.php:1040
5405
+ #: methods/s3.php:1052
5406
  msgid "We successfully accessed the bucket, but the attempt to create a file in it failed."
5407
  msgstr ""
5408
 
5409
+ #: addons/googlecloud.php:719 addons/googlecloud.php:733 methods/s3.php:1040
5410
+ #: methods/s3.php:1052
5411
  msgid "Failure"
5412
  msgstr ""
5413
 
5414
+ #: methods/s3.php:1028
5415
  msgid "Failure: We could not successfully access or create such a bucket. Please check your access credentials, and if those are correct then try another bucket name (as another %s user may already have taken your name)."
5416
  msgstr ""
5417
 
5418
+ #: addons/s3-enhanced.php:153 methods/openstack2.php:134 methods/s3.php:1022
5419
  msgid "Region"
5420
  msgstr ""
5421
 
5422
+ #: addons/googlecloud.php:104 addons/googlecloud.php:679 methods/s3.php:1004
5423
  msgid "Failure: No bucket details were given."
5424
  msgstr ""
5425
 
5426
+ #: methods/s3.php:982
5427
  msgid "API secret"
5428
  msgstr ""
5429
 
5430
+ #: methods/s3.php:876
5431
  msgid "Enter only a bucket name or a bucket and path. Examples: mybucket, mybucket/mypath"
5432
  msgstr ""
5433
 
5434
+ #: methods/s3.php:875
5435
  msgid "%s location"
5436
  msgstr ""
5437
 
5438
+ #: methods/s3.php:871
5439
  msgid "%s secret key"
5440
  msgstr ""
5441
 
5442
+ #: methods/s3.php:867
5443
  msgid "%s access key"
5444
  msgstr ""
5445
 
5446
+ #: methods/s3.php:832
5447
  msgid "If you see errors about SSL certificates, then please go here for help."
5448
  msgstr ""
5449
 
5450
+ #: methods/s3.php:830
5451
  msgid "Get your access key and secret key <a href=\"%s\">from your %s console</a>, then pick a (globally unique - all %s users) bucket name (letters and numbers) (and optionally a path) to use for storage. This bucket will be created for you if it does not already exist."
5452
  msgstr ""
5453
 
5454
+ #: methods/s3.php:462 methods/s3.php:636 methods/s3.php:738
5455
  msgid "%s Error: Failed to access bucket %s. Check your permissions and credentials."
5456
  msgstr ""
5457
 
5458
+ #: methods/s3.php:721 methods/s3.php:767
5459
  msgid "%s Error: Failed to download %s. Check your permissions and credentials."
5460
  msgstr ""
5461
 
5462
+ #: methods/s3.php:440
5463
  msgid "%s re-assembly error (%s): (see log file for more)"
5464
  msgstr ""
5465
 
5466
+ #: methods/s3.php:436
5467
  msgid "%s upload (%s): re-assembly failed (see log for more details)"
5468
  msgstr ""
5469
 
5470
+ #: methods/s3.php:420
5471
  msgid "%s chunk %s: upload failed"
5472
  msgstr ""
5473
 
5474
+ #: methods/s3.php:410
5475
  msgid "%s error: file %s was shortened unexpectedly"
5476
  msgstr ""
5477
 
5478
+ #: methods/s3.php:387
5479
  msgid "%s upload: getting uploadID for multipart upload failed - see log file for more details"
5480
  msgstr ""
5481
 
5487
  msgid "WordPress Backup"
5488
  msgstr ""
5489
 
5490
+ #: methods/cloudfiles.php:562 methods/openstack-base.php:480
5491
  msgid "We accessed the container, and were able to create files within it."
5492
  msgstr ""
5493
 
5494
+ #: methods/cloudfiles.php:558
5495
  msgid "Cloud Files error - we accessed the container, but failed to create a file within it"
5496
  msgstr ""
5497
 
5498
+ #: methods/cloudfiles.php:531 methods/openstack-base.php:424
5499
  msgid "Failure: No container details were given."
5500
  msgstr ""
5501
 
5502
+ #: addons/moredatabase.php:238 addons/sftp.php:381 addons/webdav.php:86
5503
+ #: methods/cloudfiles-new.php:176 methods/cloudfiles.php:511
5504
+ #: methods/openstack2.php:142
5505
  msgid "Username"
5506
  msgstr ""
5507
 
5508
+ #: methods/cloudfiles-new.php:171 methods/cloudfiles.php:506 methods/s3.php:978
5509
  msgid "API key"
5510
  msgstr ""
5511
 
5512
  #: addons/migrator.php:278 addons/migrator.php:1871 addons/moredatabase.php:75
5513
+ #: addons/moredatabase.php:77 addons/moredatabase.php:79 addons/sftp.php:435
5514
+ #: addons/sftp.php:439 addons/sftp.php:443 addons/webdav.php:126 admin.php:702
5515
+ #: methods/addon-base-v2.php:270 methods/cloudfiles-new.php:171
5516
+ #: methods/cloudfiles-new.php:176 methods/cloudfiles.php:506
5517
+ #: methods/cloudfiles.php:511 methods/ftp.php:362 methods/ftp.php:366
5518
+ #: methods/openstack2.php:163 methods/openstack2.php:168
5519
+ #: methods/openstack2.php:173 methods/openstack2.php:178 methods/s3.php:978
5520
+ #: methods/s3.php:982
5521
  msgid "Failure: No %s was given."
5522
  msgstr ""
5523
 
5524
+ #: methods/cloudfiles-new.php:105 methods/cloudfiles.php:452
5525
+ #: methods/openstack-base.php:523 methods/s3.php:819
5526
  msgid "UpdraftPlus's %s module <strong>requires</strong> %s. Please do not file any support requests; there is no alternative."
5527
  msgstr ""
5528
 
5529
+ #: methods/cloudfiles.php:494
5530
  msgid "Cloud Files container"
5531
  msgstr ""
5532
 
5533
+ #: methods/cloudfiles.php:490
5534
  msgid "Cloud Files API key"
5535
  msgstr ""
5536
 
5537
+ #: methods/cloudfiles.php:486
5538
  msgid "Cloud Files username"
5539
  msgstr ""
5540
 
5541
+ #: addons/cloudfiles-enhanced.php:36 methods/cloudfiles-new.php:118
5542
+ #: methods/cloudfiles.php:470
5543
  msgid "UK"
5544
  msgstr ""
5545
 
5546
+ #: addons/cloudfiles-enhanced.php:35 methods/cloudfiles-new.php:117
5547
+ #: methods/cloudfiles.php:469
5548
  msgid "US (default)"
5549
  msgstr ""
5550
 
5551
+ #: methods/cloudfiles.php:466
5552
  msgid "US or UK Cloud"
5553
  msgstr ""
5554
 
5555
+ #: methods/cloudfiles-new.php:110 methods/cloudfiles.php:462
5556
+ #: methods/openstack2.php:115
5557
  msgid "Also, you should read this important FAQ."
5558
  msgstr ""
5559
 
5560
+ #: methods/cloudfiles-new.php:110 methods/cloudfiles.php:462
5561
  msgid "Get your API key <a href=\"https://mycloud.rackspace.com/\">from your Rackspace Cloud console</a> (read instructions <a href=\"http://www.rackspace.com/knowledge_center/article/rackspace-cloud-essentials-1-generating-your-api-key\">here</a>), then pick a container name to use for storage. This container will be created for you if it does not already exist."
5562
  msgstr ""
5563
 
5564
+ #: admin.php:725 methods/backup-module.php:197
 
 
 
5565
  msgid "Test %s Settings"
5566
  msgstr ""
5567
 
5569
  msgid "Error downloading remote file: Failed to download ("
5570
  msgstr ""
5571
 
5572
+ #: class-updraftplus.php:1077 class-updraftplus.php:1121
5573
+ #: methods/cloudfiles.php:390 methods/stream-base.php:259
5574
  msgid "Error opening local file: Failed to download"
5575
  msgstr ""
5576
 
5577
+ #: methods/cloudfiles.php:216
5578
  msgid "Cloud Files error - failed to upload file"
5579
  msgstr ""
5580
 
5581
+ #: addons/sftp.php:135 addons/sftp.php:147 methods/cloudfiles.php:145
5582
+ #: methods/cloudfiles.php:187 methods/openstack-base.php:77
5583
+ #: methods/openstack-base.php:266 methods/s3.php:355 methods/s3.php:367
5584
+ #: methods/s3.php:368
5585
  msgid "%s Error: Failed to upload"
5586
  msgstr ""
5587
 
5588
+ #: addons/googlecloud.php:187 addons/googlecloud.php:192
5589
+ #: class-updraftplus.php:939 methods/cloudfiles.php:128
5590
  #: methods/googledrive.php:741 methods/googledrive.php:746
5591
  msgid "%s Error: Failed to open local file"
5592
  msgstr ""
5593
 
5594
+ #: methods/cloudfiles.php:101 methods/cloudfiles.php:342
5595
+ #: methods/cloudfiles.php:361
5596
  msgid "Cloud Files error - failed to create and access the container"
5597
  msgstr ""
5598
 
5599
  #: addons/cloudfiles-enhanced.php:96 addons/cloudfiles-enhanced.php:109
5600
+ #: addons/cloudfiles-enhanced.php:113 methods/cloudfiles.php:541
5601
+ #: methods/cloudfiles.php:544 methods/cloudfiles.php:547
5602
  msgid "Cloud Files authentication failed"
5603
  msgstr ""
5604
 
5605
+ #: addons/googlecloud.php:953 methods/googledrive.php:963
5606
  msgid "<strong>After</strong> you have saved your settings (by clicking 'Save Changes' below), then come back here once and click this link to complete authentication with Google."
5607
  msgstr ""
5608
 
5609
+ #: addons/googlecloud.php:942 methods/googledrive.php:952
5610
  msgid "Authenticate with Google"
5611
  msgstr ""
5612
 
5613
+ #: addons/googlecloud.php:893 addons/onedrive.php:989
5614
  #: methods/googledrive.php:922
5615
  msgid "Client Secret"
5616
  msgstr ""
5617
 
5618
+ #: addons/googlecloud.php:888 methods/googledrive.php:919
5619
  msgid "If Google later shows you the message \"invalid_client\", then you did not enter a valid client ID here."
5620
  msgstr ""
5621
 
5622
+ #: addons/googlecloud.php:885 addons/onedrive.php:985
5623
  #: methods/googledrive.php:918
5624
  msgid "Client ID"
5625
  msgstr ""
5626
 
5627
+ #: addons/googlecloud.php:874 methods/googledrive.php:908
5628
  msgid "You must add the following as the authorised redirect URI (under \"More Options\") when asked"
5629
  msgstr ""
5630
 
5631
+ #: addons/googlecloud.php:874 methods/googledrive.php:908
5632
  msgid "Select 'Web Application' as the application type."
5633
  msgstr ""
5634
 
5635
+ #: addons/googlecloud.php:872 methods/googledrive.php:906
5636
  msgid "For longer help, including screenshots, follow this link. The description below is sufficient for more expert users."
5637
  msgstr ""
5638
 
5639
+ #: methods/addon-base-v2.php:232 methods/cloudfiles.php:442
5640
+ #: methods/dropbox.php:478 methods/ftp.php:305 methods/googledrive.php:891
5641
+ #: methods/openstack-base.php:513 methods/s3.php:791
5642
+ #: methods/stream-base.php:215
5643
  msgid "%s is a great choice, because UpdraftPlus supports chunked uploads - no matter how big your site is, UpdraftPlus can upload it a little at a time, and not get thwarted by timeouts."
5644
  msgstr ""
5645
 
5646
+ #: addons/googlecloud.php:476 addons/googlecloud.php:477
5647
+ #: addons/googlecloud.php:745 methods/googledrive.php:445
5648
  #: methods/googledrive.php:446
5649
  msgid "Account is not authorized."
5650
  msgstr ""
5663
  msgid "Have not yet obtained an access token from Google - you need to authorise or re-authorise your connection to Google Drive."
5664
  msgstr ""
5665
 
5666
+ #: addons/googlecloud.php:610 addons/onedrive.php:795
5667
  #: methods/googledrive.php:348
5668
  msgid "you have authenticated your %s account."
5669
  msgstr ""
5670
 
5671
+ #: addons/googlecloud.php:610 addons/googlecloud.php:725
5672
+ #: addons/onedrive.php:795 addons/sftp.php:498 methods/addon-base-v2.php:284
5673
+ #: methods/cloudfiles.php:562 methods/googledrive.php:348
5674
+ #: methods/openstack-base.php:480 methods/s3.php:1042
5675
+ #: methods/stream-base.php:306
5676
  msgid "Success"
5677
  msgstr ""
5678
 
5679
+ #: addons/onedrive.php:749 methods/dropbox.php:657 methods/dropbox.php:666
5680
  #: methods/googledrive.php:322
5681
  msgid "Your %s quota usage: %s %% used, %s available"
5682
  msgstr ""
5683
 
5684
+ #: addons/googlecloud.php:421 methods/googledrive.php:295
5685
  msgid "Authorization failed"
5686
  msgstr ""
5687
 
5688
+ #: addons/googlecloud.php:413 methods/googledrive.php:287
5689
  msgid "No refresh token was received from Google. This often means that you entered your client secret wrongly, or that you have not yet re-authenticated (below) since correcting it. Re-check it, then follow the link to authenticate again. Finally, if that does not work, then use expert mode to wipe all your settings, create a new Google client ID/secret, and start again."
5690
  msgstr ""
5691
 
5707
  msgid "You need to re-authenticate with %s, as your existing credentials are not working."
5708
  msgstr ""
5709
 
5710
+ #: addons/migrator.php:1770 admin.php:2754 admin.php:2788 admin.php:2792
5711
+ #: admin.php:3692 admin.php:3705 restorer.php:2203 restorer.php:2309
5712
  msgid "OK"
5713
  msgstr ""
5714
 
5733
  msgstr ""
5734
 
5735
  #: addons/reporting.php:65 addons/reporting.php:152 backup.php:942
5736
+ #: class-updraftplus.php:4179
5737
  msgid "Backup of:"
5738
  msgstr ""
5739
 
5809
  msgid "UpdraftPlus is not able to directly restore this kind of entity. It must be restored manually."
5810
  msgstr ""
5811
 
5812
+ #: admin.php:3713 admin.php:3714
5813
  msgid "Could not find one of the files for restoration"
5814
  msgstr ""
5815
 
5816
+ #: admin.php:3808
5817
  msgid "Error message"
5818
  msgstr ""
5819
 
5820
+ #: admin.php:3710
5821
  msgid "The backup records do not contain information about the proper size of this file."
5822
  msgstr ""
5823
 
5824
+ #: admin.php:3702
5825
  msgid "Archive is expected to be size:"
5826
  msgstr ""
5827
 
5828
+ #: admin.php:3586
5829
  msgid "If making a request for support, please include this information:"
5830
  msgstr ""
5831
 
5832
+ #: admin.php:3585
5833
  msgid "ABORT: Could not find the information on which entities to restore."
5834
  msgstr ""
5835
 
5836
+ #: admin.php:3539
5837
  msgid "UpdraftPlus Restoration: Progress"
5838
  msgstr ""
5839
 
5840
+ #: admin.php:3491
5841
  msgid "This backup does not exist in the backup history - restoration aborted. Timestamp:"
5842
  msgstr ""
5843
 
5844
+ #: admin.php:3440
5845
  msgid "After pressing this button, you will be given the option to choose which components you wish to restore"
5846
  msgstr ""
5847
 
5848
+ #: admin.php:3449
5849
  msgid "Delete this backup set"
5850
  msgstr ""
5851
 
5852
+ #: admin.php:3117
5853
  msgid "Good news: Your site's communications with %s can be encrypted. If you see any errors to do with encryption, then look in the 'Expert Settings' for more help."
5854
  msgstr ""
5855
 
5856
+ #: admin.php:3114
5857
  msgid "Your web server's PHP/Curl installation does not support https access. We cannot access %s without this support. Please contact your web hosting provider's support. %s <strong>requires</strong> Curl+https. Please do not file any support requests; there is no alternative."
5858
  msgstr ""
5859
 
5860
+ #: admin.php:3112
5861
  msgid "Your web server's PHP/Curl installation does not support https access. Communications with %s will be unencrypted. ask your web host to install Curl/SSL in order to gain the ability for encryption (via an add-on)."
5862
  msgstr ""
5863
 
5864
+ #: methods/cloudfiles-new.php:105 methods/cloudfiles.php:452
5865
+ #: methods/openstack-base.php:523 methods/s3.php:819
5866
  msgid "Your web server's PHP installation does not included a required module (%s). Please contact your web hosting provider's support."
5867
  msgstr ""
5868
 
5869
+ #: templates/wp-admin/settings/form-contents.php:433
5870
  msgid "Save Changes"
5871
  msgstr ""
5872
 
5873
+ #: templates/wp-admin/settings/form-contents.php:410
5874
  msgid "Choosing this option lowers your security by stopping UpdraftPlus from using SSL for authentication and encrypted transport at all, where possible. Note that some cloud storage providers do not allow this (e.g. Dropbox), so with those providers this setting will have no effect."
5875
  msgstr ""
5876
 
5877
+ #: templates/wp-admin/settings/form-contents.php:409
5878
  msgid "Disable SSL entirely where possible"
5879
  msgstr ""
5880
 
5881
+ #: templates/wp-admin/settings/form-contents.php:405
5882
  msgid "Note that not all cloud backup methods are necessarily using SSL authentication."
5883
  msgstr ""
5884
 
5885
+ #: templates/wp-admin/settings/form-contents.php:405
5886
  msgid "Choosing this option lowers your security by stopping UpdraftPlus from verifying the identity of encrypted sites that it connects to (e.g. Dropbox, Google Drive). It means that UpdraftPlus will be using SSL only for encryption of traffic, and not for authentication."
5887
  msgstr ""
5888
 
5889
+ #: templates/wp-admin/settings/form-contents.php:404
5890
  msgid "Do not verify SSL certificates"
5891
  msgstr ""
5892
 
5893
+ #: templates/wp-admin/settings/form-contents.php:400
5894
  msgid "By default UpdraftPlus uses its own store of SSL certificates to verify the identity of remote sites (i.e. to make sure it is talking to the real Dropbox, Amazon S3, etc., and not an attacker). We keep these up to date. However, if you get an SSL error, then choosing this option (which causes UpdraftPlus to use your web server's collection instead) may help."
5895
  msgstr ""
5896
 
5897
+ #: templates/wp-admin/settings/form-contents.php:399
5898
  msgid "Use the server's SSL certificates"
5899
  msgstr ""
5900
 
5901
+ #: admin.php:2988
5902
  msgid "If that is unsuccessful check the permissions on your server or change it to another directory that is writable by your web server process."
5903
  msgstr ""
5904
 
5905
+ #: admin.php:2988
5906
  msgid "click here"
5907
  msgstr ""
5908
 
5909
+ #: admin.php:2988
5910
  msgid "or, to reset this option"
5911
  msgstr ""
5912
 
5913
+ #: admin.php:2988
5914
  msgid "Follow this link to attempt to create the directory and set the permissions"
5915
  msgstr ""
5916
 
5917
+ #: admin.php:2980
5918
  msgid "Backup directory specified is writable, which is good."
5919
  msgstr ""
5920
 
5921
+ #: templates/wp-admin/settings/form-contents.php:380
5922
  msgid "Backup directory"
5923
  msgstr ""
5924
 
5925
+ #: templates/wp-admin/settings/form-contents.php:375
5926
  msgid "Delete local backup"
5927
  msgstr ""
5928
 
5929
+ #: templates/wp-admin/settings/form-contents.php:355
5930
  msgid "click this to show some further options; don't bother with this unless you have a problem or are curious."
5931
  msgstr ""
5932
 
5933
+ #: templates/wp-admin/settings/form-contents.php:355
5934
  msgid "Show expert settings"
5935
  msgstr ""
5936
 
5937
+ #: templates/wp-admin/settings/form-contents.php:354
5938
  msgid "Expert settings"
5939
  msgstr ""
5940
 
5941
+ #: templates/wp-admin/settings/form-contents.php:365
5942
  msgid "Debug mode"
5943
  msgstr ""
5944
 
5945
+ #: templates/wp-admin/settings/form-contents.php:350
5946
  msgid "Advanced / Debugging Settings"
5947
  msgstr ""
5948
 
5949
+ #: admin.php:661
5950
  msgid "Requesting start of backup..."
5951
  msgstr ""
5952
 
5953
+ #: addons/morefiles.php:294 admin.php:677
5954
  msgid "Cancel"
5955
  msgstr ""
5956
 
5957
+ #: addons/reporting.php:216 admin.php:3261
5958
  msgid "None"
5959
  msgstr ""
5960
 
5962
  msgid "Choose your remote storage"
5963
  msgstr ""
5964
 
5965
+ #: templates/wp-admin/settings/form-contents.php:248
5966
  msgid "Manually decrypt a database backup file"
5967
  msgstr ""
5968
 
5969
+ #: templates/wp-admin/settings/form-contents.php:229
5970
  msgid "Database encryption phrase"
5971
  msgstr ""
5972
 
5973
+ #: templates/wp-admin/settings/form-contents.php:327 udaddons/options.php:150
5974
  msgid "Email"
5975
  msgstr ""
5976
 
5977
+ #: templates/wp-admin/settings/form-contents.php:219
5978
  msgid "The above directories are everything, except for WordPress core itself which you can download afresh from WordPress.org."
5979
  msgstr ""
5980
 
5981
+ #: addons/morefiles.php:440 admin.php:3058
5982
  msgid "Exclude these:"
5983
  msgstr ""
5984
 
5985
+ #: admin.php:3049
5986
  msgid "Any other directories found inside wp-content"
5987
  msgstr ""
5988
 
5989
+ #: templates/wp-admin/settings/form-contents.php:216
5990
  msgid "Include in files backup"
5991
  msgstr ""
5992
 
5998
  msgid "To fix the time at which a backup should take place,"
5999
  msgstr ""
6000
 
6001
+ #: admin.php:2974
6002
  msgid "Monthly"
6003
  msgstr ""
6004
 
6005
+ #: admin.php:2973
6006
  msgid "Fortnightly"
6007
  msgstr ""
6008
 
6009
+ #: admin.php:2972
6010
  msgid "Weekly"
6011
  msgstr ""
6012
 
6013
+ #: admin.php:2971
6014
  msgid "Daily"
6015
  msgstr ""
6016
 
6017
+ #: admin.php:684 admin.php:2954
6018
  msgid "Download log file"
6019
  msgstr ""
6020
 
6021
+ #: admin.php:2851
6022
  msgid "The folder exists, but your webserver does not have permission to write to it."
6023
  msgstr ""
6024
 
6025
+ #: admin.php:2846
6026
  msgid "The folder was created, but we had to change its file permissions to 777 (world-writable) to be able to write to it. You should check with your hosting provider that this will not cause any problems"
6027
  msgstr ""
6028
 
6029
+ #: admin.php:2832
6030
  msgid "The request to the filesystem to create the directory failed."
6031
  msgstr ""
6032
 
6033
+ #: addons/migrator.php:2243 admin.php:678 admin.php:2748 admin.php:2781
6034
+ #: admin.php:3449 templates/wp-admin/settings/delete-and-restore-modals.php:5
6035
  msgid "Delete"
6036
  msgstr ""
6037
 
6038
+ #: admin.php:2688
6039
  msgid "show log"
6040
  msgstr ""
6041
 
6148
  msgid "Delete backup set"
6149
  msgstr ""
6150
 
6151
+ #: admin.php:660
6152
  msgid "Download error: the server sent us a response which we did not understand."
6153
  msgstr ""
6154
 
6157
  #: addons/migrator.php:1368 addons/migrator.php:1709 addons/migrator.php:1736
6158
  #: addons/migrator.php:1742 addons/migrator.php:1804 addons/migrator.php:1840
6159
  #: addons/migrator.php:1879 addons/migrator.php:1889 addons/migrator.php:1894
6160
+ #: addons/s3-enhanced.php:128 addons/s3-enhanced.php:133
6161
+ #: addons/s3-enhanced.php:135 addons/sftp.php:754 addons/webdav.php:102
6162
+ #: admin.php:82 admin.php:652 admin.php:3707 admin.php:3737
6163
  #: methods/remotesend.php:69 methods/remotesend.php:227
6164
+ #: methods/updraftvault.php:453 restorer.php:1364
6165
  msgid "Error:"
6166
  msgstr ""
6167
 
6168
+ #: admin.php:643 templates/wp-admin/settings/downloading-and-restoring.php:34
6169
  msgid "calculating..."
6170
  msgstr ""
6171
 
6208
  msgid "More tasks:"
6209
  msgstr ""
6210
 
6211
+ #: admin.php:2451
6212
  msgid "Download most recently modified log file"
6213
  msgstr ""
6214
 
6215
+ #: admin.php:2410 admin.php:2416 central/bootstrap.php:161
6216
  msgid "(Nothing yet logged)"
6217
  msgstr ""
6218
 
6219
+ #: addons/autobackup.php:293 addons/autobackup.php:384 admin.php:2409
6220
+ #: admin.php:2414
6221
  msgid "Last log message"
6222
  msgstr ""
6223
 
6224
+ #: addons/migrator.php:218 admin.php:683 admin.php:3440
6225
  #: templates/wp-admin/settings/tab-status.php:30
6226
  msgid "Restore"
6227
  msgstr ""
6228
 
6229
+ #: admin.php:510 admin.php:676 templates/wp-admin/settings/tab-status.php:27
6230
  msgid "Backup Now"
6231
  msgstr ""
6232
 
6233
  #: addons/migrator.php:1774 addons/moredatabase.php:240
6234
+ #: addons/reporting.php:231 admin.php:295 admin.php:3236 admin.php:3309
6235
+ #: admin.php:3791 includes/class-wpadmin-commands.php:138
6236
  #: includes/class-wpadmin-commands.php:459
6237
  #: templates/wp-admin/settings/delete-and-restore-modals.php:81
6238
  #: templates/wp-admin/settings/delete-and-restore-modals.php:83
6239
  msgid "Database"
6240
  msgstr ""
6241
 
6242
+ #: admin.php:291 admin.php:4242
6243
  msgid "Files"
6244
  msgstr ""
6245
 
6247
  msgid "Next scheduled backups"
6248
  msgstr ""
6249
 
6250
+ #: admin.php:271
6251
  msgid "At the same time as the files backup"
6252
  msgstr ""
6253
 
6254
+ #: admin.php:261 admin.php:282 admin.php:289
6255
  msgid "Nothing currently scheduled"
6256
  msgstr ""
6257
 
6263
  msgid "JavaScript warning"
6264
  msgstr ""
6265
 
6266
+ #: admin.php:663 admin.php:2478
6267
  msgid "Delete Old Directories"
6268
  msgstr ""
6269
 
6270
+ #: admin.php:2223
6271
  msgid "Current limit is:"
6272
  msgstr ""
6273
 
6274
+ #: admin.php:2197
6275
  msgid "Your backup has been restored."
6276
  msgstr ""
6277
 
6283
  msgid "Lead developer's homepage"
6284
  msgstr ""
6285
 
6286
+ #: admin.php:4162
6287
  msgid "Your settings have been wiped."
6288
  msgstr ""
6289
 
6290
+ #: admin.php:2157
6291
  msgid "Backup directory successfully created."
6292
  msgstr ""
6293
 
6294
+ #: admin.php:2150
6295
  msgid "Backup directory could not be created"
6296
  msgstr ""
6297
 
6298
+ #: admin.php:2720
6299
  msgid "Old directory removal failed for some reason. You may want to do this manually."
6300
  msgstr ""
6301
 
6302
+ #: admin.php:2718
6303
  msgid "Old directories successfully removed."
6304
  msgstr ""
6305
 
6306
+ #: admin.php:2715
6307
  msgid "Remove old directories"
6308
  msgstr ""
6309
 
6310
+ #: addons/migrator.php:281 addons/migrator.php:296 admin.php:2099
6311
+ #: admin.php:2108 admin.php:2117 admin.php:2159 admin.php:2722
6312
  msgid "Return to UpdraftPlus Configuration"
6313
  msgstr ""
6314
 
6315
+ #: admin.php:656 admin.php:2099 admin.php:2108 admin.php:2117 admin.php:2159
6316
+ #: admin.php:2722 templates/wp-admin/settings/existing-backups-table.php:16
6317
  msgid "Actions"
6318
  msgstr ""
6319
 
6320
+ #: admin.php:2088
6321
  msgid "Restore successful!"
6322
  msgstr ""
6323
 
6324
+ #: admin.php:2018
6325
  msgid "Bad filename format - this does not look like an encrypted database file created by UpdraftPlus"
6326
  msgstr ""
6327
 
6328
+ #: admin.php:1928
6329
  msgid "Bad filename format - this does not look like a file created by UpdraftPlus"
6330
  msgstr ""
6331
 
6332
+ #: admin.php:1809
6333
  msgid "No local copy present."
6334
  msgstr ""
6335
 
6336
+ #: admin.php:1806
6337
  msgid "Download in progress"
6338
  msgstr ""
6339
 
6340
+ #: admin.php:655 admin.php:1795
6341
  msgid "File ready."
6342
  msgstr ""
6343
 
6344
+ #: admin.php:1776
6345
  msgid "Download failed"
6346
  msgstr ""
6347
 
6348
+ #: admin.php:653 admin.php:1566 admin.php:3690 class-updraftplus.php:1077
6349
+ #: class-updraftplus.php:1121 methods/addon-base-v2.php:84
6350
+ #: methods/addon-base-v2.php:89 methods/addon-base-v2.php:194
6351
+ #: methods/addon-base-v2.php:214 methods/stream-base.php:197 restorer.php:2199
6352
  #: restorer.php:2224 restorer.php:2306 updraftplus.php:147
6353
  msgid "Error"
6354
  msgstr ""
6355
 
6356
+ #: admin.php:1594
6357
  msgid "Could not find that job - perhaps it has already finished?"
6358
  msgstr ""
6359
 
6360
+ #: admin.php:1586
6361
  msgid "Job deleted"
6362
  msgstr ""
6363
 
6364
+ #: admin.php:1670
6365
  msgid "OK. You should soon see activity in the \"Last log message\" field below."
6366
  msgstr ""
6367
 
6368
+ #: admin.php:728
6369
  msgid "Nothing yet logged"
6370
  msgstr ""
6371
 
6372
+ #: admin.php:946
6373
  msgid "Please consult this FAQ if you have problems backing up."
6374
  msgstr ""
6375
 
6376
+ #: admin.php:946
6377
  msgid "Your website is hosted using the %s web server."
6378
  msgstr ""
6379
 
6380
+ #: admin.php:942
6381
  msgid "UpdraftPlus does not officially support versions of WordPress before %s. It may work for you, but if it does not, then please be aware that no support is available until you upgrade WordPress."
6382
  msgstr ""
6383
 
6384
+ #: admin.php:938
6385
  msgid "You have less than %s of free disk space on the disk which UpdraftPlus is configured to use to create backups. UpdraftPlus could well run out of space. Contact your the operator of your server (e.g. your web hosting company) to resolve this issue."
6386
  msgstr ""
6387
 
6388
+ #: admin.php:930 admin.php:934 admin.php:938 admin.php:942 admin.php:946
6389
+ #: admin.php:955 admin.php:3105 admin.php:3112 admin.php:3114
6390
+ #: methods/cloudfiles-new.php:105 methods/cloudfiles.php:452
6391
+ #: methods/ftp.php:291 methods/openstack-base.php:523 methods/s3.php:815
6392
+ #: methods/s3.php:819 methods/updraftvault.php:279
6393
  #: templates/wp-admin/settings/downloading-and-restoring.php:29
6394
  #: udaddons/updraftplus-addons.php:208
6395
  msgid "Warning"
6396
  msgstr ""
6397
 
6398
+ #: admin.php:875
6399
  msgid "Add-Ons / Pro Support"
6400
  msgstr ""
6401
 
6402
+ #: admin.php:526 admin.php:871 templates/wp-admin/settings/tab-bar.php:7
6403
  msgid "Settings"
6404
  msgstr ""
6405
 
6406
+ #: admin.php:844
6407
  msgid "Allowed Files"
6408
  msgstr ""
6409
 
6423
  msgid "Like UpdraftPlus and can spare one minute?"
6424
  msgstr ""
6425
 
6426
+ #: addons/azure.php:221 class-updraftplus.php:3907 methods/googledrive.php:823
6427
+ #: methods/s3.php:320
6428
  msgid "File not found"
6429
  msgstr ""
6430
 
6431
+ #: class-updraftplus.php:3818
6432
  msgid "The decryption key used:"
6433
  msgstr ""
6434
 
6435
+ #: class-updraftplus.php:3818 class-updraftplus.php:4119 restorer.php:390
6436
  msgid "Decryption failed. The most likely cause is that you used the wrong key."
6437
  msgstr ""
6438
 
6439
+ #: class-updraftplus.php:3799 class-updraftplus.php:4107 restorer.php:377
6440
  msgid "Decryption failed. The database file is encrypted, but you have no encryption key entered."
6441
  msgstr ""
6442
 
6444
  msgid "Could not open the backup file for writing"
6445
  msgstr ""
6446
 
6447
+ #: class-updraftplus.php:3321
6448
  msgid "Could not save backup history because we have no backup array. Backup probably failed."
6449
  msgstr ""
6450
 
6451
+ #: class-updraftplus.php:3298
6452
  msgid "Could not read the directory"
6453
  msgstr ""
6454
 
6455
+ #: admin.php:1846 backup.php:1139 restorer.php:225
6456
  msgid "Backup directory (%s) is not writable, or does not exist."
6457
  msgstr ""
6458
 
6460
  msgid "WordPress backup is complete"
6461
  msgstr ""
6462
 
6463
+ #: class-updraftplus.php:2867
6464
  msgid "The backup attempt has finished, apparently unsuccessfully"
6465
  msgstr ""
6466
 
6467
+ #: class-updraftplus.php:2852
6468
  msgid "The backup apparently succeeded and is now complete"
6469
  msgstr ""
6470
 
6472
  msgid "Encryption error occurred when encrypting database. Encryption aborted."
6473
  msgstr ""
6474
 
6475
+ #: class-updraftplus.php:2279
6476
  msgid "Could not create files in the backup directory. Backup aborted - check your UpdraftPlus settings."
6477
  msgstr ""
6478
 
6479
+ #: class-updraftplus.php:1646
6480
  msgid "Others"
6481
  msgstr ""
6482
 
6483
+ #: addons/multisite.php:446 class-updraftplus.php:1631
6484
  msgid "Uploads"
6485
  msgstr ""
6486
 
6487
+ #: class-updraftplus.php:1630
6488
  msgid "Themes"
6489
  msgstr ""
6490
 
6491
+ #: class-updraftplus.php:1629
6492
  msgid "Plugins"
6493
  msgstr ""
6494
 
6495
+ #: class-updraftplus.php:491
6496
  msgid "No log files were found."
6497
  msgstr ""
6498
 
6499
+ #: admin.php:1730 admin.php:1734 class-updraftplus.php:486
6500
  msgid "The log file could not be read."
6501
  msgstr ""
6502
 
6503
+ #: admin.php:962 admin.php:966 admin.php:970 admin.php:974 admin.php:978
6504
+ #: class-updraftplus.php:451 class-updraftplus.php:486
6505
+ #: class-updraftplus.php:491 class-updraftplus.php:496
6506
  msgid "UpdraftPlus notice:"
6507
  msgstr ""
6508
 
languages/updraftplus-ar.po CHANGED
@@ -11,7 +11,23 @@ msgstr ""
11
  "Language: ar\n"
12
  "Project-Id-Version: UpdraftPlus\n"
13
 
14
- #: methods/updraftvault.php:49
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
  msgid "UpdraftVault"
16
  msgstr ""
17
 
@@ -39,43 +55,43 @@ msgstr ""
39
  msgid "Extra database"
40
  msgstr ""
41
 
42
- #: admin.php:3302
43
  msgid "Press here to download or browse"
44
  msgstr ""
45
 
46
- #: admin.php:1018 admin.php:1028
47
  msgid "Error: invalid path"
48
  msgstr ""
49
 
50
- #: admin.php:876
51
  msgid "An error occurred when fetching storage module options: "
52
  msgstr ""
53
 
54
- #: admin.php:705
55
  msgid "Loading log file"
56
  msgstr ""
57
 
58
- #: admin.php:704
59
  msgid "Unable to download file. This could be caused by a timeout. It would be best to download the zip to your computer."
60
  msgstr ""
61
 
62
- #: admin.php:703
63
  msgid "Search"
64
  msgstr ""
65
 
66
- #: admin.php:702
67
  msgid "Select a file to view information about it"
68
  msgstr ""
69
 
70
- #: admin.php:701
71
  msgid "Browsing zip file"
72
  msgstr ""
73
 
74
- #: admin.php:671
75
  msgid "With UpdraftPlus Premium, you can directly download individual files from here."
76
  msgstr ""
77
 
78
- #: admin.php:619
79
  msgid "Browse contents"
80
  msgstr ""
81
 
@@ -83,43 +99,43 @@ msgstr ""
83
  msgid "Skipped tables:"
84
  msgstr ""
85
 
86
- #: class-updraftplus.php:4173
87
  msgid "This database backup has the following WordPress tables excluded: %s"
88
  msgstr ""
89
 
90
- #: admin.php:2319
91
  msgid "With UpdraftPlus Premium, you can choose to backup non-WordPress tables, backup only specified tables, and backup other databases too."
92
  msgstr ""
93
 
94
- #: admin.php:2319
95
  msgid "All WordPress tables will be backed up."
96
  msgstr ""
97
 
98
- #: admin.php:700
99
  msgid "Further information may be found in the browser JavaScript console, and the server PHP error logs."
100
  msgstr ""
101
 
102
- #: admin.php:700
103
  msgid "That you are attempting to upload a zip file previously created by UpdraftPlus."
104
  msgstr ""
105
 
106
- #: admin.php:700
107
  msgid "The available memory on the server."
108
  msgstr ""
109
 
110
- #: admin.php:700
111
  msgid "Any settings in your .htaccess or web.config file that affects the maximum upload or post size."
112
  msgstr ""
113
 
114
- #: admin.php:700
115
  msgid "The file failed to upload. Please check the following:"
116
  msgstr ""
117
 
118
- #: admin.php:699
119
  msgid "HTTP code:"
120
  msgstr ""
121
 
122
- #: admin.php:596
123
  msgid "You have chosen to backup a database, but no tables have been selected"
124
  msgstr ""
125
 
@@ -282,7 +298,7 @@ msgstr ""
282
  msgid "UpdraftPlus"
283
  msgstr ""
284
 
285
- #: templates/wp-admin/settings/form-contents.php:274
286
  msgid "Recommended: optimize your database with WP-Optimize."
287
  msgstr ""
288
 
@@ -353,15 +369,15 @@ msgstr ""
353
  msgid "Comments"
354
  msgstr ""
355
 
356
- #: addons/s3-enhanced.php:327
357
  msgid "Europe (Frankfurt)"
358
  msgstr ""
359
 
360
- #: addons/s3-enhanced.php:326
361
  msgid "Europe (London)"
362
  msgstr ""
363
 
364
- #: addons/s3-enhanced.php:325
365
  msgid "Europe (Ireland)"
366
  msgstr ""
367
 
@@ -546,7 +562,7 @@ msgstr ""
546
  msgid "Then, try out our \"Migrator\" add-on which can perform a direct site-to-site migration. After using it once, you'll have saved the purchase price compared to the time needed to copy a site by hand."
547
  msgstr ""
548
 
549
- #: addons/s3-enhanced.php:324
550
  msgid "Canada Central"
551
  msgstr ""
552
 
@@ -609,15 +625,15 @@ msgstr ""
609
  msgid "The client has been deleted from the Google Drive API console. Please create a new Google Drive project and reconnect with UpdraftPlus."
610
  msgstr ""
611
 
612
- #: methods/dropbox.php:556
613
  msgid "%s de-authentication"
614
  msgstr ""
615
 
616
- #: methods/dropbox.php:524
617
  msgid "You must add the following as the authorised redirect URI in your Dropbox console (under \"API Settings\") when asked"
618
  msgstr ""
619
 
620
- #: methods/dropbox.php:498
621
  msgid "Follow this link to deauthenticate with %s."
622
  msgstr ""
623
 
@@ -633,47 +649,47 @@ msgstr ""
633
  msgid "You have selected a remote storage option which has an authorization step to complete:"
634
  msgstr ""
635
 
636
- #: admin.php:1440
637
  msgid "Remote files deleted:"
638
  msgstr ""
639
 
640
- #: admin.php:1439
641
  msgid "Local files deleted:"
642
  msgstr ""
643
 
644
- #: admin.php:921 admin.php:925 admin.php:933 admin.php:937
645
  msgid "Follow this link to authorize access to your %s account (you will not be able to back up to %s without it)."
646
  msgstr ""
647
 
648
- #: admin.php:698
649
  msgid "remote files deleted"
650
  msgstr ""
651
 
652
- #: admin.php:696
653
  msgid "Complete"
654
  msgstr ""
655
 
656
- #: admin.php:695
657
  msgid "Do you want to carry out the import?"
658
  msgstr ""
659
 
660
- #: admin.php:694
661
  msgid "Which was exported on:"
662
  msgstr ""
663
 
664
- #: admin.php:693
665
  msgid "This will import data from:"
666
  msgstr ""
667
 
668
- #: admin.php:692
669
  msgid "Importing..."
670
  msgstr ""
671
 
672
- #: admin.php:689
673
  msgid "You have not yet selected a file to import."
674
  msgstr ""
675
 
676
- #: admin.php:673
677
  msgid "Your export file will be of your displayed settings, not your saved ones."
678
  msgstr ""
679
 
@@ -681,32 +697,32 @@ msgstr ""
681
  msgid "template not found"
682
  msgstr ""
683
 
684
- #: addons/s3-enhanced.php:320
685
  msgid "US East (Ohio)"
686
  msgstr ""
687
 
688
- #: addons/onedrive.php:953
689
  msgid "This site uses a URL which is either non-HTTPS, or is localhost or 127.0.0.1 URL. As such, you must use the main %s %s App to authenticate with your account."
690
  msgstr ""
691
 
692
- #: addons/onedrive.php:635
693
  msgid "Account is not authorized (%s)."
694
  msgstr ""
695
 
696
- #: addons/onedrive.php:596 udaddons/updraftplus-addons.php:732
697
  msgid "Your IP address:"
698
  msgstr ""
699
 
700
- #: addons/onedrive.php:596 udaddons/updraftplus-addons.php:732
701
  #: udaddons/updraftplus-addons.php:747
702
  msgid "To remove any block, please go here."
703
  msgstr ""
704
 
705
- #: addons/onedrive.php:581 udaddons/updraftplus-addons.php:717
706
  msgid "An error response was received; HTTP code:"
707
  msgstr ""
708
 
709
- #: includes/class-commands.php:309
710
  msgid "%s add-on not found"
711
  msgstr ""
712
 
@@ -718,39 +734,39 @@ msgstr ""
718
  msgid "This makes time-outs much more likely. You are recommended to turn safe_mode off, or to restore only one entity at a time"
719
  msgstr ""
720
 
721
- #: admin.php:2144
722
  msgid "To fix this problem go here."
723
  msgstr ""
724
 
725
- #: admin.php:2144
726
  msgid "OptimizePress 2.0 encodes its contents, so search/replace does not work."
727
  msgstr ""
728
 
729
- #: admin.php:657
730
  msgid "your PHP install lacks the openssl module; as a result, this can take minutes; if nothing has happened by then, then you should either try a smaller key size, or ask your web hosting company how to enable this PHP module on your setup."
731
  msgstr ""
732
 
733
- #: addons/webdav.php:92
734
  msgid "Path"
735
  msgstr ""
736
 
737
- #: addons/webdav.php:87
738
  msgid "Leave this blank to use the default (80 for webdav, 443 for webdavs)"
739
  msgstr ""
740
 
741
- #: addons/webdav.php:79
742
  msgid "Enter any path in the field below."
743
  msgstr ""
744
 
745
- #: addons/webdav.php:79
746
  msgid "A host name cannot contain a slash."
747
  msgstr ""
748
 
749
- #: addons/webdav.php:54
750
  msgid "Protocol (SSL or not)"
751
  msgstr ""
752
 
753
- #: addons/webdav.php:49
754
  msgid "This WebDAV URL is generated by filling in the options below. If you do not know the details, then you will need to ask your WebDAV provider."
755
  msgstr ""
756
 
@@ -758,11 +774,11 @@ msgstr ""
758
  msgid "No response data was received. This usually indicates a network connectivity issue (e.g. an outgoing firewall or overloaded network) between this site and UpdraftPlus.com."
759
  msgstr ""
760
 
761
- #: methods/s3.php:1014
762
  msgid "The AWS access key looks to be wrong (valid %s access keys begin with \"AK\")"
763
  msgstr ""
764
 
765
- #: methods/s3.php:91
766
  msgid "No settings were found - please go to the Settings tab and check your settings"
767
  msgstr ""
768
 
@@ -770,15 +786,15 @@ msgstr ""
770
  msgid "Backup using %s?"
771
  msgstr ""
772
 
773
- #: addons/s3-enhanced.php:331
774
  msgid "Asia Pacific (Mumbai)"
775
  msgstr ""
776
 
777
- #: addons/s3-enhanced.php:55
778
  msgid "Reduced redundancy"
779
  msgstr ""
780
 
781
- #: addons/s3-enhanced.php:54
782
  msgid "Standard (infrequent access)"
783
  msgstr ""
784
 
@@ -900,7 +916,7 @@ msgstr ""
900
  msgid "This backup archive is %s MB in size - the attempt to send this via email is likely to fail (few email servers allow attachments of this size). If so, you should switch to using a different remote storage method."
901
  msgstr ""
902
 
903
- #: class-updraftplus.php:1557
904
  msgid "Size: %s MB"
905
  msgstr ""
906
 
@@ -912,7 +928,7 @@ msgstr ""
912
  msgid "i.e. you have an account there"
913
  msgstr ""
914
 
915
- #: templates/wp-admin/settings/form-contents.php:359
916
  msgid "UpdraftPlus will split up backup archives when they exceed this file size. The default value is %s megabytes. Be careful to leave some margin if your web-server has a hard size limit (e.g. the 2 GB / 2048 MB limit on some 32-bit servers/file systems)."
917
  msgstr ""
918
 
@@ -920,7 +936,7 @@ msgstr ""
920
  msgid "Now"
921
  msgstr "الآن"
922
 
923
- #: class-updraftplus.php:4037 restorer.php:996
924
  msgid "You should enable %s to make any pretty permalinks (e.g. %s) work"
925
  msgstr ""
926
 
@@ -928,21 +944,21 @@ msgstr ""
928
  msgid "(tap on an icon to select or unselect)"
929
  msgstr ""
930
 
931
- #: methods/updraftvault.php:289 methods/updraftvault.php:295
932
- #: methods/updraftvault.php:301
933
  msgid "%s per year"
934
  msgstr ""
935
 
936
- #: methods/updraftvault.php:288 methods/updraftvault.php:294
937
- #: methods/updraftvault.php:300
938
  msgid "or (annual discount)"
939
  msgstr ""
940
 
941
- #: methods/updraftvault.php:233
942
  msgid "No Vault connection was found for this site (has it moved?); please disconnect and re-connect."
943
  msgstr ""
944
 
945
- #: class-updraftplus.php:418 class-updraftplus.php:463
946
  msgid "The given file was not found, or could not be read."
947
  msgstr ""
948
 
@@ -1042,23 +1058,23 @@ msgstr ""
1042
  msgid "UpdraftCentral Connection"
1043
  msgstr ""
1044
 
1045
- #: backup.php:849 class-updraftplus.php:2813
1046
  msgid "The backup was aborted by the user"
1047
  msgstr ""
1048
 
1049
- #: admin.php:4003
1050
  msgid "Your settings have been saved."
1051
  msgstr "تم حفظ إعداداتك."
1052
 
1053
- #: admin.php:3196
1054
  msgid "Total backup size:"
1055
  msgstr ""
1056
 
1057
- #: admin.php:2641
1058
  msgid "stop"
1059
  msgstr "توقف"
1060
 
1061
- #: admin.php:2479
1062
  msgid "The backup has finished running"
1063
  msgstr ""
1064
 
@@ -1084,31 +1100,31 @@ msgstr ""
1084
  msgid "calculate"
1085
  msgstr ""
1086
 
1087
- #: admin.php:672
1088
  msgid "You should save your changes to ensure that they are used for making your backup."
1089
  msgstr ""
1090
 
1091
- #: admin.php:665
1092
  msgid "We requested to delete the file, but could not understand the server's response"
1093
  msgstr ""
1094
 
1095
- #: admin.php:664
1096
  msgid "Please enter a valid URL"
1097
  msgstr ""
1098
 
1099
- #: admin.php:647
1100
  msgid "Saving..."
1101
  msgstr "جاري الحفظ..."
1102
 
1103
- #: admin.php:610
1104
  msgid "Error: the server sent us a response which we did not understand."
1105
  msgstr ""
1106
 
1107
- #: admin.php:602
1108
  msgid "Fetching..."
1109
  msgstr ""
1110
 
1111
- #: addons/s3-enhanced.php:328
1112
  msgid "Asia Pacific (Seoul)"
1113
  msgstr ""
1114
 
@@ -1120,7 +1136,7 @@ msgstr ""
1120
  msgid "Unexpected error: no class '%s' was found (your UpdraftPlus installation seems broken - try re-installing)"
1121
  msgstr ""
1122
 
1123
- #: addons/onedrive.php:56
1124
  msgid "The required %s PHP module is not installed - ask your web hosting company to enable it."
1125
  msgstr ""
1126
 
@@ -1128,24 +1144,24 @@ msgstr ""
1128
  msgid "Skipping table %s: this table will not be restored"
1129
  msgstr ""
1130
 
1131
- #: class-updraftplus.php:4088 restorer.php:1642
1132
  msgid "To import an ordinary WordPress site into a multisite installation requires %s."
1133
  msgstr ""
1134
 
1135
- #: class-updraftplus.php:4084
1136
  msgid "Please read this link for important information on this process."
1137
  msgstr ""
1138
 
1139
- #: class-updraftplus.php:4084
1140
  msgid "It will be imported as a new site."
1141
  msgstr ""
1142
 
1143
- #: admin.php:2292 templates/wp-admin/notices/horizontal-notice.php:16
1144
  #: templates/wp-admin/notices/horizontal-notice.php:18
1145
  msgid "Dismiss"
1146
  msgstr "رفض"
1147
 
1148
- #: admin.php:684
1149
  msgid "Please fill in the required information."
1150
  msgstr ""
1151
 
@@ -1217,15 +1233,15 @@ msgstr ""
1217
  msgid "Call WordPress action:"
1218
  msgstr ""
1219
 
1220
- #: admin.php:2327
1221
  msgid "Your saved settings also affect what is backed up - e.g. files excluded."
1222
  msgstr ""
1223
 
1224
- #: admin.php:3604
1225
  msgid "Skipping: this archive was already restored."
1226
  msgstr ""
1227
 
1228
- #: templates/wp-admin/settings/form-contents.php:200
1229
  msgid "File Options"
1230
  msgstr ""
1231
 
@@ -1253,51 +1269,51 @@ msgstr ""
1253
  msgid "This button will delete all UpdraftPlus settings and progress information for in-progress backups (but not any of your existing backups from your cloud storage)."
1254
  msgstr ""
1255
 
1256
- #: admin.php:3885
1257
  msgid "Send this backup to remote storage"
1258
  msgstr ""
1259
 
1260
- #: admin.php:3883
1261
  msgid "Check out UpdraftPlus Vault."
1262
  msgstr ""
1263
 
1264
- #: admin.php:3883
1265
  msgid "Not got any remote storage?"
1266
  msgstr ""
1267
 
1268
- #: admin.php:3883
1269
  msgid "settings"
1270
  msgstr "إعدادات"
1271
 
1272
- #: admin.php:3883
1273
  msgid "Backup won't be sent to any remote storage - none has been saved in the %s"
1274
  msgstr ""
1275
 
1276
- #: admin.php:2325
1277
  msgid "Include any files in the backup"
1278
  msgstr ""
1279
 
1280
- #: admin.php:2311
1281
  msgid "Include the database in the backup"
1282
  msgstr ""
1283
 
1284
- #: admin.php:2291
1285
  msgid "Continue restoration"
1286
  msgstr ""
1287
 
1288
- #: admin.php:2286
1289
  msgid "You have an unfinished restoration operation, begun %s ago."
1290
  msgstr ""
1291
 
1292
- #: admin.php:2285
1293
  msgid "Unfinished restoration"
1294
  msgstr ""
1295
 
1296
- #: admin.php:2283
1297
  msgid "%s minutes, %s seconds"
1298
  msgstr ""
1299
 
1300
- #: admin.php:2230
1301
  msgid "Backup Contents And Schedule"
1302
  msgstr ""
1303
 
@@ -1305,48 +1321,48 @@ msgstr ""
1305
  msgid "Premium / Extensions"
1306
  msgstr ""
1307
 
1308
- #: admin.php:2010 admin.php:2019
1309
  msgid "Sufficient information about the in-progress restoration operation could not be found."
1310
  msgstr ""
1311
 
1312
- #: addons/morefiles.php:53 admin.php:670
1313
  msgctxt "(verb)"
1314
  msgid "Download"
1315
  msgstr ""
1316
 
1317
- #: admin.php:595
1318
  msgid "You have chosen to backup files, but no file entities have been selected"
1319
  msgstr ""
1320
 
1321
- #: admin.php:504
1322
  msgid "Extensions"
1323
  msgstr "Extensions"
1324
 
1325
- #: admin.php:496 templates/wp-admin/settings/tab-bar.php:8
1326
  msgid "Advanced Tools"
1327
  msgstr ""
1328
 
1329
- #: addons/googlecloud.php:880
1330
  msgid "Bucket location"
1331
  msgstr ""
1332
 
1333
- #: addons/googlecloud.php:875
1334
  msgid "Note that Google do not support every storage class in every location - you should read their documentation to learn about current availability."
1335
  msgstr ""
1336
 
1337
- #: addons/googlecloud.php:875 addons/googlecloud.php:890
1338
  msgid "This setting applies only when a new bucket is being created."
1339
  msgstr ""
1340
 
1341
- #: addons/googlecloud.php:860
1342
  msgid "You must use a bucket name that is unique, for all %s users."
1343
  msgstr ""
1344
 
1345
- #: addons/googlecloud.php:816
1346
  msgid "Do not confuse %s with %s - they are separate things."
1347
  msgstr ""
1348
 
1349
- #: addons/googlecloud.php:268
1350
  msgid "You do not have access to this bucket"
1351
  msgstr ""
1352
 
@@ -1399,63 +1415,63 @@ msgstr ""
1399
  msgid "Durable reduced availability"
1400
  msgstr ""
1401
 
1402
- #: addons/googlecloud.php:35 addons/s3-enhanced.php:53
1403
  msgid "Standard"
1404
  msgstr ""
1405
 
1406
- #: addons/azure.php:523
1407
  msgid "container"
1408
  msgstr ""
1409
 
1410
- #: addons/azure.php:523
1411
  msgid "You can enter the path of any %s virtual folder you wish to use here."
1412
  msgstr ""
1413
 
1414
- #: addons/azure.php:522
1415
  msgid "optional"
1416
  msgstr ""
1417
 
1418
- #: addons/azure.php:522
1419
  msgid "Prefix"
1420
  msgstr ""
1421
 
1422
- #: addons/azure.php:517
1423
  msgid "See Microsoft's guidelines on container naming by following this link."
1424
  msgstr ""
1425
 
1426
- #: addons/azure.php:517
1427
  msgid "If the %s does not already exist, then it will be created."
1428
  msgstr ""
1429
 
1430
- #: addons/azure.php:517
1431
  msgid "Enter the path of the %s you wish to use here."
1432
  msgstr ""
1433
 
1434
- #: addons/azure.php:506
1435
  msgid "This is not your Azure login - see the instructions if needing more guidance."
1436
  msgstr ""
1437
 
1438
- #: addons/azure.php:505
1439
  msgid "Account Name"
1440
  msgstr ""
1441
 
1442
- #: addons/azure.php:505 addons/azure.php:509
1443
  msgid "Azure"
1444
  msgstr ""
1445
 
1446
- #: addons/azure.php:501
1447
  msgid "Create Azure credentials in your Azure developer console."
1448
  msgstr ""
1449
 
1450
- #: addons/azure.php:449
1451
  msgid "Could not create the container"
1452
  msgstr ""
1453
 
1454
- #: addons/azure.php:343
1455
  msgid "Could not access container"
1456
  msgstr ""
1457
 
1458
- #: class-updraftplus.php:2830
1459
  msgid "To complete your migration/clone, you should now log in to the remote site and restore the backup set."
1460
  msgstr ""
1461
 
@@ -1483,75 +1499,75 @@ msgstr ""
1483
  msgid "Not installed"
1484
  msgstr "لم يتم التثبيت"
1485
 
1486
- #: addons/googlecloud.php:865 addons/s3-enhanced.php:46
1487
  msgid "Storage class"
1488
  msgstr ""
1489
 
1490
- #: addons/googlecloud.php:860
1491
  msgid "See Google's guidelines on bucket naming by following this link."
1492
  msgstr ""
1493
 
1494
- #: addons/googlecloud.php:860
1495
  msgid "Bucket names have to be globally unique. If the bucket does not already exist, then it will be created."
1496
  msgstr ""
1497
 
1498
- #: addons/googlecloud.php:860
1499
  msgid "Enter the name of the %s bucket you wish to use here."
1500
  msgstr ""
1501
 
1502
- #: addons/googlecloud.php:859
1503
  msgid "Bucket"
1504
  msgstr ""
1505
 
1506
- #: addons/googlecloud.php:855
1507
  msgid "Otherwise, you can leave it blank."
1508
  msgstr ""
1509
 
1510
- #: addons/googlecloud.php:855
1511
  msgid "N.B. This is only needed if you have not already created the bucket, and you wish UpdraftPlus to create it for you."
1512
  msgstr ""
1513
 
1514
- #: addons/googlecloud.php:855
1515
  msgid "Enter the ID of the %s project you wish to use here."
1516
  msgstr ""
1517
 
1518
- #: addons/googlecloud.php:828
1519
  msgid "Follow this link to your Google API Console, and there activate the Storage API and create a Client ID in the API Access section."
1520
  msgstr ""
1521
 
1522
- #: addons/googlecloud.php:743
1523
  msgid "You must enter a project ID in order to be able to create a new bucket."
1524
  msgstr ""
1525
 
1526
- #: addons/googlecloud.php:854
1527
  msgid "Project ID"
1528
  msgstr ""
1529
 
1530
- #: addons/googlecloud.php:609
1531
  msgid "You must save and authenticate before you can test your settings."
1532
  msgstr ""
1533
 
1534
- #: addons/googlecloud.php:479
1535
  msgid "Have not yet obtained an access token from Google - you need to authorise or re-authorise your connection to Google Cloud."
1536
  msgstr ""
1537
 
1538
- #: addons/googlecloud.php:215 addons/googlecloud.php:288
1539
- #: addons/googlecloud.php:735 addons/googlecloud.php:782
1540
  msgid "You do not have access to this bucket."
1541
  msgstr ""
1542
 
1543
- #: addons/googlecloud.php:215 addons/googlecloud.php:268
1544
- #: addons/googlecloud.php:278 addons/googlecloud.php:288
1545
- #: addons/googlecloud.php:579 addons/googlecloud.php:735
1546
- #: addons/googlecloud.php:782 addons/googlecloud.php:822
1547
- #: addons/googlecloud.php:839 addons/googlecloud.php:847
1548
- #: addons/googlecloud.php:860
1549
  msgid "Google Cloud"
1550
  msgstr ""
1551
 
1552
- #: addons/googlecloud.php:215 addons/googlecloud.php:268
1553
- #: addons/googlecloud.php:288 addons/googlecloud.php:735
1554
- #: addons/googlecloud.php:782
1555
  msgid "%s Service Exception."
1556
  msgstr ""
1557
 
@@ -1588,35 +1604,35 @@ msgstr ""
1588
  msgid "Press here to look inside your remote storage methods for any existing backup sets (from any site, if they are stored in the same folder)."
1589
  msgstr ""
1590
 
1591
- #: admin.php:1438
1592
  msgid "Backup sets removed:"
1593
  msgstr ""
1594
 
1595
- #: admin.php:683
1596
  msgid "Processing..."
1597
  msgstr ""
1598
 
1599
- #: admin.php:681
1600
  msgid "For backups older than"
1601
  msgstr ""
1602
 
1603
- #: admin.php:680
1604
  msgid "week(s)"
1605
  msgstr ""
1606
 
1607
- #: admin.php:679
1608
  msgid "hour(s)"
1609
  msgstr ""
1610
 
1611
- #: admin.php:678
1612
  msgid "day(s)"
1613
  msgstr ""
1614
 
1615
- #: admin.php:677
1616
  msgid "in the month"
1617
  msgstr ""
1618
 
1619
- #: admin.php:676
1620
  msgid "day"
1621
  msgstr ""
1622
 
@@ -1636,187 +1652,187 @@ msgstr ""
1636
  msgid "This problem is caused by trying to restore a database on a very old MySQL version that is incompatible with the source database."
1637
  msgstr ""
1638
 
1639
- #: methods/updraftvault.php:595
1640
  msgid "You do not currently have any UpdraftPlus Vault quota"
1641
  msgstr ""
1642
 
1643
- #: class-updraftplus.php:4123
1644
  msgid "You must upgrade MySQL to be able to use this database."
1645
  msgstr ""
1646
 
1647
- #: class-updraftplus.php:4123
1648
  msgid "The database backup uses MySQL features not available in the old MySQL version (%s) that this site is running on."
1649
  msgstr ""
1650
 
1651
- #: admin.php:2129
1652
  msgid "The UpdraftPlus directory in wp-content/plugins has white-space in it; WordPress does not like this. You should rename the directory to wp-content/plugins/updraftplus to fix this problem."
1653
  msgstr ""
1654
 
1655
- #: methods/updraftvault.php:322
1656
  msgid "Don't know your email address, or forgotten your password?"
1657
  msgstr ""
1658
 
1659
- #: methods/updraftvault.php:315
1660
  msgid "Enter your UpdraftPlus.Com email / password here to connect:"
1661
  msgstr ""
1662
 
1663
- #: methods/updraftvault.php:277 methods/updraftvault.php:307
1664
  msgid "Read the FAQs here."
1665
  msgstr ""
1666
 
1667
- #: addons/s3-enhanced.php:61
1668
  msgid "Check this box to use Amazon's server-side encryption"
1669
  msgstr ""
1670
 
1671
- #: addons/s3-enhanced.php:60
1672
  msgid "Server-side encryption"
1673
  msgstr ""
1674
 
1675
- #: methods/updraftvault.php:604
1676
  msgid "If you have forgotten your password, then go here to change your password on updraftplus.com."
1677
  msgstr ""
1678
 
1679
- #: admin.php:929
1680
  msgid "Go to the remote storage settings in order to connect."
1681
  msgstr ""
1682
 
1683
- #: admin.php:929
1684
  msgid "%s has been chosen for remote storage, but you are not currently connected."
1685
  msgstr ""
1686
 
1687
- #: methods/updraftvault.php:304
1688
  msgid "Payments can be made in US dollars, euros or GB pounds sterling, via card or PayPal."
1689
  msgstr ""
1690
 
1691
- #: admin.php:653
1692
  msgid "Update quota count"
1693
  msgstr ""
1694
 
1695
- #: admin.php:652
1696
  msgid "Counting..."
1697
  msgstr ""
1698
 
1699
- #: admin.php:651
1700
  msgid "Disconnecting..."
1701
  msgstr ""
1702
 
1703
- #: admin.php:649
1704
  msgid "Connecting..."
1705
  msgstr ""
1706
 
1707
- #: methods/updraftvault.php:378 methods/updraftvault.php:447
1708
  msgid "Refresh current status"
1709
  msgstr ""
1710
 
1711
- #: methods/updraftvault.php:376 methods/updraftvault.php:392
1712
- #: methods/updraftvault.php:394 methods/updraftvault.php:447
1713
  msgid "Get more quota"
1714
  msgstr ""
1715
 
1716
- #: methods/updraftvault.php:373 methods/updraftvault.php:389
1717
- #: methods/updraftvault.php:428
1718
  msgid "Current use:"
1719
  msgstr ""
1720
 
1721
- #: methods/updraftvault.php:368
1722
  msgid "You can get more quota here"
1723
  msgstr ""
1724
 
1725
- #: methods/updraftvault.php:368
1726
  msgid "%s Error: you have insufficient storage quota available (%s) to upload this archive (%s)."
1727
  msgstr ""
1728
 
1729
- #: admin.php:650 methods/updraftvault.php:360
1730
  msgid "Disconnect"
1731
  msgstr ""
1732
 
1733
- #: methods/updraftvault.php:352
1734
  msgid "Quota:"
1735
  msgstr ""
1736
 
1737
- #: methods/updraftvault.php:350
1738
  msgid "Vault owner"
1739
  msgstr ""
1740
 
1741
- #: methods/updraftvault.php:350
1742
  msgid "Well done - there's nothing more needed to set up."
1743
  msgstr ""
1744
 
1745
- #: methods/updraftvault.php:350
1746
  msgid "This site is <strong>connected</strong> to UpdraftPlus Vault."
1747
  msgstr ""
1748
 
1749
- #: methods/updraftvault.php:346
1750
  msgid "You are <strong>not connected</strong> to UpdraftPlus Vault."
1751
  msgstr ""
1752
 
1753
- #: methods/updraftvault.php:322
1754
  msgid "Go here for help"
1755
  msgstr ""
1756
 
1757
- #: methods/updraftvault.php:317
1758
  msgid "E-mail"
1759
  msgstr ""
1760
 
1761
- #: methods/updraftvault.php:310 methods/updraftvault.php:325
1762
  msgid "Back..."
1763
  msgstr ""
1764
 
1765
- #: methods/updraftvault.php:304
1766
  msgid "Subscriptions can be cancelled at any time."
1767
  msgstr ""
1768
 
1769
- #: methods/updraftvault.php:287 methods/updraftvault.php:293
1770
- #: methods/updraftvault.php:299
1771
  msgid "%s per quarter"
1772
  msgstr ""
1773
 
1774
- #: central/bootstrap.php:542 methods/updraftvault.php:277
1775
- #: methods/updraftvault.php:307
1776
  msgid "Read more about it here."
1777
  msgstr ""
1778
 
1779
- #: methods/updraftvault.php:277 methods/updraftvault.php:307
1780
  msgid "UpdraftPlus Vault is built on top of Amazon's world-leading data-centres, with redundant data storage to achieve 99.999999999% reliability."
1781
  msgstr ""
1782
 
1783
- #: methods/updraftvault.php:273
1784
  msgid "Already purchased space?"
1785
  msgstr ""
1786
 
1787
- #: methods/updraftvault.php:270
1788
  msgid "Show the options"
1789
  msgstr ""
1790
 
1791
- #: methods/updraftvault.php:269
1792
  msgid "First time user?"
1793
  msgstr ""
1794
 
1795
- #: methods/updraftvault.php:266 methods/updraftvault.php:283
1796
  msgid "Press a button to get started."
1797
  msgstr ""
1798
 
1799
- #: methods/updraftvault.php:266 methods/updraftvault.php:283
1800
  msgid "UpdraftPlus Vault brings you storage that is <strong>reliable, easy to use and a great price</strong>."
1801
  msgstr ""
1802
 
1803
- #: methods/updraftvault.php:229
1804
  msgid "You have an UpdraftPlus Vault subscription that has not been renewed, and the grace period has expired. In a few days' time, your stored data will be permanently removed. If you do not wish this to happen, then you should renew as soon as possible."
1805
  msgstr ""
1806
 
1807
- #: methods/updraftvault.php:226
1808
  msgid "You have an UpdraftPlus Vault subscription with overdue payment. You are within the few days of grace period before it will be suspended, and you will lose your quota and access to data stored within it. Please renew as soon as possible!"
1809
  msgstr ""
1810
 
1811
- #: methods/updraftvault.php:223
1812
  msgid "Your UpdraftPlus Premium purchase is over a year ago. You should renew immediately to avoid losing the 12 months of free storage allowance that you get for being a current UpdraftPlus Premium customer."
1813
  msgstr ""
1814
 
1815
- #: methods/updraftvault.php:77
1816
  msgid "Updraft Vault"
1817
  msgstr ""
1818
 
1819
- #: addons/azure.php:365 addons/googlecloud.php:693 methods/s3.php:1042
1820
  msgid "Delete failed:"
1821
  msgstr ""
1822
 
@@ -1824,19 +1840,19 @@ msgstr ""
1824
  msgid "The zip engine returned the message: %s."
1825
  msgstr ""
1826
 
1827
- #: addons/s3-enhanced.php:352
1828
  msgid "Without this permission, UpdraftPlus cannot delete backups - you should also set your 'retain' settings very high to prevent seeing deletion errors."
1829
  msgstr ""
1830
 
1831
- #: addons/s3-enhanced.php:350
1832
  msgid "Allow deletion"
1833
  msgstr ""
1834
 
1835
- #: addons/s3-enhanced.php:348
1836
  msgid "Without this permission, you cannot directly download or restore using UpdraftPlus, and will instead need to visit the AWS website."
1837
  msgstr ""
1838
 
1839
- #: addons/s3-enhanced.php:346
1840
  msgid "Allow download"
1841
  msgstr ""
1842
 
@@ -1844,7 +1860,7 @@ msgstr ""
1844
  msgid "If sending directly from site to site does not work for you, then there are three other methods - please try one of these instead."
1845
  msgstr ""
1846
 
1847
- #: addons/migrator.php:1742 admin.php:659
1848
  msgid "You should check that the remote site is online, not firewalled, does not have security modules that may be blocking access, has UpdraftPlus version %s or later active and that the keys have been entered correctly."
1849
  msgstr ""
1850
 
@@ -1912,19 +1928,19 @@ msgstr ""
1912
  msgid "Backup made by %s"
1913
  msgstr ""
1914
 
1915
- #: methods/addon-base-v2.php:187
1916
  msgid "This storage method does not allow downloading"
1917
  msgstr ""
1918
 
1919
- #: admin.php:3364
1920
  msgid "(backup set imported from remote location)"
1921
  msgstr ""
1922
 
1923
- #: templates/wp-admin/settings/existing-backups-table.php:65
1924
  msgid "Site"
1925
  msgstr ""
1926
 
1927
- #: templates/wp-admin/settings/existing-backups-table.php:64
1928
  msgid "Backup sent to remote site - not available for download."
1929
  msgstr ""
1930
 
@@ -1936,23 +1952,23 @@ msgstr ""
1936
  msgid "This backup set was not known by UpdraftPlus to be created by the current WordPress installation, but was either found in remote storage, or was sent from a remote site."
1937
  msgstr ""
1938
 
1939
- #: addons/migrator.php:1770 admin.php:666
1940
  msgid "Testing connection..."
1941
  msgstr ""
1942
 
1943
- #: admin.php:663
1944
  msgid "Deleting..."
1945
  msgstr ""
1946
 
1947
- #: admin.php:662
1948
  msgid "key name"
1949
  msgstr ""
1950
 
1951
- #: admin.php:660
1952
  msgid "Please give this key a name (e.g. indicate the site it is for):"
1953
  msgstr ""
1954
 
1955
- #: admin.php:657
1956
  msgid "Creating..."
1957
  msgstr ""
1958
 
@@ -1976,11 +1992,11 @@ msgstr ""
1976
  msgid "Or, send a backup to another site"
1977
  msgstr ""
1978
 
1979
- #: addons/migrator.php:1937 admin.php:667
1980
  msgid "Send"
1981
  msgstr ""
1982
 
1983
- #: addons/migrator.php:1931 admin.php:658
1984
  msgid "Send to site:"
1985
  msgstr ""
1986
 
@@ -2044,11 +2060,11 @@ msgstr ""
2044
  msgid "A \"migration\" is ultimately the same as a restoration - but using backup archives that you import from another site."
2045
  msgstr ""
2046
 
2047
- #: addons/migrator.php:2180 admin.php:655
2048
  msgid "Add site"
2049
  msgstr ""
2050
 
2051
- #: admin.php:654
2052
  msgid "Adding..."
2053
  msgstr ""
2054
 
@@ -2080,39 +2096,39 @@ msgstr ""
2080
  msgid "To import a backup set, go to the \"Existing Backups\" tab"
2081
  msgstr ""
2082
 
2083
- #: admin.php:646 admin.php:672 admin.php:673
2084
  msgid "You have made changes to your settings, and not saved."
2085
  msgstr ""
2086
 
2087
- #: addons/onedrive.php:989
2088
  msgid "N.B. %s is not case-sensitive."
2089
  msgstr ""
2090
 
2091
- #: addons/onedrive.php:977
2092
  msgid "If OneDrive later shows you the message \"unauthorized_client\", then you did not enter a valid client ID here."
2093
  msgstr ""
2094
 
2095
- #: addons/azure.php:501 addons/migrator.php:1757 addons/onedrive.php:961
2096
  msgid "For longer help, including screenshots, follow this link."
2097
  msgstr ""
2098
 
2099
- #: addons/onedrive.php:961
2100
  msgid "Create OneDrive credentials in your OneDrive developer console."
2101
  msgstr ""
2102
 
2103
- #: addons/onedrive.php:956
2104
  msgid "You must add the following as the authorised redirect URI in your OneDrive console (under \"API Settings\") when asked"
2105
  msgstr ""
2106
 
2107
- #: addons/onedrive.php:931 addons/onedrive.php:933
2108
  msgid "%s authorisation failed:"
2109
  msgstr ""
2110
 
2111
- #: addons/onedrive.php:793 addons/onedrive.php:976 addons/onedrive.php:980
2112
  msgid "OneDrive"
2113
  msgstr ""
2114
 
2115
- #: addons/onedrive.php:626
2116
  msgid "Please re-authorize the connection to your %s account."
2117
  msgstr ""
2118
 
@@ -2120,152 +2136,152 @@ msgstr ""
2120
  msgid "configure it here"
2121
  msgstr ""
2122
 
2123
- #: addons/onedrive.php:619 methods/updraftvault.php:568
2124
  msgid "To remove the block, please go here."
2125
  msgstr ""
2126
 
2127
- #: addons/s3-enhanced.php:439
2128
  msgid "Do remember to save your settings."
2129
  msgstr ""
2130
 
2131
- #: addons/s3-enhanced.php:439
2132
  msgid "You are now using a IAM user account to access your bucket."
2133
  msgstr ""
2134
 
2135
- #: addons/s3-enhanced.php:344
2136
  msgid "S3 bucket"
2137
  msgstr ""
2138
 
2139
- #: addons/s3-enhanced.php:334
2140
  msgid "China (Beijing) (restricted)"
2141
  msgstr ""
2142
 
2143
- #: addons/s3-enhanced.php:333
2144
  msgid "South America (Sao Paulo)"
2145
  msgstr ""
2146
 
2147
- #: addons/s3-enhanced.php:332
2148
  msgid "Asia Pacific (Tokyo)"
2149
  msgstr ""
2150
 
2151
- #: addons/s3-enhanced.php:330
2152
  msgid "Asia Pacific (Sydney)"
2153
  msgstr ""
2154
 
2155
- #: addons/s3-enhanced.php:329
2156
  msgid "Asia Pacific (Singapore)"
2157
  msgstr ""
2158
 
2159
- #: addons/s3-enhanced.php:323
2160
  msgid "US Government West (restricted)"
2161
  msgstr ""
2162
 
2163
- #: addons/s3-enhanced.php:322
2164
  msgid "US West (N. California)"
2165
  msgstr ""
2166
 
2167
- #: addons/s3-enhanced.php:321
2168
  msgid "US West (Oregon)"
2169
  msgstr ""
2170
 
2171
- #: addons/s3-enhanced.php:319
2172
  msgid "US Standard (default)"
2173
  msgstr ""
2174
 
2175
- #: addons/s3-enhanced.php:315
2176
  msgid "S3 storage region"
2177
  msgstr ""
2178
 
2179
- #: addons/s3-enhanced.php:313
2180
  msgid "New IAM username"
2181
  msgstr ""
2182
 
2183
- #: addons/s3-enhanced.php:312
2184
  msgid "Admin secret key"
2185
  msgstr ""
2186
 
2187
- #: addons/s3-enhanced.php:311
2188
  msgid "Admin access key"
2189
  msgstr ""
2190
 
2191
- #: addons/s3-enhanced.php:304
2192
  msgid "Then, these lower-powered access credentials can be used, instead of storing your administrative keys."
2193
  msgstr ""
2194
 
2195
- #: addons/s3-enhanced.php:304
2196
  msgid "These will be used to create a new user and key pair with an IAM policy attached which will only allow it to access the indicated bucket."
2197
  msgstr ""
2198
 
2199
- #: addons/s3-enhanced.php:304
2200
  msgid "Enter your administrative Amazon S3 access/secret keys (this needs to be a key pair with enough rights to create new users and buckets), and a new (unique) username for the new user and a bucket name."
2201
  msgstr ""
2202
 
2203
- #: addons/s3-enhanced.php:381
2204
  msgid "Create new IAM user and S3 bucket"
2205
  msgstr ""
2206
 
2207
- #: addons/s3-enhanced.php:294
2208
  msgid "Secret Key: %s"
2209
  msgstr ""
2210
 
2211
- #: addons/s3-enhanced.php:294
2212
  msgid "Access Key: %s"
2213
  msgstr ""
2214
 
2215
- #: addons/s3-enhanced.php:282 addons/s3-enhanced.php:284
2216
  msgid "Failed to apply User Policy"
2217
  msgstr ""
2218
 
2219
- #: addons/s3-enhanced.php:223 addons/s3-enhanced.php:227
2220
  msgid "Operation to create user Access Key failed"
2221
  msgstr ""
2222
 
2223
- #: addons/s3-enhanced.php:221
2224
  msgid "Failed to create user Access Key"
2225
  msgstr ""
2226
 
2227
- #: addons/s3-enhanced.php:201 addons/s3-enhanced.php:204
2228
- #: addons/s3-enhanced.php:208
2229
  msgid "IAM operation failed (%s)"
2230
  msgstr ""
2231
 
2232
- #: addons/s3-enhanced.php:199
2233
  msgid "Conflict: that user already exists"
2234
  msgstr ""
2235
 
2236
- #: addons/s3-enhanced.php:171
2237
  msgid "Failure: We could not successfully access or create such a bucket. Please check your access credentials, and if those are correct then try another bucket name (as another AWS user may already have taken your name)."
2238
  msgstr ""
2239
 
2240
- #: addons/s3-enhanced.php:124
2241
  msgid "AWS authentication failed"
2242
  msgstr ""
2243
 
2244
- #: addons/s3-enhanced.php:117
2245
  msgid "Cannot create new AWS user, since the old AWS toolkit is being used."
2246
  msgstr ""
2247
 
2248
- #: addons/s3-enhanced.php:92
2249
  msgid "You need to enter a bucket"
2250
  msgstr ""
2251
 
2252
- #: addons/s3-enhanced.php:89
2253
  msgid "You need to enter a new IAM username"
2254
  msgstr ""
2255
 
2256
- #: addons/s3-enhanced.php:86
2257
  msgid "You need to enter an admin secret key"
2258
  msgstr ""
2259
 
2260
- #: addons/s3-enhanced.php:83
2261
  msgid "You need to enter an admin access key"
2262
  msgstr ""
2263
 
2264
- #: addons/s3-enhanced.php:71
2265
  msgid "If you have an AWS admin user, then you can use this wizard to quickly create a new AWS (IAM) user with access to only this bucket (rather than your whole account)"
2266
  msgstr ""
2267
 
2268
- #: methods/s3.php:844
2269
  msgid "To create a new IAM sub-user and access key that has access only to this bucket, use this add-on."
2270
  msgstr ""
2271
 
@@ -2281,17 +2297,17 @@ msgstr ""
2281
  msgid "Uploads path (%s) has changed during a migration - resetting (to: %s)"
2282
  msgstr ""
2283
 
2284
- #: addons/onedrive.php:596 addons/onedrive.php:619 methods/updraftvault.php:568
2285
  #: udaddons/updraftplus-addons.php:732 udaddons/updraftplus-addons.php:747
2286
  msgid "This most likely means that you share a webserver with a hacked website that has been used in previous attacks."
2287
  msgstr ""
2288
 
2289
- #: addons/onedrive.php:619 methods/updraftvault.php:568
2290
  #: udaddons/updraftplus-addons.php:747
2291
  msgid "It appears that your web server's IP Address (%s) is blocked."
2292
  msgstr ""
2293
 
2294
- #: addons/onedrive.php:619 methods/updraftvault.php:568
2295
  #: udaddons/updraftplus-addons.php:747
2296
  msgid "UpdraftPlus.com has responded with 'Access Denied'."
2297
  msgstr ""
@@ -2342,7 +2358,7 @@ msgstr ""
2342
  msgid "(at same time as files backup)"
2343
  msgstr ""
2344
 
2345
- #: admin.php:2888
2346
  msgid "No backup has been completed"
2347
  msgstr ""
2348
 
@@ -2390,12 +2406,12 @@ msgstr ""
2390
  msgid "Backup (where relevant) plugins, themes and the WordPress database with UpdraftPlus before updating"
2391
  msgstr ""
2392
 
2393
- #: methods/s3.php:138 methods/s3.php:139 methods/s3.php:140 methods/s3.php:148
2394
- #: methods/s3.php:149 methods/s3.php:150
2395
  msgid "%s Error: Failed to initialise"
2396
  msgstr ""
2397
 
2398
- #: templates/wp-admin/settings/form-contents.php:249
2399
  msgctxt "Uploader: Drop db.gz.crypt files here to upload them for decryption - or - Select Files"
2400
  msgid "or"
2401
  msgstr ""
@@ -2405,38 +2421,38 @@ msgctxt "Uploader: Drop backup files here - or - Select Files"
2405
  msgid "or"
2406
  msgstr ""
2407
 
2408
- #: admin.php:640
2409
  msgid "You did not select any components to restore. Please select at least one, and then try again."
2410
  msgstr ""
2411
 
2412
- #: addons/sftp.php:380
2413
  msgctxt "Do not translate BEGIN RSA PRIVATE KEY. PCKS1, XML, PEM and PuTTY are also technical acronyms which should not be translated."
2414
  msgid "PKCS1 (PEM header: BEGIN RSA PRIVATE KEY), XML and PuTTY format keys are accepted."
2415
  msgstr ""
2416
 
2417
- #: addons/sftp.php:343
2418
  msgid "Resuming partial uploads is supported for SFTP, but not for SCP. Thus, if using SCP then you will need to ensure that your webserver allows PHP processes to run long enough to upload your largest backup file."
2419
  msgstr ""
2420
 
2421
- #: methods/openstack2.php:156
2422
  msgctxt "\"tenant\" is a term used with OpenStack storage - Google for \"OpenStack tenant\" to get more help on its meaning"
2423
  msgid "tenant"
2424
  msgstr ""
2425
 
2426
- #: methods/openstack2.php:106
2427
  msgctxt "Keystone and swauth are technical terms which cannot be translated"
2428
  msgid "This needs to be a v2 (Keystone) authentication URI; v1 (Swauth) is not supported."
2429
  msgstr ""
2430
 
2431
- #: templates/wp-admin/settings/form-contents.php:320
2432
  msgid "your site's admin address"
2433
  msgstr ""
2434
 
2435
- #: templates/wp-admin/settings/form-contents.php:320
2436
  msgid "Check this box to have a basic report sent to"
2437
  msgstr ""
2438
 
2439
- #: admin.php:2897
2440
  msgctxt "i.e. Non-automatic"
2441
  msgid "Manual"
2442
  msgstr ""
@@ -2454,7 +2470,7 @@ msgstr ""
2454
  msgid "Any other file/directory on your server that you wish to back up"
2455
  msgstr ""
2456
 
2457
- #: admin.php:2146
2458
  msgid "For even more features and personal support, check out "
2459
  msgstr ""
2460
 
@@ -2470,7 +2486,7 @@ msgstr ""
2470
  msgid "Database decryption phrase"
2471
  msgstr ""
2472
 
2473
- #: addons/autobackup.php:131 addons/autobackup.php:966 admin.php:645
2474
  msgid "Automatic backup before update"
2475
  msgstr ""
2476
 
@@ -2558,15 +2574,15 @@ msgstr ""
2558
  msgid "Note that after you have claimed your add-ons, you can remove your password (but not the email address) from the settings below, without affecting this site's access to updates."
2559
  msgstr ""
2560
 
2561
- #: admin.php:2479 admin.php:3387
2562
  msgid "View Log"
2563
  msgstr ""
2564
 
2565
- #: templates/wp-admin/settings/existing-backups-table.php:13
2566
  msgid "Backup data (click to download)"
2567
  msgstr ""
2568
 
2569
- #: templates/wp-admin/settings/existing-backups-table.php:12
2570
  msgid "Backup date"
2571
  msgstr ""
2572
 
@@ -2575,7 +2591,7 @@ msgstr ""
2575
  msgid "and retain this many scheduled backups"
2576
  msgstr ""
2577
 
2578
- #: admin.php:2858
2579
  msgid "incremental backup; base backup: %s"
2580
  msgstr ""
2581
 
@@ -2587,16 +2603,16 @@ msgstr ""
2587
  msgid "Upload files into UpdraftPlus."
2588
  msgstr ""
2589
 
2590
- #: admin.php:880 includes/class-commands.php:363
2591
  #: templates/wp-admin/settings/tab-status.php:22
2592
  msgid "The 'Backup Now' button is disabled as your backup directory is not writable (go to the 'Settings' tab and find the relevant option)."
2593
  msgstr ""
2594
 
2595
- #: class-updraftplus.php:4073
2596
  msgid "Backup label:"
2597
  msgstr ""
2598
 
2599
- #: admin.php:1674
2600
  msgid "Error: unexpected file read fail"
2601
  msgstr ""
2602
 
@@ -2616,19 +2632,19 @@ msgstr ""
2616
  msgid "Your label for this backup (optional)"
2617
  msgstr ""
2618
 
2619
- #: addons/googlecloud.php:822 methods/googledrive.php:902
2620
  msgid "%s does not allow authorisation of sites hosted on direct IP addresses. You will need to change your site's address (%s) before you can use %s for storage."
2621
  msgstr ""
2622
 
2623
- #: methods/updraftvault.php:607 udaddons/updraftplus-addons.php:789
2624
  msgid "You entered an email address that was not recognised by UpdraftPlus.Com"
2625
  msgstr ""
2626
 
2627
- #: methods/updraftvault.php:604 udaddons/updraftplus-addons.php:785
2628
  msgid "Your email address was valid, but your password was not recognised by UpdraftPlus.Com."
2629
  msgstr ""
2630
 
2631
- #: methods/updraftvault.php:544 udaddons/updraftplus-addons.php:655
2632
  msgid "You need to supply both an email address and a password"
2633
  msgstr ""
2634
 
@@ -2636,11 +2652,11 @@ msgstr ""
2636
  msgid "To proceed, press 'Backup Now'. Then, watch the 'Last Log Message' field for activity."
2637
  msgstr ""
2638
 
2639
- #: class-updraftplus.php:4092
2640
  msgid "If you want to restore a multisite backup, you should first set up your WordPress installation as a multisite."
2641
  msgstr ""
2642
 
2643
- #: class-updraftplus.php:4092
2644
  msgid "Your backup is of a WordPress multisite install; but this site is not. Only the first site of the network will be accessible."
2645
  msgstr ""
2646
 
@@ -2676,19 +2692,19 @@ msgstr ""
2676
  msgid "You need to connect to receive future updates to UpdraftPlus."
2677
  msgstr ""
2678
 
2679
- #: class-updraftplus.php:4065
2680
  msgid "Any support requests to do with %s should be raised with your web hosting company."
2681
  msgstr ""
2682
 
2683
- #: class-updraftplus.php:4065
2684
  msgid "You should only proceed if you cannot update the current server and are confident (or willing to risk) that your plugins/themes/etc. are compatible with the older %s version."
2685
  msgstr ""
2686
 
2687
- #: class-updraftplus.php:4065
2688
  msgid "This is significantly newer than the server which you are now restoring onto (version %s)."
2689
  msgstr ""
2690
 
2691
- #: class-updraftplus.php:4065
2692
  msgid "The site in this backup was running on a webserver with version %s of %s. "
2693
  msgstr ""
2694
 
@@ -2713,7 +2729,7 @@ msgstr ""
2713
  msgid "UpdraftPlus is on social media - check us out!"
2714
  msgstr ""
2715
 
2716
- #: admin.php:3448
2717
  msgid "Why am I seeing this?"
2718
  msgstr ""
2719
 
@@ -2725,15 +2741,15 @@ msgstr ""
2725
  msgid "Press here to look inside your UpdraftPlus directory (in your web hosting space) for any new backup sets that you have uploaded."
2726
  msgstr ""
2727
 
2728
- #: admin.php:1622 admin.php:1634
2729
  msgid "Start backup"
2730
  msgstr ""
2731
 
2732
- #: class-updraftplus.php:4037 restorer.php:996
2733
  msgid "You are using the %s webserver, but do not seem to have the %s module loaded."
2734
  msgstr ""
2735
 
2736
- #: admin.php:2802
2737
  msgid "You will need to consult with your web hosting provider to find out how to set permissions for a WordPress plugin to write to the directory."
2738
  msgstr ""
2739
 
@@ -2741,11 +2757,11 @@ msgstr ""
2741
  msgid "Unless you have a problem, you can completely ignore everything here."
2742
  msgstr ""
2743
 
2744
- #: admin.php:1832
2745
  msgid "This file could not be uploaded"
2746
  msgstr ""
2747
 
2748
- #: admin.php:1797
2749
  msgid "You will find more information about this in the Settings section."
2750
  msgstr ""
2751
 
@@ -2765,7 +2781,7 @@ msgstr ""
2765
  msgid "Memory limit"
2766
  msgstr ""
2767
 
2768
- #: class-updraftplus.php:4195 restorer.php:1441
2769
  msgid "restoration"
2770
  msgstr ""
2771
 
@@ -2793,7 +2809,7 @@ msgstr ""
2793
  msgid "Backup succeeded"
2794
  msgstr ""
2795
 
2796
- #: admin.php:2898 admin.php:2899 admin.php:2900 updraftplus.php:92
2797
  #: updraftplus.php:93
2798
  msgid "Every %s hours"
2799
  msgstr ""
@@ -2848,11 +2864,11 @@ msgstr ""
2848
  msgid "N.B. If you install UpdraftPlus on several WordPress sites, then you cannot re-use your project; you must create a new one from your Google API console for each site."
2849
  msgstr ""
2850
 
2851
- #: admin.php:3216
2852
  msgid "You have not yet made any backups."
2853
  msgstr ""
2854
 
2855
- #: templates/wp-admin/settings/form-contents.php:212
2856
  msgid "Database Options"
2857
  msgstr ""
2858
 
@@ -2868,30 +2884,30 @@ msgstr ""
2868
  msgid "Free disk space in account:"
2869
  msgstr ""
2870
 
2871
- #: admin.php:3974 templates/wp-admin/settings/tab-status.php:27
2872
  msgid "This button is disabled because your backup directory is not writable (see the settings)."
2873
  msgstr ""
2874
 
2875
- #: admin.php:480 admin.php:614 admin.php:1487
2876
  #: includes/deprecated-actions.php:30
2877
  #: templates/wp-admin/settings/downloading-and-restoring.php:22
2878
  #: templates/wp-admin/settings/tab-bar.php:6
2879
  msgid "Existing Backups"
2880
  msgstr ""
2881
 
2882
- #: admin.php:472 templates/wp-admin/settings/tab-bar.php:5
2883
  msgid "Current Status"
2884
  msgstr ""
2885
 
2886
- #: admin.php:885
2887
  msgid "To change any of the default settings of what is backed up, to configure scheduled backups, to send your backups to remote storage (recommended), and more, go to the settings tab."
2888
  msgstr ""
2889
 
2890
- #: admin.php:885
2891
  msgid "To make a backup, just press the Backup Now button."
2892
  msgstr ""
2893
 
2894
- #: admin.php:885
2895
  msgid "Welcome to UpdraftPlus!"
2896
  msgstr ""
2897
 
@@ -2963,7 +2979,7 @@ msgstr ""
2963
  msgid "user"
2964
  msgstr ""
2965
 
2966
- #: class-updraftplus.php:1554
2967
  msgid "External database (%s)"
2968
  msgstr ""
2969
 
@@ -2975,36 +2991,36 @@ msgstr ""
2975
  msgid "failed to access parent folder"
2976
  msgstr ""
2977
 
2978
- #: addons/googlecloud.php:559 addons/onedrive.php:761 addons/onedrive.php:772
2979
  #: methods/googledrive.php:328
2980
  msgid "However, subsequent access attempts failed:"
2981
  msgstr ""
2982
 
2983
- #: admin.php:3241
2984
  msgid "External database"
2985
  msgstr ""
2986
 
2987
- #: templates/wp-admin/settings/form-contents.php:354
2988
  msgid "This will also cause debugging output from all plugins to be shown upon this screen - please do not be surprised to see these."
2989
  msgstr ""
2990
 
2991
- #: templates/wp-admin/settings/form-contents.php:294
2992
  msgid "Back up more databases"
2993
  msgstr ""
2994
 
2995
- #: templates/wp-admin/settings/form-contents.php:251
2996
  msgid "First, enter the decryption key"
2997
  msgstr ""
2998
 
2999
- #: templates/wp-admin/settings/form-contents.php:233
3000
  msgid "You can manually decrypt an encrypted database here."
3001
  msgstr ""
3002
 
3003
- #: templates/wp-admin/settings/form-contents.php:221
3004
  msgid "It can also backup external databases."
3005
  msgstr ""
3006
 
3007
- #: templates/wp-admin/settings/form-contents.php:221
3008
  msgid "Don't want to be spied on? UpdraftPlus Premium can encrypt your database backup."
3009
  msgstr ""
3010
 
@@ -3012,7 +3028,7 @@ msgstr ""
3012
  msgid "use UpdraftPlus Premium"
3013
  msgstr ""
3014
 
3015
- #: class-updraftplus.php:3955
3016
  msgid "Decryption failed. The database file is encrypted."
3017
  msgstr ""
3018
 
@@ -3040,52 +3056,52 @@ msgstr ""
3040
  msgid "In %s, path names are case sensitive."
3041
  msgstr ""
3042
 
3043
- #: addons/azure.php:523 addons/google-enhanced.php:82 addons/onedrive.php:989
3044
  msgid "If you leave it blank, then the backup will be placed in the root of your %s"
3045
  msgstr ""
3046
 
3047
- #: addons/google-enhanced.php:82 addons/googlecloud.php:860
3048
- #: addons/onedrive.php:989
3049
  msgid "e.g. %s"
3050
  msgstr ""
3051
 
3052
- #: addons/google-enhanced.php:82 addons/onedrive.php:989
3053
  msgid "If the folder does not already exist, then it will be created."
3054
  msgstr ""
3055
 
3056
- #: addons/google-enhanced.php:82 addons/onedrive.php:989
3057
  msgid "Enter the path of the %s folder you wish to use here."
3058
  msgstr ""
3059
 
3060
- #: addons/azure.php:516 methods/openstack2.php:137
3061
  msgid "Container"
3062
  msgstr ""
3063
 
3064
- #: methods/openstack2.php:120
3065
  msgid "Leave this blank, and a default will be chosen."
3066
  msgstr ""
3067
 
3068
- #: methods/openstack2.php:111
3069
  msgid "Tenant"
3070
  msgstr ""
3071
 
3072
- #: methods/openstack2.php:111
3073
  msgid "Follow this link for more information"
3074
  msgstr ""
3075
 
3076
- #: methods/openstack2.php:103 methods/openstack2.php:161
3077
  msgid "authentication URI"
3078
  msgstr ""
3079
 
3080
- #: methods/openstack2.php:98
3081
  msgid "Get your access credentials from your OpenStack Swift provider, and then pick a container name to use for storage. This container will be created for you if it does not already exist."
3082
  msgstr ""
3083
 
3084
- #: methods/addon-base-v2.php:204 methods/addon-base-v2.php:224
3085
  msgid "Failed to download %s"
3086
  msgstr ""
3087
 
3088
- #: methods/addon-base-v2.php:218
3089
  msgid "Failed to download"
3090
  msgstr ""
3091
 
@@ -3097,27 +3113,27 @@ msgstr ""
3097
  msgid "Failed to upload %s"
3098
  msgstr ""
3099
 
3100
- #: methods/dropbox.php:599 methods/dropbox.php:601
3101
  msgid "Success:"
3102
  msgstr ""
3103
 
3104
- #: addons/onedrive.php:997 methods/dropbox.php:500
3105
  msgid "<strong>After</strong> you have saved your settings (by clicking 'Save Changes' below), then come back here once and click this link to complete authentication with %s."
3106
  msgstr ""
3107
 
3108
- #: addons/onedrive.php:995 methods/dropbox.php:497
3109
  msgid "(You appear to be already authenticated)."
3110
  msgstr ""
3111
 
3112
- #: methods/dropbox.php:492 methods/dropbox.php:498 methods/dropbox.php:500
3113
  msgid "Dropbox"
3114
  msgstr ""
3115
 
3116
- #: addons/onedrive.php:994 methods/dropbox.php:492
3117
  msgid "Authenticate with %s"
3118
  msgstr ""
3119
 
3120
- #: methods/cloudfiles.php:396
3121
  msgid "Error downloading remote file: Failed to download"
3122
  msgstr ""
3123
 
@@ -3144,7 +3160,7 @@ msgstr ""
3144
  msgid "%s error - failed to access the container"
3145
  msgstr ""
3146
 
3147
- #: addons/googlecloud.php:902 addons/onedrive.php:996 methods/dropbox.php:507
3148
  #: methods/googledrive.php:957
3149
  msgid "Account holder's name: %s."
3150
  msgstr ""
@@ -3161,17 +3177,17 @@ msgstr ""
3161
  msgid "<strong>This is NOT a folder name</strong>."
3162
  msgstr ""
3163
 
3164
- #: addons/google-enhanced.php:81 addons/onedrive.php:988
3165
  #: methods/googledrive.php:933 methods/googledrive.php:943
3166
  msgid "Folder"
3167
  msgstr ""
3168
 
3169
- #: addons/googlecloud.php:254 addons/onedrive.php:373
3170
  #: methods/googledrive.php:863
3171
  msgid "%s download: failed: file not found"
3172
  msgstr ""
3173
 
3174
- #: addons/googlecloud.php:579 methods/googledrive.php:348
3175
  msgid "Name: %s."
3176
  msgstr ""
3177
 
@@ -3191,7 +3207,7 @@ msgstr ""
3191
  msgid "This remote storage method (%s) requires PHP %s or later."
3192
  msgstr ""
3193
 
3194
- #: admin.php:3793
3195
  msgid "Theme directory (%s) not found, but lower-case version exists; updating database option accordingly"
3196
  msgstr ""
3197
 
@@ -3205,7 +3221,7 @@ msgstr ""
3205
 
3206
  #: addons/migrator.php:375
3207
  #: templates/wp-admin/settings/downloading-and-restoring.php:56
3208
- #: templates/wp-admin/settings/form-contents.php:241
3209
  msgid "This feature requires %s version %s or later"
3210
  msgstr ""
3211
 
@@ -3221,7 +3237,7 @@ msgstr ""
3221
  msgid "Failed to unpack the archive"
3222
  msgstr ""
3223
 
3224
- #: class-updraftplus.php:1112
3225
  msgid "Error - failed to download the file"
3226
  msgstr ""
3227
 
@@ -3241,16 +3257,16 @@ msgstr ""
3241
  msgid "The installed version of UpdraftPlus Backup/Restore has not been tested on your version of WordPress (%s)."
3242
  msgstr ""
3243
 
3244
- #: addons/sftp.php:426
3245
  msgid "password/key"
3246
  msgstr " الرقم السري/المفتاح"
3247
 
3248
- #: addons/azure.php:509 addons/migrator.php:2198 addons/sftp.php:377
3249
- #: admin.php:661
3250
  msgid "Key"
3251
  msgstr "مفتاح"
3252
 
3253
- #: addons/sftp.php:372
3254
  msgid "Your login may be either password or key-based - you only need to enter one, not both."
3255
  msgstr "للدخول يجب ادخال إما الرقم السري أو المفتاح، وليس كلاهما."
3256
 
@@ -3262,23 +3278,23 @@ msgstr "المفتاح الذي أدخلته غير صالح، أو أنه فا
3262
  msgid "SCP/SFTP password/key"
3263
  msgstr "الرقم السري/المفتاح الخاص بـ SCP/SFTP"
3264
 
3265
- #: admin.php:3276
3266
  msgid "Files backup (created by %s)"
3267
  msgstr "ملفات النسخة الإحتياطية (ولدت من طرف: %s.) "
3268
 
3269
- #: admin.php:3276
3270
  msgid "Files and database WordPress backup (created by %s)"
3271
  msgstr "الملفات وقاعدة البيانات للووردبريس بالنسخة الإحتياطية (ولدت من طرف: %s.)"
3272
 
3273
- #: addons/importer.php:261 admin.php:3270 class-updraftplus.php:2612
3274
  msgid "Backup created by: %s."
3275
  msgstr "ولدت النسخة الإحتياطية من طرف: %s."
3276
 
3277
- #: admin.php:3239
3278
  msgid "Database (created by %s)"
3279
  msgstr "قاعدة بيانات (ولدت من طرف: %s.) "
3280
 
3281
- #: admin.php:3233 admin.php:3272
3282
  msgid "unknown source"
3283
  msgstr "مصدر غير معروف"
3284
 
@@ -3290,31 +3306,31 @@ msgstr "إعادة فحص الإستضافة الإستضافة السحابية
3290
  msgid "Upload backup files"
3291
  msgstr "رفع ملفات النسخة الإحتياطية"
3292
 
3293
- #: admin.php:1876
3294
  msgid "This backup was created by %s, and can be imported."
3295
  msgstr "تم خلق النسخة الإحتياطية من طرف %s, ويمكن استيرادها."
3296
 
3297
- #: admin.php:914
3298
  msgid "Read this page for a guide to possible causes and how to fix it."
3299
  msgstr "إقرأ هذه الصفحة لمعرفة المزيد وإمكانية الإصلاح."
3300
 
3301
- #: admin.php:914
3302
  msgid "WordPress has a number (%d) of scheduled tasks which are overdue. Unless this is a development site, this probably means that the scheduler in your WordPress install is not working."
3303
  msgstr "ووردبريس يملك عدد (%d) من المهام المتأخرة. ما لم يكن هذا الموقع خاص بالتطوير، فهذا يعني أن خاصية المهام بالووردبريس غير شغالة."
3304
 
3305
- #: admin.php:626 class-updraftplus.php:2619
3306
  msgid "If this is a backup created by a different backup plugin, then UpdraftPlus Premium may be able to help you."
3307
  msgstr "إن كانت هذه النسخة الإحتياطية خلقت بإستخدام تطبيق آخر، يمكن لإضافة UpdraftPlus Premium مساعدتك في حل المشكلة."
3308
 
3309
- #: admin.php:625
3310
  msgid "However, UpdraftPlus archives are standard zip/SQL files - so if you are sure that your file has the right format, then you can rename it to match that pattern."
3311
  msgstr "مع ذلك، ملفات UpdraftPlus المضغوطة هي ملفات zip/SQL عادية - فإن كنت تعتقد أن الملف هو على الصيغة الصحيحة، المرجو إعادة تسميته بالإسم الموصى به."
3312
 
3313
- #: admin.php:625 admin.php:626 class-updraftplus.php:2619
3314
  msgid "This file does not appear to be an UpdraftPlus backup archive (such files are .zip or .gz files which have a name like: backup_(time)_(site name)_(code)_(type).(zip|gz))."
3315
  msgstr "هذا الملف لا نعتقد أنه نسخة احتياطية من UpdraftPlus ( كالملفات المضغوطة بصيغتي .zip أو . gz التي لها أسماء مثل: backup_(time)_(site name)_(code)_(type).(zip|gz))."
3316
 
3317
- #: admin.php:3273 includes/class-wpadmin-commands.php:143 restorer.php:1410
3318
  msgid "Backup created by unknown source (%s) - cannot be restored."
3319
  msgstr "النسخة الإحتياطية خلقت من جهة غير معروفة (%s)، لا يمكن استيرادها."
3320
 
@@ -3326,29 +3342,29 @@ msgstr "مجلد (wp-content) غير موجود البثة بهذا الملف
3326
  msgid "This version of UpdraftPlus does not know how to handle this type of foreign backup"
3327
  msgstr "هذه النسخة من UpdraftPlus لا تستطيع التعامل مع نوع النسخ الإحتياطية هذا."
3328
 
3329
- #: methods/dropbox.php:285
3330
  msgid "%s returned an unexpected HTTP response: %s"
3331
  msgstr "أبدى %s إجابة HTTP غير متوقعة: %s"
3332
 
3333
- #: addons/sftp.php:886
3334
  msgid "The UpdraftPlus module for this file access method (%s) does not support listing files"
3335
  msgstr "وحدة UpdraftPlus لطريقة الوصول للملف (%s) غير مدعومة من قبل الملفات المسرودة"
3336
 
3337
- #: methods/cloudfiles.php:221 methods/dropbox.php:266
3338
  #: methods/openstack-base.php:107
3339
  msgid "No settings were found"
3340
  msgstr "لم يتم العثور على الإعدادات"
3341
 
3342
- #: class-updraftplus.php:2740
3343
  msgid "One or more backups has been added from scanning remote storage; note that these backups will not be automatically deleted through the \"retain\" settings; if/when you wish to delete them then you must do so manually."
3344
  msgstr "تمت إضافة واحدة أو أكثر من النسخ الإحتياطية التي وجدناها بالإستضافة السحابية، لاحظ أن هذه النسخ لن تتم مسحها أوتوماتيكيا من الإعادادات الإفتراضية، لو أو متى شئت حذفها يجب عليك حذفها يدويا."
3345
 
3346
- #: admin.php:592
3347
  msgid "Rescanning remote and local storage for backup sets..."
3348
  msgstr "جاري فحص الإستضافة السحابية والمساحة التخزينية المحلية بحثا عن نسخ احتياطية..."
3349
 
3350
- #: addons/googlecloud.php:865 addons/googlecloud.php:880
3351
- #: addons/s3-enhanced.php:46 addons/s3-enhanced.php:60
3352
  msgid "(Read more)"
3353
  msgstr "(قراءة المزيد)"
3354
 
@@ -3369,15 +3385,15 @@ msgstr ""
3369
  msgid "Remove"
3370
  msgstr "حذف"
3371
 
3372
- #: methods/s3.php:816
3373
  msgid "Other %s FAQs."
3374
  msgstr "الأسئلة الشائعة %s الأخرى."
3375
 
3376
- #: templates/wp-admin/settings/form-contents.php:354
3377
  msgid "Check this to receive more information and emails on the backup process - useful if something is going wrong."
3378
  msgstr "تحقق من هذا الخيار لتتمكن من تلقي المزيد من المعلومات بر الإيميل لعمليات النسخ الإحتياطي - مفيدة جدا ان كان هناك مشاكل بالعملية."
3379
 
3380
- #: addons/morefiles.php:442 admin.php:2990
3381
  msgid "If entering multiple files/directories, then separate them with commas. For entities at the top level, you can use a * at the start or end of the entry as a wildcard."
3382
  msgstr "في حال إدخال ملفات/مجلدات متعددة، عندها قم بالتفرقة بينها باستخدام الفاصلة. للكيانات بالمستوى العلوي، قم باستخدام * في بداية أو نهاية المدخلات لتحل محل البدائل."
3383
 
@@ -3385,11 +3401,11 @@ msgstr "في حال إدخال ملفات/مجلدات متعددة، عندها
3385
  msgid "Custom content type manager plugin data detected: clearing option cache"
3386
  msgstr "تم الكشف عن بيانات لإضافة إدارة نوع المحتوى: تنضيف الخيارات"
3387
 
3388
- #: class-updraftplus.php:4195 methods/ftp.php:291 restorer.php:1441
3389
  msgid "Your hosting company must enable these functions before %s can work."
3390
  msgstr "شركة الإستضافة لموقعك يجب أن تُفعل هذه الوضائف %s قبل أن نتمكن من العمل"
3391
 
3392
- #: class-updraftplus.php:4195 methods/ftp.php:291 restorer.php:1440
3393
  msgid "Your web server's PHP installation has these functions disabled: %s."
3394
  msgstr "نسخة PHP المنصبة تحمل هذه الوظائف الغير مفعلة: %s"
3395
 
@@ -3457,15 +3473,15 @@ msgstr "وصولك المدفوع لتحديثات UpdraftPlus بهذا المو
3457
  msgid "Dismiss from main dashboard (for %s weeks)"
3458
  msgstr "استبعاد من لوحة التحكم (لمدة %s أسبوع)"
3459
 
3460
- #: class-updraftplus.php:4245
3461
  msgid "The attempt to undo the double-compression succeeded."
3462
  msgstr "نجاح محاولة التراجع من الضغط المزدوج"
3463
 
3464
- #: class-updraftplus.php:4222 class-updraftplus.php:4243
3465
  msgid "The attempt to undo the double-compression failed."
3466
  msgstr "فشل محاولة التراجع من الضغط المزدوج"
3467
 
3468
- #: class-updraftplus.php:4215
3469
  msgid "The database file appears to have been compressed twice - probably the website you downloaded it from had a mis-configured webserver."
3470
  msgstr "يبدو أن ملف قاعدة البيانات قد تم ضغطه مرتين - نعتقد أن الموقع الذي قمتم بتحميل الملف منه يحمل خادم سيرفر غير مهيء بشكل جيد"
3471
 
@@ -3501,7 +3517,7 @@ msgstr "جاري البحث واستبدال الصفوف: %d"
3501
  msgid "Skipping this table: data in this table (%s) should not be search/replaced"
3502
  msgstr "تخطي هذا الجدول: بيانات هذا الجدول (%s) يجب الا تكون بحث / استبدال"
3503
 
3504
- #: addons/onedrive.php:97
3505
  msgid "Account full: your %s account has only %d bytes left, but the file to be uploaded has %d bytes remaining (total size: %d bytes)"
3506
  msgstr "حساب ممتلئ: حسابك %s يحمل فقط %d بايت متبقية، لكن الملف الذي نقوم برفعه حجمه %d بايت متبقية (الحجم الكلي: %d بايت)"
3507
 
@@ -3509,11 +3525,11 @@ msgstr "حساب ممتلئ: حسابك %s يحمل فقط %d بايت متبق
3509
  msgid "Errors occurred:"
3510
  msgstr "أخطاء حدثت:"
3511
 
3512
- #: admin.php:3468
3513
  msgid "Follow this link to download the log file for this restoration (needed for any support requests)."
3514
  msgstr "لتحميل ملف السجل لهذه العملية تابع هذا الرابط (ستحتاج هذا الملف في أي عملية طلب للدعم)"
3515
 
3516
- #: templates/wp-admin/settings/form-contents.php:398
3517
  msgid "See this FAQ also."
3518
  msgstr "تابع هذه التعليمات أيضا."
3519
 
@@ -3533,7 +3549,7 @@ msgstr "اعدادات PHP بالسيرفر تسمح بتشغيل PHP لمدة %
3533
  msgid "Existing unremoved folders from a previous restore exist (please use the \"Delete Old Directories\" button to delete them before trying again): %s"
3534
  msgstr "وجود مجلدات غير محذوفة من النسخة السابقة (من فضلك استخدم خيار \"مسح المجلدات القديمة\" لمسحها قبل المحاولة مرة أخرى) : %s"
3535
 
3536
- #: admin.php:889 class-updraftplus.php:661
3537
  msgid "The amount of time allowed for WordPress plugins to run is very low (%s seconds) - you should increase it to avoid backup failures due to time-outs (consult your web hosting company for more help - it is the max_execution_time PHP setting; the recommended value is %s seconds or more)"
3538
  msgstr "مقدار الوقت المسموح به لإضافات وورد بالتشغيل منخفض جدا (%s ثانية) - يجب زيادته لتجنب فشل النسخ الاحتياطي (استشر خدمة الزبناء الخاصة بشركة الإستضافة الخاص بك لمزيد من المساعدة - إعدادات max_execution_time PHP، و القيمة الموصى بها هي %s ثانية أو أكثر)"
3539
 
@@ -3549,20 +3565,20 @@ msgstr "%s: تخطي ملف ذاكرة التخزين المؤقت (غير مو
3549
  msgid "Disabled this plugin: %s: re-activate it manually when you are ready."
3550
  msgstr "تم تعطيل هذه الإضافة: %s: يمكك اعادة تفعيلها عندما تكون مستعد."
3551
 
3552
- #: addons/sftp.php:641 addons/sftp.php:644 includes/ftp.class.php:44
3553
  #: includes/ftp.class.php:47
3554
  msgid "The %s connection timed out; if you entered the server correctly, then this is usually caused by a firewall blocking the connection - you should check with your web hosting company."
3555
  msgstr "انتهى توقيت الإتصال %s، إذا كنت دخلت الملقم بشكل صحيح، إذا فهذا الخطأ عادة ما يكون سببه جدار حماية قد حظر الاتصال - يجب أن تحقق من المشكلة مع شركة استضافة المواقع الخاصة بك."
3556
 
3557
- #: admin.php:3801
3558
  msgid "The current theme was not found; to prevent this stopping the site from loading, your theme has been reverted to the default theme"
3559
  msgstr "لم يتم العثور على تصميم موقعكم الحالي، لمنع توقف تحميل الموقع، تم استرجاع التصميم الإفتراضي."
3560
 
3561
- #: admin.php:2054 admin.php:2064
3562
  msgid "Restore failed..."
3563
  msgstr "فشل في الإستعادة..."
3564
 
3565
- #: addons/moredatabase.php:130 admin.php:1276
3566
  msgid "Messages:"
3567
  msgstr "رسائل:"
3568
 
@@ -3610,7 +3626,7 @@ msgstr "مفتاح API: %s"
3610
  msgid "Password: %s"
3611
  msgstr "كلمة السر: %s"
3612
 
3613
- #: addons/cloudfiles-enhanced.php:181 addons/s3-enhanced.php:294
3614
  msgid "Username: %s"
3615
  msgstr "اسم المستخدم: %s"
3616
 
@@ -3656,98 +3672,98 @@ msgstr "اضافة قدرات محسنة لخدمة Rackspace "
3656
  msgid "Rackspace Cloud Files, enhanced"
3657
  msgstr "تم تعزيز ملفات المستضافة بخدمة Rackspace "
3658
 
3659
- #: addons/cloudfiles-enhanced.php:275 methods/cloudfiles-new.php:143
3660
  msgid "Cloud Files Container"
3661
  msgstr "حاوية الملفات السحابية"
3662
 
3663
- #: methods/cloudfiles-new.php:138
3664
  msgid "Cloud Files API Key"
3665
  msgstr "مفتاح API للملفات السحابية"
3666
 
3667
- #: methods/cloudfiles-new.php:133
3668
  msgid "To create a new Rackspace API sub-user and API key that has access only to this Rackspace container, use this add-on."
3669
  msgstr "لإنشاء مستخدم فرعي ومفتاح API جديد لديه صلاحيات الوصول فقط إلى هذه الحاوية، قم بإستخدام هذه الإضافة."
3670
 
3671
- #: methods/cloudfiles-new.php:130
3672
  msgid "Cloud Files Username"
3673
  msgstr "اسم المستخدم للخدمة السحابية"
3674
 
3675
- #: addons/cloudfiles-enhanced.php:45 methods/cloudfiles-new.php:116
3676
  msgid "London (LON)"
3677
  msgstr "لندن (LON)"
3678
 
3679
- #: addons/cloudfiles-enhanced.php:44 methods/cloudfiles-new.php:115
3680
  msgid "Hong Kong (HKG)"
3681
  msgstr "هونغ كونغ (HKG)"
3682
 
3683
- #: addons/cloudfiles-enhanced.php:43 methods/cloudfiles-new.php:114
3684
  msgid "Northern Virginia (IAD)"
3685
  msgstr "ولاية فرجينيا الشمالية (IAD)"
3686
 
3687
- #: addons/cloudfiles-enhanced.php:42 methods/cloudfiles-new.php:113
3688
  msgid "Chicago (ORD)"
3689
  msgstr "شيكاغو (ORD)"
3690
 
3691
- #: addons/cloudfiles-enhanced.php:41 methods/cloudfiles-new.php:112
3692
  msgid "Sydney (SYD)"
3693
  msgstr "سيدني (SYD)"
3694
 
3695
- #: addons/cloudfiles-enhanced.php:40 methods/cloudfiles-new.php:111
3696
  msgid "Dallas (DFW) (default)"
3697
  msgstr "دالاس (DFW) (الافتراضي)"
3698
 
3699
- #: addons/cloudfiles-enhanced.php:271 methods/cloudfiles-new.php:106
3700
  msgid "Cloud Files Storage Region"
3701
  msgstr "منطقة الملفات السحابة"
3702
 
3703
- #: methods/cloudfiles-new.php:98
3704
  msgid "Accounts created at rackspacecloud.com are US-accounts; accounts created at rackspace.co.uk are UK-based"
3705
  msgstr "الحسابات المنشأة بموقع rackspacecloud.com هي حسابات أمريكية، الحسابات المنشأة بموقع rackspace.co.uk هي حسابات بريطانية"
3706
 
3707
- #: methods/cloudfiles-new.php:96
3708
  msgid "US or UK-based Rackspace Account"
3709
  msgstr "حساب Rackspace بالولايات المتحدة أو المملكة المتحدة"
3710
 
3711
- #: addons/cloudfiles-enhanced.php:255 methods/cloudfiles-new.php:96
3712
  msgid "Accounts created at rackspacecloud.com are US accounts; accounts created at rackspace.co.uk are UK accounts."
3713
  msgstr "الحسابات المنشأة بموقع rackspacecloud.com هي حسابات أمريكية، الحسابات المنشأة بموقع rackspace.co.uk هي حسابات بريطانية "
3714
 
3715
- #: addons/cloudfiles-enhanced.php:136 addons/s3-enhanced.php:197
3716
  #: methods/cloudfiles-new.php:39 methods/openstack-base.php:435
3717
  #: methods/openstack-base.php:437 methods/openstack-base.php:457
3718
  #: methods/openstack2.php:25
3719
  msgid "Authorisation failed (check your credentials)"
3720
  msgstr "فشل التفويض (راجع معلوماتك)"
3721
 
3722
- #: methods/updraftvault.php:524 udaddons/options.php:272
3723
  msgid "An unknown error occurred when trying to connect to UpdraftPlus.Com"
3724
  msgstr "حدث خطأ غير معروف عند محاولة الاتصال بـ UpdraftPlus.Com"
3725
 
3726
- #: admin.php:639 central/bootstrap.php:513
3727
  msgid "Create"
3728
  msgstr "خلق"
3729
 
3730
- #: admin.php:601
3731
  msgid "Trying..."
3732
  msgstr "اعادة المحاولة..."
3733
 
3734
- #: admin.php:600
3735
  msgid "The new user's RackSpace console password is (this will not be shown again):"
3736
  msgstr "كلمة المرور الخاصة بمستخدم RackSpace هي (هذا لن يظهر مرة أخرى):"
3737
 
3738
- #: class-updraftplus.php:1566
3739
  msgid "(when decrypted)"
3740
  msgstr "(عندما تكون مفكوكة)"
3741
 
3742
- #: admin.php:611 admin.php:3743
3743
  msgid "Error data:"
3744
  msgstr "خطأ بالبيانات:"
3745
 
3746
- #: admin.php:3419
3747
  msgid "Backup does not exist in the backup history"
3748
  msgstr "النسخة الإحتياطية لا توجد بتاريخ النسخ"
3749
 
3750
- #: admin.php:2423
3751
  msgid "Your WordPress install has old directories from its state before you restored/migrated (technical information: these are suffixed with -old). You should press this button to delete them as soon as you have verified that the restoration worked."
3752
  msgstr "تثبيت ووردبريس الخاص بك به مجلدات قديمة قبل حالة الإستعادة/الدمج ( معلومات تقنية: بها بادئة -old). يجب أن تضغط على هذا الزر لحذفها بمجرد التحقق من عمل الإستعادة."
3753
 
@@ -3799,11 +3815,11 @@ msgstr "أدخل عناوين بريد الكتروني هنا لإرسال تق
3799
  msgid "Email reports"
3800
  msgstr "تقارير البريد الإلكتروني"
3801
 
3802
- #: class-updraftplus.php:1562 class-updraftplus.php:1567
3803
  msgid "%s checksum: %s"
3804
  msgstr "%s الاختباري:%s"
3805
 
3806
- #: class-updraftplus.php:1535 class-updraftplus.php:1537
3807
  msgid "files: %s"
3808
  msgstr "ملفات:%s"
3809
 
@@ -3823,7 +3839,7 @@ msgstr "(مع وجود أخطاء (%s))"
3823
  msgid "Debugging information"
3824
  msgstr "معلومات التصحيح"
3825
 
3826
- #: addons/reporting.php:194 admin.php:3179
3827
  msgid "Uploaded to:"
3828
  msgstr "تحميلها على:"
3829
 
@@ -3863,24 +3879,24 @@ msgstr "%d ساعة،%d دقيقة، %d ثانية"
3863
  msgid "%d errors, %d warnings"
3864
  msgstr "%d الأخطاء، %d تحذيرات"
3865
 
3866
- #: addons/onedrive.php:717 methods/dropbox.php:583
3867
  msgid "%s authentication"
3868
  msgstr "%s مصادقة"
3869
 
3870
- #: addons/onedrive.php:717 class-updraftplus.php:366 methods/dropbox.php:556
3871
- #: methods/dropbox.php:583 methods/dropbox.php:596 methods/dropbox.php:727
3872
  msgid "%s error: %s"
3873
  msgstr "%s خطأ: %s"
3874
 
3875
- #: addons/googlecloud.php:815 methods/dropbox.php:467
3876
  msgid "%s logo"
3877
  msgstr "%s الشعار"
3878
 
3879
- #: methods/dropbox.php:199
3880
  msgid "%s did not return the expected response - check your log file for more details"
3881
  msgstr "%s لم ترسل الاستجابة المتوقعة - تحقق من ملف السجل الخاص بك لمزيد من التفاصيل"
3882
 
3883
- #: methods/s3.php:281
3884
  msgid "The required %s PHP module is not installed - ask your web hosting company to enable it"
3885
  msgstr "وحدة PHP %s غير منصبة - من فضلك قم بمراسلة شركة الإستضافة لتمكينها"
3886
 
@@ -3892,24 +3908,24 @@ msgstr "لمزيد من الخيارات، استخدام الإضافة \"%s\".
3892
  msgid "Your site's admin email address (%s) will be used."
3893
  msgstr "سيتم استخدام عنوان البريد الإلكتروني الخاص بالمشرف (%s)."
3894
 
3895
- #: admin.php:648 methods/updraftvault.php:274 methods/updraftvault.php:319
3896
  #: udaddons/options.php:251
3897
  msgid "Connect"
3898
  msgstr "الإتصال"
3899
 
3900
- #: templates/wp-admin/settings/form-contents.php:322
3901
  msgid "For more reporting features, use the Reporting add-on."
3902
  msgstr "لمزيد من ميزات التقارير، استخدام اضافات التقارير."
3903
 
3904
- #: class-updraftplus.php:4025
3905
  msgid "(version: %s)"
3906
  msgstr "(الإصدار: %s)"
3907
 
3908
- #: addons/reporting.php:438 admin.php:590
3909
  msgid "Be aware that mail servers tend to have size limits; typically around %s Mb; backups larger than any limits will likely not arrive."
3910
  msgstr "تحقق من حجم الملفات المسموح به بخدمة الإيميل، تقريبا %s ميجا، أي نسخ احتياطية أكبر من هذا الحجم لن تصلك أبدا."
3911
 
3912
- #: addons/reporting.php:438 admin.php:589
3913
  msgid "When the Email storage method is enabled, also send the entire backup"
3914
  msgstr "عندما يتم تمكين طريقة تخزين البريد الإلكتروني، قم أيضا بإرسال النسخ الاحتياطي كاملة"
3915
 
@@ -3949,7 +3965,7 @@ msgstr "الملفات فقط (لن يتم خلق نسخ احتياطية لقا
3949
  msgid "Files (database backup has not completed)"
3950
  msgstr "ملفات (لم يتم إكمال نسخ قاعدة بيانات احتياطيا)"
3951
 
3952
- #: admin.php:253 backup.php:851
3953
  msgid "Files and database"
3954
  msgstr "ملفات وقواعد البيانات"
3955
 
@@ -4013,16 +4029,16 @@ msgstr "اضافات UpdraftPlus"
4013
  msgid "An update is available for UpdraftPlus - please follow this link to get it."
4014
  msgstr "يتوفر تحديث لUpdraftPlus - يرجى اتباع هذا الرابط للحصول عليه."
4015
 
4016
- #: methods/updraftvault.php:597 methods/updraftvault.php:615
4017
  #: udaddons/updraftplus-addons.php:795
4018
  msgid "UpdraftPlus.Com returned a response, but we could not understand it"
4019
  msgstr "رد UpdraftPlus.Com، ولكننا لم نفهم الإستجابة "
4020
 
4021
- #: methods/updraftvault.php:611 udaddons/updraftplus-addons.php:792
4022
  msgid "Your email address and password were not recognised by UpdraftPlus.Com"
4023
  msgstr "لم يتم التعرف على عنوان البريد الإلكتروني وكلمة المرور عن طريق UpdraftPlus.Com"
4024
 
4025
- #: methods/updraftvault.php:570 udaddons/updraftplus-addons.php:752
4026
  msgid "UpdraftPlus.Com returned a response which we could not understand (data: %s)"
4027
  msgstr "لا يمكن فهم إستجابة الموقع UpdraftPlus.Com (البيانات: %s)"
4028
 
@@ -4034,16 +4050,16 @@ msgstr "رد UpdraftPlus.Com، ولكننا لم نفهم الإستجابة"
4034
  msgid "We failed to successfully connect to UpdraftPlus.Com"
4035
  msgstr "فشلنا في الاتصال بنجاح إلى UpdraftPlus.Com"
4036
 
4037
- #: methods/email.php:76 templates/wp-admin/settings/form-contents.php:303
4038
  #: templates/wp-admin/settings/tab-addons.php:200
4039
  msgid "Reporting"
4040
  msgstr "التقارير"
4041
 
4042
- #: admin.php:4154
4043
  msgid "Options (raw)"
4044
  msgstr "خيارات (الخام)"
4045
 
4046
- #: addons/reporting.php:436 admin.php:588
4047
  msgid "Send a report only when there are warnings/errors"
4048
  msgstr "إرسال تقرير فقط عندما تكون هناك تحذيرات / أخطاء"
4049
 
@@ -4055,15 +4071,15 @@ msgstr "رابط المحتوى:"
4055
  msgid "You should check the file ownerships and permissions in your WordPress installation"
4056
  msgstr ""
4057
 
4058
- #: templates/wp-admin/settings/form-contents.php:207
4059
  msgid "See also the \"More Files\" add-on from our shop."
4060
  msgstr "انظر أيضا \"ملفات إضافية\" الإضافة من متجرنا."
4061
 
4062
- #: backup.php:3012 class-updraftplus.php:674
4063
  msgid "Your free space in your hosting account is very low - only %s Mb remain"
4064
  msgstr "المساحة الحرة فى حساب الاستضافة الخاص بك قليلة جدا - فقط متبقى %s ميجا بايت"
4065
 
4066
- #: class-updraftplus.php:658
4067
  msgid "The amount of memory (RAM) allowed for PHP is very low (%s Mb) - you should increase it to avoid failures due to insufficient memory (consult your web hosting company for more help)"
4068
  msgstr "كمية مقدار الذاكرة (RAM) المسموحة ل PHP قليلة جدا (%s ميجابايت) - يجب عليك زيادتها لتفادى مشاكل قلة الذاكرة (تحدث مع الاستضافة الخاصة بك لمزيد من المساعدة)"
4069
 
@@ -4195,7 +4211,7 @@ msgstr "بدون ذلك, التشفير سيكون ابطأ بكثير."
4195
  msgid "Your web-server does not have the %s module installed."
4196
  msgstr "خادم الويب الخاص بك ليس بة الوحدة %s مثبتة."
4197
 
4198
- #: addons/googlecloud.php:898 methods/googledrive.php:953
4199
  msgid "<strong>(You appear to be already authenticated,</strong> though you can authenticate again to refresh your access if you've had a problem)."
4200
  msgstr "<strong>(على ما يبدو انة تمت المصادقة ,</strong> على الرغم من ذلك يمكنك المصادقة مرة اخرى لتحديث وصولك اذا كانت هناك مشكلة)."
4201
 
@@ -4203,15 +4219,15 @@ msgstr "<strong>(على ما يبدو انة تمت المصادقة ,</strong>
4203
  msgid "Drop backup files here"
4204
  msgstr "اسقاط ملفات النسخ الاحتياطى هنا"
4205
 
4206
- #: admin.php:599
4207
  msgid "The web server returned an error code (try again, or check your web server logs)"
4208
  msgstr "اعاد خادم الويب برمز خطأ (حاول مجددا, او قم بالتحقق من سجلات خادم الويب الخاص بك)"
4209
 
4210
- #: admin.php:597
4211
  msgid "The restore operation has begun. Do not press stop or close your browser until it reports itself as having finished."
4212
  msgstr "بدأت عملية الأستعادة. لا تضغط إيقاف أو إغلاق المتصفح حتى اعطائك التقرير بأنة تم انتهاء العملية."
4213
 
4214
- #: admin.php:594
4215
  msgid "If you exclude both the database and the files, then you have excluded everything!"
4216
  msgstr "إذا قمت باستبعاد كل من قاعدة البيانات والملفات, فقد قمت بأستبعاد كل شئ !"
4217
 
@@ -4231,7 +4247,7 @@ msgstr "(السجلات يمكن العثور عليها فى صفحة اعدا
4231
  msgid "Remember this choice for next time (you will still have the chance to change it)"
4232
  msgstr "تذكر هذا الاختيار في المرة القادمة (لايزال لديك الفرصة لتغييرة)"
4233
 
4234
- #: addons/azure.php:350 methods/stream-base.php:121 methods/stream-base.php:126
4235
  msgid "Upload failed"
4236
  msgstr "فشل التحميل"
4237
 
@@ -4239,11 +4255,11 @@ msgstr "فشل التحميل"
4239
  msgid "You can send a backup to more than one destination with an add-on."
4240
  msgstr "يمكنك أن ترسل نسخة احتياطية لأكثر من جهة واحدة مع الإضافة."
4241
 
4242
- #: admin.php:2641
4243
  msgid "Note: the progress bar below is based on stages, NOT time. Do not stop the backup simply because it seems to have remained in the same place for a while - that is normal."
4244
  msgstr "ملاحظة: يستند شريط التقدم أدناه على مراحل، وليس الوقت. لا توقف عملية النسخ الأحتياطى لمجرد أنه يبدو أنه قد بقي في نفس المكان لفترة من الوقت - - وهذا طبيعي."
4245
 
4246
- #: admin.php:2539
4247
  msgid "(%s%%, file %s of %s)"
4248
  msgstr "(%s%%, ملف %s من%s)"
4249
 
@@ -4252,15 +4268,15 @@ msgstr "(%s%%, ملف %s من%s)"
4252
  msgid "Read more about how this works..."
4253
  msgstr "قراءة المزيد عن كيفية عمل ذلك ..."
4254
 
4255
- #: addons/sftp.php:486
4256
  msgid "Failed: We were able to log in, but failed to successfully create a file in that location."
4257
  msgstr "فشل:تمكنا من تسجيل الدخول، لكنه فشل في إنشاء ملف في ذلك الموقع بنجاح."
4258
 
4259
- #: addons/sftp.php:484
4260
  msgid "Failed: We were able to log in and move to the indicated directory, but failed to successfully create a file in that location."
4261
  msgstr "فشل:لقد تمكنا من تسجيل الدخول والانتقال إلى الدليل المشار إليه،لكنه فشل في إنشاء ملف في ذلك الموقع بنجاح."
4262
 
4263
- #: addons/sftp.php:403
4264
  msgid "Use SCP instead of SFTP"
4265
  msgstr "استخدام SCP بدلا من SFTP"
4266
 
@@ -4280,96 +4296,96 @@ msgstr "محاولة ارسال النسخ الأحتياطى عن طريق ال
4280
  msgid "Backup is of: %s."
4281
  msgstr "النسخ الأحتياطى من: %s"
4282
 
4283
- #: admin.php:687
4284
  msgid "%s settings test result:"
4285
  msgstr "اعدادات نتيجة اختبار %s"
4286
 
4287
- #: admin.php:3337 admin.php:3339
4288
  msgid "(Not finished)"
4289
  msgstr "(غير منتهي)"
4290
 
4291
- #: admin.php:3339
4292
  msgid "If you are seeing more backups than you expect, then it is probably because the deletion of old backup sets does not happen until a fresh backup completes."
4293
  msgstr "اذا كنت ترى اكثر من نسخة احتياطية, ومن ثم انة من المحتمل ان هذا بسبب اعدادات حذف ملفات النسخ الاحتياطى القديمة لم يتم حذفها حتى اكتمال نسخة احتياطية جديدة."
4294
 
4295
- #: templates/wp-admin/settings/form-contents.php:381
4296
  msgid "<b>Do not</b> place it inside your uploads or plugins directory, as that will cause recursion (backups of backups of backups of...)."
4297
  msgstr "<b>لا تقم</b> بوضعه داخل الإضافات أو دليل الإضافات، لأن ذلك سوف يسبب الإعادة (نسخة احتياطية من نسخة احتياطية من نسخة احتياطية من......)."
4298
 
4299
- #: templates/wp-admin/settings/form-contents.php:381
4300
  msgid "This is where UpdraftPlus will write the zip files it creates initially. This directory must be writable by your web server. It is relative to your content directory (which by default is called wp-content)."
4301
  msgstr "هذا هو المكان الذى UpdraftPlus يقوم بأنشاء ملفات zip. يجب ان يكون هذا الدليل قابل للكتابة من قبل خادم الويب الخاص بك. انة نسبة الى دليل محتوى موقعك (والتي افتراضيا يسمى wp-content)."
4302
 
4303
- #: admin.php:2636
4304
  msgid "Job ID: %s"
4305
  msgstr "رقم الوظيفة: %s"
4306
 
4307
- #: admin.php:2621
4308
  msgid "last activity: %ss ago"
4309
  msgstr "آخر نشاط: منذ %ss"
4310
 
4311
- #: admin.php:2620
4312
  msgid "next resumption: %d (after %ss)"
4313
  msgstr "الاستئناف التالي: %d (بعد %ss)"
4314
 
4315
- #: admin.php:2603 central/bootstrap.php:405 central/bootstrap.php:412
4316
- #: methods/updraftvault.php:354 methods/updraftvault.php:434
4317
  msgid "Unknown"
4318
  msgstr "غير معروف"
4319
 
4320
- #: admin.php:2553
4321
  msgid "Backup finished"
4322
  msgstr "الانتهاء من النسخ الاحتياطي"
4323
 
4324
- #: admin.php:2548
4325
  msgid "Waiting until scheduled time to retry because of errors"
4326
  msgstr "برجاء الأنتظار حتى الوقت المحدد لأعادة المحاولة بسبب الأخطاء"
4327
 
4328
- #: admin.php:2544
4329
  msgid "Pruning old backup sets"
4330
  msgstr "تلقيم مجموعات النسخ الاحتياطي القديم"
4331
 
4332
- #: admin.php:2532
4333
  msgid "Uploading files to remote storage"
4334
  msgstr "تحميل الملفات للمخزن البعيد"
4335
 
4336
- #: admin.php:2601
4337
  msgid "Encrypted database"
4338
  msgstr "قاعدة بيانات مشفرة"
4339
 
4340
- #: admin.php:2593
4341
  msgid "Encrypting database"
4342
  msgstr "تشفير قاعدة البيانات"
4343
 
4344
- #: admin.php:2567
4345
  msgid "Created database backup"
4346
  msgstr "تم انشاء النسخ الاحتياطى لقاعدة البيانات"
4347
 
4348
- #: admin.php:2580
4349
  msgid "table: %s"
4350
  msgstr "الجدول: %s"
4351
 
4352
- #: admin.php:2578
4353
  msgid "Creating database backup"
4354
  msgstr "انشاء النسخ الاحتياطى لقاعدة البيانات"
4355
 
4356
- #: admin.php:2526
4357
  msgid "Created file backup zips"
4358
  msgstr "تم انشاء ملف النسخ الاحتياطى zips"
4359
 
4360
- #: admin.php:2513
4361
  msgid "Creating file backup zips"
4362
  msgstr "انشاء ملف النسخ الاحتياطى zips"
4363
 
4364
- #: admin.php:2508
4365
  msgid "Backup begun"
4366
  msgstr "بدأ النسخ الاحتياطى"
4367
 
4368
- #: admin.php:2351
4369
  msgid "Backups in progress:"
4370
  msgstr "تقدم النسخ الأحتياطى:"
4371
 
4372
- #: admin.php:893
4373
  msgid "The scheduler is disabled in your WordPress install, via the DISABLE_WP_CRON setting. No backups can run (even &quot;Backup Now&quot;) unless either you have set up a facility to call the scheduler manually, or until it is enabled."
4374
  msgstr "تم تعطيل الجدولة فى تثبيت وورد بريس الخاصة بك. عبر اعداد DISABLE_WP_CRON. لا يمكن تشغيل النسخ الاحتياطى (حتى \"النسخ الاحتياطي الآن\") الا اذا قمت بأعداد مرفق لأستدعاء الجدولة يدويا, او حتى تفعيلها."
4375
 
@@ -4385,26 +4401,26 @@ msgstr "مجلد"
4385
  msgid "UpdraftPlus needed to create a %s in your content directory, but failed - please check your file permissions and enable the access (%s)"
4386
  msgstr "UpdraftPlus يحتاج لأنشاء %s فى دليل محتوى موقعك, لكنة فشل - من فضلك قم بالتحقق من الصلاحيات وقم بتفعيلها (%s)"
4387
 
4388
- #: class-updraftplus.php:2837
4389
  msgid "The backup has not finished; a resumption is scheduled"
4390
  msgstr "لم ينتهي النسخ الاحتياطي؛ وتم جدولة الأستئناف"
4391
 
4392
- #: class-updraftplus.php:1807
4393
  msgid "Your website is visited infrequently and UpdraftPlus is not getting the resources it hoped for; please read this page:"
4394
  msgstr "زوار موقع الويب الخاص بك و UpdraftPlus فى كثير من الأحيان لا يحصلون على الموارد التى يأملونها; من فضلك اقرأ هذة الصفحة:"
4395
 
4396
- #: addons/googlecloud.php:337 addons/onedrive.php:880
4397
  #: includes/Dropbox/OAuth/Consumer/ConsumerAbstract.php:115
4398
  #: includes/Dropbox2/OAuth/Consumer/ConsumerAbstract.php:118
4399
  #: methods/googledrive.php:229
4400
  msgid "The %s authentication could not go ahead, because something else on your site is breaking it. Try disabling your other plugins and switching to a default theme. (Specifically, you are looking for the component that sends output (most likely PHP warnings/errors) before the page begins. Turning off any debugging settings may also help)."
4401
  msgstr "المصادقة %s تعذر الأستمرار,لأن شيئا آخر على موقع الويب الخاص بك كسرها. حاول تعطيل الإضافات الأخرى الخاصة بك والتحويل إلى الثيم الأفتراضى. (على وجه التحديد، ابحث عن المكون الذي يرسل الإخراج (على الأرجح فى تحذيرات PHP / أخطاء) قبل بداية الصفحة. ايقاف اى اعدادات تصحيح قد تساعد ايضا)."
4402
 
4403
- #: admin.php:2174
4404
  msgid "Your PHP memory limit (set by your web hosting company) is very low. UpdraftPlus attempted to raise it but was unsuccessful. This plugin may struggle with a memory limit of less than 64 Mb - especially if you have very large files uploaded (though on the other hand, many sites will be successful with a 32Mb limit - your experience may vary)."
4405
  msgstr "حد الذاكرة الخاص بك php (الذى وضعتة شركة الأستضافة الخاصة بك) منخفض جدا. UpdraftPlus حاول زيادتة لكنة لم ينجح. هذا البرنامج المساعد قد يواجه صعوبة مع حد الذاكرة أقل من 64 ميجا بايت - خصوصا اذا كنت تملك ملفات كبيرة مرفوعة (من ناحية اخرى,العديد من المواقع تنجح ب 32 ميجا بايت - لكن تجربتك قد تكون مختلفة)."
4406
 
4407
- #: addons/autobackup.php:1006 admin.php:641
4408
  msgid "Proceed with update"
4409
  msgstr "المضي قدما مع التحديث"
4410
 
@@ -4482,31 +4498,31 @@ msgstr "مزيد من الملحقات"
4482
  msgid "Support"
4483
  msgstr "الدعم"
4484
 
4485
- #: class-updraftplus.php:4178
4486
  msgid "UpdraftPlus was unable to find the table prefix when scanning the database backup."
4487
  msgstr "UpdraftPlus غير قادر على العثور على بادئة الجدول عند فحص النسخة الاحتياطية لقاعدة البيانات."
4488
 
4489
- #: class-updraftplus.php:4170
4490
  msgid "This database backup is missing core WordPress tables: %s"
4491
  msgstr "هذة النسخة الاحتياطية لقاعدة البيانات تفتقد جداول رئيسية: %s"
4492
 
4493
- #: class-updraftplus.php:4058
4494
  msgid "You are importing from a newer version of WordPress (%s) into an older one (%s). There are no guarantees that WordPress can handle this."
4495
  msgstr "انت تقوم بالأستيراد من اصدار احدث من الورد بريس (%s) فى نسخة اقدم (%s). لا يوجد ضمانات ان ورد بريس يمكنة التعامل مع هذا."
4496
 
4497
- #: class-updraftplus.php:3974
4498
  msgid "The database is too small to be a valid WordPress database (size: %s Kb)."
4499
  msgstr "حجم قاعدة البيانات صغير جدا بالنسبة لقاعدة بيانات ورد بريس صالحة (الحجم: %s ك بايت)."
4500
 
4501
- #: addons/autobackup.php:556 admin.php:857
4502
  msgid "Update Theme"
4503
  msgstr "تحديث الثيم"
4504
 
4505
- #: addons/autobackup.php:505 admin.php:853
4506
  msgid "Update Plugin"
4507
  msgstr "تحديث المكون الإضافي"
4508
 
4509
- #: addons/autobackup.php:985 admin.php:726 includes/updraftplus-notices.php:171
4510
  msgid "Be safe with an automatic backup"
4511
  msgstr "كن أمنا مع النسخ الاحتياطي التلقائي"
4512
 
@@ -4514,71 +4530,71 @@ msgstr "كن أمنا مع النسخ الاحتياطي التلقائي"
4514
  msgid "Uploads path (%s) does not exist - resetting (%s)"
4515
  msgstr "مسار الرفع (%s) غير موجود - إعادة ضبط (%s)"
4516
 
4517
- #: admin.php:2126
4518
  msgid "If you can still read these words after the page finishes loading, then there is a JavaScript or jQuery problem in the site."
4519
  msgstr "إذا كنت لا تزال ترى هذه الكلمات بعد انتهاء صفحة التحميل، ف انة يوجد مشكلة فى الجافا سكريب او jQuery فى الموقع."
4520
 
4521
- #: admin.php:635
4522
  msgid "The file was uploaded."
4523
  msgstr "تم رفع الملف."
4524
 
4525
- #: admin.php:634
4526
  msgid "Unknown server response status:"
4527
  msgstr "استجابة الخادم غير معروفة:"
4528
 
4529
- #: admin.php:633
4530
  msgid "Unknown server response:"
4531
  msgstr "استجابة الملقم غير معروف:"
4532
 
4533
- #: admin.php:632
4534
  msgid "This decryption key will be attempted:"
4535
  msgstr "سيتم محاولة فتح مفتاح التشفير:"
4536
 
4537
- #: admin.php:631
4538
  msgid "Follow this link to attempt decryption and download the database file to your computer."
4539
  msgstr "اتبع هذا الرابط لمحاولة فك التشفير وتحميل ملف قاعدة البيانات على جهازك."
4540
 
4541
- #: admin.php:630
4542
  msgid "Upload error"
4543
  msgstr "خطأ فى الرفع"
4544
 
4545
- #: admin.php:629
4546
  msgid "This file does not appear to be an UpdraftPlus encrypted database archive (such files are .gz.crypt files which have a name like: backup_(time)_(site name)_(code)_db.crypt.gz)."
4547
  msgstr "هذا الملف لا يبدو انة ملف UpdraftPlus مضغوط مشفر لقاعدة البيانات (هذة الملفات .gz.crypt التى لديها اسم مثل: backup_(time)_(site name)_(code)_db.crypt.gz)."
4548
 
4549
- #: admin.php:628
4550
  msgid "Upload error:"
4551
  msgstr "خطأ التحميل:"
4552
 
4553
- #: admin.php:627
4554
  msgid "(make sure that you were trying to upload a zip file previously created by UpdraftPlus)"
4555
  msgstr "(تأكد من انك كنت تحاول رفع ملف مضغوط تم إنشاؤه مسبقا من قبل UpdraftPlus)"
4556
 
4557
- #: admin.php:618
4558
  msgid "Download to your computer"
4559
  msgstr "تحميل الى جهاز الكمبيوتر الخاص بك"
4560
 
4561
- #: admin.php:617
4562
  msgid "Delete from your web server"
4563
  msgstr "حذف من خادم الويب الخاص بك"
4564
 
4565
- #: methods/s3.php:776
4566
  msgid "Examples of S3-compatible storage providers:"
4567
  msgstr "امثلة من مقدمى التخزين المتوافق-s3:"
4568
 
4569
- #: admin.php:3693
4570
  msgid "Will not delete any archives after unpacking them, because there was no cloud storage for this backup"
4571
  msgstr "لن يتم حذف اى ارشيف بعد فك الضغط عنة, بسبب عدم وجود سحابة التخزين لهذه النسخة الاحتياطية"
4572
 
4573
- #: admin.php:3310
4574
  msgid "You appear to be missing one or more archives from this multi-archive set."
4575
  msgstr "يبدو انة مفقود واحد او اكثر من هذة الأرشيفات من مجموعة الأرشيف المتعددة."
4576
 
4577
- #: admin.php:3307
4578
  msgid "(%d archive(s) in set)."
4579
  msgstr "(%d الأرشيف(s) in set)."
4580
 
4581
- #: templates/wp-admin/settings/form-contents.php:358
4582
  msgid "Split archives every:"
4583
  msgstr "تقسيم كل ارشيف:"
4584
 
@@ -4586,15 +4602,15 @@ msgstr "تقسيم كل ارشيف:"
4586
  msgid "Error: the server sent us a response (JSON) which we did not understand."
4587
  msgstr "الخطأ: الخادم ارسل لنا استجابة (JSON) اللتى لم نتمكن من فهمها."
4588
 
4589
- #: admin.php:608
4590
  msgid "Warnings:"
4591
  msgstr "تحذيرات:"
4592
 
4593
- #: admin.php:607
4594
  msgid "Error: the server sent an empty response."
4595
  msgstr "خطأ: ارسل خادم السيرفر استجابة فارغة."
4596
 
4597
- #: admin.php:1887
4598
  msgid "This looks like a file created by UpdraftPlus, but this install does not know about this type of object: %s. Perhaps you need to install an add-on?"
4599
  msgstr "هذا يبدو كأنة ملف تم انشائة بواسطة UpdraftPlus, ولكن هذا التثبيت لا يعرف هذا النوع من المواضيع: %s. ربما تحتاج الى تثبيت اضافة ما؟"
4600
 
@@ -4630,7 +4646,7 @@ msgstr "الملف غير موجود (تحتاج الى رفعة): %s"
4630
  msgid "No such backup set exists"
4631
  msgstr "هذا الدليل لا يوجد بة اى مجموعات نسخ احتياطى"
4632
 
4633
- #: admin.php:1164
4634
  msgid "The backup archive for this file could not be found. The remote storage method in use (%s) does not allow us to retrieve files. To perform any restoration using UpdraftPlus, you will need to obtain a copy of this file and place it inside UpdraftPlus's working folder"
4635
  msgstr "لم يتم العثور على ارشيف النسخ الأحتياطى لهذا الملف. استخدام طريقة التخزين البعيد (%s) لا يسمح لنا بأسترداد الملفات. لأجراء اى اعادة استخدم UpdraftPlus, سوف تحتاج الى الحصول على نسخة من هذا الملف ووضعها داخل مجلد العمل ل UpdraftPlus"
4636
 
@@ -4654,43 +4670,43 @@ msgstr "فشل فى فتح ملف مضغوط (%s) - %s"
4654
  msgid "WordPress root directory server path: %s"
4655
  msgstr "مسار جذر الوردبريس فى الخادم: %s"
4656
 
4657
- #: methods/s3.php:821
4658
  msgid "%s end-point"
4659
  msgstr "نقطة النهاية %s "
4660
 
4661
- #: methods/s3.php:783
4662
  msgid "... and many more!"
4663
  msgstr "... وغيرها الكثير!"
4664
 
4665
- #: methods/s3generic.php:41 methods/s3generic.php:49
4666
  msgid "S3 (Compatible)"
4667
  msgstr "S3 (متوافق)"
4668
 
4669
- #: admin.php:3614
4670
  msgid "File is not locally present - needs retrieving from remote storage"
4671
  msgstr "الملف غير موجود - يحتاج الى استراجعة من التخزين البعيد"
4672
 
4673
- #: admin.php:3601
4674
  msgid "Looking for %s archive: file name: %s"
4675
  msgstr "ابحث عن الأرشيف %s : اسم الملف: %s"
4676
 
4677
- #: admin.php:3562
4678
  msgid "Final checks"
4679
  msgstr "الفحوصات النهائية"
4680
 
4681
- #: templates/wp-admin/settings/form-contents.php:364
4682
  msgid "Check this to delete any superfluous backup files from your server after the backup run finishes (i.e. if you uncheck, then any files despatched remotely will also remain locally, and any files being kept locally will not be subject to the retention limits)."
4683
  msgstr "حدد هذا المربع لحذف اى ملفات النسخ الأحتياطى الزائدة من السيرفر الخاص بك بعد انتهاء عملية النسخ الأحتياطى (أي بمعنى. اذا لم تقم بالتحديد, فأنة سوف تظل ايضا الملفات اللتى ارسللت عن بعد على السيرفر محلياً, وان الملفات اللتى يتم الأحتفاظ بها محليا لن تكون خاضعة لحدود الأبقاء)."
4684
 
4685
- #: templates/wp-admin/settings/form-contents.php:248
4686
  msgid "Drop encrypted database files (db.gz.crypt files) here to upload them for decryption"
4687
  msgstr "اسقاط ملف قاعدة البيانات المشفرة (ملفات db.gz.crypt) هنا لتحميلها لفك التشفير"
4688
 
4689
- #: admin.php:2979
4690
  msgid "Your wp-content directory server path: %s"
4691
  msgstr "المسار الخاص بمحتوى wp-content على السيرفر هو: %s"
4692
 
4693
- #: admin.php:624
4694
  msgid "Raw backup history"
4695
  msgstr "تاريخ النسخ الاحتياطي الخام"
4696
 
@@ -4698,11 +4714,11 @@ msgstr "تاريخ النسخ الاحتياطي الخام"
4698
  msgid "Show raw backup and file list"
4699
  msgstr "مشاهدة النسخ الاحتياطي الخام وقائمة الملفات"
4700
 
4701
- #: admin.php:606
4702
  msgid "Processing files - please wait..."
4703
  msgstr "تجهيز الملفات - يرجى الأنتظار..."
4704
 
4705
- #: admin.php:3745 templates/wp-admin/settings/downloading-and-restoring.php:29
4706
  msgid "Please consult this FAQ for help on what to do about it."
4707
  msgstr "يرجى الرجوع الى الأسئلة الشائعة للحصول على المساعدة بشأن ما ينبغى القيام بة حيال ذلك."
4708
 
@@ -4710,11 +4726,11 @@ msgstr "يرجى الرجوع الى الأسئلة الشائعة للحصول
4710
  msgid "Your WordPress installation has a problem with outputting extra whitespace. This can corrupt backups that you download from here."
4711
  msgstr "تركيب وردبريس الخاص بك بة مشكلة اخراج مسافة بيضاء اضافية. قد يفسد هذا النسخ الأحتياطية التى قمت بتحميلها من هنا."
4712
 
4713
- #: class-updraftplus.php:3982
4714
  msgid "Failed to open database file."
4715
  msgstr "فشل فى فتح ملف قاعدة البيانات."
4716
 
4717
- #: admin.php:4124
4718
  msgid "Known backups (raw)"
4719
  msgstr "النسخ الأحتياطى المعروفة (الخام)"
4720
 
@@ -4738,21 +4754,21 @@ msgstr "محرك الجدول المطلوب (%s) غير موجود - تغيي
4738
  msgid "This looks like a migration (the backup is from a site with a different address/URL), but you did not check the option to search-and-replace the database. That is usually a mistake."
4739
  msgstr "هذة تبدو كأنها ترحيل (النسخة الأحتياطة من موقع عنوان الرابط الخاص بة مختلف), لكنك لم تقم بالأشارة على خيار البحث واستبدال قاعدة البيانات. عادة ما يكون خطأ."
4740
 
4741
- #: admin.php:3634
4742
  msgid "file is size:"
4743
  msgstr "حجم الملف:"
4744
 
4745
- #: addons/googlecloud.php:855 addons/migrator.php:363 addons/migrator.php:366
4746
- #: addons/migrator.php:369 admin.php:893 admin.php:2131 backup.php:3019
4747
  #: updraftplus.php:147
4748
  msgid "Go here for more information."
4749
  msgstr "اذهب هنا لمزيد من المعلومات."
4750
 
4751
- #: admin.php:605
4752
  msgid "Some files are still downloading or being processed - please wait."
4753
  msgstr "بعض الملفات لاتزال يتم تحميلها او اعدادها - من فضلك انتظر."
4754
 
4755
- #: class-updraftplus.php:4030 class-updraftplus.php:4048
4756
  msgid "This backup set is from a different site - this is not a restoration, but a migration. You need the Migrator add-on in order to make this work."
4757
  msgstr "هذة النسخة الأحتياطية من موقع مختلف - هذة ليست استعادة, لكن ترحيل. انت تحتاج الى البرنامج المساعد Migrator لتسطيع اتمام هذا العمل."
4758
 
@@ -4772,49 +4788,49 @@ msgstr "فشل ارسال الملف %s"
4772
  msgid "%s login failure"
4773
  msgstr "فشل تسجيل الدخول %s"
4774
 
4775
- #: methods/dropbox.php:410
4776
  msgid "You do not appear to be authenticated with %s"
4777
  msgstr "لا يبدو انة تمت المصادقة مع: %s"
4778
 
4779
- #: methods/dropbox.php:377
4780
  msgid "Failed to access %s when deleting (see log file for more)"
4781
  msgstr "فشل الوصول الى %s عند الحذف (تحقق من ملف السجل لمزيد من المعلومات)"
4782
 
4783
- #: methods/dropbox.php:369
4784
  msgid "You do not appear to be authenticated with %s (whilst deleting)"
4785
  msgstr "لا يبدو انة لديك التصريح ل %s (لحين الحذف)"
4786
 
4787
- #: methods/dropbox.php:104
4788
  msgid "Dropbox error: %s (see log file for more)"
4789
  msgstr "خطأ فى الأسقاط: %s (تحقق من السجل لمزيد من المعلومات)"
4790
 
4791
- #: methods/cloudfiles.php:409
4792
  msgid "Error - failed to download the file from %s"
4793
  msgstr "خطأ - فشل فى تحميل الملف من %s"
4794
 
4795
- #: methods/cloudfiles.php:405
4796
  msgid "Error - no such file exists at %s"
4797
  msgstr "خطأ - لا يوجد مثل هذا الملف فى %s"
4798
 
4799
- #: addons/azure.php:216 methods/addon-base-v2.php:218
4800
- #: methods/cloudfiles.php:379 methods/cloudfiles.php:396
4801
  #: methods/googledrive.php:823 methods/openstack-base.php:407
4802
- #: methods/stream-base.php:262 methods/stream-base.php:269
4803
- #: methods/stream-base.php:282
4804
  msgid "%s Error"
4805
  msgstr "خطأ %s"
4806
 
4807
- #: methods/cloudfiles.php:206 methods/openstack-base.php:82
4808
  msgid "%s error - failed to upload file"
4809
  msgstr "خطأ %s - فشل فى ارسال الملف"
4810
 
4811
- #: class-updraftplus.php:1004 methods/cloudfiles.php:198
4812
  msgid "%s error - failed to re-assemble chunks"
4813
  msgstr "خطأ %s - فشل فى اعادة تجميع الأجزاء"
4814
 
4815
- #: methods/cloudfiles.php:82 methods/cloudfiles.php:86
4816
- #: methods/cloudfiles.php:227 methods/cloudfiles.php:272
4817
- #: methods/cloudfiles.php:323 methods/cloudfiles.php:327
4818
  #: methods/openstack-base.php:40 methods/openstack-base.php:304
4819
  #: methods/openstack-base.php:369 methods/openstack-base.php:441
4820
  #: methods/openstack-base.php:444 methods/openstack-base.php:461
@@ -4822,24 +4838,25 @@ msgstr "خطأ %s - فشل فى اعادة تجميع الأجزاء"
4822
  msgid "%s authentication failed"
4823
  msgstr "المصادقة فشلت %s"
4824
 
4825
- #: addons/googlecloud.php:384 addons/migrator.php:462 admin.php:1832
4826
- #: admin.php:1879 admin.php:1887 class-updraftplus.php:789
4827
- #: class-updraftplus.php:795 class-updraftplus.php:3953
4828
- #: class-updraftplus.php:3955 class-updraftplus.php:4088
4829
- #: class-updraftplus.php:4123 methods/googledrive.php:289 restorer.php:944
 
4830
  msgid "Error: %s"
4831
  msgstr "خطأ: %s"
4832
 
4833
- #: admin.php:2916
4834
  msgid "Backup directory specified exists, but is <b>not</b> writable."
4835
  msgstr "دليل النسخ الأحتياطى المحدد موجود, لكنة <b>غير</b> قابل للكتابة."
4836
 
4837
- #: admin.php:2914
4838
  msgid "Backup directory specified does <b>not</b> exist."
4839
  msgstr "دليل النسخ الأحتياطى المحدد <b>غير</b> موجود."
4840
 
4841
- #: admin.php:2648 admin.php:2870 class-updraftplus.php:4030
4842
- #: class-updraftplus.php:4048
4843
  msgid "Warning: %s"
4844
  msgstr "تحذير: %s"
4845
 
@@ -4867,11 +4884,11 @@ msgstr "حدث خطأ اثناء اغلاق ملف قاعدة البيانات
4867
  msgid "Warnings encountered:"
4868
  msgstr "مصادفة تحذيرات:"
4869
 
4870
- #: class-updraftplus.php:2825
4871
  msgid "The backup apparently succeeded (with warnings) and is now complete"
4872
  msgstr "على ما يبدو ان النسخ الأحتياطى تم بنجاح (مع تحذيرات) وانة انتهى الأن"
4873
 
4874
- #: class-updraftplus.php:687
4875
  msgid "Your free disk space is very low - only %s Mb remain"
4876
  msgstr "المساحة الحرة على القرص الخاص بك منخفضة جدا - فقط متبقى %s ميجابايت"
4877
 
@@ -4911,15 +4928,15 @@ msgstr "تحقق من اذونات الملفات الخاصة بك: تعذر ا
4911
  msgid "Some servers advertise encrypted FTP as available, but then time-out (after a long time) when you attempt to use it. If you find this happenning, then go into the \"Expert Options\" (below) and turn off SSL there."
4912
  msgstr "بعض خوادم FTP المشفرة اعلن انها متوفرة, ولكن بعدذلك انتهى الوقت (بعد وقت طويل) عند محاولتك استخدامة. اذا وجدت هذا يحدث, قم بالذهاب الى \" الخيارات المتقدمة\" (أدناة) وايقاف SSL هناك."
4913
 
4914
- #: methods/s3.php:797
4915
  msgid "Your web server's PHP installation does not included a required module (%s). Please contact your web hosting provider's support and ask for them to enable it."
4916
  msgstr "خادم الويب الخاص بك لا يشمل تركيب وحدة نمطية مطلوبة من PHP (%s). يرجى الأتصال بمزود خدمة الأستضافة الخاصة بك وطلب منهم تفعيلها."
4917
 
4918
- #: methods/s3.php:1035
4919
  msgid "Please check your access credentials."
4920
  msgstr "يرجى التحقق من وصول بيانات الأعتماد."
4921
 
4922
- #: addons/s3-enhanced.php:172 methods/s3.php:1013
4923
  msgid "The error reported by %s was:"
4924
  msgstr "الخطأ الذى تم التبليغ عنة من %s هو:"
4925
 
@@ -4935,7 +4952,7 @@ msgstr "لا يمكن اسقاط الجدوال, بدلا من ذلك احذفه
4935
  msgid "Cannot create new tables, so skipping this command (%s)"
4936
  msgstr "لا يمكن إنشاء جداول جديدة، حتى تخطى هذا الأمر (%s)"
4937
 
4938
- #: class-updraftplus.php:4099 restorer.php:1648
4939
  msgid "Site information:"
4940
  msgstr "معلومات عن الموقع:"
4941
 
@@ -4943,38 +4960,38 @@ msgstr "معلومات عن الموقع:"
4943
  msgid "Your database user does not have permission to create tables. We will attempt to restore by simply emptying the tables; this should work as long as a) you are restoring from a WordPress version with the same database structure, and b) Your imported database does not contain any tables which are not already present on the importing site."
4944
  msgstr "مستخدم قاعدة البيانات الخاصة بك ليس لدية تصاريح لأنشاء الجدوال. نحن سوف نقوم بمحاولة الأستعادة عن طريق افراغ الجداول; هذا يجب ان يعمل طالما تستعيدها من اصدار وردبريس بة نفس بنية قاعدة البيانات, وقاعدة البيانات المستوردة لا تحتوى على اى جداول التى ليست موجودة على موقع المستورد."
4945
 
4946
- #: addons/migrator.php:325 admin.php:2126 class-updraftplus.php:4092
4947
  #: restorer.php:1970
4948
  msgid "Warning:"
4949
  msgstr "تحذير:"
4950
 
4951
- #: class-updraftplus.php:4084 restorer.php:162
4952
  msgid "You are running on WordPress multisite - but your backup is not of a multisite site."
4953
  msgstr "انت تعمل على وردبريس متعدد المواقع - لكن النسخة الأحتياطية الخاص بك ليست لموقع متعدد المواقع."
4954
 
4955
- #: admin.php:3589
4956
  msgid "Skipping restoration of WordPress core when importing a single site into a multisite installation. If you had anything necessary in your WordPress directory then you will need to re-add it manually from the zip file."
4957
  msgstr "تخطى استعادة وردبريس الأساسية عند استيراد موقع واحد فى الثبيت متعدد المواقع. اذا كان لديك اى شئ ضرورى فى دليل وردبريس الخاص بك فأنك سوف تحتاج الى اعادة اضافتة يدوياً من ملف مضغوط."
4958
 
4959
- #: admin.php:3035 methods/updraftvault.php:258
4960
  msgid "Your web server's PHP installation does not included a <strong>required</strong> (for %s) module (%s). Please contact your web hosting provider's support and ask for them to enable it."
4961
  msgstr "لا تشمل php خادم السيرفر الخاص بك <strong>المطلوبة</strong> (الى %s) الوحدة (%s). يرجى الأتصال بخدمة دعم استضافة الويب واطلب منهم تفعيل الوحدة."
4962
 
4963
- #: admin.php:642
4964
  msgid "Close"
4965
  msgstr "اغلق"
4966
 
4967
- #: addons/autobackup.php:298 addons/autobackup.php:386 admin.php:598
4968
  #: methods/remotesend.php:64 methods/remotesend.php:72
4969
  #: methods/remotesend.php:213 methods/remotesend.php:230
4970
  msgid "Unexpected response:"
4971
  msgstr "استجابة غير متوقعة:"
4972
 
4973
- #: addons/reporting.php:434 admin.php:593
4974
  msgid "To send to more than one address, separate each address with a comma."
4975
  msgstr "لأرسال الى اكثر من عنوان واحد, قم بوضع فاصلة بين كل عنوان."
4976
 
4977
- #: admin.php:622
4978
  msgid "PHP information"
4979
  msgstr "معلومات PHP"
4980
 
@@ -5010,7 +5027,7 @@ msgstr "جارى الحذف...يرجى اتاحة الوقت لأكمال الأ
5010
  msgid "Also delete from remote storage"
5011
  msgstr "حذف ايضاً من التخزين البعيد"
5012
 
5013
- #: admin.php:2378
5014
  msgid "Latest UpdraftPlus.com news:"
5015
  msgstr "اخر اخبار UpdraftPlus.com:"
5016
 
@@ -5027,7 +5044,7 @@ msgstr "مميز"
5027
  msgid "News"
5028
  msgstr "اخبار"
5029
 
5030
- #: admin.php:1318 includes/class-wpadmin-commands.php:444
5031
  msgid "Backup set not found"
5032
  msgstr "لم يتم العثور على مجموعة النسخ الأحتياطى"
5033
 
@@ -5045,7 +5062,7 @@ msgstr "رابط RSS"
5045
  msgid "Blog link"
5046
  msgstr "رابط المدونة"
5047
 
5048
- #: admin.php:686
5049
  msgid "Testing %s Settings..."
5050
  msgstr "اختبار اعدادات %s ..."
5051
 
@@ -5053,11 +5070,11 @@ msgstr "اختبار اعدادات %s ..."
5053
  msgid "Or, you can place them manually into your UpdraftPlus directory (usually wp-content/updraft), e.g. via FTP, and then use the \"rescan\" link above."
5054
  msgstr "او, يمكنك وضعها يدويا فى مسار UpdraftPlus الخاص بك (عادة wp-content/updraft)، على سبيل المثال عبر FTP، ومن ثم استخدام الرابط \"إعادة الفحص\" أعلاه."
5055
 
5056
- #: admin.php:909
5057
  msgid "UpdraftPlus's debug mode is on. You may see debugging notices on this page not just from UpdraftPlus, but from any other plugin installed. Please try to make sure that the notice you are seeing is from UpdraftPlus before you raise a support request."
5058
  msgstr "UpdraftPlus على وضع تصحيح الأخطاء. قد تشاهد ملاحظات التصحيح على هذة الصفحة وليس فقط على UpdraftPlus، ولكن من اى برنامج اضافى اخر مثبت. يرجى محاولة التأكد من ان الملاحظات التى تراها هى من UpdraftPlus قبل طلب الدعم."
5059
 
5060
- #: admin.php:909
5061
  msgid "Notice"
5062
  msgstr "لاحظ"
5063
 
@@ -5065,11 +5082,11 @@ msgstr "لاحظ"
5065
  msgid "Errors encountered:"
5066
  msgstr "مصادفة اخطاء:"
5067
 
5068
- #: admin.php:591
5069
  msgid "Rescanning (looking for backups that you have uploaded manually into the internal backup store)..."
5070
  msgstr "اعادة الفحص (يبحث عن النسخ الاحتياطية التي قمت برفعها يدويا في مسار النسخ الاحتياطي الداخلي)..."
5071
 
5072
- #: admin.php:604
5073
  msgid "Begun looking for this entity"
5074
  msgstr "بدأ البحث عن هذا الكيان"
5075
 
@@ -5089,7 +5106,7 @@ msgstr "الصفوف: %d"
5089
  msgid "Time taken (seconds):"
5090
  msgstr "الوقت المستغرق (ثانية):"
5091
 
5092
- #: addons/migrator.php:1113 admin.php:609
5093
  msgid "Errors:"
5094
  msgstr "الأخطاء:"
5095
 
@@ -5182,41 +5199,41 @@ msgstr "تثبيت الموقع المتعدد"
5182
  msgid "starting from next time it is"
5183
  msgstr "ابتداء من المرة القادمة انها"
5184
 
5185
- #: addons/sftp.php:431
5186
  msgid "Failure: Port must be an integer."
5187
  msgstr "فشل: المنفذ يجب ان يكون عدد صحيح."
5188
 
5189
- #: methods/ftp.php:366 methods/openstack2.php:151
5190
  msgid "password"
5191
  msgstr "كلمة السر"
5192
 
5193
- #: addons/sftp.php:422 methods/openstack2.php:146
5194
  msgid "username"
5195
  msgstr "اسم المستخدم"
5196
 
5197
- #: addons/sftp.php:418
5198
  msgid "host name"
5199
  msgstr "اسم المضيف"
5200
 
5201
- #: addons/sftp.php:396
5202
  msgid "Where to change directory to after logging in - often this is relative to your home directory."
5203
  msgstr "حيث لتغير الدليل الى بعد تسجيل الدخول - غالبا ما يكون هذا هو نسبة الى الدليل الرئيسى الخاص بك."
5204
 
5205
- #: addons/sftp.php:394
5206
  msgid "Directory path"
5207
  msgstr "مسار الدليل"
5208
 
5209
- #: addons/lockadmin.php:153 addons/moredatabase.php:239 addons/sftp.php:369
5210
- #: addons/webdav.php:69 methods/openstack2.php:131 methods/updraftvault.php:318
5211
  #: udaddons/options.php:152
5212
  msgid "Password"
5213
  msgstr "كلمة السر"
5214
 
5215
- #: addons/sftp.php:355 addons/webdav.php:83
5216
  msgid "Port"
5217
  msgstr "المنفذ"
5218
 
5219
- #: addons/moredatabase.php:237 addons/sftp.php:348 addons/webdav.php:75
5220
  msgid "Host"
5221
  msgstr "الاستضافة"
5222
 
@@ -5224,7 +5241,7 @@ msgstr "الاستضافة"
5224
  msgid "%s Error: Failed to download"
5225
  msgstr "خطأ %s: فشل التحميل"
5226
 
5227
- #: addons/sftp.php:461
5228
  msgid "Check your file permissions: Could not successfully create and enter:"
5229
  msgstr "تحقق من أذونات الملف الخاص بك: تعذر الإنشاء والدخول بنجاح :"
5230
 
@@ -5273,25 +5290,25 @@ msgstr "إعادة كتابة wp-config.php"
5273
  msgid "WordPress Core"
5274
  msgstr "لب الووردبريس"
5275
 
5276
- #: methods/addon-base-v2.php:303 methods/stream-base.php:312
5277
  msgid "Failed: We were not able to place a file in that directory - please check your credentials."
5278
  msgstr "فشل: لم نكن قادرين على وضع ملف في هذا الدليل - يرجى مراجعة بيانات الاعتماد الخاصة بك."
5279
 
5280
- #: addons/googlecloud.php:626 addons/googlecloud.php:660
5281
- #: addons/googlecloud.php:666 addons/sftp.php:448 admin.php:2702 admin.php:2737
5282
- #: admin.php:2746 methods/addon-base-v2.php:293 methods/stream-base.php:298
5283
  msgid "Failed"
5284
  msgstr "فشل"
5285
 
5286
- #: addons/webdav.php:45
5287
  msgid "WebDAV URL"
5288
  msgstr "رابط WEBDAV"
5289
 
5290
- #: methods/stream-base.php:282
5291
  msgid "Local write failed: Failed to download"
5292
  msgstr "فشلت الكتابة المحلية: فشل تحميل"
5293
 
5294
- #: methods/stream-base.php:269
5295
  msgid "Error opening remote file: Failed to download"
5296
  msgstr "خطأ في فتح الملف : فشل في التحميل"
5297
 
@@ -5299,12 +5316,12 @@ msgstr "خطأ في فتح الملف : فشل في التحميل"
5299
  msgid "Chunk %s: A %s error occurred"
5300
  msgstr "قطعة %s: حدث خطأ %s"
5301
 
5302
- #: addons/googlecloud.php:278 addons/sftp.php:44 methods/addon-base-v2.php:65
5303
  #: methods/addon-base-v2.php:106 methods/addon-base-v2.php:138
5304
- #: methods/addon-base-v2.php:194 methods/addon-base-v2.php:273
5305
  #: methods/ftp.php:31 methods/googledrive.php:130 methods/stream-base.php:27
5306
  #: methods/stream-base.php:141 methods/stream-base.php:147
5307
- #: methods/stream-base.php:181 methods/stream-base.php:246
5308
  msgid "No %s settings were found"
5309
  msgstr "تم العثور على أية إعدادات %s"
5310
 
@@ -5336,129 +5353,129 @@ msgstr "إذا كنت تريد تشفير (على سبيل المثال كنت
5336
  msgid "Only non-encrypted FTP is supported by regular UpdraftPlus."
5337
  msgstr "UpdraftPlus تدعم فقط حسابات FTP الغير مشفرة"
5338
 
5339
- #: addons/onedrive.php:755 methods/dropbox.php:614
5340
  msgid "Your %s account name: %s"
5341
  msgstr "اسم الحساب %s الخاص بك: %s"
5342
 
5343
- #: methods/dropbox.php:604 methods/dropbox.php:631
5344
  msgid "though part of the returned information was not as expected - your mileage may vary"
5345
  msgstr "على الرغم من أن جزء من المعلومات الذي عاد لم يكن كما هو متوقع - الأميال الخاص بك قد تختلف"
5346
 
5347
- #: methods/dropbox.php:599 methods/dropbox.php:601
5348
  msgid "you have authenticated your %s account"
5349
  msgstr "تم المصادقة على %s حسابك"
5350
 
5351
- #: methods/dropbox.php:486 methods/dropbox.php:488
5352
  msgid "there's an add-on for that."
5353
  msgstr "هناك اضافة لذلك."
5354
 
5355
- #: methods/dropbox.php:486 methods/dropbox.php:488
5356
  msgid "If you back up several sites into the same Dropbox and want to organise with sub-folders, then "
5357
  msgstr "اذا كنت تستخدم النسخ الأحتياطى لعدة مواقع فى نفس الدروب بوكس وتريد ان تقوم بتنظيمها مع المجلدات الفرعية, اذا"
5358
 
5359
- #: methods/dropbox.php:486 methods/dropbox.php:488
5360
  msgid "Backups are saved in"
5361
  msgstr "يتم حفظ النسخ الأحتياطية فى"
5362
 
5363
- #: methods/dropbox.php:486 methods/dropbox.php:488
5364
  msgid "Need to use sub-folders?"
5365
  msgstr "هل تحتاج الى استخدام المجلدات الفرعية؟"
5366
 
5367
- #: methods/dropbox.php:197 methods/dropbox.php:218 methods/dropbox.php:234
5368
  msgid "error: failed to upload file to %s (see log file for more)"
5369
  msgstr "خطأ: فشل فى رفع الملف الى %s (انظر السجل لمزيد من التفاصيل)"
5370
 
5371
- #: methods/dropbox.php:82 methods/dropbox.php:99
5372
  msgid "You do not appear to be authenticated with Dropbox"
5373
  msgstr "لا يبدو ان المصادقة مع Dropbox"
5374
 
5375
- #: methods/s3.php:1030
5376
  msgid "The communication with %s was not encrypted."
5377
  msgstr "التواصل مع %s كان غير مشفر."
5378
 
5379
- #: methods/s3.php:1028
5380
  msgid "The communication with %s was encrypted."
5381
  msgstr "التواصل مع %s كان مشفر."
5382
 
5383
- #: addons/googlecloud.php:689 methods/s3.php:1025
5384
  msgid "We accessed the bucket, and were able to create files within it."
5385
  msgstr "نحن وصلنا الى الباكت, وتمكنا من انشاء الملفات داخلها."
5386
 
5387
- #: addons/googlecloud.php:683 addons/googlecloud.php:697 methods/s3.php:1023
5388
- #: methods/s3.php:1035
5389
  msgid "We successfully accessed the bucket, but the attempt to create a file in it failed."
5390
  msgstr "تم الوصول بنجاح الى الباكت. ولكن محاولة انشاء الملف فشلت."
5391
 
5392
- #: addons/googlecloud.php:683 addons/googlecloud.php:697 methods/s3.php:1023
5393
- #: methods/s3.php:1035
5394
  msgid "Failure"
5395
  msgstr "فشل"
5396
 
5397
- #: methods/s3.php:1011
5398
  msgid "Failure: We could not successfully access or create such a bucket. Please check your access credentials, and if those are correct then try another bucket name (as another %s user may already have taken your name)."
5399
  msgstr "فشل: لم نستطع بنجاح الدخول او انشاء باكت. من فضلك تحقق من اذون الصلاحية, واذا كانت صحيحة اذا حاول اسم باكت اخر (كمستخدم اخر %s استخدم الأسم بالفعل)."
5400
 
5401
- #: addons/s3-enhanced.php:145 methods/openstack2.php:117 methods/s3.php:1005
5402
  msgid "Region"
5403
  msgstr "المنطقة"
5404
 
5405
- #: addons/googlecloud.php:78 addons/googlecloud.php:643 methods/s3.php:987
5406
  msgid "Failure: No bucket details were given."
5407
  msgstr "فشل: لم ترد تفاصيل الباكت."
5408
 
5409
- #: methods/s3.php:965
5410
  msgid "API secret"
5411
  msgstr "API السرية"
5412
 
5413
- #: methods/s3.php:858
5414
  msgid "Enter only a bucket name or a bucket and path. Examples: mybucket, mybucket/mypath"
5415
  msgstr "ادخال فقط اى اسم الدلو او مسار الدلو. امثلة: mybucket, mybucket/mypath"
5416
 
5417
- #: methods/s3.php:857
5418
  msgid "%s location"
5419
  msgstr "المكان %s"
5420
 
5421
- #: methods/s3.php:853
5422
  msgid "%s secret key"
5423
  msgstr "المفتاح السرى %s"
5424
 
5425
- #: methods/s3.php:849
5426
  msgid "%s access key"
5427
  msgstr "مفتاح الوصول %s"
5428
 
5429
- #: methods/s3.php:814
5430
  msgid "If you see errors about SSL certificates, then please go here for help."
5431
  msgstr "إذا كنت ترى أخطاء حول شهادات SSL، يرجى الدخول هنا للمساعدة."
5432
 
5433
- #: methods/s3.php:812
5434
  msgid "Get your access key and secret key <a href=\"%s\">from your %s console</a>, then pick a (globally unique - all %s users) bucket name (letters and numbers) (and optionally a path) to use for storage. This bucket will be created for you if it does not already exist."
5435
  msgstr "احصل على مفتاح وصولك و كلمتك السرية <a href=\"%s\">من %s آلتك</a>، ثم اختر اسم مستخدم (أحرف وأرقام) (فريد - كل %s المستخدمين) (ومسار اختياريا) لإستخدامه للتخزين. هذا الدلو سيتم خلقه لك ان لم يكن موجود أصلا."
5436
 
5437
- #: methods/s3.php:446 methods/s3.php:620 methods/s3.php:722
5438
  msgid "%s Error: Failed to access bucket %s. Check your permissions and credentials."
5439
  msgstr "خطأ %s : فشل في الوصول إلى الدلو %s. تحقق من الأذونات واعتماداتك. "
5440
 
5441
- #: methods/s3.php:705 methods/s3.php:751
5442
  msgid "%s Error: Failed to download %s. Check your permissions and credentials."
5443
  msgstr "%s خطأ: فشل في تحميل %s. تحقق من الأذونات واعتماداتك."
5444
 
5445
- #: methods/s3.php:424
5446
  msgid "%s re-assembly error (%s): (see log file for more)"
5447
  msgstr "%s خطأ في إعادة التجميع (%s): (انظر السجل لمزيد من التفاصيل) "
5448
 
5449
- #: methods/s3.php:420
5450
  msgid "%s upload (%s): re-assembly failed (see log for more details)"
5451
  msgstr "%s الرفع (%s): إعادة تجميع الملفات التي فشل رفعها (انظر السجل لمزيد من التفاصيل)"
5452
 
5453
- #: methods/s3.php:404
5454
  msgid "%s chunk %s: upload failed"
5455
  msgstr "%s قطعة %s : فشل الرفع"
5456
 
5457
- #: methods/s3.php:394
5458
  msgid "%s error: file %s was shortened unexpectedly"
5459
  msgstr "%s خطأ: تم اختصار الملف %s بشكل غير متوقع"
5460
 
5461
- #: methods/s3.php:371
5462
  msgid "%s upload: getting uploadID for multipart upload failed - see log file for more details"
5463
  msgstr "%s الرفع: فشل الحصول على uploadID للتحميل المتعدد- راجع ملف السجل لمزيد من التفاصيل"
5464
 
@@ -5470,84 +5487,81 @@ msgstr "ملاحظة:"
5470
  msgid "WordPress Backup"
5471
  msgstr "نسخ ووردريس احتياطيا"
5472
 
5473
- #: methods/cloudfiles.php:547 methods/openstack-base.php:480
5474
  msgid "We accessed the container, and were able to create files within it."
5475
  msgstr "تم الوصول إلى الحاوية، ويمكننا إنشاء ملف داخلها "
5476
 
5477
- #: methods/cloudfiles.php:543
5478
  msgid "Cloud Files error - we accessed the container, but failed to create a file within it"
5479
  msgstr "خطأ بملفات السحابة - تم الوصول إلى الحاوية، لكننا فشلنا في إنشاء ملف داخلها"
5480
 
5481
- #: methods/cloudfiles.php:516 methods/openstack-base.php:424
5482
  msgid "Failure: No container details were given."
5483
  msgstr "خطأ: ولم تعط أية تفاصيل عن الحاوية."
5484
 
5485
- #: addons/moredatabase.php:238 addons/sftp.php:362 addons/webdav.php:63
5486
- #: methods/cloudfiles-new.php:158 methods/cloudfiles.php:496
5487
- #: methods/openstack2.php:125
5488
  msgid "Username"
5489
  msgstr "اسم المستخدم"
5490
 
5491
- #: methods/cloudfiles-new.php:153 methods/cloudfiles.php:491 methods/s3.php:961
5492
  msgid "API key"
5493
  msgstr "مفتاح API"
5494
 
5495
  #: addons/migrator.php:278 addons/migrator.php:1871 addons/moredatabase.php:75
5496
- #: addons/moredatabase.php:77 addons/moredatabase.php:79 addons/sftp.php:418
5497
- #: addons/sftp.php:422 addons/sftp.php:426 addons/webdav.php:103 admin.php:662
5498
- #: methods/addon-base-v2.php:286 methods/cloudfiles-new.php:153
5499
- #: methods/cloudfiles-new.php:158 methods/cloudfiles.php:491
5500
- #: methods/cloudfiles.php:496 methods/ftp.php:362 methods/ftp.php:366
5501
- #: methods/openstack2.php:146 methods/openstack2.php:151
5502
- #: methods/openstack2.php:156 methods/openstack2.php:161 methods/s3.php:961
5503
- #: methods/s3.php:965
5504
  msgid "Failure: No %s was given."
5505
  msgstr "فضل: لم تعطى أية %s."
5506
 
5507
- #: methods/cloudfiles-new.php:87 methods/cloudfiles.php:435
5508
- #: methods/openstack-base.php:517 methods/s3.php:801
5509
  msgid "UpdraftPlus's %s module <strong>requires</strong> %s. Please do not file any support requests; there is no alternative."
5510
  msgstr "وحدة UpdraftPlus %s <strong> تتطلب </strong> %s من فضلك لا تقم بتقديم أي طلبات دعم، فليس هناك أي بديل."
5511
 
5512
- #: methods/cloudfiles.php:477
5513
  msgid "Cloud Files container"
5514
  msgstr "سحابة الملفات الحاوية"
5515
 
5516
- #: methods/cloudfiles.php:473
5517
  msgid "Cloud Files API key"
5518
  msgstr "سحابة ملفات مفاتيح API "
5519
 
5520
- #: methods/cloudfiles.php:469
5521
  msgid "Cloud Files username"
5522
  msgstr "سحابة ملفات المستخدم"
5523
 
5524
- #: addons/cloudfiles-enhanced.php:36 methods/cloudfiles-new.php:100
5525
- #: methods/cloudfiles.php:453
5526
  msgid "UK"
5527
  msgstr "المملكة المتحدة"
5528
 
5529
- #: addons/cloudfiles-enhanced.php:35 methods/cloudfiles-new.php:99
5530
- #: methods/cloudfiles.php:452
5531
  msgid "US (default)"
5532
  msgstr "الولايات المتحدة (افتراضى)"
5533
 
5534
- #: methods/cloudfiles.php:449
5535
  msgid "US or UK Cloud"
5536
  msgstr "سحابة الولايات المتحدة او المملكة المتحدة"
5537
 
5538
- #: methods/cloudfiles-new.php:92 methods/cloudfiles.php:445
5539
- #: methods/openstack2.php:98
5540
  msgid "Also, you should read this important FAQ."
5541
  msgstr "أيضا، يجب عليك قراءة هذا التعليمات الهامة."
5542
 
5543
- #: methods/cloudfiles-new.php:92 methods/cloudfiles.php:445
5544
  msgid "Get your API key <a href=\"https://mycloud.rackspace.com/\">from your Rackspace Cloud console</a> (read instructions <a href=\"http://www.rackspace.com/knowledge_center/article/rackspace-cloud-essentials-1-generating-your-api-key\">here</a>), then pick a container name to use for storage. This container will be created for you if it does not already exist."
5545
  msgstr "احصل على مفتاح API <a href=\"https://mycloud.rackspace.com/\">من خدمة Rackspace Cloud </a> (يمكن قراءة التعليمات <a href=\"http://www.rackspace.com/knowledge_center/article/rackspace-cloud-essentials-1-generating-your-api-key\">هنا</a>)، ثم قم باختيار اسم حاوية لإستخدام مساحة التخزين. سيتم خلق هذه الحاوية ان لم تكن موجودو مسبقا."
5546
 
5547
- #: addons/sftp.php:409 admin.php:685 methods/addon-base-v2.php:252
5548
- #: methods/backup-module.php:186 methods/cloudfiles.php:483
5549
- #: methods/openstack-base.php:528 methods/s3.php:863
5550
- #: methods/stream-base.php:220
5551
  msgid "Test %s Settings"
5552
  msgstr "اختبار %s الإعدادات"
5553
 
@@ -5555,82 +5569,82 @@ msgstr "اختبار %s الإعدادات"
5555
  msgid "Error downloading remote file: Failed to download ("
5556
  msgstr "خطأ في تحميل الملف بالخدمة السحابية: فشل في تحميل ("
5557
 
5558
- #: class-updraftplus.php:1044 class-updraftplus.php:1088
5559
- #: methods/cloudfiles.php:379 methods/stream-base.php:262
5560
  msgid "Error opening local file: Failed to download"
5561
  msgstr "خطأ في فتح ملف محلي: فشل التحميل"
5562
 
5563
- #: methods/cloudfiles.php:205
5564
  msgid "Cloud Files error - failed to upload file"
5565
  msgstr "خطأ بملفات سحابة - فشل في رفع الملف"
5566
 
5567
- #: addons/sftp.php:135 addons/sftp.php:147 methods/cloudfiles.php:134
5568
- #: methods/cloudfiles.php:176 methods/openstack-base.php:77
5569
- #: methods/openstack-base.php:266 methods/s3.php:339 methods/s3.php:351
5570
- #: methods/s3.php:352
5571
  msgid "%s Error: Failed to upload"
5572
  msgstr "%s خطأ: فشل في تحميل"
5573
 
5574
- #: addons/googlecloud.php:161 addons/googlecloud.php:166
5575
- #: class-updraftplus.php:906 methods/cloudfiles.php:117
5576
  #: methods/googledrive.php:741 methods/googledrive.php:746
5577
  msgid "%s Error: Failed to open local file"
5578
  msgstr "%s خطأ: فشل في فتح ملف محلي"
5579
 
5580
- #: methods/cloudfiles.php:90 methods/cloudfiles.php:331
5581
- #: methods/cloudfiles.php:350
5582
  msgid "Cloud Files error - failed to create and access the container"
5583
  msgstr "خطأ ملفات السحابة - فشل في إنشاء والوصول إلى الحاوية"
5584
 
5585
  #: addons/cloudfiles-enhanced.php:96 addons/cloudfiles-enhanced.php:109
5586
- #: addons/cloudfiles-enhanced.php:113 methods/cloudfiles.php:526
5587
- #: methods/cloudfiles.php:529 methods/cloudfiles.php:532
5588
  msgid "Cloud Files authentication failed"
5589
  msgstr "فشل المصادقة بملفات سحابة"
5590
 
5591
- #: addons/googlecloud.php:907 methods/googledrive.php:963
5592
  msgid "<strong>After</strong> you have saved your settings (by clicking 'Save Changes' below), then come back here once and click this link to complete authentication with Google."
5593
  msgstr "<strong>بعد</strong> حفظ خياراتك (بالضغط على زر 'حفظ التغيرات' أدناه)، قم بالرجوع مرة أخرى هنا وقم بزيارة الرابط لإكمال عملية المصادقة مه جوجل."
5594
 
5595
- #: addons/googlecloud.php:896 methods/googledrive.php:952
5596
  msgid "Authenticate with Google"
5597
  msgstr "المصادقة مع جوجل"
5598
 
5599
- #: addons/googlecloud.php:847 addons/onedrive.php:980
5600
  #: methods/googledrive.php:922
5601
  msgid "Client Secret"
5602
  msgstr "سر العميل"
5603
 
5604
- #: addons/googlecloud.php:842 methods/googledrive.php:919
5605
  msgid "If Google later shows you the message \"invalid_client\", then you did not enter a valid client ID here."
5606
  msgstr "اذا أظهر لك جوجل في وقت لاحق لك رسالة \"invalid_client\"، إذا فأنت لم تقم بإدخال معرف عميل صالح هنا."
5607
 
5608
- #: addons/googlecloud.php:839 addons/onedrive.php:976
5609
  #: methods/googledrive.php:918
5610
  msgid "Client ID"
5611
  msgstr "معرف العميل"
5612
 
5613
- #: addons/googlecloud.php:828 methods/googledrive.php:908
5614
  msgid "You must add the following as the authorised redirect URI (under \"More Options\") when asked"
5615
  msgstr "يجب إضافة ما يلي كأذن لإعادة توجيه URI (تحت \"خيارات أخرى\") عندما تسأل"
5616
 
5617
- #: addons/googlecloud.php:828 methods/googledrive.php:908
5618
  msgid "Select 'Web Application' as the application type."
5619
  msgstr "اختر 'تطبيق ويب \"كنوع التطبيق."
5620
 
5621
- #: addons/googlecloud.php:826 methods/googledrive.php:906
5622
  msgid "For longer help, including screenshots, follow this link. The description below is sufficient for more expert users."
5623
  msgstr "للحصول على مساعدة لفترة أطول، بما في ذلك لقطات، اتبع هذا الرابط. وصف أدناه ما يكفي لعدد أكبر من المستخدمين الخبراء."
5624
 
5625
- #: methods/addon-base-v2.php:240 methods/cloudfiles.php:425
5626
- #: methods/dropbox.php:468 methods/ftp.php:305 methods/googledrive.php:891
5627
- #: methods/openstack-base.php:507 methods/s3.php:773
5628
- #: methods/stream-base.php:213
5629
  msgid "%s is a great choice, because UpdraftPlus supports chunked uploads - no matter how big your site is, UpdraftPlus can upload it a little at a time, and not get thwarted by timeouts."
5630
  msgstr "%s هو خيار صائب، لأن UpdraftPlus يدعم الرفع المقسم - لا يهمنا كم حجم موقعكم، لأن UpdraftPlus يستطيع تقسيم ورفع الأجزاء المقسمة، ولن يحبط من كثرة المهلات."
5631
 
5632
- #: addons/googlecloud.php:445 addons/googlecloud.php:446
5633
- #: addons/googlecloud.php:709 methods/googledrive.php:445
5634
  #: methods/googledrive.php:446
5635
  msgid "Account is not authorized."
5636
  msgstr "حساب غير مخول."
@@ -5649,29 +5663,29 @@ msgstr "حساب مكتمل: حساب %s الخاص بك يتوفر فقك عل
5649
  msgid "Have not yet obtained an access token from Google - you need to authorise or re-authorise your connection to Google Drive."
5650
  msgstr "لم تتمكن بعد من الحصول على رمز من جوجل - يتوجب عليك أن تصادق أو تعيد المصادقة مع خدمة جوجل درايف."
5651
 
5652
- #: addons/googlecloud.php:579 addons/onedrive.php:793
5653
  #: methods/googledrive.php:348
5654
  msgid "you have authenticated your %s account."
5655
  msgstr "لديك حساب %s مصادق عليه."
5656
 
5657
- #: addons/googlecloud.php:579 addons/googlecloud.php:689
5658
- #: addons/onedrive.php:793 addons/sftp.php:481 methods/addon-base-v2.php:300
5659
- #: methods/cloudfiles.php:547 methods/googledrive.php:348
5660
- #: methods/openstack-base.php:480 methods/s3.php:1025
5661
- #: methods/stream-base.php:309
5662
  msgid "Success"
5663
  msgstr "نجاح"
5664
 
5665
- #: addons/onedrive.php:747 methods/dropbox.php:642 methods/dropbox.php:651
5666
  #: methods/googledrive.php:322
5667
  msgid "Your %s quota usage: %s %% used, %s available"
5668
  msgstr "نسبة %s تدفق البيانات المخصص لك: %s %% مستخدمة، %s متوفرة"
5669
 
5670
- #: addons/googlecloud.php:390 methods/googledrive.php:295
5671
  msgid "Authorization failed"
5672
  msgstr "فشل التخويل"
5673
 
5674
- #: addons/googlecloud.php:382 methods/googledrive.php:287
5675
  msgid "No refresh token was received from Google. This often means that you entered your client secret wrongly, or that you have not yet re-authenticated (below) since correcting it. Re-check it, then follow the link to authenticate again. Finally, if that does not work, then use expert mode to wipe all your settings, create a new Google client ID/secret, and start again."
5676
  msgstr "لم نتمكن من الحصول على أي رمز من جوجل. يعني هذا غالبا أنكم قمتم بإدخال رقمكم السري خاطئ، أو أنكم لم تتمكنوا من إعادة مصادقة الخدمة (أسفله) بعد تصحيحها. تأكد منها، ثم قم بمتابعة الرابط أسفله لإعادة المصادقة مع الخدمة مرة أخرى. أخيرا، إن لم تعمل الإضافة، قم باستعمال خيار الخبراء لإعادة مسح كل خياراتكم، أنشئ معرف عميل جوجل جديد وابدأ من الصفر."
5677
 
@@ -5693,8 +5707,8 @@ msgstr "لا تمتلك إضافة UpdraftPlus %s - نوصيك بتحميلها
5693
  msgid "You need to re-authenticate with %s, as your existing credentials are not working."
5694
  msgstr "تحتاج إلى إعادة المصادقة مع %s، معلومات الاعتماد الموجودة لديك لا تعمل."
5695
 
5696
- #: addons/migrator.php:1770 admin.php:2705 admin.php:2739 admin.php:2743
5697
- #: admin.php:3619 admin.php:3632 restorer.php:2203 restorer.php:2309
5698
  msgid "OK"
5699
  msgstr "حسنا"
5700
 
@@ -5719,7 +5733,7 @@ msgid "Old table prefix:"
5719
  msgstr "بادئة الجدول القديمة:"
5720
 
5721
  #: addons/reporting.php:65 addons/reporting.php:152 backup.php:942
5722
- #: class-updraftplus.php:4025
5723
  msgid "Backup of:"
5724
  msgstr "نسخة احتياطية لـ:"
5725
 
@@ -5795,152 +5809,152 @@ msgstr "ملف النسخ الاحتياطي غير متوفر."
5795
  msgid "UpdraftPlus is not able to directly restore this kind of entity. It must be restored manually."
5796
  msgstr "UpdraftPlus لا يمكنه استرجاع هذا النوع بشكل مباشر. يمكنك استرجاعه بشكل يدوي."
5797
 
5798
- #: admin.php:3640 admin.php:3641
5799
  msgid "Could not find one of the files for restoration"
5800
  msgstr "لا يمكن العثور على واحد من الملفات لاستعادته"
5801
 
5802
- #: admin.php:3735
5803
  msgid "Error message"
5804
  msgstr "رسالة الخطأ"
5805
 
5806
- #: admin.php:3637
5807
  msgid "The backup records do not contain information about the proper size of this file."
5808
  msgstr "سجلات النسخ الاحتياطي لا تحتوي على معلومات عن الحجم الحقيقي لهذا الملف."
5809
 
5810
- #: admin.php:3629
5811
  msgid "Archive is expected to be size:"
5812
  msgstr "من المتوقع أن يكون حجم الأرشيف:"
5813
 
5814
- #: admin.php:3513
5815
  msgid "If making a request for support, please include this information:"
5816
  msgstr "ان كنت تريد طلب دعم فني، فضلا قم باستخدام هذه المعلومات:"
5817
 
5818
- #: admin.php:3512
5819
  msgid "ABORT: Could not find the information on which entities to restore."
5820
  msgstr "الغاء: لم نتمكن من إيجاد معلومات عن الكيانات التي تريد استعادتها."
5821
 
5822
- #: admin.php:3466
5823
  msgid "UpdraftPlus Restoration: Progress"
5824
  msgstr "استرجاع UpdraftPlus: تقدم"
5825
 
5826
- #: admin.php:3418
5827
  msgid "This backup does not exist in the backup history - restoration aborted. Timestamp:"
5828
  msgstr "هذه النسخة الإحتياطية غير متوفرة بسجل التاريخ - الغاء عملية الإستعادة. الطابع الزمني:"
5829
 
5830
- #: admin.php:3367
5831
  msgid "After pressing this button, you will be given the option to choose which components you wish to restore"
5832
  msgstr "بعد الضغط على هذا الزر، ستتمكن من اختيار المكونات التي تريد استرجاعها"
5833
 
5834
- #: admin.php:3376
5835
  msgid "Delete this backup set"
5836
  msgstr "حذف هذه المجموعة من النسخ الاحتياطية"
5837
 
5838
- #: admin.php:3047
5839
  msgid "Good news: Your site's communications with %s can be encrypted. If you see any errors to do with encryption, then look in the 'Expert Settings' for more help."
5840
  msgstr "أخباؤ سارة: اتصالات موقعكم الآن مع %s يمكن تشفيرها. إن كنت ترى أي أخطاء بخدة التشفير، يمكنك مراجعة خيارات الخبراء للمزيد من المعلومات."
5841
 
5842
- #: admin.php:3044
5843
  msgid "Your web server's PHP/Curl installation does not support https access. We cannot access %s without this support. Please contact your web hosting provider's support. %s <strong>requires</strong> Curl+https. Please do not file any support requests; there is no alternative."
5844
  msgstr "نسخة PHP/Curl المنصبة بسيرفرك لا تدعم اتصال https. لا يمكن الوصول لـ %s دونها. من فضلك قم بالإتصال بخدمة الإسضافة الخاصة بك. %s <strong>تتطلب</strong> Curl+https. من فضلك لا تقم بمراسلة خدمة الدعم لأنه لا يوجد أي حل آخر."
5845
 
5846
- #: admin.php:3042
5847
  msgid "Your web server's PHP/Curl installation does not support https access. Communications with %s will be unencrypted. ask your web host to install Curl/SSL in order to gain the ability for encryption (via an add-on)."
5848
  msgstr "نعلمكم أن نسخة PHP/Curl المنصبة لخادمكم لا تدعم وصول https. التواصل مع %s سيكون غير مشفر. من فضلك قم بمراسلة خدمة الإستضافة لتنصيب Curl/SSL لدعم خدمة التشفير (باستخدام إضافة)."
5849
 
5850
- #: methods/cloudfiles-new.php:87 methods/cloudfiles.php:435
5851
- #: methods/openstack-base.php:517 methods/s3.php:801
5852
  msgid "Your web server's PHP installation does not included a required module (%s). Please contact your web hosting provider's support."
5853
  msgstr "نعلمكم أن نسخة PHP المنصبة بخادمكم لا توفر هذا الموديل (%s). فضل قم بمراسلة خدمة استضافتكم."
5854
 
5855
- #: templates/wp-admin/settings/form-contents.php:421
5856
  msgid "Save Changes"
5857
  msgstr "حفظ التغييرات"
5858
 
5859
- #: templates/wp-admin/settings/form-contents.php:398
5860
  msgid "Choosing this option lowers your security by stopping UpdraftPlus from using SSL for authentication and encrypted transport at all, where possible. Note that some cloud storage providers do not allow this (e.g. Dropbox), so with those providers this setting will have no effect."
5861
  msgstr "اختيار هذا الخيار قد يضعف من الآمان بإيقاف UpdraftPlus من استخدام SSL للمصادقة و تشفير العمليات، إن أمكن الأمر. لاحظ أن بعض الدمات السحابية لا تقبل هذه العملية (مثال: Dropbox)، مع هذا الخيار لن تتمكن من حفظ النسخ بهذه الخدمات."
5862
 
5863
- #: templates/wp-admin/settings/form-contents.php:397
5864
  msgid "Disable SSL entirely where possible"
5865
  msgstr "قم بتعطيل SSL تماما حيثما أمكن"
5866
 
5867
- #: templates/wp-admin/settings/form-contents.php:393
5868
  msgid "Note that not all cloud backup methods are necessarily using SSL authentication."
5869
  msgstr "لاحظ أنه ليست كل أساليب النسخ الإحتياطي بالسحابة بالضرورة تستخدم المصادقة عن طريق SSL."
5870
 
5871
- #: templates/wp-admin/settings/form-contents.php:393
5872
  msgid "Choosing this option lowers your security by stopping UpdraftPlus from verifying the identity of encrypted sites that it connects to (e.g. Dropbox, Google Drive). It means that UpdraftPlus will be using SSL only for encryption of traffic, and not for authentication."
5873
  msgstr "اختيار هذا الخيار يمكن أن يضعف من حمايتك بمنع UpdraftPlus من التحقق من هوية المواقع التي يتصل بها ( مثال: Dropbox, Google Drive). هذا يعني أن UpdraftPlus سيستخدم SSL لتشفير حركة مرور البيانات، ولن يستخدم التقنية لتشفير المصادقة مع المواقع."
5874
 
5875
- #: templates/wp-admin/settings/form-contents.php:392
5876
  msgid "Do not verify SSL certificates"
5877
  msgstr "لا تحقق من شهادات SSL"
5878
 
5879
- #: templates/wp-admin/settings/form-contents.php:388
5880
  msgid "By default UpdraftPlus uses its own store of SSL certificates to verify the identity of remote sites (i.e. to make sure it is talking to the real Dropbox, Amazon S3, etc., and not an attacker). We keep these up to date. However, if you get an SSL error, then choosing this option (which causes UpdraftPlus to use your web server's collection instead) may help."
5881
  msgstr "افتراضيا UpdraftPlus يستخدم خدماته الخاصة من SSL للحقق من هوية المواقع (للتأكد من أن الموقع الآخر هو فعلا الموقع المقصود وليس موقع مقرصن). نقوم بتحديثها آليا. إن قابلك خطأ SSL، حينها قم باختيار هذا الخيار (الذي يفرض على UpdraftPlus استخدام ملفات SSL الخاصة بسيرفرك بدلا من الخاص به) يمكن أن يساعدك."
5882
 
5883
- #: templates/wp-admin/settings/form-contents.php:387
5884
  msgid "Use the server's SSL certificates"
5885
  msgstr "استخدام شهادات SSL للملقم"
5886
 
5887
- #: admin.php:2918
5888
  msgid "If that is unsuccessful check the permissions on your server or change it to another directory that is writable by your web server process."
5889
  msgstr "إن لم يكن هذا ممكنا قم بالتأكد من الأذونات بسيرفرك الخاص أو غيره لمجلد جديد قابل للكتابة من قبل خادمك."
5890
 
5891
- #: admin.php:2918
5892
  msgid "click here"
5893
  msgstr "انقر هنا"
5894
 
5895
- #: admin.php:2918
5896
  msgid "or, to reset this option"
5897
  msgstr "أو، لإعادة هذا الخيار"
5898
 
5899
- #: admin.php:2918
5900
  msgid "Follow this link to attempt to create the directory and set the permissions"
5901
  msgstr ""
5902
 
5903
- #: admin.php:2910
5904
  msgid "Backup directory specified is writable, which is good."
5905
  msgstr "دليل النسخ الاحتياطي المحدد قابل للكتابة، وهو أمر جيد."
5906
 
5907
- #: templates/wp-admin/settings/form-contents.php:368
5908
  msgid "Backup directory"
5909
  msgstr "دليل النسخ الاحتياطي"
5910
 
5911
- #: templates/wp-admin/settings/form-contents.php:363
5912
  msgid "Delete local backup"
5913
  msgstr "حذف النسخة الاحتياطية المحلية"
5914
 
5915
- #: templates/wp-admin/settings/form-contents.php:343
5916
  msgid "click this to show some further options; don't bother with this unless you have a problem or are curious."
5917
  msgstr "اضغط هنا لتتمكن من مشاهدة خيارات اضافية، لا ترعج نفسك بهذه الخيارات إلا إذا واجهت مشاكل."
5918
 
5919
- #: templates/wp-admin/settings/form-contents.php:343
5920
  msgid "Show expert settings"
5921
  msgstr "إظهار الإعدادات المتقدمة"
5922
 
5923
- #: templates/wp-admin/settings/form-contents.php:342
5924
  msgid "Expert settings"
5925
  msgstr "إعدادات متقدمة"
5926
 
5927
- #: templates/wp-admin/settings/form-contents.php:353
5928
  msgid "Debug mode"
5929
  msgstr "وضع التصحيح"
5930
 
5931
- #: templates/wp-admin/settings/form-contents.php:338
5932
  msgid "Advanced / Debugging Settings"
5933
  msgstr "متقدمة / تصحيح الإعدادات "
5934
 
5935
- #: admin.php:621
5936
  msgid "Requesting start of backup..."
5937
  msgstr "مطالبة البدء بالنسخ الاحتياطي ..."
5938
 
5939
- #: addons/morefiles.php:294 admin.php:637
5940
  msgid "Cancel"
5941
  msgstr "إلغاء"
5942
 
5943
- #: addons/reporting.php:216 admin.php:3191
5944
  msgid "None"
5945
  msgstr "لا شيء"
5946
 
@@ -5948,31 +5962,31 @@ msgstr "لا شيء"
5948
  msgid "Choose your remote storage"
5949
  msgstr "اختر خدمت التخزين السحابي"
5950
 
5951
- #: templates/wp-admin/settings/form-contents.php:236
5952
  msgid "Manually decrypt a database backup file"
5953
  msgstr "فك تشفير ملف النسخ الاحتياطي لقاعدة البيانات يدويا"
5954
 
5955
- #: templates/wp-admin/settings/form-contents.php:217
5956
  msgid "Database encryption phrase"
5957
  msgstr "عبارة تشفير قاعدة البيانات"
5958
 
5959
- #: templates/wp-admin/settings/form-contents.php:315 udaddons/options.php:150
5960
  msgid "Email"
5961
  msgstr "البريد الإلكتروني"
5962
 
5963
- #: templates/wp-admin/settings/form-contents.php:207
5964
  msgid "The above directories are everything, except for WordPress core itself which you can download afresh from WordPress.org."
5965
  msgstr "المجلدات أعلاه هي كل شيء، باستثناء مجلدات ووردبريس التي يمكن تحميلها من جديد من WordPress.org."
5966
 
5967
- #: addons/morefiles.php:440 admin.php:2988
5968
  msgid "Exclude these:"
5969
  msgstr "استبعاد هذه:"
5970
 
5971
- #: admin.php:2979
5972
  msgid "Any other directories found inside wp-content"
5973
  msgstr "أي الدلائل الأخرى الموجودة داخل wp-content"
5974
 
5975
- #: templates/wp-admin/settings/form-contents.php:204
5976
  msgid "Include in files backup"
5977
  msgstr "متضمن في ملفات النسخ الاحتياطي"
5978
 
@@ -5984,44 +5998,44 @@ msgstr "على سبيل المثال إذا كان الملقم مشغول في
5984
  msgid "To fix the time at which a backup should take place,"
5985
  msgstr "لإصلاح الوقت الذي ينبغي أن تأخذ نسخة احتياطية،"
5986
 
5987
- #: admin.php:2904
5988
  msgid "Monthly"
5989
  msgstr "شهريا"
5990
 
5991
- #: admin.php:2903
5992
  msgid "Fortnightly"
5993
  msgstr "نصف شهري"
5994
 
5995
- #: admin.php:2902
5996
  msgid "Weekly"
5997
  msgstr "أسبوعيا"
5998
 
5999
- #: admin.php:2901
6000
  msgid "Daily"
6001
  msgstr "يوميا"
6002
 
6003
- #: admin.php:644 admin.php:2884
6004
  msgid "Download log file"
6005
  msgstr "تحميل ملف السجل"
6006
 
6007
- #: admin.php:2802
6008
  msgid "The folder exists, but your webserver does not have permission to write to it."
6009
  msgstr "المجلد موجود مسبقا، لكن خادمك لا يملك صلاحية الكتابة عليه."
6010
 
6011
- #: admin.php:2797
6012
  msgid "The folder was created, but we had to change its file permissions to 777 (world-writable) to be able to write to it. You should check with your hosting provider that this will not cause any problems"
6013
  msgstr "تم خلق المجلد، لكن يتوجب علينا تغيير أذوناته لـ 777 (قابل للكتابة) لنتمكن من الكتابة عليه. يجب عليك التحقق من قابلية هذه العملية مع خدمة الإستضافة الخاصة بك."
6014
 
6015
- #: admin.php:2783
6016
  msgid "The request to the filesystem to create the directory failed."
6017
  msgstr "فشل الطلب إلى نظام الملفات لإنشاء الدليل."
6018
 
6019
- #: addons/migrator.php:2243 admin.php:638 admin.php:2699 admin.php:2732
6020
- #: admin.php:3376 templates/wp-admin/settings/delete-and-restore-modals.php:5
6021
  msgid "Delete"
6022
  msgstr "حذف"
6023
 
6024
- #: admin.php:2639
6025
  msgid "show log"
6026
  msgstr "عرض السجل"
6027
 
@@ -6134,7 +6148,7 @@ msgstr "استعادة النسخة الاحتياطية"
6134
  msgid "Delete backup set"
6135
  msgstr "حذف مجموعة النسخ الاحتياطية"
6136
 
6137
- #: admin.php:620
6138
  msgid "Download error: the server sent us a response which we did not understand."
6139
  msgstr "خطأ بالتحميل : بعث لنا الخادم استجابة لم نفهمها."
6140
 
@@ -6143,15 +6157,15 @@ msgstr "خطأ بالتحميل : بعث لنا الخادم استجابة لم
6143
  #: addons/migrator.php:1368 addons/migrator.php:1709 addons/migrator.php:1736
6144
  #: addons/migrator.php:1742 addons/migrator.php:1804 addons/migrator.php:1840
6145
  #: addons/migrator.php:1879 addons/migrator.php:1889 addons/migrator.php:1894
6146
- #: addons/s3-enhanced.php:120 addons/s3-enhanced.php:125
6147
- #: addons/s3-enhanced.php:127 addons/sftp.php:737 addons/webdav.php:79
6148
- #: admin.php:82 admin.php:612 admin.php:3634 admin.php:3664
6149
  #: methods/remotesend.php:69 methods/remotesend.php:227
6150
- #: methods/updraftvault.php:432 restorer.php:1364
6151
  msgid "Error:"
6152
  msgstr "خطأ:"
6153
 
6154
- #: admin.php:603 templates/wp-admin/settings/downloading-and-restoring.php:34
6155
  msgid "calculating..."
6156
  msgstr "حساب ..."
6157
 
@@ -6194,38 +6208,38 @@ msgstr "متصفح الويب أوبرا "
6194
  msgid "More tasks:"
6195
  msgstr "المزيد من المهام:"
6196
 
6197
- #: admin.php:2402
6198
  msgid "Download most recently modified log file"
6199
  msgstr "تحميل ملف السجل المعدل مؤخرا"
6200
 
6201
- #: admin.php:2361 admin.php:2367 central/bootstrap.php:161
6202
  msgid "(Nothing yet logged)"
6203
  msgstr "(لا شيء حتى الآن تم تسجيله)"
6204
 
6205
- #: addons/autobackup.php:293 addons/autobackup.php:384 admin.php:2360
6206
- #: admin.php:2365
6207
  msgid "Last log message"
6208
  msgstr "رسالة السجل الأخيرة"
6209
 
6210
- #: addons/migrator.php:218 admin.php:643 admin.php:3367
6211
  #: templates/wp-admin/settings/tab-status.php:30
6212
  msgid "Restore"
6213
  msgstr "الإستعادة"
6214
 
6215
- #: admin.php:472 admin.php:636 templates/wp-admin/settings/tab-status.php:27
6216
  msgid "Backup Now"
6217
  msgstr "النسخ الاحتياطي الآن"
6218
 
6219
  #: addons/migrator.php:1774 addons/moredatabase.php:240
6220
- #: addons/reporting.php:231 admin.php:257 admin.php:3166 admin.php:3239
6221
- #: admin.php:3718 includes/class-wpadmin-commands.php:138
6222
  #: includes/class-wpadmin-commands.php:459
6223
  #: templates/wp-admin/settings/delete-and-restore-modals.php:81
6224
  #: templates/wp-admin/settings/delete-and-restore-modals.php:83
6225
  msgid "Database"
6226
  msgstr "قاعدة بيانات"
6227
 
6228
- #: admin.php:253 admin.php:4130
6229
  msgid "Files"
6230
  msgstr "ملفات"
6231
 
@@ -6233,11 +6247,11 @@ msgstr "ملفات"
6233
  msgid "Next scheduled backups"
6234
  msgstr "النسخ الاحتياطي المجدولة القادمة"
6235
 
6236
- #: admin.php:233
6237
  msgid "At the same time as the files backup"
6238
  msgstr "في نفس الوقت الذي نقوم فيه بالنسخ الاحتياطي للملفات"
6239
 
6240
- #: admin.php:223 admin.php:244 admin.php:251
6241
  msgid "Nothing currently scheduled"
6242
  msgstr "لا شيء مقرر حاليا"
6243
 
@@ -6249,15 +6263,15 @@ msgstr "واجهة المشرف هذه تستخدم الجافا سكريبت ب
6249
  msgid "JavaScript warning"
6250
  msgstr "تحذير جافا سكريبت"
6251
 
6252
- #: admin.php:623 admin.php:2429
6253
  msgid "Delete Old Directories"
6254
  msgstr "حذف الدلائل القديمة"
6255
 
6256
- #: admin.php:2174
6257
  msgid "Current limit is:"
6258
  msgstr "الحد الحالي هو:"
6259
 
6260
- #: admin.php:2148
6261
  msgid "Your backup has been restored."
6262
  msgstr "تمت استعادة النسخ الاحتياطي."
6263
 
@@ -6269,127 +6283,127 @@ msgstr "الإصدار"
6269
  msgid "Lead developer's homepage"
6270
  msgstr "الولوج لموقع المطور"
6271
 
6272
- #: admin.php:4050
6273
  msgid "Your settings have been wiped."
6274
  msgstr "تم القضاء على الإعدادات الخاصة بك."
6275
 
6276
- #: admin.php:2108
6277
  msgid "Backup directory successfully created."
6278
  msgstr "تم إنشاء دليل النسخ الاحتياطي بنجاح."
6279
 
6280
- #: admin.php:2101
6281
  msgid "Backup directory could not be created"
6282
  msgstr "لا يمكن إنشاء دليل النسخ الاحتياطي"
6283
 
6284
- #: admin.php:2671
6285
  msgid "Old directory removal failed for some reason. You may want to do this manually."
6286
  msgstr "النسخ السابقة من المجلدات لم تحذف بشكل جيد لسبب ما. يمكنك حذفها بشكل يدوي."
6287
 
6288
- #: admin.php:2669
6289
  msgid "Old directories successfully removed."
6290
  msgstr "تم إزالة الدلائل القديمة بنجاح."
6291
 
6292
- #: admin.php:2666
6293
  msgid "Remove old directories"
6294
  msgstr "إزالة الدلائل القديمة"
6295
 
6296
- #: addons/migrator.php:281 addons/migrator.php:296 admin.php:2050
6297
- #: admin.php:2059 admin.php:2068 admin.php:2110 admin.php:2673
6298
  msgid "Return to UpdraftPlus Configuration"
6299
  msgstr "العودة إلى اعدادات UpdraftPlus"
6300
 
6301
- #: admin.php:616 admin.php:2050 admin.php:2059 admin.php:2068 admin.php:2110
6302
- #: admin.php:2673 templates/wp-admin/settings/existing-backups-table.php:14
6303
  msgid "Actions"
6304
  msgstr "الإجراءات"
6305
 
6306
- #: admin.php:2039
6307
  msgid "Restore successful!"
6308
  msgstr "استعادة ناجحة!"
6309
 
6310
- #: admin.php:1969
6311
  msgid "Bad filename format - this does not look like an encrypted database file created by UpdraftPlus"
6312
  msgstr "إسم ملف خاطئ - نعقد أننا لم نكن المسؤولين في تشفير هذا الملف"
6313
 
6314
- #: admin.php:1879
6315
  msgid "Bad filename format - this does not look like a file created by UpdraftPlus"
6316
  msgstr "إسم ملف خاطئ - نعتقد أننا لم نكن المسؤولين بخلق هذا الملف"
6317
 
6318
- #: admin.php:1760
6319
  msgid "No local copy present."
6320
  msgstr "لا نسخة محلية متوفرة."
6321
 
6322
- #: admin.php:1757
6323
  msgid "Download in progress"
6324
  msgstr "التحميل في تقدم"
6325
 
6326
- #: admin.php:615 admin.php:1746
6327
  msgid "File ready."
6328
  msgstr "ملف جاهز."
6329
 
6330
- #: admin.php:1727
6331
  msgid "Download failed"
6332
  msgstr "فشل تحميل"
6333
 
6334
- #: admin.php:613 admin.php:1518 admin.php:3617 class-updraftplus.php:1044
6335
- #: class-updraftplus.php:1088 methods/addon-base-v2.php:84
6336
- #: methods/addon-base-v2.php:89 methods/addon-base-v2.php:204
6337
- #: methods/addon-base-v2.php:224 methods/stream-base.php:197 restorer.php:2199
6338
  #: restorer.php:2224 restorer.php:2306 updraftplus.php:147
6339
  msgid "Error"
6340
  msgstr "خطأ"
6341
 
6342
- #: admin.php:1546
6343
  msgid "Could not find that job - perhaps it has already finished?"
6344
  msgstr "لا يمكن العثور على هذا الوظيفة - ربما كان قد أنهى بالفعل؟"
6345
 
6346
- #: admin.php:1538
6347
  msgid "Job deleted"
6348
  msgstr "وظيفة حذفت"
6349
 
6350
- #: admin.php:1622
6351
  msgid "OK. You should soon see activity in the \"Last log message\" field below."
6352
  msgstr "أوكي، ستتمكن قريبا من مشاهدة النشاطات بحقل \"سجل آخر الرسائل\" أسفله"
6353
 
6354
- #: admin.php:688
6355
  msgid "Nothing yet logged"
6356
  msgstr "لا شيء حتى الآن تم تسجيله"
6357
 
6358
- #: admin.php:905
6359
  msgid "Please consult this FAQ if you have problems backing up."
6360
  msgstr "يرجى الرجوع إلى الأسئلة الشائعة إذا كنت تواجه مشاكل بالنسخ الاحتياطي."
6361
 
6362
- #: admin.php:905
6363
  msgid "Your website is hosted using the %s web server."
6364
  msgstr "موقعك يستخدم %s من خادم الويب."
6365
 
6366
- #: admin.php:901
6367
  msgid "UpdraftPlus does not officially support versions of WordPress before %s. It may work for you, but if it does not, then please be aware that no support is available until you upgrade WordPress."
6368
  msgstr "UpdraftPlus لا يدعم النسخ أقل من %s من نظام ووردبريس. يمكن أن يعمل لك، لكن إن لم يعمل، كن على يقين أنه لن نتمكن من مساعدة في حل المشاكل إلا بعد أن تقوم بترقية اصدار الووردبريس."
6369
 
6370
- #: admin.php:897
6371
  msgid "You have less than %s of free disk space on the disk which UpdraftPlus is configured to use to create backups. UpdraftPlus could well run out of space. Contact your the operator of your server (e.g. your web hosting company) to resolve this issue."
6372
  msgstr "تملك مساحة تخزين حرة أقل من %s بالهارد درايف الذي يستخدمه UpdraftPlus لحفظ النسخ الإحتياطية. UpdraftPlus لن يتمكن من حفظ النسخ. من فشلك قم بمراسلة خدمة الإستضافة لحل هذا المشكل."
6373
 
6374
- #: admin.php:889 admin.php:893 admin.php:897 admin.php:901 admin.php:905
6375
- #: admin.php:914 admin.php:3035 admin.php:3042 admin.php:3044
6376
- #: methods/cloudfiles-new.php:87 methods/cloudfiles.php:435 methods/ftp.php:291
6377
- #: methods/openstack-base.php:517 methods/s3.php:797 methods/s3.php:801
6378
- #: methods/updraftvault.php:258
6379
  #: templates/wp-admin/settings/downloading-and-restoring.php:29
6380
  #: udaddons/updraftplus-addons.php:208
6381
  msgid "Warning"
6382
  msgstr "تحذير"
6383
 
6384
- #: admin.php:834
6385
  msgid "Add-Ons / Pro Support"
6386
  msgstr "إضافات / الدعم المدفوع"
6387
 
6388
- #: admin.php:488 admin.php:830 templates/wp-admin/settings/tab-bar.php:7
6389
  msgid "Settings"
6390
  msgstr "إعدادات"
6391
 
6392
- #: admin.php:803
6393
  msgid "Allowed Files"
6394
  msgstr "ملفات مسموحة"
6395
 
@@ -6409,19 +6423,20 @@ msgstr ""
6409
  msgid "Like UpdraftPlus and can spare one minute?"
6410
  msgstr "هل أحببت UpdraftPlus وتريد المساعدة في نشره؟"
6411
 
6412
- #: addons/azure.php:216 class-updraftplus.php:3784 methods/googledrive.php:823
 
6413
  msgid "File not found"
6414
  msgstr "لم يتم العثور على ملف"
6415
 
6416
- #: class-updraftplus.php:3695
6417
  msgid "The decryption key used:"
6418
  msgstr "مفتاح فك التشفير المستخدم:"
6419
 
6420
- #: class-updraftplus.php:3695 class-updraftplus.php:3965 restorer.php:390
6421
  msgid "Decryption failed. The most likely cause is that you used the wrong key."
6422
  msgstr "فشل التشفير. غالبا سيكون السبب هو عدم استخدام المفتاح الخطأ."
6423
 
6424
- #: class-updraftplus.php:3676 class-updraftplus.php:3953 restorer.php:377
6425
  msgid "Decryption failed. The database file is encrypted, but you have no encryption key entered."
6426
  msgstr "فشل التشفير. ملف قاعدة البيانات مفر، ولكن لم تقم بإدخال أي مفتاح للتشفير."
6427
 
@@ -6429,15 +6444,15 @@ msgstr "فشل التشفير. ملف قاعدة البيانات مفر، ول
6429
  msgid "Could not open the backup file for writing"
6430
  msgstr "لا يمكن فتح ملف النسخ الاحتياطي للكتابة"
6431
 
6432
- #: class-updraftplus.php:3288
6433
  msgid "Could not save backup history because we have no backup array. Backup probably failed."
6434
  msgstr "لم نتمكن من حفظ تاريخ النسخ الإحتياطية بسبب عدم ترتيب النسخ. النسخ الإحتياطي ربما قد فشل."
6435
 
6436
- #: class-updraftplus.php:3265
6437
  msgid "Could not read the directory"
6438
  msgstr "لا يمكن قراءة الدليل"
6439
 
6440
- #: admin.php:1797 backup.php:1139 restorer.php:225
6441
  msgid "Backup directory (%s) is not writable, or does not exist."
6442
  msgstr "دليل (%s) النسخ الإحتياطي ليس قابل للكتابة، أو غير موجود."
6443
 
@@ -6445,11 +6460,11 @@ msgstr "دليل (%s) النسخ الإحتياطي ليس قابل للكتاب
6445
  msgid "WordPress backup is complete"
6446
  msgstr "اكتمال عملية النسخ الإحتياطي للووردبريس"
6447
 
6448
- #: class-updraftplus.php:2834
6449
  msgid "The backup attempt has finished, apparently unsuccessfully"
6450
  msgstr "محاولة النسخ الإحتياطية تمت، لكن يبدو أنها فشلت."
6451
 
6452
- #: class-updraftplus.php:2819
6453
  msgid "The backup apparently succeeded and is now complete"
6454
  msgstr "يبدو أن عملية النسح الإحتياطي قد نجحت وهاهي الآن قد اكتملت"
6455
 
@@ -6457,37 +6472,37 @@ msgstr "يبدو أن عملية النسح الإحتياطي قد نجحت و
6457
  msgid "Encryption error occurred when encrypting database. Encryption aborted."
6458
  msgstr "حدث خطأ في عملية التشفير لقاعدة البيانات. تم ايقاف العملية."
6459
 
6460
- #: class-updraftplus.php:2246
6461
  msgid "Could not create files in the backup directory. Backup aborted - check your UpdraftPlus settings."
6462
  msgstr "لم نتمكن من خلق الملفات بمجلد النسخ الإحتياطية. تجاهل النسخ - تحقق من خيارات UpdraftPlus."
6463
 
6464
- #: class-updraftplus.php:1613
6465
  msgid "Others"
6466
  msgstr "أخرى"
6467
 
6468
- #: addons/multisite.php:446 class-updraftplus.php:1598
6469
  msgid "Uploads"
6470
  msgstr "الملفات المرفوعة"
6471
 
6472
- #: class-updraftplus.php:1597
6473
  msgid "Themes"
6474
  msgstr "تصاميم"
6475
 
6476
- #: class-updraftplus.php:1596
6477
  msgid "Plugins"
6478
  msgstr "الإضافات"
6479
 
6480
- #: class-updraftplus.php:458
6481
  msgid "No log files were found."
6482
  msgstr "لا توجد ملفات السجل."
6483
 
6484
- #: admin.php:1681 admin.php:1685 class-updraftplus.php:453
6485
  msgid "The log file could not be read."
6486
  msgstr "لا يمكن قراءة ملف السجل."
6487
 
6488
- #: admin.php:921 admin.php:925 admin.php:929 admin.php:933 admin.php:937
6489
- #: class-updraftplus.php:418 class-updraftplus.php:453
6490
- #: class-updraftplus.php:458 class-updraftplus.php:463
6491
  msgid "UpdraftPlus notice:"
6492
  msgstr "إشعار UpdraftPlus :"
6493
 
11
  "Language: ar\n"
12
  "Project-Id-Version: UpdraftPlus\n"
13
 
14
+ #: templates/wp-admin/settings/existing-backups-table.php:69
15
+ msgid "Stored at: %s"
16
+ msgstr ""
17
+
18
+ #: methods/cloudfiles.php:500
19
+ msgid "Cloud Files"
20
+ msgstr ""
21
+
22
+ #: admin.php:4114
23
+ msgid "Your settings failed to save. Please refresh the settings page and try again"
24
+ msgstr ""
25
+
26
+ #: admin.php:4073
27
+ msgid "UpdraftPlus seems to have been updated to version (%s) different to the version running when this settings page was loaded. Please reload the settings page before trying to save settings."
28
+ msgstr ""
29
+
30
+ #: methods/updraftvault.php:62
31
  msgid "UpdraftVault"
32
  msgstr ""
33
 
55
  msgid "Extra database"
56
  msgstr ""
57
 
58
+ #: admin.php:3372
59
  msgid "Press here to download or browse"
60
  msgstr ""
61
 
62
+ #: admin.php:1059 admin.php:1069
63
  msgid "Error: invalid path"
64
  msgstr ""
65
 
66
+ #: admin.php:917
67
  msgid "An error occurred when fetching storage module options: "
68
  msgstr ""
69
 
70
+ #: admin.php:745
71
  msgid "Loading log file"
72
  msgstr ""
73
 
74
+ #: admin.php:744
75
  msgid "Unable to download file. This could be caused by a timeout. It would be best to download the zip to your computer."
76
  msgstr ""
77
 
78
+ #: admin.php:743
79
  msgid "Search"
80
  msgstr ""
81
 
82
+ #: admin.php:742
83
  msgid "Select a file to view information about it"
84
  msgstr ""
85
 
86
+ #: admin.php:741
87
  msgid "Browsing zip file"
88
  msgstr ""
89
 
90
+ #: admin.php:711
91
  msgid "With UpdraftPlus Premium, you can directly download individual files from here."
92
  msgstr ""
93
 
94
+ #: admin.php:659
95
  msgid "Browse contents"
96
  msgstr ""
97
 
99
  msgid "Skipped tables:"
100
  msgstr ""
101
 
102
+ #: class-updraftplus.php:4327
103
  msgid "This database backup has the following WordPress tables excluded: %s"
104
  msgstr ""
105
 
106
+ #: admin.php:2368
107
  msgid "With UpdraftPlus Premium, you can choose to backup non-WordPress tables, backup only specified tables, and backup other databases too."
108
  msgstr ""
109
 
110
+ #: admin.php:2368
111
  msgid "All WordPress tables will be backed up."
112
  msgstr ""
113
 
114
+ #: admin.php:740
115
  msgid "Further information may be found in the browser JavaScript console, and the server PHP error logs."
116
  msgstr ""
117
 
118
+ #: admin.php:740
119
  msgid "That you are attempting to upload a zip file previously created by UpdraftPlus."
120
  msgstr ""
121
 
122
+ #: admin.php:740
123
  msgid "The available memory on the server."
124
  msgstr ""
125
 
126
+ #: admin.php:740
127
  msgid "Any settings in your .htaccess or web.config file that affects the maximum upload or post size."
128
  msgstr ""
129
 
130
+ #: admin.php:740
131
  msgid "The file failed to upload. Please check the following:"
132
  msgstr ""
133
 
134
+ #: admin.php:739
135
  msgid "HTTP code:"
136
  msgstr ""
137
 
138
+ #: admin.php:636
139
  msgid "You have chosen to backup a database, but no tables have been selected"
140
  msgstr ""
141
 
298
  msgid "UpdraftPlus"
299
  msgstr ""
300
 
301
+ #: templates/wp-admin/settings/form-contents.php:286
302
  msgid "Recommended: optimize your database with WP-Optimize."
303
  msgstr ""
304
 
369
  msgid "Comments"
370
  msgstr ""
371
 
372
+ #: addons/s3-enhanced.php:335
373
  msgid "Europe (Frankfurt)"
374
  msgstr ""
375
 
376
+ #: addons/s3-enhanced.php:334
377
  msgid "Europe (London)"
378
  msgstr ""
379
 
380
+ #: addons/s3-enhanced.php:333
381
  msgid "Europe (Ireland)"
382
  msgstr ""
383
 
562
  msgid "Then, try out our \"Migrator\" add-on which can perform a direct site-to-site migration. After using it once, you'll have saved the purchase price compared to the time needed to copy a site by hand."
563
  msgstr ""
564
 
565
+ #: addons/s3-enhanced.php:332
566
  msgid "Canada Central"
567
  msgstr ""
568
 
625
  msgid "The client has been deleted from the Google Drive API console. Please create a new Google Drive project and reconnect with UpdraftPlus."
626
  msgstr ""
627
 
628
+ #: methods/dropbox.php:571
629
  msgid "%s de-authentication"
630
  msgstr ""
631
 
632
+ #: methods/dropbox.php:536
633
  msgid "You must add the following as the authorised redirect URI in your Dropbox console (under \"API Settings\") when asked"
634
  msgstr ""
635
 
636
+ #: methods/dropbox.php:510
637
  msgid "Follow this link to deauthenticate with %s."
638
  msgstr ""
639
 
649
  msgid "You have selected a remote storage option which has an authorization step to complete:"
650
  msgstr ""
651
 
652
+ #: admin.php:1488
653
  msgid "Remote files deleted:"
654
  msgstr ""
655
 
656
+ #: admin.php:1487
657
  msgid "Local files deleted:"
658
  msgstr ""
659
 
660
+ #: admin.php:962 admin.php:966 admin.php:974 admin.php:978
661
  msgid "Follow this link to authorize access to your %s account (you will not be able to back up to %s without it)."
662
  msgstr ""
663
 
664
+ #: admin.php:738
665
  msgid "remote files deleted"
666
  msgstr ""
667
 
668
+ #: admin.php:736
669
  msgid "Complete"
670
  msgstr ""
671
 
672
+ #: admin.php:735
673
  msgid "Do you want to carry out the import?"
674
  msgstr ""
675
 
676
+ #: admin.php:734
677
  msgid "Which was exported on:"
678
  msgstr ""
679
 
680
+ #: admin.php:733
681
  msgid "This will import data from:"
682
  msgstr ""
683
 
684
+ #: admin.php:732
685
  msgid "Importing..."
686
  msgstr ""
687
 
688
+ #: admin.php:729
689
  msgid "You have not yet selected a file to import."
690
  msgstr ""
691
 
692
+ #: admin.php:713
693
  msgid "Your export file will be of your displayed settings, not your saved ones."
694
  msgstr ""
695
 
697
  msgid "template not found"
698
  msgstr ""
699
 
700
+ #: addons/s3-enhanced.php:328
701
  msgid "US East (Ohio)"
702
  msgstr ""
703
 
704
+ #: addons/onedrive.php:962
705
  msgid "This site uses a URL which is either non-HTTPS, or is localhost or 127.0.0.1 URL. As such, you must use the main %s %s App to authenticate with your account."
706
  msgstr ""
707
 
708
+ #: addons/onedrive.php:637
709
  msgid "Account is not authorized (%s)."
710
  msgstr ""
711
 
712
+ #: addons/onedrive.php:598 udaddons/updraftplus-addons.php:732
713
  msgid "Your IP address:"
714
  msgstr ""
715
 
716
+ #: addons/onedrive.php:598 udaddons/updraftplus-addons.php:732
717
  #: udaddons/updraftplus-addons.php:747
718
  msgid "To remove any block, please go here."
719
  msgstr ""
720
 
721
+ #: addons/onedrive.php:583 udaddons/updraftplus-addons.php:717
722
  msgid "An error response was received; HTTP code:"
723
  msgstr ""
724
 
725
+ #: includes/class-commands.php:310
726
  msgid "%s add-on not found"
727
  msgstr ""
728
 
734
  msgid "This makes time-outs much more likely. You are recommended to turn safe_mode off, or to restore only one entity at a time"
735
  msgstr ""
736
 
737
+ #: admin.php:2193
738
  msgid "To fix this problem go here."
739
  msgstr ""
740
 
741
+ #: admin.php:2193
742
  msgid "OptimizePress 2.0 encodes its contents, so search/replace does not work."
743
  msgstr ""
744
 
745
+ #: admin.php:697
746
  msgid "your PHP install lacks the openssl module; as a result, this can take minutes; if nothing has happened by then, then you should either try a smaller key size, or ask your web hosting company how to enable this PHP module on your setup."
747
  msgstr ""
748
 
749
+ #: addons/webdav.php:115
750
  msgid "Path"
751
  msgstr ""
752
 
753
+ #: addons/webdav.php:110
754
  msgid "Leave this blank to use the default (80 for webdav, 443 for webdavs)"
755
  msgstr ""
756
 
757
+ #: addons/webdav.php:102
758
  msgid "Enter any path in the field below."
759
  msgstr ""
760
 
761
+ #: addons/webdav.php:102
762
  msgid "A host name cannot contain a slash."
763
  msgstr ""
764
 
765
+ #: addons/webdav.php:77
766
  msgid "Protocol (SSL or not)"
767
  msgstr ""
768
 
769
+ #: addons/webdav.php:72
770
  msgid "This WebDAV URL is generated by filling in the options below. If you do not know the details, then you will need to ask your WebDAV provider."
771
  msgstr ""
772
 
774
  msgid "No response data was received. This usually indicates a network connectivity issue (e.g. an outgoing firewall or overloaded network) between this site and UpdraftPlus.com."
775
  msgstr ""
776
 
777
+ #: methods/s3.php:1031
778
  msgid "The AWS access key looks to be wrong (valid %s access keys begin with \"AK\")"
779
  msgstr ""
780
 
781
+ #: methods/s3.php:101
782
  msgid "No settings were found - please go to the Settings tab and check your settings"
783
  msgstr ""
784
 
786
  msgid "Backup using %s?"
787
  msgstr ""
788
 
789
+ #: addons/s3-enhanced.php:339
790
  msgid "Asia Pacific (Mumbai)"
791
  msgstr ""
792
 
793
+ #: addons/s3-enhanced.php:63
794
  msgid "Reduced redundancy"
795
  msgstr ""
796
 
797
+ #: addons/s3-enhanced.php:62
798
  msgid "Standard (infrequent access)"
799
  msgstr ""
800
 
916
  msgid "This backup archive is %s MB in size - the attempt to send this via email is likely to fail (few email servers allow attachments of this size). If so, you should switch to using a different remote storage method."
917
  msgstr ""
918
 
919
+ #: class-updraftplus.php:1590
920
  msgid "Size: %s MB"
921
  msgstr ""
922
 
928
  msgid "i.e. you have an account there"
929
  msgstr ""
930
 
931
+ #: templates/wp-admin/settings/form-contents.php:371
932
  msgid "UpdraftPlus will split up backup archives when they exceed this file size. The default value is %s megabytes. Be careful to leave some margin if your web-server has a hard size limit (e.g. the 2 GB / 2048 MB limit on some 32-bit servers/file systems)."
933
  msgstr ""
934
 
936
  msgid "Now"
937
  msgstr "الآن"
938
 
939
+ #: class-updraftplus.php:4191 restorer.php:996
940
  msgid "You should enable %s to make any pretty permalinks (e.g. %s) work"
941
  msgstr ""
942
 
944
  msgid "(tap on an icon to select or unselect)"
945
  msgstr ""
946
 
947
+ #: methods/updraftvault.php:310 methods/updraftvault.php:316
948
+ #: methods/updraftvault.php:322
949
  msgid "%s per year"
950
  msgstr ""
951
 
952
+ #: methods/updraftvault.php:309 methods/updraftvault.php:315
953
+ #: methods/updraftvault.php:321
954
  msgid "or (annual discount)"
955
  msgstr ""
956
 
957
+ #: methods/updraftvault.php:246
958
  msgid "No Vault connection was found for this site (has it moved?); please disconnect and re-connect."
959
  msgstr ""
960
 
961
+ #: class-updraftplus.php:451 class-updraftplus.php:496
962
  msgid "The given file was not found, or could not be read."
963
  msgstr ""
964
 
1058
  msgid "UpdraftCentral Connection"
1059
  msgstr ""
1060
 
1061
+ #: backup.php:849 class-updraftplus.php:2846
1062
  msgid "The backup was aborted by the user"
1063
  msgstr ""
1064
 
1065
+ #: admin.php:4109
1066
  msgid "Your settings have been saved."
1067
  msgstr "تم حفظ إعداداتك."
1068
 
1069
+ #: admin.php:3266
1070
  msgid "Total backup size:"
1071
  msgstr ""
1072
 
1073
+ #: admin.php:2690
1074
  msgid "stop"
1075
  msgstr "توقف"
1076
 
1077
+ #: admin.php:2528
1078
  msgid "The backup has finished running"
1079
  msgstr ""
1080
 
1100
  msgid "calculate"
1101
  msgstr ""
1102
 
1103
+ #: admin.php:712
1104
  msgid "You should save your changes to ensure that they are used for making your backup."
1105
  msgstr ""
1106
 
1107
+ #: admin.php:705
1108
  msgid "We requested to delete the file, but could not understand the server's response"
1109
  msgstr ""
1110
 
1111
+ #: admin.php:704
1112
  msgid "Please enter a valid URL"
1113
  msgstr ""
1114
 
1115
+ #: admin.php:687
1116
  msgid "Saving..."
1117
  msgstr "جاري الحفظ..."
1118
 
1119
+ #: admin.php:650
1120
  msgid "Error: the server sent us a response which we did not understand."
1121
  msgstr ""
1122
 
1123
+ #: admin.php:642
1124
  msgid "Fetching..."
1125
  msgstr ""
1126
 
1127
+ #: addons/s3-enhanced.php:336
1128
  msgid "Asia Pacific (Seoul)"
1129
  msgstr ""
1130
 
1136
  msgid "Unexpected error: no class '%s' was found (your UpdraftPlus installation seems broken - try re-installing)"
1137
  msgstr ""
1138
 
1139
+ #: addons/onedrive.php:58
1140
  msgid "The required %s PHP module is not installed - ask your web hosting company to enable it."
1141
  msgstr ""
1142
 
1144
  msgid "Skipping table %s: this table will not be restored"
1145
  msgstr ""
1146
 
1147
+ #: class-updraftplus.php:4242 restorer.php:1642
1148
  msgid "To import an ordinary WordPress site into a multisite installation requires %s."
1149
  msgstr ""
1150
 
1151
+ #: class-updraftplus.php:4238
1152
  msgid "Please read this link for important information on this process."
1153
  msgstr ""
1154
 
1155
+ #: class-updraftplus.php:4238
1156
  msgid "It will be imported as a new site."
1157
  msgstr ""
1158
 
1159
+ #: admin.php:2341 templates/wp-admin/notices/horizontal-notice.php:16
1160
  #: templates/wp-admin/notices/horizontal-notice.php:18
1161
  msgid "Dismiss"
1162
  msgstr "رفض"
1163
 
1164
+ #: admin.php:724
1165
  msgid "Please fill in the required information."
1166
  msgstr ""
1167
 
1233
  msgid "Call WordPress action:"
1234
  msgstr ""
1235
 
1236
+ #: admin.php:2376
1237
  msgid "Your saved settings also affect what is backed up - e.g. files excluded."
1238
  msgstr ""
1239
 
1240
+ #: admin.php:3677
1241
  msgid "Skipping: this archive was already restored."
1242
  msgstr ""
1243
 
1244
+ #: templates/wp-admin/settings/form-contents.php:212
1245
  msgid "File Options"
1246
  msgstr ""
1247
 
1269
  msgid "This button will delete all UpdraftPlus settings and progress information for in-progress backups (but not any of your existing backups from your cloud storage)."
1270
  msgstr ""
1271
 
1272
+ #: admin.php:3986
1273
  msgid "Send this backup to remote storage"
1274
  msgstr ""
1275
 
1276
+ #: admin.php:3984
1277
  msgid "Check out UpdraftPlus Vault."
1278
  msgstr ""
1279
 
1280
+ #: admin.php:3984
1281
  msgid "Not got any remote storage?"
1282
  msgstr ""
1283
 
1284
+ #: admin.php:3984
1285
  msgid "settings"
1286
  msgstr "إعدادات"
1287
 
1288
+ #: admin.php:3984
1289
  msgid "Backup won't be sent to any remote storage - none has been saved in the %s"
1290
  msgstr ""
1291
 
1292
+ #: admin.php:2374
1293
  msgid "Include any files in the backup"
1294
  msgstr ""
1295
 
1296
+ #: admin.php:2360
1297
  msgid "Include the database in the backup"
1298
  msgstr ""
1299
 
1300
+ #: admin.php:2340
1301
  msgid "Continue restoration"
1302
  msgstr ""
1303
 
1304
+ #: admin.php:2335
1305
  msgid "You have an unfinished restoration operation, begun %s ago."
1306
  msgstr ""
1307
 
1308
+ #: admin.php:2334
1309
  msgid "Unfinished restoration"
1310
  msgstr ""
1311
 
1312
+ #: admin.php:2332
1313
  msgid "%s minutes, %s seconds"
1314
  msgstr ""
1315
 
1316
+ #: admin.php:2279
1317
  msgid "Backup Contents And Schedule"
1318
  msgstr ""
1319
 
1321
  msgid "Premium / Extensions"
1322
  msgstr ""
1323
 
1324
+ #: admin.php:2059 admin.php:2068
1325
  msgid "Sufficient information about the in-progress restoration operation could not be found."
1326
  msgstr ""
1327
 
1328
+ #: addons/morefiles.php:53 admin.php:710
1329
  msgctxt "(verb)"
1330
  msgid "Download"
1331
  msgstr ""
1332
 
1333
+ #: admin.php:635
1334
  msgid "You have chosen to backup files, but no file entities have been selected"
1335
  msgstr ""
1336
 
1337
+ #: admin.php:542
1338
  msgid "Extensions"
1339
  msgstr "Extensions"
1340
 
1341
+ #: admin.php:534 templates/wp-admin/settings/tab-bar.php:8
1342
  msgid "Advanced Tools"
1343
  msgstr ""
1344
 
1345
+ #: addons/googlecloud.php:926
1346
  msgid "Bucket location"
1347
  msgstr ""
1348
 
1349
+ #: addons/googlecloud.php:921
1350
  msgid "Note that Google do not support every storage class in every location - you should read their documentation to learn about current availability."
1351
  msgstr ""
1352
 
1353
+ #: addons/googlecloud.php:921 addons/googlecloud.php:936
1354
  msgid "This setting applies only when a new bucket is being created."
1355
  msgstr ""
1356
 
1357
+ #: addons/googlecloud.php:906
1358
  msgid "You must use a bucket name that is unique, for all %s users."
1359
  msgstr ""
1360
 
1361
+ #: addons/googlecloud.php:862
1362
  msgid "Do not confuse %s with %s - they are separate things."
1363
  msgstr ""
1364
 
1365
+ #: addons/googlecloud.php:294
1366
  msgid "You do not have access to this bucket"
1367
  msgstr ""
1368
 
1415
  msgid "Durable reduced availability"
1416
  msgstr ""
1417
 
1418
+ #: addons/googlecloud.php:35 addons/s3-enhanced.php:61
1419
  msgid "Standard"
1420
  msgstr ""
1421
 
1422
+ #: addons/azure.php:553
1423
  msgid "container"
1424
  msgstr ""
1425
 
1426
+ #: addons/azure.php:553
1427
  msgid "You can enter the path of any %s virtual folder you wish to use here."
1428
  msgstr ""
1429
 
1430
+ #: addons/azure.php:552
1431
  msgid "optional"
1432
  msgstr ""
1433
 
1434
+ #: addons/azure.php:552
1435
  msgid "Prefix"
1436
  msgstr ""
1437
 
1438
+ #: addons/azure.php:547
1439
  msgid "See Microsoft's guidelines on container naming by following this link."
1440
  msgstr ""
1441
 
1442
+ #: addons/azure.php:547
1443
  msgid "If the %s does not already exist, then it will be created."
1444
  msgstr ""
1445
 
1446
+ #: addons/azure.php:547
1447
  msgid "Enter the path of the %s you wish to use here."
1448
  msgstr ""
1449
 
1450
+ #: addons/azure.php:536
1451
  msgid "This is not your Azure login - see the instructions if needing more guidance."
1452
  msgstr ""
1453
 
1454
+ #: addons/azure.php:535
1455
  msgid "Account Name"
1456
  msgstr ""
1457
 
1458
+ #: addons/azure.php:535 addons/azure.php:539
1459
  msgid "Azure"
1460
  msgstr ""
1461
 
1462
+ #: addons/azure.php:531
1463
  msgid "Create Azure credentials in your Azure developer console."
1464
  msgstr ""
1465
 
1466
+ #: addons/azure.php:480
1467
  msgid "Could not create the container"
1468
  msgstr ""
1469
 
1470
+ #: addons/azure.php:353
1471
  msgid "Could not access container"
1472
  msgstr ""
1473
 
1474
+ #: class-updraftplus.php:2863
1475
  msgid "To complete your migration/clone, you should now log in to the remote site and restore the backup set."
1476
  msgstr ""
1477
 
1499
  msgid "Not installed"
1500
  msgstr "لم يتم التثبيت"
1501
 
1502
+ #: addons/googlecloud.php:911 addons/s3-enhanced.php:54
1503
  msgid "Storage class"
1504
  msgstr ""
1505
 
1506
+ #: addons/googlecloud.php:906
1507
  msgid "See Google's guidelines on bucket naming by following this link."
1508
  msgstr ""
1509
 
1510
+ #: addons/googlecloud.php:906
1511
  msgid "Bucket names have to be globally unique. If the bucket does not already exist, then it will be created."
1512
  msgstr ""
1513
 
1514
+ #: addons/googlecloud.php:906
1515
  msgid "Enter the name of the %s bucket you wish to use here."
1516
  msgstr ""
1517
 
1518
+ #: addons/googlecloud.php:905
1519
  msgid "Bucket"
1520
  msgstr ""
1521
 
1522
+ #: addons/googlecloud.php:901
1523
  msgid "Otherwise, you can leave it blank."
1524
  msgstr ""
1525
 
1526
+ #: addons/googlecloud.php:901
1527
  msgid "N.B. This is only needed if you have not already created the bucket, and you wish UpdraftPlus to create it for you."
1528
  msgstr ""
1529
 
1530
+ #: addons/googlecloud.php:901
1531
  msgid "Enter the ID of the %s project you wish to use here."
1532
  msgstr ""
1533
 
1534
+ #: addons/googlecloud.php:874
1535
  msgid "Follow this link to your Google API Console, and there activate the Storage API and create a Client ID in the API Access section."
1536
  msgstr ""
1537
 
1538
+ #: addons/googlecloud.php:779
1539
  msgid "You must enter a project ID in order to be able to create a new bucket."
1540
  msgstr ""
1541
 
1542
+ #: addons/googlecloud.php:900
1543
  msgid "Project ID"
1544
  msgstr ""
1545
 
1546
+ #: addons/googlecloud.php:645
1547
  msgid "You must save and authenticate before you can test your settings."
1548
  msgstr ""
1549
 
1550
+ #: addons/googlecloud.php:510
1551
  msgid "Have not yet obtained an access token from Google - you need to authorise or re-authorise your connection to Google Cloud."
1552
  msgstr ""
1553
 
1554
+ #: addons/googlecloud.php:241 addons/googlecloud.php:314
1555
+ #: addons/googlecloud.php:771 addons/googlecloud.php:818
1556
  msgid "You do not have access to this bucket."
1557
  msgstr ""
1558
 
1559
+ #: addons/googlecloud.php:241 addons/googlecloud.php:294
1560
+ #: addons/googlecloud.php:304 addons/googlecloud.php:314
1561
+ #: addons/googlecloud.php:610 addons/googlecloud.php:771
1562
+ #: addons/googlecloud.php:818 addons/googlecloud.php:868
1563
+ #: addons/googlecloud.php:885 addons/googlecloud.php:893
1564
+ #: addons/googlecloud.php:906
1565
  msgid "Google Cloud"
1566
  msgstr ""
1567
 
1568
+ #: addons/googlecloud.php:241 addons/googlecloud.php:294
1569
+ #: addons/googlecloud.php:314 addons/googlecloud.php:771
1570
+ #: addons/googlecloud.php:818
1571
  msgid "%s Service Exception."
1572
  msgstr ""
1573
 
1604
  msgid "Press here to look inside your remote storage methods for any existing backup sets (from any site, if they are stored in the same folder)."
1605
  msgstr ""
1606
 
1607
+ #: admin.php:1486
1608
  msgid "Backup sets removed:"
1609
  msgstr ""
1610
 
1611
+ #: admin.php:723
1612
  msgid "Processing..."
1613
  msgstr ""
1614
 
1615
+ #: admin.php:721
1616
  msgid "For backups older than"
1617
  msgstr ""
1618
 
1619
+ #: admin.php:720
1620
  msgid "week(s)"
1621
  msgstr ""
1622
 
1623
+ #: admin.php:719
1624
  msgid "hour(s)"
1625
  msgstr ""
1626
 
1627
+ #: admin.php:718
1628
  msgid "day(s)"
1629
  msgstr ""
1630
 
1631
+ #: admin.php:717
1632
  msgid "in the month"
1633
  msgstr ""
1634
 
1635
+ #: admin.php:716
1636
  msgid "day"
1637
  msgstr ""
1638
 
1652
  msgid "This problem is caused by trying to restore a database on a very old MySQL version that is incompatible with the source database."
1653
  msgstr ""
1654
 
1655
+ #: methods/updraftvault.php:616
1656
  msgid "You do not currently have any UpdraftPlus Vault quota"
1657
  msgstr ""
1658
 
1659
+ #: class-updraftplus.php:4277
1660
  msgid "You must upgrade MySQL to be able to use this database."
1661
  msgstr ""
1662
 
1663
+ #: class-updraftplus.php:4277
1664
  msgid "The database backup uses MySQL features not available in the old MySQL version (%s) that this site is running on."
1665
  msgstr ""
1666
 
1667
+ #: admin.php:2178
1668
  msgid "The UpdraftPlus directory in wp-content/plugins has white-space in it; WordPress does not like this. You should rename the directory to wp-content/plugins/updraftplus to fix this problem."
1669
  msgstr ""
1670
 
1671
+ #: methods/updraftvault.php:343
1672
  msgid "Don't know your email address, or forgotten your password?"
1673
  msgstr ""
1674
 
1675
+ #: methods/updraftvault.php:336
1676
  msgid "Enter your UpdraftPlus.Com email / password here to connect:"
1677
  msgstr ""
1678
 
1679
+ #: methods/updraftvault.php:298 methods/updraftvault.php:328
1680
  msgid "Read the FAQs here."
1681
  msgstr ""
1682
 
1683
+ #: addons/s3-enhanced.php:69
1684
  msgid "Check this box to use Amazon's server-side encryption"
1685
  msgstr ""
1686
 
1687
+ #: addons/s3-enhanced.php:68
1688
  msgid "Server-side encryption"
1689
  msgstr ""
1690
 
1691
+ #: methods/updraftvault.php:625
1692
  msgid "If you have forgotten your password, then go here to change your password on updraftplus.com."
1693
  msgstr ""
1694
 
1695
+ #: admin.php:970
1696
  msgid "Go to the remote storage settings in order to connect."
1697
  msgstr ""
1698
 
1699
+ #: admin.php:970
1700
  msgid "%s has been chosen for remote storage, but you are not currently connected."
1701
  msgstr ""
1702
 
1703
+ #: methods/updraftvault.php:325
1704
  msgid "Payments can be made in US dollars, euros or GB pounds sterling, via card or PayPal."
1705
  msgstr ""
1706
 
1707
+ #: admin.php:693
1708
  msgid "Update quota count"
1709
  msgstr ""
1710
 
1711
+ #: admin.php:692
1712
  msgid "Counting..."
1713
  msgstr ""
1714
 
1715
+ #: admin.php:691
1716
  msgid "Disconnecting..."
1717
  msgstr ""
1718
 
1719
+ #: admin.php:689
1720
  msgid "Connecting..."
1721
  msgstr ""
1722
 
1723
+ #: methods/updraftvault.php:399 methods/updraftvault.php:468
1724
  msgid "Refresh current status"
1725
  msgstr ""
1726
 
1727
+ #: methods/updraftvault.php:397 methods/updraftvault.php:413
1728
+ #: methods/updraftvault.php:415 methods/updraftvault.php:468
1729
  msgid "Get more quota"
1730
  msgstr ""
1731
 
1732
+ #: methods/updraftvault.php:394 methods/updraftvault.php:410
1733
+ #: methods/updraftvault.php:449
1734
  msgid "Current use:"
1735
  msgstr ""
1736
 
1737
+ #: methods/updraftvault.php:389
1738
  msgid "You can get more quota here"
1739
  msgstr ""
1740
 
1741
+ #: methods/updraftvault.php:389
1742
  msgid "%s Error: you have insufficient storage quota available (%s) to upload this archive (%s)."
1743
  msgstr ""
1744
 
1745
+ #: admin.php:690 methods/updraftvault.php:381
1746
  msgid "Disconnect"
1747
  msgstr ""
1748
 
1749
+ #: methods/updraftvault.php:373
1750
  msgid "Quota:"
1751
  msgstr ""
1752
 
1753
+ #: methods/updraftvault.php:371
1754
  msgid "Vault owner"
1755
  msgstr ""
1756
 
1757
+ #: methods/updraftvault.php:371
1758
  msgid "Well done - there's nothing more needed to set up."
1759
  msgstr ""
1760
 
1761
+ #: methods/updraftvault.php:371
1762
  msgid "This site is <strong>connected</strong> to UpdraftPlus Vault."
1763
  msgstr ""
1764
 
1765
+ #: methods/updraftvault.php:367
1766
  msgid "You are <strong>not connected</strong> to UpdraftPlus Vault."
1767
  msgstr ""
1768
 
1769
+ #: methods/updraftvault.php:343
1770
  msgid "Go here for help"
1771
  msgstr ""
1772
 
1773
+ #: methods/updraftvault.php:338
1774
  msgid "E-mail"
1775
  msgstr ""
1776
 
1777
+ #: methods/updraftvault.php:331 methods/updraftvault.php:346
1778
  msgid "Back..."
1779
  msgstr ""
1780
 
1781
+ #: methods/updraftvault.php:325
1782
  msgid "Subscriptions can be cancelled at any time."
1783
  msgstr ""
1784
 
1785
+ #: methods/updraftvault.php:308 methods/updraftvault.php:314
1786
+ #: methods/updraftvault.php:320
1787
  msgid "%s per quarter"
1788
  msgstr ""
1789
 
1790
+ #: central/bootstrap.php:542 methods/updraftvault.php:298
1791
+ #: methods/updraftvault.php:328
1792
  msgid "Read more about it here."
1793
  msgstr ""
1794
 
1795
+ #: methods/updraftvault.php:298 methods/updraftvault.php:328
1796
  msgid "UpdraftPlus Vault is built on top of Amazon's world-leading data-centres, with redundant data storage to achieve 99.999999999% reliability."
1797
  msgstr ""
1798
 
1799
+ #: methods/updraftvault.php:294
1800
  msgid "Already purchased space?"
1801
  msgstr ""
1802
 
1803
+ #: methods/updraftvault.php:291
1804
  msgid "Show the options"
1805
  msgstr ""
1806
 
1807
+ #: methods/updraftvault.php:290
1808
  msgid "First time user?"
1809
  msgstr ""
1810
 
1811
+ #: methods/updraftvault.php:287 methods/updraftvault.php:304
1812
  msgid "Press a button to get started."
1813
  msgstr ""
1814
 
1815
+ #: methods/updraftvault.php:287 methods/updraftvault.php:304
1816
  msgid "UpdraftPlus Vault brings you storage that is <strong>reliable, easy to use and a great price</strong>."
1817
  msgstr ""
1818
 
1819
+ #: methods/updraftvault.php:242
1820
  msgid "You have an UpdraftPlus Vault subscription that has not been renewed, and the grace period has expired. In a few days' time, your stored data will be permanently removed. If you do not wish this to happen, then you should renew as soon as possible."
1821
  msgstr ""
1822
 
1823
+ #: methods/updraftvault.php:239
1824
  msgid "You have an UpdraftPlus Vault subscription with overdue payment. You are within the few days of grace period before it will be suspended, and you will lose your quota and access to data stored within it. Please renew as soon as possible!"
1825
  msgstr ""
1826
 
1827
+ #: methods/updraftvault.php:236
1828
  msgid "Your UpdraftPlus Premium purchase is over a year ago. You should renew immediately to avoid losing the 12 months of free storage allowance that you get for being a current UpdraftPlus Premium customer."
1829
  msgstr ""
1830
 
1831
+ #: methods/updraftvault.php:90
1832
  msgid "Updraft Vault"
1833
  msgstr ""
1834
 
1835
+ #: addons/azure.php:375 addons/googlecloud.php:729 methods/s3.php:1059
1836
  msgid "Delete failed:"
1837
  msgstr ""
1838
 
1840
  msgid "The zip engine returned the message: %s."
1841
  msgstr ""
1842
 
1843
+ #: addons/s3-enhanced.php:360
1844
  msgid "Without this permission, UpdraftPlus cannot delete backups - you should also set your 'retain' settings very high to prevent seeing deletion errors."
1845
  msgstr ""
1846
 
1847
+ #: addons/s3-enhanced.php:358
1848
  msgid "Allow deletion"
1849
  msgstr ""
1850
 
1851
+ #: addons/s3-enhanced.php:356
1852
  msgid "Without this permission, you cannot directly download or restore using UpdraftPlus, and will instead need to visit the AWS website."
1853
  msgstr ""
1854
 
1855
+ #: addons/s3-enhanced.php:354
1856
  msgid "Allow download"
1857
  msgstr ""
1858
 
1860
  msgid "If sending directly from site to site does not work for you, then there are three other methods - please try one of these instead."
1861
  msgstr ""
1862
 
1863
+ #: addons/migrator.php:1742 admin.php:699
1864
  msgid "You should check that the remote site is online, not firewalled, does not have security modules that may be blocking access, has UpdraftPlus version %s or later active and that the keys have been entered correctly."
1865
  msgstr ""
1866
 
1928
  msgid "Backup made by %s"
1929
  msgstr ""
1930
 
1931
+ #: methods/addon-base-v2.php:177
1932
  msgid "This storage method does not allow downloading"
1933
  msgstr ""
1934
 
1935
+ #: admin.php:3437
1936
  msgid "(backup set imported from remote location)"
1937
  msgstr ""
1938
 
1939
+ #: templates/wp-admin/settings/existing-backups-table.php:82
1940
  msgid "Site"
1941
  msgstr ""
1942
 
1943
+ #: templates/wp-admin/settings/existing-backups-table.php:81
1944
  msgid "Backup sent to remote site - not available for download."
1945
  msgstr ""
1946
 
1952
  msgid "This backup set was not known by UpdraftPlus to be created by the current WordPress installation, but was either found in remote storage, or was sent from a remote site."
1953
  msgstr ""
1954
 
1955
+ #: addons/migrator.php:1770 admin.php:706
1956
  msgid "Testing connection..."
1957
  msgstr ""
1958
 
1959
+ #: admin.php:703
1960
  msgid "Deleting..."
1961
  msgstr ""
1962
 
1963
+ #: admin.php:702
1964
  msgid "key name"
1965
  msgstr ""
1966
 
1967
+ #: admin.php:700
1968
  msgid "Please give this key a name (e.g. indicate the site it is for):"
1969
  msgstr ""
1970
 
1971
+ #: admin.php:697
1972
  msgid "Creating..."
1973
  msgstr ""
1974
 
1992
  msgid "Or, send a backup to another site"
1993
  msgstr ""
1994
 
1995
+ #: addons/migrator.php:1937 admin.php:707
1996
  msgid "Send"
1997
  msgstr ""
1998
 
1999
+ #: addons/migrator.php:1931 admin.php:698
2000
  msgid "Send to site:"
2001
  msgstr ""
2002
 
2060
  msgid "A \"migration\" is ultimately the same as a restoration - but using backup archives that you import from another site."
2061
  msgstr ""
2062
 
2063
+ #: addons/migrator.php:2180 admin.php:695
2064
  msgid "Add site"
2065
  msgstr ""
2066
 
2067
+ #: admin.php:694
2068
  msgid "Adding..."
2069
  msgstr ""
2070
 
2096
  msgid "To import a backup set, go to the \"Existing Backups\" tab"
2097
  msgstr ""
2098
 
2099
+ #: admin.php:686 admin.php:712 admin.php:713
2100
  msgid "You have made changes to your settings, and not saved."
2101
  msgstr ""
2102
 
2103
+ #: addons/onedrive.php:998
2104
  msgid "N.B. %s is not case-sensitive."
2105
  msgstr ""
2106
 
2107
+ #: addons/onedrive.php:986
2108
  msgid "If OneDrive later shows you the message \"unauthorized_client\", then you did not enter a valid client ID here."
2109
  msgstr ""
2110
 
2111
+ #: addons/azure.php:531 addons/migrator.php:1757 addons/onedrive.php:970
2112
  msgid "For longer help, including screenshots, follow this link."
2113
  msgstr ""
2114
 
2115
+ #: addons/onedrive.php:970
2116
  msgid "Create OneDrive credentials in your OneDrive developer console."
2117
  msgstr ""
2118
 
2119
+ #: addons/onedrive.php:965
2120
  msgid "You must add the following as the authorised redirect URI in your OneDrive console (under \"API Settings\") when asked"
2121
  msgstr ""
2122
 
2123
+ #: addons/onedrive.php:938 addons/onedrive.php:940
2124
  msgid "%s authorisation failed:"
2125
  msgstr ""
2126
 
2127
+ #: addons/onedrive.php:795 addons/onedrive.php:985 addons/onedrive.php:989
2128
  msgid "OneDrive"
2129
  msgstr ""
2130
 
2131
+ #: addons/onedrive.php:628
2132
  msgid "Please re-authorize the connection to your %s account."
2133
  msgstr ""
2134
 
2136
  msgid "configure it here"
2137
  msgstr ""
2138
 
2139
+ #: addons/onedrive.php:621 methods/updraftvault.php:589
2140
  msgid "To remove the block, please go here."
2141
  msgstr ""
2142
 
2143
+ #: addons/s3-enhanced.php:447
2144
  msgid "Do remember to save your settings."
2145
  msgstr ""
2146
 
2147
+ #: addons/s3-enhanced.php:447
2148
  msgid "You are now using a IAM user account to access your bucket."
2149
  msgstr ""
2150
 
2151
+ #: addons/s3-enhanced.php:352
2152
  msgid "S3 bucket"
2153
  msgstr ""
2154
 
2155
+ #: addons/s3-enhanced.php:342
2156
  msgid "China (Beijing) (restricted)"
2157
  msgstr ""
2158
 
2159
+ #: addons/s3-enhanced.php:341
2160
  msgid "South America (Sao Paulo)"
2161
  msgstr ""
2162
 
2163
+ #: addons/s3-enhanced.php:340
2164
  msgid "Asia Pacific (Tokyo)"
2165
  msgstr ""
2166
 
2167
+ #: addons/s3-enhanced.php:338
2168
  msgid "Asia Pacific (Sydney)"
2169
  msgstr ""
2170
 
2171
+ #: addons/s3-enhanced.php:337
2172
  msgid "Asia Pacific (Singapore)"
2173
  msgstr ""
2174
 
2175
+ #: addons/s3-enhanced.php:331
2176
  msgid "US Government West (restricted)"
2177
  msgstr ""
2178
 
2179
+ #: addons/s3-enhanced.php:330
2180
  msgid "US West (N. California)"
2181
  msgstr ""
2182
 
2183
+ #: addons/s3-enhanced.php:329
2184
  msgid "US West (Oregon)"
2185
  msgstr ""
2186
 
2187
+ #: addons/s3-enhanced.php:327
2188
  msgid "US Standard (default)"
2189
  msgstr ""
2190
 
2191
+ #: addons/s3-enhanced.php:323
2192
  msgid "S3 storage region"
2193
  msgstr ""
2194
 
2195
+ #: addons/s3-enhanced.php:321
2196
  msgid "New IAM username"
2197
  msgstr ""
2198
 
2199
+ #: addons/s3-enhanced.php:320
2200
  msgid "Admin secret key"
2201
  msgstr ""
2202
 
2203
+ #: addons/s3-enhanced.php:319
2204
  msgid "Admin access key"
2205
  msgstr ""
2206
 
2207
+ #: addons/s3-enhanced.php:312
2208
  msgid "Then, these lower-powered access credentials can be used, instead of storing your administrative keys."
2209
  msgstr ""
2210
 
2211
+ #: addons/s3-enhanced.php:312
2212
  msgid "These will be used to create a new user and key pair with an IAM policy attached which will only allow it to access the indicated bucket."
2213
  msgstr ""
2214
 
2215
+ #: addons/s3-enhanced.php:312
2216
  msgid "Enter your administrative Amazon S3 access/secret keys (this needs to be a key pair with enough rights to create new users and buckets), and a new (unique) username for the new user and a bucket name."
2217
  msgstr ""
2218
 
2219
+ #: addons/s3-enhanced.php:389
2220
  msgid "Create new IAM user and S3 bucket"
2221
  msgstr ""
2222
 
2223
+ #: addons/s3-enhanced.php:302
2224
  msgid "Secret Key: %s"
2225
  msgstr ""
2226
 
2227
+ #: addons/s3-enhanced.php:302
2228
  msgid "Access Key: %s"
2229
  msgstr ""
2230
 
2231
+ #: addons/s3-enhanced.php:290 addons/s3-enhanced.php:292
2232
  msgid "Failed to apply User Policy"
2233
  msgstr ""
2234
 
2235
+ #: addons/s3-enhanced.php:231 addons/s3-enhanced.php:235
2236
  msgid "Operation to create user Access Key failed"
2237
  msgstr ""
2238
 
2239
+ #: addons/s3-enhanced.php:229
2240
  msgid "Failed to create user Access Key"
2241
  msgstr ""
2242
 
2243
+ #: addons/s3-enhanced.php:209 addons/s3-enhanced.php:212
2244
+ #: addons/s3-enhanced.php:216
2245
  msgid "IAM operation failed (%s)"
2246
  msgstr ""
2247
 
2248
+ #: addons/s3-enhanced.php:207
2249
  msgid "Conflict: that user already exists"
2250
  msgstr ""
2251
 
2252
+ #: addons/s3-enhanced.php:179
2253
  msgid "Failure: We could not successfully access or create such a bucket. Please check your access credentials, and if those are correct then try another bucket name (as another AWS user may already have taken your name)."
2254
  msgstr ""
2255
 
2256
+ #: addons/s3-enhanced.php:132
2257
  msgid "AWS authentication failed"
2258
  msgstr ""
2259
 
2260
+ #: addons/s3-enhanced.php:125
2261
  msgid "Cannot create new AWS user, since the old AWS toolkit is being used."
2262
  msgstr ""
2263
 
2264
+ #: addons/s3-enhanced.php:100
2265
  msgid "You need to enter a bucket"
2266
  msgstr ""
2267
 
2268
+ #: addons/s3-enhanced.php:97
2269
  msgid "You need to enter a new IAM username"
2270
  msgstr ""
2271
 
2272
+ #: addons/s3-enhanced.php:94
2273
  msgid "You need to enter an admin secret key"
2274
  msgstr ""
2275
 
2276
+ #: addons/s3-enhanced.php:91
2277
  msgid "You need to enter an admin access key"
2278
  msgstr ""
2279
 
2280
+ #: addons/s3-enhanced.php:79
2281
  msgid "If you have an AWS admin user, then you can use this wizard to quickly create a new AWS (IAM) user with access to only this bucket (rather than your whole account)"
2282
  msgstr ""
2283
 
2284
+ #: methods/s3.php:862
2285
  msgid "To create a new IAM sub-user and access key that has access only to this bucket, use this add-on."
2286
  msgstr ""
2287
 
2297
  msgid "Uploads path (%s) has changed during a migration - resetting (to: %s)"
2298
  msgstr ""
2299
 
2300
+ #: addons/onedrive.php:598 addons/onedrive.php:621 methods/updraftvault.php:589
2301
  #: udaddons/updraftplus-addons.php:732 udaddons/updraftplus-addons.php:747
2302
  msgid "This most likely means that you share a webserver with a hacked website that has been used in previous attacks."
2303
  msgstr ""
2304
 
2305
+ #: addons/onedrive.php:621 methods/updraftvault.php:589
2306
  #: udaddons/updraftplus-addons.php:747
2307
  msgid "It appears that your web server's IP Address (%s) is blocked."
2308
  msgstr ""
2309
 
2310
+ #: addons/onedrive.php:621 methods/updraftvault.php:589
2311
  #: udaddons/updraftplus-addons.php:747
2312
  msgid "UpdraftPlus.com has responded with 'Access Denied'."
2313
  msgstr ""
2358
  msgid "(at same time as files backup)"
2359
  msgstr ""
2360
 
2361
+ #: admin.php:2958
2362
  msgid "No backup has been completed"
2363
  msgstr ""
2364
 
2406
  msgid "Backup (where relevant) plugins, themes and the WordPress database with UpdraftPlus before updating"
2407
  msgstr ""
2408
 
2409
+ #: methods/s3.php:148 methods/s3.php:149 methods/s3.php:150 methods/s3.php:158
2410
+ #: methods/s3.php:159 methods/s3.php:160
2411
  msgid "%s Error: Failed to initialise"
2412
  msgstr ""
2413
 
2414
+ #: templates/wp-admin/settings/form-contents.php:261
2415
  msgctxt "Uploader: Drop db.gz.crypt files here to upload them for decryption - or - Select Files"
2416
  msgid "or"
2417
  msgstr ""
2421
  msgid "or"
2422
  msgstr ""
2423
 
2424
+ #: admin.php:680
2425
  msgid "You did not select any components to restore. Please select at least one, and then try again."
2426
  msgstr ""
2427
 
2428
+ #: addons/sftp.php:399
2429
  msgctxt "Do not translate BEGIN RSA PRIVATE KEY. PCKS1, XML, PEM and PuTTY are also technical acronyms which should not be translated."
2430
  msgid "PKCS1 (PEM header: BEGIN RSA PRIVATE KEY), XML and PuTTY format keys are accepted."
2431
  msgstr ""
2432
 
2433
+ #: addons/sftp.php:362
2434
  msgid "Resuming partial uploads is supported for SFTP, but not for SCP. Thus, if using SCP then you will need to ensure that your webserver allows PHP processes to run long enough to upload your largest backup file."
2435
  msgstr ""
2436
 
2437
+ #: methods/openstack2.php:173
2438
  msgctxt "\"tenant\" is a term used with OpenStack storage - Google for \"OpenStack tenant\" to get more help on its meaning"
2439
  msgid "tenant"
2440
  msgstr ""
2441
 
2442
+ #: methods/openstack2.php:123
2443
  msgctxt "Keystone and swauth are technical terms which cannot be translated"
2444
  msgid "This needs to be a v2 (Keystone) authentication URI; v1 (Swauth) is not supported."
2445
  msgstr ""
2446
 
2447
+ #: templates/wp-admin/settings/form-contents.php:332
2448
  msgid "your site's admin address"
2449
  msgstr ""
2450
 
2451
+ #: templates/wp-admin/settings/form-contents.php:332
2452
  msgid "Check this box to have a basic report sent to"
2453
  msgstr ""
2454
 
2455
+ #: admin.php:2967
2456
  msgctxt "i.e. Non-automatic"
2457
  msgid "Manual"
2458
  msgstr ""
2470
  msgid "Any other file/directory on your server that you wish to back up"
2471
  msgstr ""
2472
 
2473
+ #: admin.php:2195
2474
  msgid "For even more features and personal support, check out "
2475
  msgstr ""
2476
 
2486
  msgid "Database decryption phrase"
2487
  msgstr ""
2488
 
2489
+ #: addons/autobackup.php:131 addons/autobackup.php:966 admin.php:685
2490
  msgid "Automatic backup before update"
2491
  msgstr ""
2492
 
2574
  msgid "Note that after you have claimed your add-ons, you can remove your password (but not the email address) from the settings below, without affecting this site's access to updates."
2575
  msgstr ""
2576
 
2577
+ #: admin.php:2528 admin.php:3460
2578
  msgid "View Log"
2579
  msgstr ""
2580
 
2581
+ #: templates/wp-admin/settings/existing-backups-table.php:15
2582
  msgid "Backup data (click to download)"
2583
  msgstr ""
2584
 
2585
+ #: templates/wp-admin/settings/existing-backups-table.php:14
2586
  msgid "Backup date"
2587
  msgstr ""
2588
 
2591
  msgid "and retain this many scheduled backups"
2592
  msgstr ""
2593
 
2594
+ #: admin.php:2928
2595
  msgid "incremental backup; base backup: %s"
2596
  msgstr ""
2597
 
2603
  msgid "Upload files into UpdraftPlus."
2604
  msgstr ""
2605
 
2606
+ #: admin.php:921 includes/class-commands.php:364
2607
  #: templates/wp-admin/settings/tab-status.php:22
2608
  msgid "The 'Backup Now' button is disabled as your backup directory is not writable (go to the 'Settings' tab and find the relevant option)."
2609
  msgstr ""
2610
 
2611
+ #: class-updraftplus.php:4227
2612
  msgid "Backup label:"
2613
  msgstr ""
2614
 
2615
+ #: admin.php:1722
2616
  msgid "Error: unexpected file read fail"
2617
  msgstr ""
2618
 
2632
  msgid "Your label for this backup (optional)"
2633
  msgstr ""
2634
 
2635
+ #: addons/googlecloud.php:868 methods/googledrive.php:902
2636
  msgid "%s does not allow authorisation of sites hosted on direct IP addresses. You will need to change your site's address (%s) before you can use %s for storage."
2637
  msgstr ""
2638
 
2639
+ #: methods/updraftvault.php:628 udaddons/updraftplus-addons.php:789
2640
  msgid "You entered an email address that was not recognised by UpdraftPlus.Com"
2641
  msgstr ""
2642
 
2643
+ #: methods/updraftvault.php:625 udaddons/updraftplus-addons.php:785
2644
  msgid "Your email address was valid, but your password was not recognised by UpdraftPlus.Com."
2645
  msgstr ""
2646
 
2647
+ #: methods/updraftvault.php:565 udaddons/updraftplus-addons.php:655
2648
  msgid "You need to supply both an email address and a password"
2649
  msgstr ""
2650
 
2652
  msgid "To proceed, press 'Backup Now'. Then, watch the 'Last Log Message' field for activity."
2653
  msgstr ""
2654
 
2655
+ #: class-updraftplus.php:4246
2656
  msgid "If you want to restore a multisite backup, you should first set up your WordPress installation as a multisite."
2657
  msgstr ""
2658
 
2659
+ #: class-updraftplus.php:4246
2660
  msgid "Your backup is of a WordPress multisite install; but this site is not. Only the first site of the network will be accessible."
2661
  msgstr ""
2662
 
2692
  msgid "You need to connect to receive future updates to UpdraftPlus."
2693
  msgstr ""
2694
 
2695
+ #: class-updraftplus.php:4219
2696
  msgid "Any support requests to do with %s should be raised with your web hosting company."
2697
  msgstr ""
2698
 
2699
+ #: class-updraftplus.php:4219
2700
  msgid "You should only proceed if you cannot update the current server and are confident (or willing to risk) that your plugins/themes/etc. are compatible with the older %s version."
2701
  msgstr ""
2702
 
2703
+ #: class-updraftplus.php:4219
2704
  msgid "This is significantly newer than the server which you are now restoring onto (version %s)."
2705
  msgstr ""
2706
 
2707
+ #: class-updraftplus.php:4219
2708
  msgid "The site in this backup was running on a webserver with version %s of %s. "
2709
  msgstr ""
2710
 
2729
  msgid "UpdraftPlus is on social media - check us out!"
2730
  msgstr ""
2731
 
2732
+ #: admin.php:3521
2733
  msgid "Why am I seeing this?"
2734
  msgstr ""
2735
 
2741
  msgid "Press here to look inside your UpdraftPlus directory (in your web hosting space) for any new backup sets that you have uploaded."
2742
  msgstr ""
2743
 
2744
+ #: admin.php:1670 admin.php:1682
2745
  msgid "Start backup"
2746
  msgstr ""
2747
 
2748
+ #: class-updraftplus.php:4191 restorer.php:996
2749
  msgid "You are using the %s webserver, but do not seem to have the %s module loaded."
2750
  msgstr ""
2751
 
2752
+ #: admin.php:2851
2753
  msgid "You will need to consult with your web hosting provider to find out how to set permissions for a WordPress plugin to write to the directory."
2754
  msgstr ""
2755
 
2757
  msgid "Unless you have a problem, you can completely ignore everything here."
2758
  msgstr ""
2759
 
2760
+ #: admin.php:1881
2761
  msgid "This file could not be uploaded"
2762
  msgstr ""
2763
 
2764
+ #: admin.php:1846
2765
  msgid "You will find more information about this in the Settings section."
2766
  msgstr ""
2767
 
2781
  msgid "Memory limit"
2782
  msgstr ""
2783
 
2784
+ #: class-updraftplus.php:4349 restorer.php:1441
2785
  msgid "restoration"
2786
  msgstr ""
2787
 
2809
  msgid "Backup succeeded"
2810
  msgstr ""
2811
 
2812
+ #: admin.php:2968 admin.php:2969 admin.php:2970 updraftplus.php:92
2813
  #: updraftplus.php:93
2814
  msgid "Every %s hours"
2815
  msgstr ""
2864
  msgid "N.B. If you install UpdraftPlus on several WordPress sites, then you cannot re-use your project; you must create a new one from your Google API console for each site."
2865
  msgstr ""
2866
 
2867
+ #: admin.php:3286
2868
  msgid "You have not yet made any backups."
2869
  msgstr ""
2870
 
2871
+ #: templates/wp-admin/settings/form-contents.php:224
2872
  msgid "Database Options"
2873
  msgstr ""
2874
 
2884
  msgid "Free disk space in account:"
2885
  msgstr ""
2886
 
2887
+ #: admin.php:4080 templates/wp-admin/settings/tab-status.php:27
2888
  msgid "This button is disabled because your backup directory is not writable (see the settings)."
2889
  msgstr ""
2890
 
2891
+ #: admin.php:518 admin.php:654 admin.php:1535
2892
  #: includes/deprecated-actions.php:30
2893
  #: templates/wp-admin/settings/downloading-and-restoring.php:22
2894
  #: templates/wp-admin/settings/tab-bar.php:6
2895
  msgid "Existing Backups"
2896
  msgstr ""
2897
 
2898
+ #: admin.php:510 templates/wp-admin/settings/tab-bar.php:5
2899
  msgid "Current Status"
2900
  msgstr ""
2901
 
2902
+ #: admin.php:926
2903
  msgid "To change any of the default settings of what is backed up, to configure scheduled backups, to send your backups to remote storage (recommended), and more, go to the settings tab."
2904
  msgstr ""
2905
 
2906
+ #: admin.php:926
2907
  msgid "To make a backup, just press the Backup Now button."
2908
  msgstr ""
2909
 
2910
+ #: admin.php:926
2911
  msgid "Welcome to UpdraftPlus!"
2912
  msgstr ""
2913
 
2979
  msgid "user"
2980
  msgstr ""
2981
 
2982
+ #: class-updraftplus.php:1587
2983
  msgid "External database (%s)"
2984
  msgstr ""
2985
 
2991
  msgid "failed to access parent folder"
2992
  msgstr ""
2993
 
2994
+ #: addons/googlecloud.php:590 addons/onedrive.php:763 addons/onedrive.php:774
2995
  #: methods/googledrive.php:328
2996
  msgid "However, subsequent access attempts failed:"
2997
  msgstr ""
2998
 
2999
+ #: admin.php:3311
3000
  msgid "External database"
3001
  msgstr ""
3002
 
3003
+ #: templates/wp-admin/settings/form-contents.php:366
3004
  msgid "This will also cause debugging output from all plugins to be shown upon this screen - please do not be surprised to see these."
3005
  msgstr ""
3006
 
3007
+ #: templates/wp-admin/settings/form-contents.php:306
3008
  msgid "Back up more databases"
3009
  msgstr ""
3010
 
3011
+ #: templates/wp-admin/settings/form-contents.php:263
3012
  msgid "First, enter the decryption key"
3013
  msgstr ""
3014
 
3015
+ #: templates/wp-admin/settings/form-contents.php:245
3016
  msgid "You can manually decrypt an encrypted database here."
3017
  msgstr ""
3018
 
3019
+ #: templates/wp-admin/settings/form-contents.php:233
3020
  msgid "It can also backup external databases."
3021
  msgstr ""
3022
 
3023
+ #: templates/wp-admin/settings/form-contents.php:233
3024
  msgid "Don't want to be spied on? UpdraftPlus Premium can encrypt your database backup."
3025
  msgstr ""
3026
 
3028
  msgid "use UpdraftPlus Premium"
3029
  msgstr ""
3030
 
3031
+ #: class-updraftplus.php:4109
3032
  msgid "Decryption failed. The database file is encrypted."
3033
  msgstr ""
3034
 
3056
  msgid "In %s, path names are case sensitive."
3057
  msgstr ""
3058
 
3059
+ #: addons/azure.php:553 addons/google-enhanced.php:82 addons/onedrive.php:998
3060
  msgid "If you leave it blank, then the backup will be placed in the root of your %s"
3061
  msgstr ""
3062
 
3063
+ #: addons/google-enhanced.php:82 addons/googlecloud.php:906
3064
+ #: addons/onedrive.php:998
3065
  msgid "e.g. %s"
3066
  msgstr ""
3067
 
3068
+ #: addons/google-enhanced.php:82 addons/onedrive.php:998
3069
  msgid "If the folder does not already exist, then it will be created."
3070
  msgstr ""
3071
 
3072
+ #: addons/google-enhanced.php:82 addons/onedrive.php:998
3073
  msgid "Enter the path of the %s folder you wish to use here."
3074
  msgstr ""
3075
 
3076
+ #: addons/azure.php:546 methods/openstack2.php:154
3077
  msgid "Container"
3078
  msgstr ""
3079
 
3080
+ #: methods/openstack2.php:137
3081
  msgid "Leave this blank, and a default will be chosen."
3082
  msgstr ""
3083
 
3084
+ #: methods/openstack2.php:128
3085
  msgid "Tenant"
3086
  msgstr ""
3087
 
3088
+ #: methods/openstack2.php:128
3089
  msgid "Follow this link for more information"
3090
  msgstr ""
3091
 
3092
+ #: methods/openstack2.php:120 methods/openstack2.php:178
3093
  msgid "authentication URI"
3094
  msgstr ""
3095
 
3096
+ #: methods/openstack2.php:115
3097
  msgid "Get your access credentials from your OpenStack Swift provider, and then pick a container name to use for storage. This container will be created for you if it does not already exist."
3098
  msgstr ""
3099
 
3100
+ #: methods/addon-base-v2.php:194 methods/addon-base-v2.php:214
3101
  msgid "Failed to download %s"
3102
  msgstr ""
3103
 
3104
+ #: methods/addon-base-v2.php:208
3105
  msgid "Failed to download"
3106
  msgstr ""
3107
 
3113
  msgid "Failed to upload %s"
3114
  msgstr ""
3115
 
3116
+ #: methods/dropbox.php:614 methods/dropbox.php:616
3117
  msgid "Success:"
3118
  msgstr ""
3119
 
3120
+ #: addons/onedrive.php:1006 methods/dropbox.php:512
3121
  msgid "<strong>After</strong> you have saved your settings (by clicking 'Save Changes' below), then come back here once and click this link to complete authentication with %s."
3122
  msgstr ""
3123
 
3124
+ #: addons/onedrive.php:1004 methods/dropbox.php:509
3125
  msgid "(You appear to be already authenticated)."
3126
  msgstr ""
3127
 
3128
+ #: methods/dropbox.php:504 methods/dropbox.php:510 methods/dropbox.php:512
3129
  msgid "Dropbox"
3130
  msgstr ""
3131
 
3132
+ #: addons/onedrive.php:1003 methods/dropbox.php:504
3133
  msgid "Authenticate with %s"
3134
  msgstr ""
3135
 
3136
+ #: methods/cloudfiles.php:407
3137
  msgid "Error downloading remote file: Failed to download"
3138
  msgstr ""
3139
 
3160
  msgid "%s error - failed to access the container"
3161
  msgstr ""
3162
 
3163
+ #: addons/googlecloud.php:948 addons/onedrive.php:1005 methods/dropbox.php:519
3164
  #: methods/googledrive.php:957
3165
  msgid "Account holder's name: %s."
3166
  msgstr ""
3177
  msgid "<strong>This is NOT a folder name</strong>."
3178
  msgstr ""
3179
 
3180
+ #: addons/google-enhanced.php:81 addons/onedrive.php:997
3181
  #: methods/googledrive.php:933 methods/googledrive.php:943
3182
  msgid "Folder"
3183
  msgstr ""
3184
 
3185
+ #: addons/googlecloud.php:280 addons/onedrive.php:375
3186
  #: methods/googledrive.php:863
3187
  msgid "%s download: failed: file not found"
3188
  msgstr ""
3189
 
3190
+ #: addons/googlecloud.php:610 methods/googledrive.php:348
3191
  msgid "Name: %s."
3192
  msgstr ""
3193
 
3207
  msgid "This remote storage method (%s) requires PHP %s or later."
3208
  msgstr ""
3209
 
3210
+ #: admin.php:3866
3211
  msgid "Theme directory (%s) not found, but lower-case version exists; updating database option accordingly"
3212
  msgstr ""
3213
 
3221
 
3222
  #: addons/migrator.php:375
3223
  #: templates/wp-admin/settings/downloading-and-restoring.php:56
3224
+ #: templates/wp-admin/settings/form-contents.php:253
3225
  msgid "This feature requires %s version %s or later"
3226
  msgstr ""
3227
 
3237
  msgid "Failed to unpack the archive"
3238
  msgstr ""
3239
 
3240
+ #: class-updraftplus.php:1145
3241
  msgid "Error - failed to download the file"
3242
  msgstr ""
3243
 
3257
  msgid "The installed version of UpdraftPlus Backup/Restore has not been tested on your version of WordPress (%s)."
3258
  msgstr ""
3259
 
3260
+ #: addons/sftp.php:443
3261
  msgid "password/key"
3262
  msgstr " الرقم السري/المفتاح"
3263
 
3264
+ #: addons/azure.php:539 addons/migrator.php:2198 addons/sftp.php:396
3265
+ #: admin.php:701
3266
  msgid "Key"
3267
  msgstr "مفتاح"
3268
 
3269
+ #: addons/sftp.php:391
3270
  msgid "Your login may be either password or key-based - you only need to enter one, not both."
3271
  msgstr "للدخول يجب ادخال إما الرقم السري أو المفتاح، وليس كلاهما."
3272
 
3278
  msgid "SCP/SFTP password/key"
3279
  msgstr "الرقم السري/المفتاح الخاص بـ SCP/SFTP"
3280
 
3281
+ #: admin.php:3346
3282
  msgid "Files backup (created by %s)"
3283
  msgstr "ملفات النسخة الإحتياطية (ولدت من طرف: %s.) "
3284
 
3285
+ #: admin.php:3346
3286
  msgid "Files and database WordPress backup (created by %s)"
3287
  msgstr "الملفات وقاعدة البيانات للووردبريس بالنسخة الإحتياطية (ولدت من طرف: %s.)"
3288
 
3289
+ #: addons/importer.php:261 admin.php:3340 class-updraftplus.php:2645
3290
  msgid "Backup created by: %s."
3291
  msgstr "ولدت النسخة الإحتياطية من طرف: %s."
3292
 
3293
+ #: admin.php:3309
3294
  msgid "Database (created by %s)"
3295
  msgstr "قاعدة بيانات (ولدت من طرف: %s.) "
3296
 
3297
+ #: admin.php:3303 admin.php:3342
3298
  msgid "unknown source"
3299
  msgstr "مصدر غير معروف"
3300
 
3306
  msgid "Upload backup files"
3307
  msgstr "رفع ملفات النسخة الإحتياطية"
3308
 
3309
+ #: admin.php:1925
3310
  msgid "This backup was created by %s, and can be imported."
3311
  msgstr "تم خلق النسخة الإحتياطية من طرف %s, ويمكن استيرادها."
3312
 
3313
+ #: admin.php:955
3314
  msgid "Read this page for a guide to possible causes and how to fix it."
3315
  msgstr "إقرأ هذه الصفحة لمعرفة المزيد وإمكانية الإصلاح."
3316
 
3317
+ #: admin.php:955
3318
  msgid "WordPress has a number (%d) of scheduled tasks which are overdue. Unless this is a development site, this probably means that the scheduler in your WordPress install is not working."
3319
  msgstr "ووردبريس يملك عدد (%d) من المهام المتأخرة. ما لم يكن هذا الموقع خاص بالتطوير، فهذا يعني أن خاصية المهام بالووردبريس غير شغالة."
3320
 
3321
+ #: admin.php:666 class-updraftplus.php:2652
3322
  msgid "If this is a backup created by a different backup plugin, then UpdraftPlus Premium may be able to help you."
3323
  msgstr "إن كانت هذه النسخة الإحتياطية خلقت بإستخدام تطبيق آخر، يمكن لإضافة UpdraftPlus Premium مساعدتك في حل المشكلة."
3324
 
3325
+ #: admin.php:665
3326
  msgid "However, UpdraftPlus archives are standard zip/SQL files - so if you are sure that your file has the right format, then you can rename it to match that pattern."
3327
  msgstr "مع ذلك، ملفات UpdraftPlus المضغوطة هي ملفات zip/SQL عادية - فإن كنت تعتقد أن الملف هو على الصيغة الصحيحة، المرجو إعادة تسميته بالإسم الموصى به."
3328
 
3329
+ #: admin.php:665 admin.php:666 class-updraftplus.php:2652
3330
  msgid "This file does not appear to be an UpdraftPlus backup archive (such files are .zip or .gz files which have a name like: backup_(time)_(site name)_(code)_(type).(zip|gz))."
3331
  msgstr "هذا الملف لا نعتقد أنه نسخة احتياطية من UpdraftPlus ( كالملفات المضغوطة بصيغتي .zip أو . gz التي لها أسماء مثل: backup_(time)_(site name)_(code)_(type).(zip|gz))."
3332
 
3333
+ #: admin.php:3343 includes/class-wpadmin-commands.php:143 restorer.php:1410
3334
  msgid "Backup created by unknown source (%s) - cannot be restored."
3335
  msgstr "النسخة الإحتياطية خلقت من جهة غير معروفة (%s)، لا يمكن استيرادها."
3336
 
3342
  msgid "This version of UpdraftPlus does not know how to handle this type of foreign backup"
3343
  msgstr "هذه النسخة من UpdraftPlus لا تستطيع التعامل مع نوع النسخ الإحتياطية هذا."
3344
 
3345
+ #: methods/dropbox.php:294
3346
  msgid "%s returned an unexpected HTTP response: %s"
3347
  msgstr "أبدى %s إجابة HTTP غير متوقعة: %s"
3348
 
3349
+ #: addons/sftp.php:903
3350
  msgid "The UpdraftPlus module for this file access method (%s) does not support listing files"
3351
  msgstr "وحدة UpdraftPlus لطريقة الوصول للملف (%s) غير مدعومة من قبل الملفات المسرودة"
3352
 
3353
+ #: methods/cloudfiles.php:232 methods/dropbox.php:275
3354
  #: methods/openstack-base.php:107
3355
  msgid "No settings were found"
3356
  msgstr "لم يتم العثور على الإعدادات"
3357
 
3358
+ #: class-updraftplus.php:2773
3359
  msgid "One or more backups has been added from scanning remote storage; note that these backups will not be automatically deleted through the \"retain\" settings; if/when you wish to delete them then you must do so manually."
3360
  msgstr "تمت إضافة واحدة أو أكثر من النسخ الإحتياطية التي وجدناها بالإستضافة السحابية، لاحظ أن هذه النسخ لن تتم مسحها أوتوماتيكيا من الإعادادات الإفتراضية، لو أو متى شئت حذفها يجب عليك حذفها يدويا."
3361
 
3362
+ #: admin.php:632
3363
  msgid "Rescanning remote and local storage for backup sets..."
3364
  msgstr "جاري فحص الإستضافة السحابية والمساحة التخزينية المحلية بحثا عن نسخ احتياطية..."
3365
 
3366
+ #: addons/googlecloud.php:911 addons/googlecloud.php:926
3367
+ #: addons/s3-enhanced.php:54 addons/s3-enhanced.php:68
3368
  msgid "(Read more)"
3369
  msgstr "(قراءة المزيد)"
3370
 
3385
  msgid "Remove"
3386
  msgstr "حذف"
3387
 
3388
+ #: methods/s3.php:834
3389
  msgid "Other %s FAQs."
3390
  msgstr "الأسئلة الشائعة %s الأخرى."
3391
 
3392
+ #: templates/wp-admin/settings/form-contents.php:366
3393
  msgid "Check this to receive more information and emails on the backup process - useful if something is going wrong."
3394
  msgstr "تحقق من هذا الخيار لتتمكن من تلقي المزيد من المعلومات بر الإيميل لعمليات النسخ الإحتياطي - مفيدة جدا ان كان هناك مشاكل بالعملية."
3395
 
3396
+ #: addons/morefiles.php:442 admin.php:3060
3397
  msgid "If entering multiple files/directories, then separate them with commas. For entities at the top level, you can use a * at the start or end of the entry as a wildcard."
3398
  msgstr "في حال إدخال ملفات/مجلدات متعددة، عندها قم بالتفرقة بينها باستخدام الفاصلة. للكيانات بالمستوى العلوي، قم باستخدام * في بداية أو نهاية المدخلات لتحل محل البدائل."
3399
 
3401
  msgid "Custom content type manager plugin data detected: clearing option cache"
3402
  msgstr "تم الكشف عن بيانات لإضافة إدارة نوع المحتوى: تنضيف الخيارات"
3403
 
3404
+ #: class-updraftplus.php:4349 methods/ftp.php:291 restorer.php:1441
3405
  msgid "Your hosting company must enable these functions before %s can work."
3406
  msgstr "شركة الإستضافة لموقعك يجب أن تُفعل هذه الوضائف %s قبل أن نتمكن من العمل"
3407
 
3408
+ #: class-updraftplus.php:4349 methods/ftp.php:291 restorer.php:1440
3409
  msgid "Your web server's PHP installation has these functions disabled: %s."
3410
  msgstr "نسخة PHP المنصبة تحمل هذه الوظائف الغير مفعلة: %s"
3411
 
3473
  msgid "Dismiss from main dashboard (for %s weeks)"
3474
  msgstr "استبعاد من لوحة التحكم (لمدة %s أسبوع)"
3475
 
3476
+ #: class-updraftplus.php:4399
3477
  msgid "The attempt to undo the double-compression succeeded."
3478
  msgstr "نجاح محاولة التراجع من الضغط المزدوج"
3479
 
3480
+ #: class-updraftplus.php:4376 class-updraftplus.php:4397
3481
  msgid "The attempt to undo the double-compression failed."
3482
  msgstr "فشل محاولة التراجع من الضغط المزدوج"
3483
 
3484
+ #: class-updraftplus.php:4369
3485
  msgid "The database file appears to have been compressed twice - probably the website you downloaded it from had a mis-configured webserver."
3486
  msgstr "يبدو أن ملف قاعدة البيانات قد تم ضغطه مرتين - نعتقد أن الموقع الذي قمتم بتحميل الملف منه يحمل خادم سيرفر غير مهيء بشكل جيد"
3487
 
3517
  msgid "Skipping this table: data in this table (%s) should not be search/replaced"
3518
  msgstr "تخطي هذا الجدول: بيانات هذا الجدول (%s) يجب الا تكون بحث / استبدال"
3519
 
3520
+ #: addons/onedrive.php:99
3521
  msgid "Account full: your %s account has only %d bytes left, but the file to be uploaded has %d bytes remaining (total size: %d bytes)"
3522
  msgstr "حساب ممتلئ: حسابك %s يحمل فقط %d بايت متبقية، لكن الملف الذي نقوم برفعه حجمه %d بايت متبقية (الحجم الكلي: %d بايت)"
3523
 
3525
  msgid "Errors occurred:"
3526
  msgstr "أخطاء حدثت:"
3527
 
3528
+ #: admin.php:3541
3529
  msgid "Follow this link to download the log file for this restoration (needed for any support requests)."
3530
  msgstr "لتحميل ملف السجل لهذه العملية تابع هذا الرابط (ستحتاج هذا الملف في أي عملية طلب للدعم)"
3531
 
3532
+ #: templates/wp-admin/settings/form-contents.php:410
3533
  msgid "See this FAQ also."
3534
  msgstr "تابع هذه التعليمات أيضا."
3535
 
3549
  msgid "Existing unremoved folders from a previous restore exist (please use the \"Delete Old Directories\" button to delete them before trying again): %s"
3550
  msgstr "وجود مجلدات غير محذوفة من النسخة السابقة (من فضلك استخدم خيار \"مسح المجلدات القديمة\" لمسحها قبل المحاولة مرة أخرى) : %s"
3551
 
3552
+ #: admin.php:930 class-updraftplus.php:694
3553
  msgid "The amount of time allowed for WordPress plugins to run is very low (%s seconds) - you should increase it to avoid backup failures due to time-outs (consult your web hosting company for more help - it is the max_execution_time PHP setting; the recommended value is %s seconds or more)"
3554
  msgstr "مقدار الوقت المسموح به لإضافات وورد بالتشغيل منخفض جدا (%s ثانية) - يجب زيادته لتجنب فشل النسخ الاحتياطي (استشر خدمة الزبناء الخاصة بشركة الإستضافة الخاص بك لمزيد من المساعدة - إعدادات max_execution_time PHP، و القيمة الموصى بها هي %s ثانية أو أكثر)"
3555
 
3565
  msgid "Disabled this plugin: %s: re-activate it manually when you are ready."
3566
  msgstr "تم تعطيل هذه الإضافة: %s: يمكك اعادة تفعيلها عندما تكون مستعد."
3567
 
3568
+ #: addons/sftp.php:658 addons/sftp.php:661 includes/ftp.class.php:44
3569
  #: includes/ftp.class.php:47
3570
  msgid "The %s connection timed out; if you entered the server correctly, then this is usually caused by a firewall blocking the connection - you should check with your web hosting company."
3571
  msgstr "انتهى توقيت الإتصال %s، إذا كنت دخلت الملقم بشكل صحيح، إذا فهذا الخطأ عادة ما يكون سببه جدار حماية قد حظر الاتصال - يجب أن تحقق من المشكلة مع شركة استضافة المواقع الخاصة بك."
3572
 
3573
+ #: admin.php:3874
3574
  msgid "The current theme was not found; to prevent this stopping the site from loading, your theme has been reverted to the default theme"
3575
  msgstr "لم يتم العثور على تصميم موقعكم الحالي، لمنع توقف تحميل الموقع، تم استرجاع التصميم الإفتراضي."
3576
 
3577
+ #: admin.php:2103 admin.php:2113
3578
  msgid "Restore failed..."
3579
  msgstr "فشل في الإستعادة..."
3580
 
3581
+ #: addons/moredatabase.php:130 admin.php:1324
3582
  msgid "Messages:"
3583
  msgstr "رسائل:"
3584
 
3626
  msgid "Password: %s"
3627
  msgstr "كلمة السر: %s"
3628
 
3629
+ #: addons/cloudfiles-enhanced.php:181 addons/s3-enhanced.php:302
3630
  msgid "Username: %s"
3631
  msgstr "اسم المستخدم: %s"
3632
 
3672
  msgid "Rackspace Cloud Files, enhanced"
3673
  msgstr "تم تعزيز ملفات المستضافة بخدمة Rackspace "
3674
 
3675
+ #: addons/cloudfiles-enhanced.php:275 methods/cloudfiles-new.php:161
3676
  msgid "Cloud Files Container"
3677
  msgstr "حاوية الملفات السحابية"
3678
 
3679
+ #: methods/cloudfiles-new.php:156
3680
  msgid "Cloud Files API Key"
3681
  msgstr "مفتاح API للملفات السحابية"
3682
 
3683
+ #: methods/cloudfiles-new.php:151
3684
  msgid "To create a new Rackspace API sub-user and API key that has access only to this Rackspace container, use this add-on."
3685
  msgstr "لإنشاء مستخدم فرعي ومفتاح API جديد لديه صلاحيات الوصول فقط إلى هذه الحاوية، قم بإستخدام هذه الإضافة."
3686
 
3687
+ #: methods/cloudfiles-new.php:148
3688
  msgid "Cloud Files Username"
3689
  msgstr "اسم المستخدم للخدمة السحابية"
3690
 
3691
+ #: addons/cloudfiles-enhanced.php:45 methods/cloudfiles-new.php:134
3692
  msgid "London (LON)"
3693
  msgstr "لندن (LON)"
3694
 
3695
+ #: addons/cloudfiles-enhanced.php:44 methods/cloudfiles-new.php:133
3696
  msgid "Hong Kong (HKG)"
3697
  msgstr "هونغ كونغ (HKG)"
3698
 
3699
+ #: addons/cloudfiles-enhanced.php:43 methods/cloudfiles-new.php:132
3700
  msgid "Northern Virginia (IAD)"
3701
  msgstr "ولاية فرجينيا الشمالية (IAD)"
3702
 
3703
+ #: addons/cloudfiles-enhanced.php:42 methods/cloudfiles-new.php:131
3704
  msgid "Chicago (ORD)"
3705
  msgstr "شيكاغو (ORD)"
3706
 
3707
+ #: addons/cloudfiles-enhanced.php:41 methods/cloudfiles-new.php:130
3708
  msgid "Sydney (SYD)"
3709
  msgstr "سيدني (SYD)"
3710
 
3711
+ #: addons/cloudfiles-enhanced.php:40 methods/cloudfiles-new.php:129
3712
  msgid "Dallas (DFW) (default)"
3713
  msgstr "دالاس (DFW) (الافتراضي)"
3714
 
3715
+ #: addons/cloudfiles-enhanced.php:271 methods/cloudfiles-new.php:124
3716
  msgid "Cloud Files Storage Region"
3717
  msgstr "منطقة الملفات السحابة"
3718
 
3719
+ #: methods/cloudfiles-new.php:116
3720
  msgid "Accounts created at rackspacecloud.com are US-accounts; accounts created at rackspace.co.uk are UK-based"
3721
  msgstr "الحسابات المنشأة بموقع rackspacecloud.com هي حسابات أمريكية، الحسابات المنشأة بموقع rackspace.co.uk هي حسابات بريطانية"
3722
 
3723
+ #: methods/cloudfiles-new.php:114
3724
  msgid "US or UK-based Rackspace Account"
3725
  msgstr "حساب Rackspace بالولايات المتحدة أو المملكة المتحدة"
3726
 
3727
+ #: addons/cloudfiles-enhanced.php:255 methods/cloudfiles-new.php:114
3728
  msgid "Accounts created at rackspacecloud.com are US accounts; accounts created at rackspace.co.uk are UK accounts."
3729
  msgstr "الحسابات المنشأة بموقع rackspacecloud.com هي حسابات أمريكية، الحسابات المنشأة بموقع rackspace.co.uk هي حسابات بريطانية "
3730
 
3731
+ #: addons/cloudfiles-enhanced.php:136 addons/s3-enhanced.php:205
3732
  #: methods/cloudfiles-new.php:39 methods/openstack-base.php:435
3733
  #: methods/openstack-base.php:437 methods/openstack-base.php:457
3734
  #: methods/openstack2.php:25
3735
  msgid "Authorisation failed (check your credentials)"
3736
  msgstr "فشل التفويض (راجع معلوماتك)"
3737
 
3738
+ #: methods/updraftvault.php:545 udaddons/options.php:272
3739
  msgid "An unknown error occurred when trying to connect to UpdraftPlus.Com"
3740
  msgstr "حدث خطأ غير معروف عند محاولة الاتصال بـ UpdraftPlus.Com"
3741
 
3742
+ #: admin.php:679 central/bootstrap.php:513
3743
  msgid "Create"
3744
  msgstr "خلق"
3745
 
3746
+ #: admin.php:641
3747
  msgid "Trying..."
3748
  msgstr "اعادة المحاولة..."
3749
 
3750
+ #: admin.php:640
3751
  msgid "The new user's RackSpace console password is (this will not be shown again):"
3752
  msgstr "كلمة المرور الخاصة بمستخدم RackSpace هي (هذا لن يظهر مرة أخرى):"
3753
 
3754
+ #: class-updraftplus.php:1599
3755
  msgid "(when decrypted)"
3756
  msgstr "(عندما تكون مفكوكة)"
3757
 
3758
+ #: admin.php:651 admin.php:3816
3759
  msgid "Error data:"
3760
  msgstr "خطأ بالبيانات:"
3761
 
3762
+ #: admin.php:3492
3763
  msgid "Backup does not exist in the backup history"
3764
  msgstr "النسخة الإحتياطية لا توجد بتاريخ النسخ"
3765
 
3766
+ #: admin.php:2472
3767
  msgid "Your WordPress install has old directories from its state before you restored/migrated (technical information: these are suffixed with -old). You should press this button to delete them as soon as you have verified that the restoration worked."
3768
  msgstr "تثبيت ووردبريس الخاص بك به مجلدات قديمة قبل حالة الإستعادة/الدمج ( معلومات تقنية: بها بادئة -old). يجب أن تضغط على هذا الزر لحذفها بمجرد التحقق من عمل الإستعادة."
3769
 
3815
  msgid "Email reports"
3816
  msgstr "تقارير البريد الإلكتروني"
3817
 
3818
+ #: class-updraftplus.php:1595 class-updraftplus.php:1600
3819
  msgid "%s checksum: %s"
3820
  msgstr "%s الاختباري:%s"
3821
 
3822
+ #: class-updraftplus.php:1568 class-updraftplus.php:1570
3823
  msgid "files: %s"
3824
  msgstr "ملفات:%s"
3825
 
3839
  msgid "Debugging information"
3840
  msgstr "معلومات التصحيح"
3841
 
3842
+ #: addons/reporting.php:194 admin.php:3249
3843
  msgid "Uploaded to:"
3844
  msgstr "تحميلها على:"
3845
 
3879
  msgid "%d errors, %d warnings"
3880
  msgstr "%d الأخطاء، %d تحذيرات"
3881
 
3882
+ #: addons/onedrive.php:719 methods/dropbox.php:598
3883
  msgid "%s authentication"
3884
  msgstr "%s مصادقة"
3885
 
3886
+ #: addons/onedrive.php:719 class-updraftplus.php:399 methods/dropbox.php:571
3887
+ #: methods/dropbox.php:598 methods/dropbox.php:611 methods/dropbox.php:742
3888
  msgid "%s error: %s"
3889
  msgstr "%s خطأ: %s"
3890
 
3891
+ #: addons/googlecloud.php:861 methods/dropbox.php:477
3892
  msgid "%s logo"
3893
  msgstr "%s الشعار"
3894
 
3895
+ #: methods/dropbox.php:208
3896
  msgid "%s did not return the expected response - check your log file for more details"
3897
  msgstr "%s لم ترسل الاستجابة المتوقعة - تحقق من ملف السجل الخاص بك لمزيد من التفاصيل"
3898
 
3899
+ #: methods/s3.php:291
3900
  msgid "The required %s PHP module is not installed - ask your web hosting company to enable it"
3901
  msgstr "وحدة PHP %s غير منصبة - من فضلك قم بمراسلة شركة الإستضافة لتمكينها"
3902
 
3908
  msgid "Your site's admin email address (%s) will be used."
3909
  msgstr "سيتم استخدام عنوان البريد الإلكتروني الخاص بالمشرف (%s)."
3910
 
3911
+ #: admin.php:688 methods/updraftvault.php:295 methods/updraftvault.php:340
3912
  #: udaddons/options.php:251
3913
  msgid "Connect"
3914
  msgstr "الإتصال"
3915
 
3916
+ #: templates/wp-admin/settings/form-contents.php:334
3917
  msgid "For more reporting features, use the Reporting add-on."
3918
  msgstr "لمزيد من ميزات التقارير، استخدام اضافات التقارير."
3919
 
3920
+ #: class-updraftplus.php:4179
3921
  msgid "(version: %s)"
3922
  msgstr "(الإصدار: %s)"
3923
 
3924
+ #: addons/reporting.php:438 admin.php:630
3925
  msgid "Be aware that mail servers tend to have size limits; typically around %s Mb; backups larger than any limits will likely not arrive."
3926
  msgstr "تحقق من حجم الملفات المسموح به بخدمة الإيميل، تقريبا %s ميجا، أي نسخ احتياطية أكبر من هذا الحجم لن تصلك أبدا."
3927
 
3928
+ #: addons/reporting.php:438 admin.php:629
3929
  msgid "When the Email storage method is enabled, also send the entire backup"
3930
  msgstr "عندما يتم تمكين طريقة تخزين البريد الإلكتروني، قم أيضا بإرسال النسخ الاحتياطي كاملة"
3931
 
3965
  msgid "Files (database backup has not completed)"
3966
  msgstr "ملفات (لم يتم إكمال نسخ قاعدة بيانات احتياطيا)"
3967
 
3968
+ #: admin.php:291 backup.php:851
3969
  msgid "Files and database"
3970
  msgstr "ملفات وقواعد البيانات"
3971
 
4029
  msgid "An update is available for UpdraftPlus - please follow this link to get it."
4030
  msgstr "يتوفر تحديث لUpdraftPlus - يرجى اتباع هذا الرابط للحصول عليه."
4031
 
4032
+ #: methods/updraftvault.php:618 methods/updraftvault.php:636
4033
  #: udaddons/updraftplus-addons.php:795
4034
  msgid "UpdraftPlus.Com returned a response, but we could not understand it"
4035
  msgstr "رد UpdraftPlus.Com، ولكننا لم نفهم الإستجابة "
4036
 
4037
+ #: methods/updraftvault.php:632 udaddons/updraftplus-addons.php:792
4038
  msgid "Your email address and password were not recognised by UpdraftPlus.Com"
4039
  msgstr "لم يتم التعرف على عنوان البريد الإلكتروني وكلمة المرور عن طريق UpdraftPlus.Com"
4040
 
4041
+ #: methods/updraftvault.php:591 udaddons/updraftplus-addons.php:752
4042
  msgid "UpdraftPlus.Com returned a response which we could not understand (data: %s)"
4043
  msgstr "لا يمكن فهم إستجابة الموقع UpdraftPlus.Com (البيانات: %s)"
4044
 
4050
  msgid "We failed to successfully connect to UpdraftPlus.Com"
4051
  msgstr "فشلنا في الاتصال بنجاح إلى UpdraftPlus.Com"
4052
 
4053
+ #: methods/email.php:76 templates/wp-admin/settings/form-contents.php:315
4054
  #: templates/wp-admin/settings/tab-addons.php:200
4055
  msgid "Reporting"
4056
  msgstr "التقارير"
4057
 
4058
+ #: admin.php:4266
4059
  msgid "Options (raw)"
4060
  msgstr "خيارات (الخام)"
4061
 
4062
+ #: addons/reporting.php:436 admin.php:628
4063
  msgid "Send a report only when there are warnings/errors"
4064
  msgstr "إرسال تقرير فقط عندما تكون هناك تحذيرات / أخطاء"
4065
 
4071
  msgid "You should check the file ownerships and permissions in your WordPress installation"
4072
  msgstr ""
4073
 
4074
+ #: templates/wp-admin/settings/form-contents.php:219
4075
  msgid "See also the \"More Files\" add-on from our shop."
4076
  msgstr "انظر أيضا \"ملفات إضافية\" الإضافة من متجرنا."
4077
 
4078
+ #: backup.php:3012 class-updraftplus.php:707
4079
  msgid "Your free space in your hosting account is very low - only %s Mb remain"
4080
  msgstr "المساحة الحرة فى حساب الاستضافة الخاص بك قليلة جدا - فقط متبقى %s ميجا بايت"
4081
 
4082
+ #: class-updraftplus.php:691
4083
  msgid "The amount of memory (RAM) allowed for PHP is very low (%s Mb) - you should increase it to avoid failures due to insufficient memory (consult your web hosting company for more help)"
4084
  msgstr "كمية مقدار الذاكرة (RAM) المسموحة ل PHP قليلة جدا (%s ميجابايت) - يجب عليك زيادتها لتفادى مشاكل قلة الذاكرة (تحدث مع الاستضافة الخاصة بك لمزيد من المساعدة)"
4085
 
4211
  msgid "Your web-server does not have the %s module installed."
4212
  msgstr "خادم الويب الخاص بك ليس بة الوحدة %s مثبتة."
4213
 
4214
+ #: addons/googlecloud.php:944 methods/googledrive.php:953
4215
  msgid "<strong>(You appear to be already authenticated,</strong> though you can authenticate again to refresh your access if you've had a problem)."
4216
  msgstr "<strong>(على ما يبدو انة تمت المصادقة ,</strong> على الرغم من ذلك يمكنك المصادقة مرة اخرى لتحديث وصولك اذا كانت هناك مشكلة)."
4217
 
4219
  msgid "Drop backup files here"
4220
  msgstr "اسقاط ملفات النسخ الاحتياطى هنا"
4221
 
4222
+ #: admin.php:639
4223
  msgid "The web server returned an error code (try again, or check your web server logs)"
4224
  msgstr "اعاد خادم الويب برمز خطأ (حاول مجددا, او قم بالتحقق من سجلات خادم الويب الخاص بك)"
4225
 
4226
+ #: admin.php:637
4227
  msgid "The restore operation has begun. Do not press stop or close your browser until it reports itself as having finished."
4228
  msgstr "بدأت عملية الأستعادة. لا تضغط إيقاف أو إغلاق المتصفح حتى اعطائك التقرير بأنة تم انتهاء العملية."
4229
 
4230
+ #: admin.php:634
4231
  msgid "If you exclude both the database and the files, then you have excluded everything!"
4232
  msgstr "إذا قمت باستبعاد كل من قاعدة البيانات والملفات, فقد قمت بأستبعاد كل شئ !"
4233
 
4247
  msgid "Remember this choice for next time (you will still have the chance to change it)"
4248
  msgstr "تذكر هذا الاختيار في المرة القادمة (لايزال لديك الفرصة لتغييرة)"
4249
 
4250
+ #: addons/azure.php:360 methods/stream-base.php:121 methods/stream-base.php:126
4251
  msgid "Upload failed"
4252
  msgstr "فشل التحميل"
4253
 
4255
  msgid "You can send a backup to more than one destination with an add-on."
4256
  msgstr "يمكنك أن ترسل نسخة احتياطية لأكثر من جهة واحدة مع الإضافة."
4257
 
4258
+ #: admin.php:2690
4259
  msgid "Note: the progress bar below is based on stages, NOT time. Do not stop the backup simply because it seems to have remained in the same place for a while - that is normal."
4260
  msgstr "ملاحظة: يستند شريط التقدم أدناه على مراحل، وليس الوقت. لا توقف عملية النسخ الأحتياطى لمجرد أنه يبدو أنه قد بقي في نفس المكان لفترة من الوقت - - وهذا طبيعي."
4261
 
4262
+ #: admin.php:2588
4263
  msgid "(%s%%, file %s of %s)"
4264
  msgstr "(%s%%, ملف %s من%s)"
4265
 
4268
  msgid "Read more about how this works..."
4269
  msgstr "قراءة المزيد عن كيفية عمل ذلك ..."
4270
 
4271
+ #: addons/sftp.php:503
4272
  msgid "Failed: We were able to log in, but failed to successfully create a file in that location."
4273
  msgstr "فشل:تمكنا من تسجيل الدخول، لكنه فشل في إنشاء ملف في ذلك الموقع بنجاح."
4274
 
4275
+ #: addons/sftp.php:501
4276
  msgid "Failed: We were able to log in and move to the indicated directory, but failed to successfully create a file in that location."
4277
  msgstr "فشل:لقد تمكنا من تسجيل الدخول والانتقال إلى الدليل المشار إليه،لكنه فشل في إنشاء ملف في ذلك الموقع بنجاح."
4278
 
4279
+ #: addons/sftp.php:422
4280
  msgid "Use SCP instead of SFTP"
4281
  msgstr "استخدام SCP بدلا من SFTP"
4282
 
4296
  msgid "Backup is of: %s."
4297
  msgstr "النسخ الأحتياطى من: %s"
4298
 
4299
+ #: admin.php:727
4300
  msgid "%s settings test result:"
4301
  msgstr "اعدادات نتيجة اختبار %s"
4302
 
4303
+ #: admin.php:3410 admin.php:3412
4304
  msgid "(Not finished)"
4305
  msgstr "(غير منتهي)"
4306
 
4307
+ #: admin.php:3412
4308
  msgid "If you are seeing more backups than you expect, then it is probably because the deletion of old backup sets does not happen until a fresh backup completes."
4309
  msgstr "اذا كنت ترى اكثر من نسخة احتياطية, ومن ثم انة من المحتمل ان هذا بسبب اعدادات حذف ملفات النسخ الاحتياطى القديمة لم يتم حذفها حتى اكتمال نسخة احتياطية جديدة."
4310
 
4311
+ #: templates/wp-admin/settings/form-contents.php:393
4312
  msgid "<b>Do not</b> place it inside your uploads or plugins directory, as that will cause recursion (backups of backups of backups of...)."
4313
  msgstr "<b>لا تقم</b> بوضعه داخل الإضافات أو دليل الإضافات، لأن ذلك سوف يسبب الإعادة (نسخة احتياطية من نسخة احتياطية من نسخة احتياطية من......)."
4314
 
4315
+ #: templates/wp-admin/settings/form-contents.php:393
4316
  msgid "This is where UpdraftPlus will write the zip files it creates initially. This directory must be writable by your web server. It is relative to your content directory (which by default is called wp-content)."
4317
  msgstr "هذا هو المكان الذى UpdraftPlus يقوم بأنشاء ملفات zip. يجب ان يكون هذا الدليل قابل للكتابة من قبل خادم الويب الخاص بك. انة نسبة الى دليل محتوى موقعك (والتي افتراضيا يسمى wp-content)."
4318
 
4319
+ #: admin.php:2685
4320
  msgid "Job ID: %s"
4321
  msgstr "رقم الوظيفة: %s"
4322
 
4323
+ #: admin.php:2670
4324
  msgid "last activity: %ss ago"
4325
  msgstr "آخر نشاط: منذ %ss"
4326
 
4327
+ #: admin.php:2669
4328
  msgid "next resumption: %d (after %ss)"
4329
  msgstr "الاستئناف التالي: %d (بعد %ss)"
4330
 
4331
+ #: admin.php:2652 central/bootstrap.php:405 central/bootstrap.php:412
4332
+ #: methods/updraftvault.php:375 methods/updraftvault.php:455
4333
  msgid "Unknown"
4334
  msgstr "غير معروف"
4335
 
4336
+ #: admin.php:2602
4337
  msgid "Backup finished"
4338
  msgstr "الانتهاء من النسخ الاحتياطي"
4339
 
4340
+ #: admin.php:2597
4341
  msgid "Waiting until scheduled time to retry because of errors"
4342
  msgstr "برجاء الأنتظار حتى الوقت المحدد لأعادة المحاولة بسبب الأخطاء"
4343
 
4344
+ #: admin.php:2593
4345
  msgid "Pruning old backup sets"
4346
  msgstr "تلقيم مجموعات النسخ الاحتياطي القديم"
4347
 
4348
+ #: admin.php:2581
4349
  msgid "Uploading files to remote storage"
4350
  msgstr "تحميل الملفات للمخزن البعيد"
4351
 
4352
+ #: admin.php:2650
4353
  msgid "Encrypted database"
4354
  msgstr "قاعدة بيانات مشفرة"
4355
 
4356
+ #: admin.php:2642
4357
  msgid "Encrypting database"
4358
  msgstr "تشفير قاعدة البيانات"
4359
 
4360
+ #: admin.php:2616
4361
  msgid "Created database backup"
4362
  msgstr "تم انشاء النسخ الاحتياطى لقاعدة البيانات"
4363
 
4364
+ #: admin.php:2629
4365
  msgid "table: %s"
4366
  msgstr "الجدول: %s"
4367
 
4368
+ #: admin.php:2627
4369
  msgid "Creating database backup"
4370
  msgstr "انشاء النسخ الاحتياطى لقاعدة البيانات"
4371
 
4372
+ #: admin.php:2575
4373
  msgid "Created file backup zips"
4374
  msgstr "تم انشاء ملف النسخ الاحتياطى zips"
4375
 
4376
+ #: admin.php:2562
4377
  msgid "Creating file backup zips"
4378
  msgstr "انشاء ملف النسخ الاحتياطى zips"
4379
 
4380
+ #: admin.php:2557
4381
  msgid "Backup begun"
4382
  msgstr "بدأ النسخ الاحتياطى"
4383
 
4384
+ #: admin.php:2400
4385
  msgid "Backups in progress:"
4386
  msgstr "تقدم النسخ الأحتياطى:"
4387
 
4388
+ #: admin.php:934
4389
  msgid "The scheduler is disabled in your WordPress install, via the DISABLE_WP_CRON setting. No backups can run (even &quot;Backup Now&quot;) unless either you have set up a facility to call the scheduler manually, or until it is enabled."
4390
  msgstr "تم تعطيل الجدولة فى تثبيت وورد بريس الخاصة بك. عبر اعداد DISABLE_WP_CRON. لا يمكن تشغيل النسخ الاحتياطى (حتى \"النسخ الاحتياطي الآن\") الا اذا قمت بأعداد مرفق لأستدعاء الجدولة يدويا, او حتى تفعيلها."
4391
 
4401
  msgid "UpdraftPlus needed to create a %s in your content directory, but failed - please check your file permissions and enable the access (%s)"
4402
  msgstr "UpdraftPlus يحتاج لأنشاء %s فى دليل محتوى موقعك, لكنة فشل - من فضلك قم بالتحقق من الصلاحيات وقم بتفعيلها (%s)"
4403
 
4404
+ #: class-updraftplus.php:2870
4405
  msgid "The backup has not finished; a resumption is scheduled"
4406
  msgstr "لم ينتهي النسخ الاحتياطي؛ وتم جدولة الأستئناف"
4407
 
4408
+ #: class-updraftplus.php:1840
4409
  msgid "Your website is visited infrequently and UpdraftPlus is not getting the resources it hoped for; please read this page:"
4410
  msgstr "زوار موقع الويب الخاص بك و UpdraftPlus فى كثير من الأحيان لا يحصلون على الموارد التى يأملونها; من فضلك اقرأ هذة الصفحة:"
4411
 
4412
+ #: addons/googlecloud.php:366 addons/onedrive.php:887
4413
  #: includes/Dropbox/OAuth/Consumer/ConsumerAbstract.php:115
4414
  #: includes/Dropbox2/OAuth/Consumer/ConsumerAbstract.php:118
4415
  #: methods/googledrive.php:229
4416
  msgid "The %s authentication could not go ahead, because something else on your site is breaking it. Try disabling your other plugins and switching to a default theme. (Specifically, you are looking for the component that sends output (most likely PHP warnings/errors) before the page begins. Turning off any debugging settings may also help)."
4417
  msgstr "المصادقة %s تعذر الأستمرار,لأن شيئا آخر على موقع الويب الخاص بك كسرها. حاول تعطيل الإضافات الأخرى الخاصة بك والتحويل إلى الثيم الأفتراضى. (على وجه التحديد، ابحث عن المكون الذي يرسل الإخراج (على الأرجح فى تحذيرات PHP / أخطاء) قبل بداية الصفحة. ايقاف اى اعدادات تصحيح قد تساعد ايضا)."
4418
 
4419
+ #: admin.php:2223
4420
  msgid "Your PHP memory limit (set by your web hosting company) is very low. UpdraftPlus attempted to raise it but was unsuccessful. This plugin may struggle with a memory limit of less than 64 Mb - especially if you have very large files uploaded (though on the other hand, many sites will be successful with a 32Mb limit - your experience may vary)."
4421
  msgstr "حد الذاكرة الخاص بك php (الذى وضعتة شركة الأستضافة الخاصة بك) منخفض جدا. UpdraftPlus حاول زيادتة لكنة لم ينجح. هذا البرنامج المساعد قد يواجه صعوبة مع حد الذاكرة أقل من 64 ميجا بايت - خصوصا اذا كنت تملك ملفات كبيرة مرفوعة (من ناحية اخرى,العديد من المواقع تنجح ب 32 ميجا بايت - لكن تجربتك قد تكون مختلفة)."
4422
 
4423
+ #: addons/autobackup.php:1006 admin.php:681
4424
  msgid "Proceed with update"
4425
  msgstr "المضي قدما مع التحديث"
4426
 
4498
  msgid "Support"
4499
  msgstr "الدعم"
4500
 
4501
+ #: class-updraftplus.php:4332
4502
  msgid "UpdraftPlus was unable to find the table prefix when scanning the database backup."
4503
  msgstr "UpdraftPlus غير قادر على العثور على بادئة الجدول عند فحص النسخة الاحتياطية لقاعدة البيانات."
4504
 
4505
+ #: class-updraftplus.php:4324
4506
  msgid "This database backup is missing core WordPress tables: %s"
4507
  msgstr "هذة النسخة الاحتياطية لقاعدة البيانات تفتقد جداول رئيسية: %s"
4508
 
4509
+ #: class-updraftplus.php:4212
4510
  msgid "You are importing from a newer version of WordPress (%s) into an older one (%s). There are no guarantees that WordPress can handle this."
4511
  msgstr "انت تقوم بالأستيراد من اصدار احدث من الورد بريس (%s) فى نسخة اقدم (%s). لا يوجد ضمانات ان ورد بريس يمكنة التعامل مع هذا."
4512
 
4513
+ #: class-updraftplus.php:4128
4514
  msgid "The database is too small to be a valid WordPress database (size: %s Kb)."
4515
  msgstr "حجم قاعدة البيانات صغير جدا بالنسبة لقاعدة بيانات ورد بريس صالحة (الحجم: %s ك بايت)."
4516
 
4517
+ #: addons/autobackup.php:556 admin.php:898
4518
  msgid "Update Theme"
4519
  msgstr "تحديث الثيم"
4520
 
4521
+ #: addons/autobackup.php:505 admin.php:894
4522
  msgid "Update Plugin"
4523
  msgstr "تحديث المكون الإضافي"
4524
 
4525
+ #: addons/autobackup.php:985 admin.php:767 includes/updraftplus-notices.php:171
4526
  msgid "Be safe with an automatic backup"
4527
  msgstr "كن أمنا مع النسخ الاحتياطي التلقائي"
4528
 
4530
  msgid "Uploads path (%s) does not exist - resetting (%s)"
4531
  msgstr "مسار الرفع (%s) غير موجود - إعادة ضبط (%s)"
4532
 
4533
+ #: admin.php:2175
4534
  msgid "If you can still read these words after the page finishes loading, then there is a JavaScript or jQuery problem in the site."
4535
  msgstr "إذا كنت لا تزال ترى هذه الكلمات بعد انتهاء صفحة التحميل، ف انة يوجد مشكلة فى الجافا سكريب او jQuery فى الموقع."
4536
 
4537
+ #: admin.php:675
4538
  msgid "The file was uploaded."
4539
  msgstr "تم رفع الملف."
4540
 
4541
+ #: admin.php:674
4542
  msgid "Unknown server response status:"
4543
  msgstr "استجابة الخادم غير معروفة:"
4544
 
4545
+ #: admin.php:673
4546
  msgid "Unknown server response:"
4547
  msgstr "استجابة الملقم غير معروف:"
4548
 
4549
+ #: admin.php:672
4550
  msgid "This decryption key will be attempted:"
4551
  msgstr "سيتم محاولة فتح مفتاح التشفير:"
4552
 
4553
+ #: admin.php:671
4554
  msgid "Follow this link to attempt decryption and download the database file to your computer."
4555
  msgstr "اتبع هذا الرابط لمحاولة فك التشفير وتحميل ملف قاعدة البيانات على جهازك."
4556
 
4557
+ #: admin.php:670
4558
  msgid "Upload error"
4559
  msgstr "خطأ فى الرفع"
4560
 
4561
+ #: admin.php:669
4562
  msgid "This file does not appear to be an UpdraftPlus encrypted database archive (such files are .gz.crypt files which have a name like: backup_(time)_(site name)_(code)_db.crypt.gz)."
4563
  msgstr "هذا الملف لا يبدو انة ملف UpdraftPlus مضغوط مشفر لقاعدة البيانات (هذة الملفات .gz.crypt التى لديها اسم مثل: backup_(time)_(site name)_(code)_db.crypt.gz)."
4564
 
4565
+ #: admin.php:668
4566
  msgid "Upload error:"
4567
  msgstr "خطأ التحميل:"
4568
 
4569
+ #: admin.php:667
4570
  msgid "(make sure that you were trying to upload a zip file previously created by UpdraftPlus)"
4571
  msgstr "(تأكد من انك كنت تحاول رفع ملف مضغوط تم إنشاؤه مسبقا من قبل UpdraftPlus)"
4572
 
4573
+ #: admin.php:658
4574
  msgid "Download to your computer"
4575
  msgstr "تحميل الى جهاز الكمبيوتر الخاص بك"
4576
 
4577
+ #: admin.php:657
4578
  msgid "Delete from your web server"
4579
  msgstr "حذف من خادم الويب الخاص بك"
4580
 
4581
+ #: methods/s3.php:794
4582
  msgid "Examples of S3-compatible storage providers:"
4583
  msgstr "امثلة من مقدمى التخزين المتوافق-s3:"
4584
 
4585
+ #: admin.php:3766
4586
  msgid "Will not delete any archives after unpacking them, because there was no cloud storage for this backup"
4587
  msgstr "لن يتم حذف اى ارشيف بعد فك الضغط عنة, بسبب عدم وجود سحابة التخزين لهذه النسخة الاحتياطية"
4588
 
4589
+ #: admin.php:3380
4590
  msgid "You appear to be missing one or more archives from this multi-archive set."
4591
  msgstr "يبدو انة مفقود واحد او اكثر من هذة الأرشيفات من مجموعة الأرشيف المتعددة."
4592
 
4593
+ #: admin.php:3377
4594
  msgid "(%d archive(s) in set)."
4595
  msgstr "(%d الأرشيف(s) in set)."
4596
 
4597
+ #: templates/wp-admin/settings/form-contents.php:370
4598
  msgid "Split archives every:"
4599
  msgstr "تقسيم كل ارشيف:"
4600
 
4602
  msgid "Error: the server sent us a response (JSON) which we did not understand."
4603
  msgstr "الخطأ: الخادم ارسل لنا استجابة (JSON) اللتى لم نتمكن من فهمها."
4604
 
4605
+ #: admin.php:648
4606
  msgid "Warnings:"
4607
  msgstr "تحذيرات:"
4608
 
4609
+ #: admin.php:647
4610
  msgid "Error: the server sent an empty response."
4611
  msgstr "خطأ: ارسل خادم السيرفر استجابة فارغة."
4612
 
4613
+ #: admin.php:1936
4614
  msgid "This looks like a file created by UpdraftPlus, but this install does not know about this type of object: %s. Perhaps you need to install an add-on?"
4615
  msgstr "هذا يبدو كأنة ملف تم انشائة بواسطة UpdraftPlus, ولكن هذا التثبيت لا يعرف هذا النوع من المواضيع: %s. ربما تحتاج الى تثبيت اضافة ما؟"
4616
 
4646
  msgid "No such backup set exists"
4647
  msgstr "هذا الدليل لا يوجد بة اى مجموعات نسخ احتياطى"
4648
 
4649
+ #: admin.php:1212
4650
  msgid "The backup archive for this file could not be found. The remote storage method in use (%s) does not allow us to retrieve files. To perform any restoration using UpdraftPlus, you will need to obtain a copy of this file and place it inside UpdraftPlus's working folder"
4651
  msgstr "لم يتم العثور على ارشيف النسخ الأحتياطى لهذا الملف. استخدام طريقة التخزين البعيد (%s) لا يسمح لنا بأسترداد الملفات. لأجراء اى اعادة استخدم UpdraftPlus, سوف تحتاج الى الحصول على نسخة من هذا الملف ووضعها داخل مجلد العمل ل UpdraftPlus"
4652
 
4670
  msgid "WordPress root directory server path: %s"
4671
  msgstr "مسار جذر الوردبريس فى الخادم: %s"
4672
 
4673
+ #: methods/s3.php:839
4674
  msgid "%s end-point"
4675
  msgstr "نقطة النهاية %s "
4676
 
4677
+ #: methods/s3.php:801
4678
  msgid "... and many more!"
4679
  msgstr "... وغيرها الكثير!"
4680
 
4681
+ #: methods/s3generic.php:48 methods/s3generic.php:56
4682
  msgid "S3 (Compatible)"
4683
  msgstr "S3 (متوافق)"
4684
 
4685
+ #: admin.php:3687
4686
  msgid "File is not locally present - needs retrieving from remote storage"
4687
  msgstr "الملف غير موجود - يحتاج الى استراجعة من التخزين البعيد"
4688
 
4689
+ #: admin.php:3674
4690
  msgid "Looking for %s archive: file name: %s"
4691
  msgstr "ابحث عن الأرشيف %s : اسم الملف: %s"
4692
 
4693
+ #: admin.php:3635
4694
  msgid "Final checks"
4695
  msgstr "الفحوصات النهائية"
4696
 
4697
+ #: templates/wp-admin/settings/form-contents.php:376
4698
  msgid "Check this to delete any superfluous backup files from your server after the backup run finishes (i.e. if you uncheck, then any files despatched remotely will also remain locally, and any files being kept locally will not be subject to the retention limits)."
4699
  msgstr "حدد هذا المربع لحذف اى ملفات النسخ الأحتياطى الزائدة من السيرفر الخاص بك بعد انتهاء عملية النسخ الأحتياطى (أي بمعنى. اذا لم تقم بالتحديد, فأنة سوف تظل ايضا الملفات اللتى ارسللت عن بعد على السيرفر محلياً, وان الملفات اللتى يتم الأحتفاظ بها محليا لن تكون خاضعة لحدود الأبقاء)."
4700
 
4701
+ #: templates/wp-admin/settings/form-contents.php:260
4702
  msgid "Drop encrypted database files (db.gz.crypt files) here to upload them for decryption"
4703
  msgstr "اسقاط ملف قاعدة البيانات المشفرة (ملفات db.gz.crypt) هنا لتحميلها لفك التشفير"
4704
 
4705
+ #: admin.php:3049
4706
  msgid "Your wp-content directory server path: %s"
4707
  msgstr "المسار الخاص بمحتوى wp-content على السيرفر هو: %s"
4708
 
4709
+ #: admin.php:664
4710
  msgid "Raw backup history"
4711
  msgstr "تاريخ النسخ الاحتياطي الخام"
4712
 
4714
  msgid "Show raw backup and file list"
4715
  msgstr "مشاهدة النسخ الاحتياطي الخام وقائمة الملفات"
4716
 
4717
+ #: admin.php:646
4718
  msgid "Processing files - please wait..."
4719
  msgstr "تجهيز الملفات - يرجى الأنتظار..."
4720
 
4721
+ #: admin.php:3818 templates/wp-admin/settings/downloading-and-restoring.php:29
4722
  msgid "Please consult this FAQ for help on what to do about it."
4723
  msgstr "يرجى الرجوع الى الأسئلة الشائعة للحصول على المساعدة بشأن ما ينبغى القيام بة حيال ذلك."
4724
 
4726
  msgid "Your WordPress installation has a problem with outputting extra whitespace. This can corrupt backups that you download from here."
4727
  msgstr "تركيب وردبريس الخاص بك بة مشكلة اخراج مسافة بيضاء اضافية. قد يفسد هذا النسخ الأحتياطية التى قمت بتحميلها من هنا."
4728
 
4729
+ #: class-updraftplus.php:4136
4730
  msgid "Failed to open database file."
4731
  msgstr "فشل فى فتح ملف قاعدة البيانات."
4732
 
4733
+ #: admin.php:4236
4734
  msgid "Known backups (raw)"
4735
  msgstr "النسخ الأحتياطى المعروفة (الخام)"
4736
 
4754
  msgid "This looks like a migration (the backup is from a site with a different address/URL), but you did not check the option to search-and-replace the database. That is usually a mistake."
4755
  msgstr "هذة تبدو كأنها ترحيل (النسخة الأحتياطة من موقع عنوان الرابط الخاص بة مختلف), لكنك لم تقم بالأشارة على خيار البحث واستبدال قاعدة البيانات. عادة ما يكون خطأ."
4756
 
4757
+ #: admin.php:3707
4758
  msgid "file is size:"
4759
  msgstr "حجم الملف:"
4760
 
4761
+ #: addons/googlecloud.php:901 addons/migrator.php:363 addons/migrator.php:366
4762
+ #: addons/migrator.php:369 admin.php:934 admin.php:2180 backup.php:3019
4763
  #: updraftplus.php:147
4764
  msgid "Go here for more information."
4765
  msgstr "اذهب هنا لمزيد من المعلومات."
4766
 
4767
+ #: admin.php:645
4768
  msgid "Some files are still downloading or being processed - please wait."
4769
  msgstr "بعض الملفات لاتزال يتم تحميلها او اعدادها - من فضلك انتظر."
4770
 
4771
+ #: class-updraftplus.php:4184 class-updraftplus.php:4202
4772
  msgid "This backup set is from a different site - this is not a restoration, but a migration. You need the Migrator add-on in order to make this work."
4773
  msgstr "هذة النسخة الأحتياطية من موقع مختلف - هذة ليست استعادة, لكن ترحيل. انت تحتاج الى البرنامج المساعد Migrator لتسطيع اتمام هذا العمل."
4774
 
4788
  msgid "%s login failure"
4789
  msgstr "فشل تسجيل الدخول %s"
4790
 
4791
+ #: methods/dropbox.php:419
4792
  msgid "You do not appear to be authenticated with %s"
4793
  msgstr "لا يبدو انة تمت المصادقة مع: %s"
4794
 
4795
+ #: methods/dropbox.php:386
4796
  msgid "Failed to access %s when deleting (see log file for more)"
4797
  msgstr "فشل الوصول الى %s عند الحذف (تحقق من ملف السجل لمزيد من المعلومات)"
4798
 
4799
+ #: methods/dropbox.php:378
4800
  msgid "You do not appear to be authenticated with %s (whilst deleting)"
4801
  msgstr "لا يبدو انة لديك التصريح ل %s (لحين الحذف)"
4802
 
4803
+ #: methods/dropbox.php:113
4804
  msgid "Dropbox error: %s (see log file for more)"
4805
  msgstr "خطأ فى الأسقاط: %s (تحقق من السجل لمزيد من المعلومات)"
4806
 
4807
+ #: methods/cloudfiles.php:420
4808
  msgid "Error - failed to download the file from %s"
4809
  msgstr "خطأ - فشل فى تحميل الملف من %s"
4810
 
4811
+ #: methods/cloudfiles.php:416
4812
  msgid "Error - no such file exists at %s"
4813
  msgstr "خطأ - لا يوجد مثل هذا الملف فى %s"
4814
 
4815
+ #: addons/azure.php:221 methods/addon-base-v2.php:208
4816
+ #: methods/cloudfiles.php:390 methods/cloudfiles.php:407
4817
  #: methods/googledrive.php:823 methods/openstack-base.php:407
4818
+ #: methods/stream-base.php:259 methods/stream-base.php:266
4819
+ #: methods/stream-base.php:279
4820
  msgid "%s Error"
4821
  msgstr "خطأ %s"
4822
 
4823
+ #: methods/cloudfiles.php:217 methods/openstack-base.php:82
4824
  msgid "%s error - failed to upload file"
4825
  msgstr "خطأ %s - فشل فى ارسال الملف"
4826
 
4827
+ #: class-updraftplus.php:1037 methods/cloudfiles.php:209
4828
  msgid "%s error - failed to re-assemble chunks"
4829
  msgstr "خطأ %s - فشل فى اعادة تجميع الأجزاء"
4830
 
4831
+ #: methods/cloudfiles.php:93 methods/cloudfiles.php:97
4832
+ #: methods/cloudfiles.php:238 methods/cloudfiles.php:283
4833
+ #: methods/cloudfiles.php:334 methods/cloudfiles.php:338
4834
  #: methods/openstack-base.php:40 methods/openstack-base.php:304
4835
  #: methods/openstack-base.php:369 methods/openstack-base.php:441
4836
  #: methods/openstack-base.php:444 methods/openstack-base.php:461
4838
  msgid "%s authentication failed"
4839
  msgstr "المصادقة فشلت %s"
4840
 
4841
+ #: addons/googlecloud.php:415 addons/migrator.php:462 admin.php:1881
4842
+ #: admin.php:1928 admin.php:1936 class-updraftplus.php:822
4843
+ #: class-updraftplus.php:828 class-updraftplus.php:4107
4844
+ #: class-updraftplus.php:4109 class-updraftplus.php:4242
4845
+ #: class-updraftplus.php:4277 methods/googledrive.php:289 methods/s3.php:320
4846
+ #: restorer.php:944
4847
  msgid "Error: %s"
4848
  msgstr "خطأ: %s"
4849
 
4850
+ #: admin.php:2986
4851
  msgid "Backup directory specified exists, but is <b>not</b> writable."
4852
  msgstr "دليل النسخ الأحتياطى المحدد موجود, لكنة <b>غير</b> قابل للكتابة."
4853
 
4854
+ #: admin.php:2984
4855
  msgid "Backup directory specified does <b>not</b> exist."
4856
  msgstr "دليل النسخ الأحتياطى المحدد <b>غير</b> موجود."
4857
 
4858
+ #: admin.php:2697 admin.php:2940 class-updraftplus.php:4184
4859
+ #: class-updraftplus.php:4202
4860
  msgid "Warning: %s"
4861
  msgstr "تحذير: %s"
4862
 
4884
  msgid "Warnings encountered:"
4885
  msgstr "مصادفة تحذيرات:"
4886
 
4887
+ #: class-updraftplus.php:2858
4888
  msgid "The backup apparently succeeded (with warnings) and is now complete"
4889
  msgstr "على ما يبدو ان النسخ الأحتياطى تم بنجاح (مع تحذيرات) وانة انتهى الأن"
4890
 
4891
+ #: class-updraftplus.php:720
4892
  msgid "Your free disk space is very low - only %s Mb remain"
4893
  msgstr "المساحة الحرة على القرص الخاص بك منخفضة جدا - فقط متبقى %s ميجابايت"
4894
 
4928
  msgid "Some servers advertise encrypted FTP as available, but then time-out (after a long time) when you attempt to use it. If you find this happenning, then go into the \"Expert Options\" (below) and turn off SSL there."
4929
  msgstr "بعض خوادم FTP المشفرة اعلن انها متوفرة, ولكن بعدذلك انتهى الوقت (بعد وقت طويل) عند محاولتك استخدامة. اذا وجدت هذا يحدث, قم بالذهاب الى \" الخيارات المتقدمة\" (أدناة) وايقاف SSL هناك."
4930
 
4931
+ #: methods/s3.php:815
4932
  msgid "Your web server's PHP installation does not included a required module (%s). Please contact your web hosting provider's support and ask for them to enable it."
4933
  msgstr "خادم الويب الخاص بك لا يشمل تركيب وحدة نمطية مطلوبة من PHP (%s). يرجى الأتصال بمزود خدمة الأستضافة الخاصة بك وطلب منهم تفعيلها."
4934
 
4935
+ #: methods/s3.php:1052
4936
  msgid "Please check your access credentials."
4937
  msgstr "يرجى التحقق من وصول بيانات الأعتماد."
4938
 
4939
+ #: addons/s3-enhanced.php:180 methods/s3.php:1030
4940
  msgid "The error reported by %s was:"
4941
  msgstr "الخطأ الذى تم التبليغ عنة من %s هو:"
4942
 
4952
  msgid "Cannot create new tables, so skipping this command (%s)"
4953
  msgstr "لا يمكن إنشاء جداول جديدة، حتى تخطى هذا الأمر (%s)"
4954
 
4955
+ #: class-updraftplus.php:4253 restorer.php:1648
4956
  msgid "Site information:"
4957
  msgstr "معلومات عن الموقع:"
4958
 
4960
  msgid "Your database user does not have permission to create tables. We will attempt to restore by simply emptying the tables; this should work as long as a) you are restoring from a WordPress version with the same database structure, and b) Your imported database does not contain any tables which are not already present on the importing site."
4961
  msgstr "مستخدم قاعدة البيانات الخاصة بك ليس لدية تصاريح لأنشاء الجدوال. نحن سوف نقوم بمحاولة الأستعادة عن طريق افراغ الجداول; هذا يجب ان يعمل طالما تستعيدها من اصدار وردبريس بة نفس بنية قاعدة البيانات, وقاعدة البيانات المستوردة لا تحتوى على اى جداول التى ليست موجودة على موقع المستورد."
4962
 
4963
+ #: addons/migrator.php:325 admin.php:2175 class-updraftplus.php:4246
4964
  #: restorer.php:1970
4965
  msgid "Warning:"
4966
  msgstr "تحذير:"
4967
 
4968
+ #: class-updraftplus.php:4238 restorer.php:162
4969
  msgid "You are running on WordPress multisite - but your backup is not of a multisite site."
4970
  msgstr "انت تعمل على وردبريس متعدد المواقع - لكن النسخة الأحتياطية الخاص بك ليست لموقع متعدد المواقع."
4971
 
4972
+ #: admin.php:3662
4973
  msgid "Skipping restoration of WordPress core when importing a single site into a multisite installation. If you had anything necessary in your WordPress directory then you will need to re-add it manually from the zip file."
4974
  msgstr "تخطى استعادة وردبريس الأساسية عند استيراد موقع واحد فى الثبيت متعدد المواقع. اذا كان لديك اى شئ ضرورى فى دليل وردبريس الخاص بك فأنك سوف تحتاج الى اعادة اضافتة يدوياً من ملف مضغوط."
4975
 
4976
+ #: admin.php:3105 methods/updraftvault.php:279
4977
  msgid "Your web server's PHP installation does not included a <strong>required</strong> (for %s) module (%s). Please contact your web hosting provider's support and ask for them to enable it."
4978
  msgstr "لا تشمل php خادم السيرفر الخاص بك <strong>المطلوبة</strong> (الى %s) الوحدة (%s). يرجى الأتصال بخدمة دعم استضافة الويب واطلب منهم تفعيل الوحدة."
4979
 
4980
+ #: admin.php:682
4981
  msgid "Close"
4982
  msgstr "اغلق"
4983
 
4984
+ #: addons/autobackup.php:298 addons/autobackup.php:386 admin.php:638
4985
  #: methods/remotesend.php:64 methods/remotesend.php:72
4986
  #: methods/remotesend.php:213 methods/remotesend.php:230
4987
  msgid "Unexpected response:"
4988
  msgstr "استجابة غير متوقعة:"
4989
 
4990
+ #: addons/reporting.php:434 admin.php:633
4991
  msgid "To send to more than one address, separate each address with a comma."
4992
  msgstr "لأرسال الى اكثر من عنوان واحد, قم بوضع فاصلة بين كل عنوان."
4993
 
4994
+ #: admin.php:662
4995
  msgid "PHP information"
4996
  msgstr "معلومات PHP"
4997
 
5027
  msgid "Also delete from remote storage"
5028
  msgstr "حذف ايضاً من التخزين البعيد"
5029
 
5030
+ #: admin.php:2427
5031
  msgid "Latest UpdraftPlus.com news:"
5032
  msgstr "اخر اخبار UpdraftPlus.com:"
5033
 
5044
  msgid "News"
5045
  msgstr "اخبار"
5046
 
5047
+ #: admin.php:1366 includes/class-wpadmin-commands.php:444
5048
  msgid "Backup set not found"
5049
  msgstr "لم يتم العثور على مجموعة النسخ الأحتياطى"
5050
 
5062
  msgid "Blog link"
5063
  msgstr "رابط المدونة"
5064
 
5065
+ #: admin.php:726
5066
  msgid "Testing %s Settings..."
5067
  msgstr "اختبار اعدادات %s ..."
5068
 
5070
  msgid "Or, you can place them manually into your UpdraftPlus directory (usually wp-content/updraft), e.g. via FTP, and then use the \"rescan\" link above."
5071
  msgstr "او, يمكنك وضعها يدويا فى مسار UpdraftPlus الخاص بك (عادة wp-content/updraft)، على سبيل المثال عبر FTP، ومن ثم استخدام الرابط \"إعادة الفحص\" أعلاه."
5072
 
5073
+ #: admin.php:950
5074
  msgid "UpdraftPlus's debug mode is on. You may see debugging notices on this page not just from UpdraftPlus, but from any other plugin installed. Please try to make sure that the notice you are seeing is from UpdraftPlus before you raise a support request."
5075
  msgstr "UpdraftPlus على وضع تصحيح الأخطاء. قد تشاهد ملاحظات التصحيح على هذة الصفحة وليس فقط على UpdraftPlus، ولكن من اى برنامج اضافى اخر مثبت. يرجى محاولة التأكد من ان الملاحظات التى تراها هى من UpdraftPlus قبل طلب الدعم."
5076
 
5077
+ #: admin.php:950
5078
  msgid "Notice"
5079
  msgstr "لاحظ"
5080
 
5082
  msgid "Errors encountered:"
5083
  msgstr "مصادفة اخطاء:"
5084
 
5085
+ #: admin.php:631
5086
  msgid "Rescanning (looking for backups that you have uploaded manually into the internal backup store)..."
5087
  msgstr "اعادة الفحص (يبحث عن النسخ الاحتياطية التي قمت برفعها يدويا في مسار النسخ الاحتياطي الداخلي)..."
5088
 
5089
+ #: admin.php:644
5090
  msgid "Begun looking for this entity"
5091
  msgstr "بدأ البحث عن هذا الكيان"
5092
 
5106
  msgid "Time taken (seconds):"
5107
  msgstr "الوقت المستغرق (ثانية):"
5108
 
5109
+ #: addons/migrator.php:1113 admin.php:649
5110
  msgid "Errors:"
5111
  msgstr "الأخطاء:"
5112
 
5199
  msgid "starting from next time it is"
5200
  msgstr "ابتداء من المرة القادمة انها"
5201
 
5202
+ #: addons/sftp.php:448
5203
  msgid "Failure: Port must be an integer."
5204
  msgstr "فشل: المنفذ يجب ان يكون عدد صحيح."
5205
 
5206
+ #: methods/ftp.php:366 methods/openstack2.php:168
5207
  msgid "password"
5208
  msgstr "كلمة السر"
5209
 
5210
+ #: addons/sftp.php:439 methods/openstack2.php:163
5211
  msgid "username"
5212
  msgstr "اسم المستخدم"
5213
 
5214
+ #: addons/sftp.php:435
5215
  msgid "host name"
5216
  msgstr "اسم المضيف"
5217
 
5218
+ #: addons/sftp.php:415
5219
  msgid "Where to change directory to after logging in - often this is relative to your home directory."
5220
  msgstr "حيث لتغير الدليل الى بعد تسجيل الدخول - غالبا ما يكون هذا هو نسبة الى الدليل الرئيسى الخاص بك."
5221
 
5222
+ #: addons/sftp.php:413
5223
  msgid "Directory path"
5224
  msgstr "مسار الدليل"
5225
 
5226
+ #: addons/lockadmin.php:153 addons/moredatabase.php:239 addons/sftp.php:388
5227
+ #: addons/webdav.php:92 methods/openstack2.php:148 methods/updraftvault.php:339
5228
  #: udaddons/options.php:152
5229
  msgid "Password"
5230
  msgstr "كلمة السر"
5231
 
5232
+ #: addons/sftp.php:374 addons/webdav.php:106
5233
  msgid "Port"
5234
  msgstr "المنفذ"
5235
 
5236
+ #: addons/moredatabase.php:237 addons/sftp.php:367 addons/webdav.php:98
5237
  msgid "Host"
5238
  msgstr "الاستضافة"
5239
 
5241
  msgid "%s Error: Failed to download"
5242
  msgstr "خطأ %s: فشل التحميل"
5243
 
5244
+ #: addons/sftp.php:478
5245
  msgid "Check your file permissions: Could not successfully create and enter:"
5246
  msgstr "تحقق من أذونات الملف الخاص بك: تعذر الإنشاء والدخول بنجاح :"
5247
 
5290
  msgid "WordPress Core"
5291
  msgstr "لب الووردبريس"
5292
 
5293
+ #: methods/addon-base-v2.php:287 methods/stream-base.php:309
5294
  msgid "Failed: We were not able to place a file in that directory - please check your credentials."
5295
  msgstr "فشل: لم نكن قادرين على وضع ملف في هذا الدليل - يرجى مراجعة بيانات الاعتماد الخاصة بك."
5296
 
5297
+ #: addons/googlecloud.php:662 addons/googlecloud.php:696
5298
+ #: addons/googlecloud.php:702 addons/sftp.php:465 admin.php:2751 admin.php:2786
5299
+ #: admin.php:2795 methods/addon-base-v2.php:277 methods/stream-base.php:295
5300
  msgid "Failed"
5301
  msgstr "فشل"
5302
 
5303
+ #: addons/webdav.php:68
5304
  msgid "WebDAV URL"
5305
  msgstr "رابط WEBDAV"
5306
 
5307
+ #: methods/stream-base.php:279
5308
  msgid "Local write failed: Failed to download"
5309
  msgstr "فشلت الكتابة المحلية: فشل تحميل"
5310
 
5311
+ #: methods/stream-base.php:266
5312
  msgid "Error opening remote file: Failed to download"
5313
  msgstr "خطأ في فتح الملف : فشل في التحميل"
5314
 
5316
  msgid "Chunk %s: A %s error occurred"
5317
  msgstr "قطعة %s: حدث خطأ %s"
5318
 
5319
+ #: addons/googlecloud.php:304 addons/sftp.php:44 methods/addon-base-v2.php:65
5320
  #: methods/addon-base-v2.php:106 methods/addon-base-v2.php:138
5321
+ #: methods/addon-base-v2.php:184 methods/addon-base-v2.php:257
5322
  #: methods/ftp.php:31 methods/googledrive.php:130 methods/stream-base.php:27
5323
  #: methods/stream-base.php:141 methods/stream-base.php:147
5324
+ #: methods/stream-base.php:181 methods/stream-base.php:243
5325
  msgid "No %s settings were found"
5326
  msgstr "تم العثور على أية إعدادات %s"
5327
 
5353
  msgid "Only non-encrypted FTP is supported by regular UpdraftPlus."
5354
  msgstr "UpdraftPlus تدعم فقط حسابات FTP الغير مشفرة"
5355
 
5356
+ #: addons/onedrive.php:757 methods/dropbox.php:629
5357
  msgid "Your %s account name: %s"
5358
  msgstr "اسم الحساب %s الخاص بك: %s"
5359
 
5360
+ #: methods/dropbox.php:619 methods/dropbox.php:646
5361
  msgid "though part of the returned information was not as expected - your mileage may vary"
5362
  msgstr "على الرغم من أن جزء من المعلومات الذي عاد لم يكن كما هو متوقع - الأميال الخاص بك قد تختلف"
5363
 
5364
+ #: methods/dropbox.php:614 methods/dropbox.php:616
5365
  msgid "you have authenticated your %s account"
5366
  msgstr "تم المصادقة على %s حسابك"
5367
 
5368
+ #: methods/dropbox.php:494 methods/dropbox.php:496
5369
  msgid "there's an add-on for that."
5370
  msgstr "هناك اضافة لذلك."
5371
 
5372
+ #: methods/dropbox.php:494 methods/dropbox.php:496
5373
  msgid "If you back up several sites into the same Dropbox and want to organise with sub-folders, then "
5374
  msgstr "اذا كنت تستخدم النسخ الأحتياطى لعدة مواقع فى نفس الدروب بوكس وتريد ان تقوم بتنظيمها مع المجلدات الفرعية, اذا"
5375
 
5376
+ #: methods/dropbox.php:494 methods/dropbox.php:496
5377
  msgid "Backups are saved in"
5378
  msgstr "يتم حفظ النسخ الأحتياطية فى"
5379
 
5380
+ #: methods/dropbox.php:494 methods/dropbox.php:496
5381
  msgid "Need to use sub-folders?"
5382
  msgstr "هل تحتاج الى استخدام المجلدات الفرعية؟"
5383
 
5384
+ #: methods/dropbox.php:206 methods/dropbox.php:227 methods/dropbox.php:243
5385
  msgid "error: failed to upload file to %s (see log file for more)"
5386
  msgstr "خطأ: فشل فى رفع الملف الى %s (انظر السجل لمزيد من التفاصيل)"
5387
 
5388
+ #: methods/dropbox.php:91 methods/dropbox.php:108
5389
  msgid "You do not appear to be authenticated with Dropbox"
5390
  msgstr "لا يبدو ان المصادقة مع Dropbox"
5391
 
5392
+ #: methods/s3.php:1047
5393
  msgid "The communication with %s was not encrypted."
5394
  msgstr "التواصل مع %s كان غير مشفر."
5395
 
5396
+ #: methods/s3.php:1045
5397
  msgid "The communication with %s was encrypted."
5398
  msgstr "التواصل مع %s كان مشفر."
5399
 
5400
+ #: addons/googlecloud.php:725 methods/s3.php:1042
5401
  msgid "We accessed the bucket, and were able to create files within it."
5402
  msgstr "نحن وصلنا الى الباكت, وتمكنا من انشاء الملفات داخلها."
5403
 
5404
+ #: addons/googlecloud.php:719 addons/googlecloud.php:733 methods/s3.php:1040
5405
+ #: methods/s3.php:1052
5406
  msgid "We successfully accessed the bucket, but the attempt to create a file in it failed."
5407
  msgstr "تم الوصول بنجاح الى الباكت. ولكن محاولة انشاء الملف فشلت."
5408
 
5409
+ #: addons/googlecloud.php:719 addons/googlecloud.php:733 methods/s3.php:1040
5410
+ #: methods/s3.php:1052
5411
  msgid "Failure"
5412
  msgstr "فشل"
5413
 
5414
+ #: methods/s3.php:1028
5415
  msgid "Failure: We could not successfully access or create such a bucket. Please check your access credentials, and if those are correct then try another bucket name (as another %s user may already have taken your name)."
5416
  msgstr "فشل: لم نستطع بنجاح الدخول او انشاء باكت. من فضلك تحقق من اذون الصلاحية, واذا كانت صحيحة اذا حاول اسم باكت اخر (كمستخدم اخر %s استخدم الأسم بالفعل)."
5417
 
5418
+ #: addons/s3-enhanced.php:153 methods/openstack2.php:134 methods/s3.php:1022
5419
  msgid "Region"
5420
  msgstr "المنطقة"
5421
 
5422
+ #: addons/googlecloud.php:104 addons/googlecloud.php:679 methods/s3.php:1004
5423
  msgid "Failure: No bucket details were given."
5424
  msgstr "فشل: لم ترد تفاصيل الباكت."
5425
 
5426
+ #: methods/s3.php:982
5427
  msgid "API secret"
5428
  msgstr "API السرية"
5429
 
5430
+ #: methods/s3.php:876
5431
  msgid "Enter only a bucket name or a bucket and path. Examples: mybucket, mybucket/mypath"
5432
  msgstr "ادخال فقط اى اسم الدلو او مسار الدلو. امثلة: mybucket, mybucket/mypath"
5433
 
5434
+ #: methods/s3.php:875
5435
  msgid "%s location"
5436
  msgstr "المكان %s"
5437
 
5438
+ #: methods/s3.php:871
5439
  msgid "%s secret key"
5440
  msgstr "المفتاح السرى %s"
5441
 
5442
+ #: methods/s3.php:867
5443
  msgid "%s access key"
5444
  msgstr "مفتاح الوصول %s"
5445
 
5446
+ #: methods/s3.php:832
5447
  msgid "If you see errors about SSL certificates, then please go here for help."
5448
  msgstr "إذا كنت ترى أخطاء حول شهادات SSL، يرجى الدخول هنا للمساعدة."
5449
 
5450
+ #: methods/s3.php:830
5451
  msgid "Get your access key and secret key <a href=\"%s\">from your %s console</a>, then pick a (globally unique - all %s users) bucket name (letters and numbers) (and optionally a path) to use for storage. This bucket will be created for you if it does not already exist."
5452
  msgstr "احصل على مفتاح وصولك و كلمتك السرية <a href=\"%s\">من %s آلتك</a>، ثم اختر اسم مستخدم (أحرف وأرقام) (فريد - كل %s المستخدمين) (ومسار اختياريا) لإستخدامه للتخزين. هذا الدلو سيتم خلقه لك ان لم يكن موجود أصلا."
5453
 
5454
+ #: methods/s3.php:462 methods/s3.php:636 methods/s3.php:738
5455
  msgid "%s Error: Failed to access bucket %s. Check your permissions and credentials."
5456
  msgstr "خطأ %s : فشل في الوصول إلى الدلو %s. تحقق من الأذونات واعتماداتك. "
5457
 
5458
+ #: methods/s3.php:721 methods/s3.php:767
5459
  msgid "%s Error: Failed to download %s. Check your permissions and credentials."
5460
  msgstr "%s خطأ: فشل في تحميل %s. تحقق من الأذونات واعتماداتك."
5461
 
5462
+ #: methods/s3.php:440
5463
  msgid "%s re-assembly error (%s): (see log file for more)"
5464
  msgstr "%s خطأ في إعادة التجميع (%s): (انظر السجل لمزيد من التفاصيل) "
5465
 
5466
+ #: methods/s3.php:436
5467
  msgid "%s upload (%s): re-assembly failed (see log for more details)"
5468
  msgstr "%s الرفع (%s): إعادة تجميع الملفات التي فشل رفعها (انظر السجل لمزيد من التفاصيل)"
5469
 
5470
+ #: methods/s3.php:420
5471
  msgid "%s chunk %s: upload failed"
5472
  msgstr "%s قطعة %s : فشل الرفع"
5473
 
5474
+ #: methods/s3.php:410
5475
  msgid "%s error: file %s was shortened unexpectedly"
5476
  msgstr "%s خطأ: تم اختصار الملف %s بشكل غير متوقع"
5477
 
5478
+ #: methods/s3.php:387
5479
  msgid "%s upload: getting uploadID for multipart upload failed - see log file for more details"
5480
  msgstr "%s الرفع: فشل الحصول على uploadID للتحميل المتعدد- راجع ملف السجل لمزيد من التفاصيل"
5481
 
5487
  msgid "WordPress Backup"
5488
  msgstr "نسخ ووردريس احتياطيا"
5489
 
5490
+ #: methods/cloudfiles.php:562 methods/openstack-base.php:480
5491
  msgid "We accessed the container, and were able to create files within it."
5492
  msgstr "تم الوصول إلى الحاوية، ويمكننا إنشاء ملف داخلها "
5493
 
5494
+ #: methods/cloudfiles.php:558
5495
  msgid "Cloud Files error - we accessed the container, but failed to create a file within it"
5496
  msgstr "خطأ بملفات السحابة - تم الوصول إلى الحاوية، لكننا فشلنا في إنشاء ملف داخلها"
5497
 
5498
+ #: methods/cloudfiles.php:531 methods/openstack-base.php:424
5499
  msgid "Failure: No container details were given."
5500
  msgstr "خطأ: ولم تعط أية تفاصيل عن الحاوية."
5501
 
5502
+ #: addons/moredatabase.php:238 addons/sftp.php:381 addons/webdav.php:86
5503
+ #: methods/cloudfiles-new.php:176 methods/cloudfiles.php:511
5504
+ #: methods/openstack2.php:142
5505
  msgid "Username"
5506
  msgstr "اسم المستخدم"
5507
 
5508
+ #: methods/cloudfiles-new.php:171 methods/cloudfiles.php:506 methods/s3.php:978
5509
  msgid "API key"
5510
  msgstr "مفتاح API"
5511
 
5512
  #: addons/migrator.php:278 addons/migrator.php:1871 addons/moredatabase.php:75
5513
+ #: addons/moredatabase.php:77 addons/moredatabase.php:79 addons/sftp.php:435
5514
+ #: addons/sftp.php:439 addons/sftp.php:443 addons/webdav.php:126 admin.php:702
5515
+ #: methods/addon-base-v2.php:270 methods/cloudfiles-new.php:171
5516
+ #: methods/cloudfiles-new.php:176 methods/cloudfiles.php:506
5517
+ #: methods/cloudfiles.php:511 methods/ftp.php:362 methods/ftp.php:366
5518
+ #: methods/openstack2.php:163 methods/openstack2.php:168
5519
+ #: methods/openstack2.php:173 methods/openstack2.php:178 methods/s3.php:978
5520
+ #: methods/s3.php:982
5521
  msgid "Failure: No %s was given."
5522
  msgstr "فضل: لم تعطى أية %s."
5523
 
5524
+ #: methods/cloudfiles-new.php:105 methods/cloudfiles.php:452
5525
+ #: methods/openstack-base.php:523 methods/s3.php:819
5526
  msgid "UpdraftPlus's %s module <strong>requires</strong> %s. Please do not file any support requests; there is no alternative."
5527
  msgstr "وحدة UpdraftPlus %s <strong> تتطلب </strong> %s من فضلك لا تقم بتقديم أي طلبات دعم، فليس هناك أي بديل."
5528
 
5529
+ #: methods/cloudfiles.php:494
5530
  msgid "Cloud Files container"
5531
  msgstr "سحابة الملفات الحاوية"
5532
 
5533
+ #: methods/cloudfiles.php:490
5534
  msgid "Cloud Files API key"
5535
  msgstr "سحابة ملفات مفاتيح API "
5536
 
5537
+ #: methods/cloudfiles.php:486
5538
  msgid "Cloud Files username"
5539
  msgstr "سحابة ملفات المستخدم"
5540
 
5541
+ #: addons/cloudfiles-enhanced.php:36 methods/cloudfiles-new.php:118
5542
+ #: methods/cloudfiles.php:470
5543
  msgid "UK"
5544
  msgstr "المملكة المتحدة"
5545
 
5546
+ #: addons/cloudfiles-enhanced.php:35 methods/cloudfiles-new.php:117
5547
+ #: methods/cloudfiles.php:469
5548
  msgid "US (default)"
5549
  msgstr "الولايات المتحدة (افتراضى)"
5550
 
5551
+ #: methods/cloudfiles.php:466
5552
  msgid "US or UK Cloud"
5553
  msgstr "سحابة الولايات المتحدة او المملكة المتحدة"
5554
 
5555
+ #: methods/cloudfiles-new.php:110 methods/cloudfiles.php:462
5556
+ #: methods/openstack2.php:115
5557
  msgid "Also, you should read this important FAQ."
5558
  msgstr "أيضا، يجب عليك قراءة هذا التعليمات الهامة."
5559
 
5560
+ #: methods/cloudfiles-new.php:110 methods/cloudfiles.php:462
5561
  msgid "Get your API key <a href=\"https://mycloud.rackspace.com/\">from your Rackspace Cloud console</a> (read instructions <a href=\"http://www.rackspace.com/knowledge_center/article/rackspace-cloud-essentials-1-generating-your-api-key\">here</a>), then pick a container name to use for storage. This container will be created for you if it does not already exist."
5562
  msgstr "احصل على مفتاح API <a href=\"https://mycloud.rackspace.com/\">من خدمة Rackspace Cloud </a> (يمكن قراءة التعليمات <a href=\"http://www.rackspace.com/knowledge_center/article/rackspace-cloud-essentials-1-generating-your-api-key\">هنا</a>)، ثم قم باختيار اسم حاوية لإستخدام مساحة التخزين. سيتم خلق هذه الحاوية ان لم تكن موجودو مسبقا."
5563
 
5564
+ #: admin.php:725 methods/backup-module.php:197
 
 
 
5565
  msgid "Test %s Settings"
5566
  msgstr "اختبار %s الإعدادات"
5567
 
5569
  msgid "Error downloading remote file: Failed to download ("
5570
  msgstr "خطأ في تحميل الملف بالخدمة السحابية: فشل في تحميل ("
5571
 
5572
+ #: class-updraftplus.php:1077 class-updraftplus.php:1121
5573
+ #: methods/cloudfiles.php:390 methods/stream-base.php:259
5574
  msgid "Error opening local file: Failed to download"
5575
  msgstr "خطأ في فتح ملف محلي: فشل التحميل"
5576
 
5577
+ #: methods/cloudfiles.php:216
5578
  msgid "Cloud Files error - failed to upload file"
5579
  msgstr "خطأ بملفات سحابة - فشل في رفع الملف"
5580
 
5581
+ #: addons/sftp.php:135 addons/sftp.php:147 methods/cloudfiles.php:145
5582
+ #: methods/cloudfiles.php:187 methods/openstack-base.php:77
5583
+ #: methods/openstack-base.php:266 methods/s3.php:355 methods/s3.php:367
5584
+ #: methods/s3.php:368
5585
  msgid "%s Error: Failed to upload"
5586
  msgstr "%s خطأ: فشل في تحميل"
5587
 
5588
+ #: addons/googlecloud.php:187 addons/googlecloud.php:192
5589
+ #: class-updraftplus.php:939 methods/cloudfiles.php:128
5590
  #: methods/googledrive.php:741 methods/googledrive.php:746
5591
  msgid "%s Error: Failed to open local file"
5592
  msgstr "%s خطأ: فشل في فتح ملف محلي"
5593
 
5594
+ #: methods/cloudfiles.php:101 methods/cloudfiles.php:342
5595
+ #: methods/cloudfiles.php:361
5596
  msgid "Cloud Files error - failed to create and access the container"
5597
  msgstr "خطأ ملفات السحابة - فشل في إنشاء والوصول إلى الحاوية"
5598
 
5599
  #: addons/cloudfiles-enhanced.php:96 addons/cloudfiles-enhanced.php:109
5600
+ #: addons/cloudfiles-enhanced.php:113 methods/cloudfiles.php:541
5601
+ #: methods/cloudfiles.php:544 methods/cloudfiles.php:547
5602
  msgid "Cloud Files authentication failed"
5603
  msgstr "فشل المصادقة بملفات سحابة"
5604
 
5605
+ #: addons/googlecloud.php:953 methods/googledrive.php:963
5606
  msgid "<strong>After</strong> you have saved your settings (by clicking 'Save Changes' below), then come back here once and click this link to complete authentication with Google."
5607
  msgstr "<strong>بعد</strong> حفظ خياراتك (بالضغط على زر 'حفظ التغيرات' أدناه)، قم بالرجوع مرة أخرى هنا وقم بزيارة الرابط لإكمال عملية المصادقة مه جوجل."
5608
 
5609
+ #: addons/googlecloud.php:942 methods/googledrive.php:952
5610
  msgid "Authenticate with Google"
5611
  msgstr "المصادقة مع جوجل"
5612
 
5613
+ #: addons/googlecloud.php:893 addons/onedrive.php:989
5614
  #: methods/googledrive.php:922
5615
  msgid "Client Secret"
5616
  msgstr "سر العميل"
5617
 
5618
+ #: addons/googlecloud.php:888 methods/googledrive.php:919
5619
  msgid "If Google later shows you the message \"invalid_client\", then you did not enter a valid client ID here."
5620
  msgstr "اذا أظهر لك جوجل في وقت لاحق لك رسالة \"invalid_client\"، إذا فأنت لم تقم بإدخال معرف عميل صالح هنا."
5621
 
5622
+ #: addons/googlecloud.php:885 addons/onedrive.php:985
5623
  #: methods/googledrive.php:918
5624
  msgid "Client ID"
5625
  msgstr "معرف العميل"
5626
 
5627
+ #: addons/googlecloud.php:874 methods/googledrive.php:908
5628
  msgid "You must add the following as the authorised redirect URI (under \"More Options\") when asked"
5629
  msgstr "يجب إضافة ما يلي كأذن لإعادة توجيه URI (تحت \"خيارات أخرى\") عندما تسأل"
5630
 
5631
+ #: addons/googlecloud.php:874 methods/googledrive.php:908
5632
  msgid "Select 'Web Application' as the application type."
5633
  msgstr "اختر 'تطبيق ويب \"كنوع التطبيق."
5634
 
5635
+ #: addons/googlecloud.php:872 methods/googledrive.php:906
5636
  msgid "For longer help, including screenshots, follow this link. The description below is sufficient for more expert users."
5637
  msgstr "للحصول على مساعدة لفترة أطول، بما في ذلك لقطات، اتبع هذا الرابط. وصف أدناه ما يكفي لعدد أكبر من المستخدمين الخبراء."
5638
 
5639
+ #: methods/addon-base-v2.php:232 methods/cloudfiles.php:442
5640
+ #: methods/dropbox.php:478 methods/ftp.php:305 methods/googledrive.php:891
5641
+ #: methods/openstack-base.php:513 methods/s3.php:791
5642
+ #: methods/stream-base.php:215
5643
  msgid "%s is a great choice, because UpdraftPlus supports chunked uploads - no matter how big your site is, UpdraftPlus can upload it a little at a time, and not get thwarted by timeouts."
5644
  msgstr "%s هو خيار صائب، لأن UpdraftPlus يدعم الرفع المقسم - لا يهمنا كم حجم موقعكم، لأن UpdraftPlus يستطيع تقسيم ورفع الأجزاء المقسمة، ولن يحبط من كثرة المهلات."
5645
 
5646
+ #: addons/googlecloud.php:476 addons/googlecloud.php:477
5647
+ #: addons/googlecloud.php:745 methods/googledrive.php:445
5648
  #: methods/googledrive.php:446
5649
  msgid "Account is not authorized."
5650
  msgstr "حساب غير مخول."
5663
  msgid "Have not yet obtained an access token from Google - you need to authorise or re-authorise your connection to Google Drive."
5664
  msgstr "لم تتمكن بعد من الحصول على رمز من جوجل - يتوجب عليك أن تصادق أو تعيد المصادقة مع خدمة جوجل درايف."
5665
 
5666
+ #: addons/googlecloud.php:610 addons/onedrive.php:795
5667
  #: methods/googledrive.php:348
5668
  msgid "you have authenticated your %s account."
5669
  msgstr "لديك حساب %s مصادق عليه."
5670
 
5671
+ #: addons/googlecloud.php:610 addons/googlecloud.php:725
5672
+ #: addons/onedrive.php:795 addons/sftp.php:498 methods/addon-base-v2.php:284
5673
+ #: methods/cloudfiles.php:562 methods/googledrive.php:348
5674
+ #: methods/openstack-base.php:480 methods/s3.php:1042
5675
+ #: methods/stream-base.php:306
5676
  msgid "Success"
5677
  msgstr "نجاح"
5678
 
5679
+ #: addons/onedrive.php:749 methods/dropbox.php:657 methods/dropbox.php:666
5680
  #: methods/googledrive.php:322
5681
  msgid "Your %s quota usage: %s %% used, %s available"
5682
  msgstr "نسبة %s تدفق البيانات المخصص لك: %s %% مستخدمة، %s متوفرة"
5683
 
5684
+ #: addons/googlecloud.php:421 methods/googledrive.php:295
5685
  msgid "Authorization failed"
5686
  msgstr "فشل التخويل"
5687
 
5688
+ #: addons/googlecloud.php:413 methods/googledrive.php:287
5689
  msgid "No refresh token was received from Google. This often means that you entered your client secret wrongly, or that you have not yet re-authenticated (below) since correcting it. Re-check it, then follow the link to authenticate again. Finally, if that does not work, then use expert mode to wipe all your settings, create a new Google client ID/secret, and start again."
5690
  msgstr "لم نتمكن من الحصول على أي رمز من جوجل. يعني هذا غالبا أنكم قمتم بإدخال رقمكم السري خاطئ، أو أنكم لم تتمكنوا من إعادة مصادقة الخدمة (أسفله) بعد تصحيحها. تأكد منها، ثم قم بمتابعة الرابط أسفله لإعادة المصادقة مع الخدمة مرة أخرى. أخيرا، إن لم تعمل الإضافة، قم باستعمال خيار الخبراء لإعادة مسح كل خياراتكم، أنشئ معرف عميل جوجل جديد وابدأ من الصفر."
5691
 
5707
  msgid "You need to re-authenticate with %s, as your existing credentials are not working."
5708
  msgstr "تحتاج إلى إعادة المصادقة مع %s، معلومات الاعتماد الموجودة لديك لا تعمل."
5709
 
5710
+ #: addons/migrator.php:1770 admin.php:2754 admin.php:2788 admin.php:2792
5711
+ #: admin.php:3692 admin.php:3705 restorer.php:2203 restorer.php:2309
5712
  msgid "OK"
5713
  msgstr "حسنا"
5714
 
5733
  msgstr "بادئة الجدول القديمة:"
5734
 
5735
  #: addons/reporting.php:65 addons/reporting.php:152 backup.php:942
5736
+ #: class-updraftplus.php:4179
5737
  msgid "Backup of:"
5738
  msgstr "نسخة احتياطية لـ:"
5739
 
5809
  msgid "UpdraftPlus is not able to directly restore this kind of entity. It must be restored manually."
5810
  msgstr "UpdraftPlus لا يمكنه استرجاع هذا النوع بشكل مباشر. يمكنك استرجاعه بشكل يدوي."
5811
 
5812
+ #: admin.php:3713 admin.php:3714
5813
  msgid "Could not find one of the files for restoration"
5814
  msgstr "لا يمكن العثور على واحد من الملفات لاستعادته"
5815
 
5816
+ #: admin.php:3808
5817
  msgid "Error message"
5818
  msgstr "رسالة الخطأ"
5819
 
5820
+ #: admin.php:3710
5821
  msgid "The backup records do not contain information about the proper size of this file."
5822
  msgstr "سجلات النسخ الاحتياطي لا تحتوي على معلومات عن الحجم الحقيقي لهذا الملف."
5823
 
5824
+ #: admin.php:3702
5825
  msgid "Archive is expected to be size:"
5826
  msgstr "من المتوقع أن يكون حجم الأرشيف:"
5827
 
5828
+ #: admin.php:3586
5829
  msgid "If making a request for support, please include this information:"
5830
  msgstr "ان كنت تريد طلب دعم فني، فضلا قم باستخدام هذه المعلومات:"
5831
 
5832
+ #: admin.php:3585
5833
  msgid "ABORT: Could not find the information on which entities to restore."
5834
  msgstr "الغاء: لم نتمكن من إيجاد معلومات عن الكيانات التي تريد استعادتها."
5835
 
5836
+ #: admin.php:3539
5837
  msgid "UpdraftPlus Restoration: Progress"
5838
  msgstr "استرجاع UpdraftPlus: تقدم"
5839
 
5840
+ #: admin.php:3491
5841
  msgid "This backup does not exist in the backup history - restoration aborted. Timestamp:"
5842
  msgstr "هذه النسخة الإحتياطية غير متوفرة بسجل التاريخ - الغاء عملية الإستعادة. الطابع الزمني:"
5843
 
5844
+ #: admin.php:3440
5845
  msgid "After pressing this button, you will be given the option to choose which components you wish to restore"
5846
  msgstr "بعد الضغط على هذا الزر، ستتمكن من اختيار المكونات التي تريد استرجاعها"
5847
 
5848
+ #: admin.php:3449
5849
  msgid "Delete this backup set"
5850
  msgstr "حذف هذه المجموعة من النسخ الاحتياطية"
5851
 
5852
+ #: admin.php:3117
5853
  msgid "Good news: Your site's communications with %s can be encrypted. If you see any errors to do with encryption, then look in the 'Expert Settings' for more help."
5854
  msgstr "أخباؤ سارة: اتصالات موقعكم الآن مع %s يمكن تشفيرها. إن كنت ترى أي أخطاء بخدة التشفير، يمكنك مراجعة خيارات الخبراء للمزيد من المعلومات."
5855
 
5856
+ #: admin.php:3114
5857
  msgid "Your web server's PHP/Curl installation does not support https access. We cannot access %s without this support. Please contact your web hosting provider's support. %s <strong>requires</strong> Curl+https. Please do not file any support requests; there is no alternative."
5858
  msgstr "نسخة PHP/Curl المنصبة بسيرفرك لا تدعم اتصال https. لا يمكن الوصول لـ %s دونها. من فضلك قم بالإتصال بخدمة الإسضافة الخاصة بك. %s <strong>تتطلب</strong> Curl+https. من فضلك لا تقم بمراسلة خدمة الدعم لأنه لا يوجد أي حل آخر."
5859
 
5860
+ #: admin.php:3112
5861
  msgid "Your web server's PHP/Curl installation does not support https access. Communications with %s will be unencrypted. ask your web host to install Curl/SSL in order to gain the ability for encryption (via an add-on)."
5862
  msgstr "نعلمكم أن نسخة PHP/Curl المنصبة لخادمكم لا تدعم وصول https. التواصل مع %s سيكون غير مشفر. من فضلك قم بمراسلة خدمة الإستضافة لتنصيب Curl/SSL لدعم خدمة التشفير (باستخدام إضافة)."
5863
 
5864
+ #: methods/cloudfiles-new.php:105 methods/cloudfiles.php:452
5865
+ #: methods/openstack-base.php:523 methods/s3.php:819
5866
  msgid "Your web server's PHP installation does not included a required module (%s). Please contact your web hosting provider's support."
5867
  msgstr "نعلمكم أن نسخة PHP المنصبة بخادمكم لا توفر هذا الموديل (%s). فضل قم بمراسلة خدمة استضافتكم."
5868
 
5869
+ #: templates/wp-admin/settings/form-contents.php:433
5870
  msgid "Save Changes"
5871
  msgstr "حفظ التغييرات"
5872
 
5873
+ #: templates/wp-admin/settings/form-contents.php:410
5874
  msgid "Choosing this option lowers your security by stopping UpdraftPlus from using SSL for authentication and encrypted transport at all, where possible. Note that some cloud storage providers do not allow this (e.g. Dropbox), so with those providers this setting will have no effect."
5875
  msgstr "اختيار هذا الخيار قد يضعف من الآمان بإيقاف UpdraftPlus من استخدام SSL للمصادقة و تشفير العمليات، إن أمكن الأمر. لاحظ أن بعض الدمات السحابية لا تقبل هذه العملية (مثال: Dropbox)، مع هذا الخيار لن تتمكن من حفظ النسخ بهذه الخدمات."
5876
 
5877
+ #: templates/wp-admin/settings/form-contents.php:409
5878
  msgid "Disable SSL entirely where possible"
5879
  msgstr "قم بتعطيل SSL تماما حيثما أمكن"
5880
 
5881
+ #: templates/wp-admin/settings/form-contents.php:405
5882
  msgid "Note that not all cloud backup methods are necessarily using SSL authentication."
5883
  msgstr "لاحظ أنه ليست كل أساليب النسخ الإحتياطي بالسحابة بالضرورة تستخدم المصادقة عن طريق SSL."
5884
 
5885
+ #: templates/wp-admin/settings/form-contents.php:405
5886
  msgid "Choosing this option lowers your security by stopping UpdraftPlus from verifying the identity of encrypted sites that it connects to (e.g. Dropbox, Google Drive). It means that UpdraftPlus will be using SSL only for encryption of traffic, and not for authentication."
5887
  msgstr "اختيار هذا الخيار يمكن أن يضعف من حمايتك بمنع UpdraftPlus من التحقق من هوية المواقع التي يتصل بها ( مثال: Dropbox, Google Drive). هذا يعني أن UpdraftPlus سيستخدم SSL لتشفير حركة مرور البيانات، ولن يستخدم التقنية لتشفير المصادقة مع المواقع."
5888
 
5889
+ #: templates/wp-admin/settings/form-contents.php:404
5890
  msgid "Do not verify SSL certificates"
5891
  msgstr "لا تحقق من شهادات SSL"
5892
 
5893
+ #: templates/wp-admin/settings/form-contents.php:400
5894
  msgid "By default UpdraftPlus uses its own store of SSL certificates to verify the identity of remote sites (i.e. to make sure it is talking to the real Dropbox, Amazon S3, etc., and not an attacker). We keep these up to date. However, if you get an SSL error, then choosing this option (which causes UpdraftPlus to use your web server's collection instead) may help."
5895
  msgstr "افتراضيا UpdraftPlus يستخدم خدماته الخاصة من SSL للحقق من هوية المواقع (للتأكد من أن الموقع الآخر هو فعلا الموقع المقصود وليس موقع مقرصن). نقوم بتحديثها آليا. إن قابلك خطأ SSL، حينها قم باختيار هذا الخيار (الذي يفرض على UpdraftPlus استخدام ملفات SSL الخاصة بسيرفرك بدلا من الخاص به) يمكن أن يساعدك."
5896
 
5897
+ #: templates/wp-admin/settings/form-contents.php:399
5898
  msgid "Use the server's SSL certificates"
5899
  msgstr "استخدام شهادات SSL للملقم"
5900
 
5901
+ #: admin.php:2988
5902
  msgid "If that is unsuccessful check the permissions on your server or change it to another directory that is writable by your web server process."
5903
  msgstr "إن لم يكن هذا ممكنا قم بالتأكد من الأذونات بسيرفرك الخاص أو غيره لمجلد جديد قابل للكتابة من قبل خادمك."
5904
 
5905
+ #: admin.php:2988
5906
  msgid "click here"
5907
  msgstr "انقر هنا"
5908
 
5909
+ #: admin.php:2988
5910
  msgid "or, to reset this option"
5911
  msgstr "أو، لإعادة هذا الخيار"
5912
 
5913
+ #: admin.php:2988
5914
  msgid "Follow this link to attempt to create the directory and set the permissions"
5915
  msgstr ""
5916
 
5917
+ #: admin.php:2980
5918
  msgid "Backup directory specified is writable, which is good."
5919
  msgstr "دليل النسخ الاحتياطي المحدد قابل للكتابة، وهو أمر جيد."
5920
 
5921
+ #: templates/wp-admin/settings/form-contents.php:380
5922
  msgid "Backup directory"
5923
  msgstr "دليل النسخ الاحتياطي"
5924
 
5925
+ #: templates/wp-admin/settings/form-contents.php:375
5926
  msgid "Delete local backup"
5927
  msgstr "حذف النسخة الاحتياطية المحلية"
5928
 
5929
+ #: templates/wp-admin/settings/form-contents.php:355
5930
  msgid "click this to show some further options; don't bother with this unless you have a problem or are curious."
5931
  msgstr "اضغط هنا لتتمكن من مشاهدة خيارات اضافية، لا ترعج نفسك بهذه الخيارات إلا إذا واجهت مشاكل."
5932
 
5933
+ #: templates/wp-admin/settings/form-contents.php:355
5934
  msgid "Show expert settings"
5935
  msgstr "إظهار الإعدادات المتقدمة"
5936
 
5937
+ #: templates/wp-admin/settings/form-contents.php:354
5938
  msgid "Expert settings"
5939
  msgstr "إعدادات متقدمة"
5940
 
5941
+ #: templates/wp-admin/settings/form-contents.php:365
5942
  msgid "Debug mode"
5943
  msgstr "وضع التصحيح"
5944
 
5945
+ #: templates/wp-admin/settings/form-contents.php:350
5946
  msgid "Advanced / Debugging Settings"
5947
  msgstr "متقدمة / تصحيح الإعدادات "
5948
 
5949
+ #: admin.php:661
5950
  msgid "Requesting start of backup..."
5951
  msgstr "مطالبة البدء بالنسخ الاحتياطي ..."
5952
 
5953
+ #: addons/morefiles.php:294 admin.php:677
5954
  msgid "Cancel"
5955
  msgstr "إلغاء"
5956
 
5957
+ #: addons/reporting.php:216 admin.php:3261
5958
  msgid "None"
5959
  msgstr "لا شيء"
5960
 
5962
  msgid "Choose your remote storage"
5963
  msgstr "اختر خدمت التخزين السحابي"
5964
 
5965
+ #: templates/wp-admin/settings/form-contents.php:248
5966
  msgid "Manually decrypt a database backup file"
5967
  msgstr "فك تشفير ملف النسخ الاحتياطي لقاعدة البيانات يدويا"
5968
 
5969
+ #: templates/wp-admin/settings/form-contents.php:229
5970
  msgid "Database encryption phrase"
5971
  msgstr "عبارة تشفير قاعدة البيانات"
5972
 
5973
+ #: templates/wp-admin/settings/form-contents.php:327 udaddons/options.php:150
5974
  msgid "Email"
5975
  msgstr "البريد الإلكتروني"
5976
 
5977
+ #: templates/wp-admin/settings/form-contents.php:219
5978
  msgid "The above directories are everything, except for WordPress core itself which you can download afresh from WordPress.org."
5979
  msgstr "المجلدات أعلاه هي كل شيء، باستثناء مجلدات ووردبريس التي يمكن تحميلها من جديد من WordPress.org."
5980
 
5981
+ #: addons/morefiles.php:440 admin.php:3058
5982
  msgid "Exclude these:"
5983
  msgstr "استبعاد هذه:"
5984
 
5985
+ #: admin.php:3049
5986
  msgid "Any other directories found inside wp-content"
5987
  msgstr "أي الدلائل الأخرى الموجودة داخل wp-content"
5988
 
5989
+ #: templates/wp-admin/settings/form-contents.php:216
5990
  msgid "Include in files backup"
5991
  msgstr "متضمن في ملفات النسخ الاحتياطي"
5992
 
5998
  msgid "To fix the time at which a backup should take place,"
5999
  msgstr "لإصلاح الوقت الذي ينبغي أن تأخذ نسخة احتياطية،"
6000
 
6001
+ #: admin.php:2974
6002
  msgid "Monthly"
6003
  msgstr "شهريا"
6004
 
6005
+ #: admin.php:2973
6006
  msgid "Fortnightly"
6007
  msgstr "نصف شهري"
6008
 
6009
+ #: admin.php:2972
6010
  msgid "Weekly"
6011
  msgstr "أسبوعيا"
6012
 
6013
+ #: admin.php:2971
6014
  msgid "Daily"
6015
  msgstr "يوميا"
6016
 
6017
+ #: admin.php:684 admin.php:2954
6018
  msgid "Download log file"
6019
  msgstr "تحميل ملف السجل"
6020
 
6021
+ #: admin.php:2851
6022
  msgid "The folder exists, but your webserver does not have permission to write to it."
6023
  msgstr "المجلد موجود مسبقا، لكن خادمك لا يملك صلاحية الكتابة عليه."
6024
 
6025
+ #: admin.php:2846
6026
  msgid "The folder was created, but we had to change its file permissions to 777 (world-writable) to be able to write to it. You should check with your hosting provider that this will not cause any problems"
6027
  msgstr "تم خلق المجلد، لكن يتوجب علينا تغيير أذوناته لـ 777 (قابل للكتابة) لنتمكن من الكتابة عليه. يجب عليك التحقق من قابلية هذه العملية مع خدمة الإستضافة الخاصة بك."
6028
 
6029
+ #: admin.php:2832
6030
  msgid "The request to the filesystem to create the directory failed."
6031
  msgstr "فشل الطلب إلى نظام الملفات لإنشاء الدليل."
6032
 
6033
+ #: addons/migrator.php:2243 admin.php:678 admin.php:2748 admin.php:2781
6034
+ #: admin.php:3449 templates/wp-admin/settings/delete-and-restore-modals.php:5
6035
  msgid "Delete"
6036
  msgstr "حذف"
6037
 
6038
+ #: admin.php:2688
6039
  msgid "show log"
6040
  msgstr "عرض السجل"
6041
 
6148
  msgid "Delete backup set"
6149
  msgstr "حذف مجموعة النسخ الاحتياطية"
6150
 
6151
+ #: admin.php:660
6152
  msgid "Download error: the server sent us a response which we did not understand."
6153
  msgstr "خطأ بالتحميل : بعث لنا الخادم استجابة لم نفهمها."
6154
 
6157
  #: addons/migrator.php:1368 addons/migrator.php:1709 addons/migrator.php:1736
6158
  #: addons/migrator.php:1742 addons/migrator.php:1804 addons/migrator.php:1840
6159
  #: addons/migrator.php:1879 addons/migrator.php:1889 addons/migrator.php:1894
6160
+ #: addons/s3-enhanced.php:128 addons/s3-enhanced.php:133
6161
+ #: addons/s3-enhanced.php:135 addons/sftp.php:754 addons/webdav.php:102
6162
+ #: admin.php:82 admin.php:652 admin.php:3707 admin.php:3737
6163
  #: methods/remotesend.php:69 methods/remotesend.php:227
6164
+ #: methods/updraftvault.php:453 restorer.php:1364
6165
  msgid "Error:"
6166
  msgstr "خطأ:"
6167
 
6168
+ #: admin.php:643 templates/wp-admin/settings/downloading-and-restoring.php:34
6169
  msgid "calculating..."
6170
  msgstr "حساب ..."
6171
 
6208
  msgid "More tasks:"
6209
  msgstr "المزيد من المهام:"
6210
 
6211
+ #: admin.php:2451
6212
  msgid "Download most recently modified log file"
6213
  msgstr "تحميل ملف السجل المعدل مؤخرا"
6214
 
6215
+ #: admin.php:2410 admin.php:2416 central/bootstrap.php:161
6216
  msgid "(Nothing yet logged)"
6217
  msgstr "(لا شيء حتى الآن تم تسجيله)"
6218
 
6219
+ #: addons/autobackup.php:293 addons/autobackup.php:384 admin.php:2409
6220
+ #: admin.php:2414
6221
  msgid "Last log message"
6222
  msgstr "رسالة السجل الأخيرة"
6223
 
6224
+ #: addons/migrator.php:218 admin.php:683 admin.php:3440
6225
  #: templates/wp-admin/settings/tab-status.php:30
6226
  msgid "Restore"
6227
  msgstr "الإستعادة"
6228
 
6229
+ #: admin.php:510 admin.php:676 templates/wp-admin/settings/tab-status.php:27
6230
  msgid "Backup Now"
6231
  msgstr "النسخ الاحتياطي الآن"
6232
 
6233
  #: addons/migrator.php:1774 addons/moredatabase.php:240
6234
+ #: addons/reporting.php:231 admin.php:295 admin.php:3236 admin.php:3309
6235
+ #: admin.php:3791 includes/class-wpadmin-commands.php:138
6236
  #: includes/class-wpadmin-commands.php:459
6237
  #: templates/wp-admin/settings/delete-and-restore-modals.php:81
6238
  #: templates/wp-admin/settings/delete-and-restore-modals.php:83
6239
  msgid "Database"
6240
  msgstr "قاعدة بيانات"
6241
 
6242
+ #: admin.php:291 admin.php:4242
6243
  msgid "Files"
6244
  msgstr "ملفات"
6245
 
6247
  msgid "Next scheduled backups"
6248
  msgstr "النسخ الاحتياطي المجدولة القادمة"
6249
 
6250
+ #: admin.php:271
6251
  msgid "At the same time as the files backup"
6252
  msgstr "في نفس الوقت الذي نقوم فيه بالنسخ الاحتياطي للملفات"
6253
 
6254
+ #: admin.php:261 admin.php:282 admin.php:289
6255
  msgid "Nothing currently scheduled"
6256
  msgstr "لا شيء مقرر حاليا"
6257
 
6263
  msgid "JavaScript warning"
6264
  msgstr "تحذير جافا سكريبت"
6265
 
6266
+ #: admin.php:663 admin.php:2478
6267
  msgid "Delete Old Directories"
6268
  msgstr "حذف الدلائل القديمة"
6269
 
6270
+ #: admin.php:2223
6271
  msgid "Current limit is:"
6272
  msgstr "الحد الحالي هو:"
6273
 
6274
+ #: admin.php:2197
6275
  msgid "Your backup has been restored."
6276
  msgstr "تمت استعادة النسخ الاحتياطي."
6277
 
6283
  msgid "Lead developer's homepage"
6284
  msgstr "الولوج لموقع المطور"
6285
 
6286
+ #: admin.php:4162
6287
  msgid "Your settings have been wiped."
6288
  msgstr "تم القضاء على الإعدادات الخاصة بك."
6289
 
6290
+ #: admin.php:2157
6291
  msgid "Backup directory successfully created."
6292
  msgstr "تم إنشاء دليل النسخ الاحتياطي بنجاح."
6293
 
6294
+ #: admin.php:2150
6295
  msgid "Backup directory could not be created"
6296
  msgstr "لا يمكن إنشاء دليل النسخ الاحتياطي"
6297
 
6298
+ #: admin.php:2720
6299
  msgid "Old directory removal failed for some reason. You may want to do this manually."
6300
  msgstr "النسخ السابقة من المجلدات لم تحذف بشكل جيد لسبب ما. يمكنك حذفها بشكل يدوي."
6301
 
6302
+ #: admin.php:2718
6303
  msgid "Old directories successfully removed."
6304
  msgstr "تم إزالة الدلائل القديمة بنجاح."
6305
 
6306
+ #: admin.php:2715
6307
  msgid "Remove old directories"
6308
  msgstr "إزالة الدلائل القديمة"
6309
 
6310
+ #: addons/migrator.php:281 addons/migrator.php:296 admin.php:2099
6311
+ #: admin.php:2108 admin.php:2117 admin.php:2159 admin.php:2722
6312
  msgid "Return to UpdraftPlus Configuration"
6313
  msgstr "العودة إلى اعدادات UpdraftPlus"
6314
 
6315
+ #: admin.php:656 admin.php:2099 admin.php:2108 admin.php:2117 admin.php:2159
6316
+ #: admin.php:2722 templates/wp-admin/settings/existing-backups-table.php:16
6317
  msgid "Actions"
6318
  msgstr "الإجراءات"
6319
 
6320
+ #: admin.php:2088
6321
  msgid "Restore successful!"
6322
  msgstr "استعادة ناجحة!"
6323
 
6324
+ #: admin.php:2018
6325
  msgid "Bad filename format - this does not look like an encrypted database file created by UpdraftPlus"
6326
  msgstr "إسم ملف خاطئ - نعقد أننا لم نكن المسؤولين في تشفير هذا الملف"
6327
 
6328
+ #: admin.php:1928
6329
  msgid "Bad filename format - this does not look like a file created by UpdraftPlus"
6330
  msgstr "إسم ملف خاطئ - نعتقد أننا لم نكن المسؤولين بخلق هذا الملف"
6331
 
6332
+ #: admin.php:1809
6333
  msgid "No local copy present."
6334
  msgstr "لا نسخة محلية متوفرة."
6335
 
6336
+ #: admin.php:1806
6337
  msgid "Download in progress"
6338
  msgstr "التحميل في تقدم"
6339
 
6340
+ #: admin.php:655 admin.php:1795
6341
  msgid "File ready."
6342
  msgstr "ملف جاهز."
6343
 
6344
+ #: admin.php:1776
6345
  msgid "Download failed"
6346
  msgstr "فشل تحميل"
6347
 
6348
+ #: admin.php:653 admin.php:1566 admin.php:3690 class-updraftplus.php:1077
6349
+ #: class-updraftplus.php:1121 methods/addon-base-v2.php:84
6350
+ #: methods/addon-base-v2.php:89 methods/addon-base-v2.php:194
6351
+ #: methods/addon-base-v2.php:214 methods/stream-base.php:197 restorer.php:2199
6352
  #: restorer.php:2224 restorer.php:2306 updraftplus.php:147
6353
  msgid "Error"
6354
  msgstr "خطأ"
6355
 
6356
+ #: admin.php:1594
6357
  msgid "Could not find that job - perhaps it has already finished?"
6358
  msgstr "لا يمكن العثور على هذا الوظيفة - ربما كان قد أنهى بالفعل؟"
6359
 
6360
+ #: admin.php:1586
6361
  msgid "Job deleted"
6362
  msgstr "وظيفة حذفت"
6363
 
6364
+ #: admin.php:1670
6365
  msgid "OK. You should soon see activity in the \"Last log message\" field below."
6366
  msgstr "أوكي، ستتمكن قريبا من مشاهدة النشاطات بحقل \"سجل آخر الرسائل\" أسفله"
6367
 
6368
+ #: admin.php:728
6369
  msgid "Nothing yet logged"
6370
  msgstr "لا شيء حتى الآن تم تسجيله"
6371
 
6372
+ #: admin.php:946
6373
  msgid "Please consult this FAQ if you have problems backing up."
6374
  msgstr "يرجى الرجوع إلى الأسئلة الشائعة إذا كنت تواجه مشاكل بالنسخ الاحتياطي."
6375
 
6376
+ #: admin.php:946
6377
  msgid "Your website is hosted using the %s web server."
6378
  msgstr "موقعك يستخدم %s من خادم الويب."
6379
 
6380
+ #: admin.php:942
6381
  msgid "UpdraftPlus does not officially support versions of WordPress before %s. It may work for you, but if it does not, then please be aware that no support is available until you upgrade WordPress."
6382
  msgstr "UpdraftPlus لا يدعم النسخ أقل من %s من نظام ووردبريس. يمكن أن يعمل لك، لكن إن لم يعمل، كن على يقين أنه لن نتمكن من مساعدة في حل المشاكل إلا بعد أن تقوم بترقية اصدار الووردبريس."
6383
 
6384
+ #: admin.php:938
6385
  msgid "You have less than %s of free disk space on the disk which UpdraftPlus is configured to use to create backups. UpdraftPlus could well run out of space. Contact your the operator of your server (e.g. your web hosting company) to resolve this issue."
6386
  msgstr "تملك مساحة تخزين حرة أقل من %s بالهارد درايف الذي يستخدمه UpdraftPlus لحفظ النسخ الإحتياطية. UpdraftPlus لن يتمكن من حفظ النسخ. من فشلك قم بمراسلة خدمة الإستضافة لحل هذا المشكل."
6387
 
6388
+ #: admin.php:930 admin.php:934 admin.php:938 admin.php:942 admin.php:946
6389
+ #: admin.php:955 admin.php:3105 admin.php:3112 admin.php:3114
6390
+ #: methods/cloudfiles-new.php:105 methods/cloudfiles.php:452
6391
+ #: methods/ftp.php:291 methods/openstack-base.php:523 methods/s3.php:815
6392
+ #: methods/s3.php:819 methods/updraftvault.php:279
6393
  #: templates/wp-admin/settings/downloading-and-restoring.php:29
6394
  #: udaddons/updraftplus-addons.php:208
6395
  msgid "Warning"
6396
  msgstr "تحذير"
6397
 
6398
+ #: admin.php:875
6399
  msgid "Add-Ons / Pro Support"
6400
  msgstr "إضافات / الدعم المدفوع"
6401
 
6402
+ #: admin.php:526 admin.php:871 templates/wp-admin/settings/tab-bar.php:7
6403
  msgid "Settings"
6404
  msgstr "إعدادات"
6405
 
6406
+ #: admin.php:844
6407
  msgid "Allowed Files"
6408
  msgstr "ملفات مسموحة"
6409
 
6423
  msgid "Like UpdraftPlus and can spare one minute?"
6424
  msgstr "هل أحببت UpdraftPlus وتريد المساعدة في نشره؟"
6425
 
6426
+ #: addons/azure.php:221 class-updraftplus.php:3907 methods/googledrive.php:823
6427
+ #: methods/s3.php:320
6428
  msgid "File not found"
6429
  msgstr "لم يتم العثور على ملف"
6430
 
6431
+ #: class-updraftplus.php:3818
6432
  msgid "The decryption key used:"
6433
  msgstr "مفتاح فك التشفير المستخدم:"
6434
 
6435
+ #: class-updraftplus.php:3818 class-updraftplus.php:4119 restorer.php:390
6436
  msgid "Decryption failed. The most likely cause is that you used the wrong key."
6437
  msgstr "فشل التشفير. غالبا سيكون السبب هو عدم استخدام المفتاح الخطأ."
6438
 
6439
+ #: class-updraftplus.php:3799 class-updraftplus.php:4107 restorer.php:377
6440
  msgid "Decryption failed. The database file is encrypted, but you have no encryption key entered."
6441
  msgstr "فشل التشفير. ملف قاعدة البيانات مفر، ولكن لم تقم بإدخال أي مفتاح للتشفير."
6442
 
6444
  msgid "Could not open the backup file for writing"
6445
  msgstr "لا يمكن فتح ملف النسخ الاحتياطي للكتابة"
6446
 
6447
+ #: class-updraftplus.php:3321
6448
  msgid "Could not save backup history because we have no backup array. Backup probably failed."
6449
  msgstr "لم نتمكن من حفظ تاريخ النسخ الإحتياطية بسبب عدم ترتيب النسخ. النسخ الإحتياطي ربما قد فشل."
6450
 
6451
+ #: class-updraftplus.php:3298
6452
  msgid "Could not read the directory"
6453
  msgstr "لا يمكن قراءة الدليل"
6454
 
6455
+ #: admin.php:1846 backup.php:1139 restorer.php:225
6456
  msgid "Backup directory (%s) is not writable, or does not exist."
6457
  msgstr "دليل (%s) النسخ الإحتياطي ليس قابل للكتابة، أو غير موجود."
6458
 
6460
  msgid "WordPress backup is complete"
6461
  msgstr "اكتمال عملية النسخ الإحتياطي للووردبريس"
6462
 
6463
+ #: class-updraftplus.php:2867
6464
  msgid "The backup attempt has finished, apparently unsuccessfully"
6465
  msgstr "محاولة النسخ الإحتياطية تمت، لكن يبدو أنها فشلت."
6466
 
6467
+ #: class-updraftplus.php:2852
6468
  msgid "The backup apparently succeeded and is now complete"
6469
  msgstr "يبدو أن عملية النسح الإحتياطي قد نجحت وهاهي الآن قد اكتملت"
6470
 
6472
  msgid "Encryption error occurred when encrypting database. Encryption aborted."
6473
  msgstr "حدث خطأ في عملية التشفير لقاعدة البيانات. تم ايقاف العملية."
6474
 
6475
+ #: class-updraftplus.php:2279
6476
  msgid "Could not create files in the backup directory. Backup aborted - check your UpdraftPlus settings."
6477
  msgstr "لم نتمكن من خلق الملفات بمجلد النسخ الإحتياطية. تجاهل النسخ - تحقق من خيارات UpdraftPlus."
6478
 
6479
+ #: class-updraftplus.php:1646
6480
  msgid "Others"
6481
  msgstr "أخرى"
6482
 
6483
+ #: addons/multisite.php:446 class-updraftplus.php:1631
6484
  msgid "Uploads"
6485
  msgstr "الملفات المرفوعة"
6486
 
6487
+ #: class-updraftplus.php:1630
6488
  msgid "Themes"
6489
  msgstr "تصاميم"
6490
 
6491
+ #: class-updraftplus.php:1629
6492
  msgid "Plugins"
6493
  msgstr "الإضافات"
6494
 
6495
+ #: class-updraftplus.php:491
6496
  msgid "No log files were found."
6497
  msgstr "لا توجد ملفات السجل."
6498
 
6499
+ #: admin.php:1730 admin.php:1734 class-updraftplus.php:486
6500
  msgid "The log file could not be read."
6501
  msgstr "لا يمكن قراءة ملف السجل."
6502
 
6503
+ #: admin.php:962 admin.php:966 admin.php:970 admin.php:974 admin.php:978
6504
+ #: class-updraftplus.php:451 class-updraftplus.php:486
6505
+ #: class-updraftplus.php:491 class-updraftplus.php:496
6506
  msgid "UpdraftPlus notice:"
6507
  msgstr "إشعار UpdraftPlus :"
6508
 
languages/updraftplus-bn_BD.po CHANGED
@@ -11,7 +11,23 @@ msgstr ""
11
  "Language: bn\n"
12
  "Project-Id-Version: UpdraftPlus\n"
13
 
14
- #: methods/updraftvault.php:49
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
  msgid "UpdraftVault"
16
  msgstr ""
17
 
@@ -39,43 +55,43 @@ msgstr ""
39
  msgid "Extra database"
40
  msgstr ""
41
 
42
- #: admin.php:3302
43
  msgid "Press here to download or browse"
44
  msgstr ""
45
 
46
- #: admin.php:1018 admin.php:1028
47
  msgid "Error: invalid path"
48
  msgstr ""
49
 
50
- #: admin.php:876
51
  msgid "An error occurred when fetching storage module options: "
52
  msgstr ""
53
 
54
- #: admin.php:705
55
  msgid "Loading log file"
56
  msgstr ""
57
 
58
- #: admin.php:704
59
  msgid "Unable to download file. This could be caused by a timeout. It would be best to download the zip to your computer."
60
  msgstr ""
61
 
62
- #: admin.php:703
63
  msgid "Search"
64
  msgstr ""
65
 
66
- #: admin.php:702
67
  msgid "Select a file to view information about it"
68
  msgstr ""
69
 
70
- #: admin.php:701
71
  msgid "Browsing zip file"
72
  msgstr ""
73
 
74
- #: admin.php:671
75
  msgid "With UpdraftPlus Premium, you can directly download individual files from here."
76
  msgstr ""
77
 
78
- #: admin.php:619
79
  msgid "Browse contents"
80
  msgstr ""
81
 
@@ -83,43 +99,43 @@ msgstr ""
83
  msgid "Skipped tables:"
84
  msgstr ""
85
 
86
- #: class-updraftplus.php:4173
87
  msgid "This database backup has the following WordPress tables excluded: %s"
88
  msgstr ""
89
 
90
- #: admin.php:2319
91
  msgid "With UpdraftPlus Premium, you can choose to backup non-WordPress tables, backup only specified tables, and backup other databases too."
92
  msgstr ""
93
 
94
- #: admin.php:2319
95
  msgid "All WordPress tables will be backed up."
96
  msgstr ""
97
 
98
- #: admin.php:700
99
  msgid "Further information may be found in the browser JavaScript console, and the server PHP error logs."
100
  msgstr ""
101
 
102
- #: admin.php:700
103
  msgid "That you are attempting to upload a zip file previously created by UpdraftPlus."
104
  msgstr ""
105
 
106
- #: admin.php:700
107
  msgid "The available memory on the server."
108
  msgstr ""
109
 
110
- #: admin.php:700
111
  msgid "Any settings in your .htaccess or web.config file that affects the maximum upload or post size."
112
  msgstr ""
113
 
114
- #: admin.php:700
115
  msgid "The file failed to upload. Please check the following:"
116
  msgstr ""
117
 
118
- #: admin.php:699
119
  msgid "HTTP code:"
120
  msgstr ""
121
 
122
- #: admin.php:596
123
  msgid "You have chosen to backup a database, but no tables have been selected"
124
  msgstr ""
125
 
@@ -282,7 +298,7 @@ msgstr ""
282
  msgid "UpdraftPlus"
283
  msgstr ""
284
 
285
- #: templates/wp-admin/settings/form-contents.php:274
286
  msgid "Recommended: optimize your database with WP-Optimize."
287
  msgstr ""
288
 
@@ -353,15 +369,15 @@ msgstr ""
353
  msgid "Comments"
354
  msgstr ""
355
 
356
- #: addons/s3-enhanced.php:327
357
  msgid "Europe (Frankfurt)"
358
  msgstr ""
359
 
360
- #: addons/s3-enhanced.php:326
361
  msgid "Europe (London)"
362
  msgstr ""
363
 
364
- #: addons/s3-enhanced.php:325
365
  msgid "Europe (Ireland)"
366
  msgstr ""
367
 
@@ -546,7 +562,7 @@ msgstr ""
546
  msgid "Then, try out our \"Migrator\" add-on which can perform a direct site-to-site migration. After using it once, you'll have saved the purchase price compared to the time needed to copy a site by hand."
547
  msgstr ""
548
 
549
- #: addons/s3-enhanced.php:324
550
  msgid "Canada Central"
551
  msgstr ""
552
 
@@ -609,15 +625,15 @@ msgstr ""
609
  msgid "The client has been deleted from the Google Drive API console. Please create a new Google Drive project and reconnect with UpdraftPlus."
610
  msgstr ""
611
 
612
- #: methods/dropbox.php:556
613
  msgid "%s de-authentication"
614
  msgstr ""
615
 
616
- #: methods/dropbox.php:524
617
  msgid "You must add the following as the authorised redirect URI in your Dropbox console (under \"API Settings\") when asked"
618
  msgstr ""
619
 
620
- #: methods/dropbox.php:498
621
  msgid "Follow this link to deauthenticate with %s."
622
  msgstr ""
623
 
@@ -633,47 +649,47 @@ msgstr ""
633
  msgid "You have selected a remote storage option which has an authorization step to complete:"
634
  msgstr ""
635
 
636
- #: admin.php:1440
637
  msgid "Remote files deleted:"
638
  msgstr ""
639
 
640
- #: admin.php:1439
641
  msgid "Local files deleted:"
642
  msgstr ""
643
 
644
- #: admin.php:921 admin.php:925 admin.php:933 admin.php:937
645
  msgid "Follow this link to authorize access to your %s account (you will not be able to back up to %s without it)."
646
  msgstr ""
647
 
648
- #: admin.php:698
649
  msgid "remote files deleted"
650
  msgstr ""
651
 
652
- #: admin.php:696
653
  msgid "Complete"
654
  msgstr ""
655
 
656
- #: admin.php:695
657
  msgid "Do you want to carry out the import?"
658
  msgstr ""
659
 
660
- #: admin.php:694
661
  msgid "Which was exported on:"
662
  msgstr ""
663
 
664
- #: admin.php:693
665
  msgid "This will import data from:"
666
  msgstr ""
667
 
668
- #: admin.php:692
669
  msgid "Importing..."
670
  msgstr ""
671
 
672
- #: admin.php:689
673
  msgid "You have not yet selected a file to import."
674
  msgstr ""
675
 
676
- #: admin.php:673
677
  msgid "Your export file will be of your displayed settings, not your saved ones."
678
  msgstr ""
679
 
@@ -681,32 +697,32 @@ msgstr ""
681
  msgid "template not found"
682
  msgstr ""
683
 
684
- #: addons/s3-enhanced.php:320
685
  msgid "US East (Ohio)"
686
  msgstr ""
687
 
688
- #: addons/onedrive.php:953
689
  msgid "This site uses a URL which is either non-HTTPS, or is localhost or 127.0.0.1 URL. As such, you must use the main %s %s App to authenticate with your account."
690
  msgstr ""
691
 
692
- #: addons/onedrive.php:635
693
  msgid "Account is not authorized (%s)."
694
  msgstr ""
695
 
696
- #: addons/onedrive.php:596 udaddons/updraftplus-addons.php:732
697
  msgid "Your IP address:"
698
  msgstr "আপনার আইপি অ্যাড্রেসঃ"
699
 
700
- #: addons/onedrive.php:596 udaddons/updraftplus-addons.php:732
701
  #: udaddons/updraftplus-addons.php:747
702
  msgid "To remove any block, please go here."
703
  msgstr "কোন ব্লক সরাতে এখানে যান।"
704
 
705
- #: addons/onedrive.php:581 udaddons/updraftplus-addons.php:717
706
  msgid "An error response was received; HTTP code:"
707
  msgstr ""
708
 
709
- #: includes/class-commands.php:309
710
  msgid "%s add-on not found"
711
  msgstr "%s অ্যাড-অন পাওয়া যায়নি"
712
 
@@ -718,39 +734,39 @@ msgstr "অথবা ম্যানুয়ালি পুনরুদ্ধা
718
  msgid "This makes time-outs much more likely. You are recommended to turn safe_mode off, or to restore only one entity at a time"
719
  msgstr "এভাবে \"টাইম-আউট\" হতে পারে। আপনাকে safe_mode বন্ধ করার অথবা একসাথে শুধুমাত্র একটা জিনিস পুনরুদ্ধার করার পরামর্শ দেয়া হচ্ছে"
720
 
721
- #: admin.php:2144
722
  msgid "To fix this problem go here."
723
  msgstr "এই সমস্যা সমাধান করতে এখানে যান।"
724
 
725
- #: admin.php:2144
726
  msgid "OptimizePress 2.0 encodes its contents, so search/replace does not work."
727
  msgstr "অপটিমাইজপ্রেস ২.০ এর কন্টেন্টসমূহ সঙ্কেতাক্ষরে লিখে রাখে, তাই সার্চ/প্রতিস্থাপন কাজ করে না।"
728
 
729
- #: admin.php:657
730
  msgid "your PHP install lacks the openssl module; as a result, this can take minutes; if nothing has happened by then, then you should either try a smaller key size, or ask your web hosting company how to enable this PHP module on your setup."
731
  msgstr "আপনার পিএইচপি ইনস্টলের ওপেন এসএসএল (SSL) মডিউল নেই, যার ফলে এটা বেশ কয়েক মিনিট সময় নিতে পারে। তারপরও যদি কিছু না ঘটে, তবে অপেক্ষাকৃত ছোট \"key size\" ব্যাবহার করুন। অথবা আপনার হোস্টিং কোম্পানিকে জিজ্ঞাস করুন কিভাবে পিএইচপি ইনস্টলের ওপেন এসএসএল (SSL) মডিউল চালু করতে হয়।"
732
 
733
- #: addons/webdav.php:92
734
  msgid "Path"
735
  msgstr "রাস্তা (Path)"
736
 
737
- #: addons/webdav.php:87
738
  msgid "Leave this blank to use the default (80 for webdav, 443 for webdavs)"
739
  msgstr "ডিফল্ট ভ্যালু ব্যাবহার করতে এটা ফাকা রাখুন (webdav এর জন্য 80, webdavs এর জন্য 443)"
740
 
741
- #: addons/webdav.php:79
742
  msgid "Enter any path in the field below."
743
  msgstr "এই স্থানে যেকোন রাস্তা (Path) প্রবেশ করান।"
744
 
745
- #: addons/webdav.php:79
746
  msgid "A host name cannot contain a slash."
747
  msgstr "\"host name\" এর ক্ষত্রে স্ল্যাশ ব্যাবহার করা যাবে না।"
748
 
749
- #: addons/webdav.php:54
750
  msgid "Protocol (SSL or not)"
751
  msgstr "প্রোটোকল (SSL অথবা SSL না)"
752
 
753
- #: addons/webdav.php:49
754
  msgid "This WebDAV URL is generated by filling in the options below. If you do not know the details, then you will need to ask your WebDAV provider."
755
  msgstr "এই WebDAV URL নিচের অপশনসমূহ পূরণ করার মাধ্যমে সৃষ্ট। আপনি যদি বিস্তারিত না জানেন, তাহলে আপনার WebDAV প্রোভাইডারকে জিজ্ঞেস করুন।"
756
 
@@ -758,11 +774,11 @@ msgstr "এই WebDAV URL নিচের অপশনসমূহ পূরণ
758
  msgid "No response data was received. This usually indicates a network connectivity issue (e.g. an outgoing firewall or overloaded network) between this site and UpdraftPlus.com."
759
  msgstr "কোন রেসপন্স ডাটা পাওয়া যায়নি। এটা সাধারণত এই সাইট এবং UpdraftPlus.com এর মধ্যে নেটওয়ার্ক সংযোগ সমস্যা নির্দেশ করে (যেমনঃ আউটগোয়িং ফায়ারওয়াল অথবা ওভারলোডেড নেটওয়ার্ক)।"
760
 
761
- #: methods/s3.php:1014
762
  msgid "The AWS access key looks to be wrong (valid %s access keys begin with \"AK\")"
763
  msgstr "এই AWS access key মনে হয় ভূল (সঠিক %s access keys \"AK\" দিয়ে শুরু হয়)"
764
 
765
- #: methods/s3.php:91
766
  msgid "No settings were found - please go to the Settings tab and check your settings"
767
  msgstr "কোন সেটিং পাওয়া যায়নি - দয়া করে সেটিং ট্যাবে গিয়ে আপনার সেটিং যাচাই করুন।"
768
 
@@ -770,15 +786,15 @@ msgstr "কোন সেটিং পাওয়া যায়নি - দয়া
770
  msgid "Backup using %s?"
771
  msgstr " %s ব্যাবহার করে ব্যাকআপ?"
772
 
773
- #: addons/s3-enhanced.php:331
774
  msgid "Asia Pacific (Mumbai)"
775
  msgstr "এশিয়া প্যাসিফিক (মুম্বাই)"
776
 
777
- #: addons/s3-enhanced.php:55
778
  msgid "Reduced redundancy"
779
  msgstr "কম আতিশয্য "
780
 
781
- #: addons/s3-enhanced.php:54
782
  msgid "Standard (infrequent access)"
783
  msgstr "স্ট্যান্ডার্ড (কদাচিৎ অ্যাকসেস)"
784
 
@@ -900,7 +916,7 @@ msgstr ""
900
  msgid "This backup archive is %s MB in size - the attempt to send this via email is likely to fail (few email servers allow attachments of this size). If so, you should switch to using a different remote storage method."
901
  msgstr ""
902
 
903
- #: class-updraftplus.php:1557
904
  msgid "Size: %s MB"
905
  msgstr "সাইজঃ %s MB"
906
 
@@ -912,7 +928,7 @@ msgstr ""
912
  msgid "i.e. you have an account there"
913
  msgstr "যদি আপনার সেখানে একটি একাউণ্ট (পরিচিতি) থাকে"
914
 
915
- #: templates/wp-admin/settings/form-contents.php:359
916
  msgid "UpdraftPlus will split up backup archives when they exceed this file size. The default value is %s megabytes. Be careful to leave some margin if your web-server has a hard size limit (e.g. the 2 GB / 2048 MB limit on some 32-bit servers/file systems)."
917
  msgstr ""
918
 
@@ -920,7 +936,7 @@ msgstr ""
920
  msgid "Now"
921
  msgstr "এখন"
922
 
923
- #: class-updraftplus.php:4037 restorer.php:996
924
  msgid "You should enable %s to make any pretty permalinks (e.g. %s) work"
925
  msgstr ""
926
 
@@ -928,21 +944,21 @@ msgstr ""
928
  msgid "(tap on an icon to select or unselect)"
929
  msgstr "(সিলেক্ট অথবা আনসিলেক্ট করার জন্য আইকনের উপর টিপ দিন)"
930
 
931
- #: methods/updraftvault.php:289 methods/updraftvault.php:295
932
- #: methods/updraftvault.php:301
933
  msgid "%s per year"
934
  msgstr "প্রতি বৎসর %s"
935
 
936
- #: methods/updraftvault.php:288 methods/updraftvault.php:294
937
- #: methods/updraftvault.php:300
938
  msgid "or (annual discount)"
939
  msgstr "অথবা (বাৎসরিক মূল্যছাড়)"
940
 
941
- #: methods/updraftvault.php:233
942
  msgid "No Vault connection was found for this site (has it moved?); please disconnect and re-connect."
943
  msgstr "এই সাইটের জন্য কোন ভল্ট কানেকশন পাওয়া যায়নি (এটা কি স্থানান্তর করা হয়েছে?), দয়া করে ডিসকানেক্ট করে আবার কানেক্ট করুন।"
944
 
945
- #: class-updraftplus.php:418 class-updraftplus.php:463
946
  msgid "The given file was not found, or could not be read."
947
  msgstr "প্রদত্ত ফাইল পাওয়া যায়নি অথবা পড়া সম্ভব হয়নি।"
948
 
@@ -1042,23 +1058,23 @@ msgstr ""
1042
  msgid "UpdraftCentral Connection"
1043
  msgstr ""
1044
 
1045
- #: backup.php:849 class-updraftplus.php:2813
1046
  msgid "The backup was aborted by the user"
1047
  msgstr ""
1048
 
1049
- #: admin.php:4003
1050
  msgid "Your settings have been saved."
1051
  msgstr "আপনার সেটিংস সংরক্ষণ করা হয়েছে। "
1052
 
1053
- #: admin.php:3196
1054
  msgid "Total backup size:"
1055
  msgstr ""
1056
 
1057
- #: admin.php:2641
1058
  msgid "stop"
1059
  msgstr ""
1060
 
1061
- #: admin.php:2479
1062
  msgid "The backup has finished running"
1063
  msgstr ""
1064
 
@@ -1084,31 +1100,31 @@ msgstr "এই ব্যাকআপ সেট"
1084
  msgid "calculate"
1085
  msgstr "গণনা করুন"
1086
 
1087
- #: admin.php:672
1088
  msgid "You should save your changes to ensure that they are used for making your backup."
1089
  msgstr ""
1090
 
1091
- #: admin.php:665
1092
  msgid "We requested to delete the file, but could not understand the server's response"
1093
  msgstr ""
1094
 
1095
- #: admin.php:664
1096
  msgid "Please enter a valid URL"
1097
  msgstr "দয়া করে সঠিক URL প্রবেশ করান"
1098
 
1099
- #: admin.php:647
1100
  msgid "Saving..."
1101
  msgstr "সংরক্ষণ হচ্ছে..."
1102
 
1103
- #: admin.php:610
1104
  msgid "Error: the server sent us a response which we did not understand."
1105
  msgstr ""
1106
 
1107
- #: admin.php:602
1108
  msgid "Fetching..."
1109
  msgstr "আনা হচ্ছে..."
1110
 
1111
- #: addons/s3-enhanced.php:328
1112
  msgid "Asia Pacific (Seoul)"
1113
  msgstr ""
1114
 
@@ -1120,7 +1136,7 @@ msgstr ""
1120
  msgid "Unexpected error: no class '%s' was found (your UpdraftPlus installation seems broken - try re-installing)"
1121
  msgstr ""
1122
 
1123
- #: addons/onedrive.php:56
1124
  msgid "The required %s PHP module is not installed - ask your web hosting company to enable it."
1125
  msgstr ""
1126
 
@@ -1128,24 +1144,24 @@ msgstr ""
1128
  msgid "Skipping table %s: this table will not be restored"
1129
  msgstr ""
1130
 
1131
- #: class-updraftplus.php:4088 restorer.php:1642
1132
  msgid "To import an ordinary WordPress site into a multisite installation requires %s."
1133
  msgstr ""
1134
 
1135
- #: class-updraftplus.php:4084
1136
  msgid "Please read this link for important information on this process."
1137
  msgstr ""
1138
 
1139
- #: class-updraftplus.php:4084
1140
  msgid "It will be imported as a new site."
1141
  msgstr ""
1142
 
1143
- #: admin.php:2292 templates/wp-admin/notices/horizontal-notice.php:16
1144
  #: templates/wp-admin/notices/horizontal-notice.php:18
1145
  msgid "Dismiss"
1146
  msgstr "খারিজ"
1147
 
1148
- #: admin.php:684
1149
  msgid "Please fill in the required information."
1150
  msgstr ""
1151
 
@@ -1217,15 +1233,15 @@ msgstr ""
1217
  msgid "Call WordPress action:"
1218
  msgstr ""
1219
 
1220
- #: admin.php:2327
1221
  msgid "Your saved settings also affect what is backed up - e.g. files excluded."
1222
  msgstr ""
1223
 
1224
- #: admin.php:3604
1225
  msgid "Skipping: this archive was already restored."
1226
  msgstr ""
1227
 
1228
- #: templates/wp-admin/settings/form-contents.php:200
1229
  msgid "File Options"
1230
  msgstr ""
1231
 
@@ -1253,51 +1269,51 @@ msgstr ""
1253
  msgid "This button will delete all UpdraftPlus settings and progress information for in-progress backups (but not any of your existing backups from your cloud storage)."
1254
  msgstr ""
1255
 
1256
- #: admin.php:3885
1257
  msgid "Send this backup to remote storage"
1258
  msgstr ""
1259
 
1260
- #: admin.php:3883
1261
  msgid "Check out UpdraftPlus Vault."
1262
  msgstr ""
1263
 
1264
- #: admin.php:3883
1265
  msgid "Not got any remote storage?"
1266
  msgstr ""
1267
 
1268
- #: admin.php:3883
1269
  msgid "settings"
1270
  msgstr "সেটিংস"
1271
 
1272
- #: admin.php:3883
1273
  msgid "Backup won't be sent to any remote storage - none has been saved in the %s"
1274
  msgstr ""
1275
 
1276
- #: admin.php:2325
1277
  msgid "Include any files in the backup"
1278
  msgstr ""
1279
 
1280
- #: admin.php:2311
1281
  msgid "Include the database in the backup"
1282
  msgstr ""
1283
 
1284
- #: admin.php:2291
1285
  msgid "Continue restoration"
1286
  msgstr ""
1287
 
1288
- #: admin.php:2286
1289
  msgid "You have an unfinished restoration operation, begun %s ago."
1290
  msgstr ""
1291
 
1292
- #: admin.php:2285
1293
  msgid "Unfinished restoration"
1294
  msgstr ""
1295
 
1296
- #: admin.php:2283
1297
  msgid "%s minutes, %s seconds"
1298
  msgstr ""
1299
 
1300
- #: admin.php:2230
1301
  msgid "Backup Contents And Schedule"
1302
  msgstr ""
1303
 
@@ -1305,48 +1321,48 @@ msgstr ""
1305
  msgid "Premium / Extensions"
1306
  msgstr ""
1307
 
1308
- #: admin.php:2010 admin.php:2019
1309
  msgid "Sufficient information about the in-progress restoration operation could not be found."
1310
  msgstr ""
1311
 
1312
- #: addons/morefiles.php:53 admin.php:670
1313
  msgctxt "(verb)"
1314
  msgid "Download"
1315
  msgstr ""
1316
 
1317
- #: admin.php:595
1318
  msgid "You have chosen to backup files, but no file entities have been selected"
1319
  msgstr ""
1320
 
1321
- #: admin.php:504
1322
  msgid "Extensions"
1323
  msgstr ""
1324
 
1325
- #: admin.php:496 templates/wp-admin/settings/tab-bar.php:8
1326
  msgid "Advanced Tools"
1327
  msgstr ""
1328
 
1329
- #: addons/googlecloud.php:880
1330
  msgid "Bucket location"
1331
  msgstr ""
1332
 
1333
- #: addons/googlecloud.php:875
1334
  msgid "Note that Google do not support every storage class in every location - you should read their documentation to learn about current availability."
1335
  msgstr ""
1336
 
1337
- #: addons/googlecloud.php:875 addons/googlecloud.php:890
1338
  msgid "This setting applies only when a new bucket is being created."
1339
  msgstr ""
1340
 
1341
- #: addons/googlecloud.php:860
1342
  msgid "You must use a bucket name that is unique, for all %s users."
1343
  msgstr ""
1344
 
1345
- #: addons/googlecloud.php:816
1346
  msgid "Do not confuse %s with %s - they are separate things."
1347
  msgstr ""
1348
 
1349
- #: addons/googlecloud.php:268
1350
  msgid "You do not have access to this bucket"
1351
  msgstr ""
1352
 
@@ -1399,63 +1415,63 @@ msgstr ""
1399
  msgid "Durable reduced availability"
1400
  msgstr ""
1401
 
1402
- #: addons/googlecloud.php:35 addons/s3-enhanced.php:53
1403
  msgid "Standard"
1404
  msgstr ""
1405
 
1406
- #: addons/azure.php:523
1407
  msgid "container"
1408
  msgstr ""
1409
 
1410
- #: addons/azure.php:523
1411
  msgid "You can enter the path of any %s virtual folder you wish to use here."
1412
  msgstr ""
1413
 
1414
- #: addons/azure.php:522
1415
  msgid "optional"
1416
  msgstr ""
1417
 
1418
- #: addons/azure.php:522
1419
  msgid "Prefix"
1420
  msgstr ""
1421
 
1422
- #: addons/azure.php:517
1423
  msgid "See Microsoft's guidelines on container naming by following this link."
1424
  msgstr ""
1425
 
1426
- #: addons/azure.php:517
1427
  msgid "If the %s does not already exist, then it will be created."
1428
  msgstr ""
1429
 
1430
- #: addons/azure.php:517
1431
  msgid "Enter the path of the %s you wish to use here."
1432
  msgstr ""
1433
 
1434
- #: addons/azure.php:506
1435
  msgid "This is not your Azure login - see the instructions if needing more guidance."
1436
  msgstr ""
1437
 
1438
- #: addons/azure.php:505
1439
  msgid "Account Name"
1440
  msgstr ""
1441
 
1442
- #: addons/azure.php:505 addons/azure.php:509
1443
  msgid "Azure"
1444
  msgstr ""
1445
 
1446
- #: addons/azure.php:501
1447
  msgid "Create Azure credentials in your Azure developer console."
1448
  msgstr ""
1449
 
1450
- #: addons/azure.php:449
1451
  msgid "Could not create the container"
1452
  msgstr ""
1453
 
1454
- #: addons/azure.php:343
1455
  msgid "Could not access container"
1456
  msgstr ""
1457
 
1458
- #: class-updraftplus.php:2830
1459
  msgid "To complete your migration/clone, you should now log in to the remote site and restore the backup set."
1460
  msgstr ""
1461
 
@@ -1483,75 +1499,75 @@ msgstr ""
1483
  msgid "Not installed"
1484
  msgstr ""
1485
 
1486
- #: addons/googlecloud.php:865 addons/s3-enhanced.php:46
1487
  msgid "Storage class"
1488
  msgstr ""
1489
 
1490
- #: addons/googlecloud.php:860
1491
  msgid "See Google's guidelines on bucket naming by following this link."
1492
  msgstr ""
1493
 
1494
- #: addons/googlecloud.php:860
1495
  msgid "Bucket names have to be globally unique. If the bucket does not already exist, then it will be created."
1496
  msgstr ""
1497
 
1498
- #: addons/googlecloud.php:860
1499
  msgid "Enter the name of the %s bucket you wish to use here."
1500
  msgstr ""
1501
 
1502
- #: addons/googlecloud.php:859
1503
  msgid "Bucket"
1504
  msgstr ""
1505
 
1506
- #: addons/googlecloud.php:855
1507
  msgid "Otherwise, you can leave it blank."
1508
  msgstr ""
1509
 
1510
- #: addons/googlecloud.php:855
1511
  msgid "N.B. This is only needed if you have not already created the bucket, and you wish UpdraftPlus to create it for you."
1512
  msgstr ""
1513
 
1514
- #: addons/googlecloud.php:855
1515
  msgid "Enter the ID of the %s project you wish to use here."
1516
  msgstr ""
1517
 
1518
- #: addons/googlecloud.php:828
1519
  msgid "Follow this link to your Google API Console, and there activate the Storage API and create a Client ID in the API Access section."
1520
  msgstr ""
1521
 
1522
- #: addons/googlecloud.php:743
1523
  msgid "You must enter a project ID in order to be able to create a new bucket."
1524
  msgstr ""
1525
 
1526
- #: addons/googlecloud.php:854
1527
  msgid "Project ID"
1528
  msgstr ""
1529
 
1530
- #: addons/googlecloud.php:609
1531
  msgid "You must save and authenticate before you can test your settings."
1532
  msgstr ""
1533
 
1534
- #: addons/googlecloud.php:479
1535
  msgid "Have not yet obtained an access token from Google - you need to authorise or re-authorise your connection to Google Cloud."
1536
  msgstr ""
1537
 
1538
- #: addons/googlecloud.php:215 addons/googlecloud.php:288
1539
- #: addons/googlecloud.php:735 addons/googlecloud.php:782
1540
  msgid "You do not have access to this bucket."
1541
  msgstr ""
1542
 
1543
- #: addons/googlecloud.php:215 addons/googlecloud.php:268
1544
- #: addons/googlecloud.php:278 addons/googlecloud.php:288
1545
- #: addons/googlecloud.php:579 addons/googlecloud.php:735
1546
- #: addons/googlecloud.php:782 addons/googlecloud.php:822
1547
- #: addons/googlecloud.php:839 addons/googlecloud.php:847
1548
- #: addons/googlecloud.php:860
1549
  msgid "Google Cloud"
1550
  msgstr ""
1551
 
1552
- #: addons/googlecloud.php:215 addons/googlecloud.php:268
1553
- #: addons/googlecloud.php:288 addons/googlecloud.php:735
1554
- #: addons/googlecloud.php:782
1555
  msgid "%s Service Exception."
1556
  msgstr ""
1557
 
@@ -1588,35 +1604,35 @@ msgstr ""
1588
  msgid "Press here to look inside your remote storage methods for any existing backup sets (from any site, if they are stored in the same folder)."
1589
  msgstr ""
1590
 
1591
- #: admin.php:1438
1592
  msgid "Backup sets removed:"
1593
  msgstr ""
1594
 
1595
- #: admin.php:683
1596
  msgid "Processing..."
1597
  msgstr ""
1598
 
1599
- #: admin.php:681
1600
  msgid "For backups older than"
1601
  msgstr ""
1602
 
1603
- #: admin.php:680
1604
  msgid "week(s)"
1605
  msgstr ""
1606
 
1607
- #: admin.php:679
1608
  msgid "hour(s)"
1609
  msgstr ""
1610
 
1611
- #: admin.php:678
1612
  msgid "day(s)"
1613
  msgstr ""
1614
 
1615
- #: admin.php:677
1616
  msgid "in the month"
1617
  msgstr ""
1618
 
1619
- #: admin.php:676
1620
  msgid "day"
1621
  msgstr ""
1622
 
@@ -1636,187 +1652,187 @@ msgstr ""
1636
  msgid "This problem is caused by trying to restore a database on a very old MySQL version that is incompatible with the source database."
1637
  msgstr ""
1638
 
1639
- #: methods/updraftvault.php:595
1640
  msgid "You do not currently have any UpdraftPlus Vault quota"
1641
  msgstr ""
1642
 
1643
- #: class-updraftplus.php:4123
1644
  msgid "You must upgrade MySQL to be able to use this database."
1645
  msgstr ""
1646
 
1647
- #: class-updraftplus.php:4123
1648
  msgid "The database backup uses MySQL features not available in the old MySQL version (%s) that this site is running on."
1649
  msgstr ""
1650
 
1651
- #: admin.php:2129
1652
  msgid "The UpdraftPlus directory in wp-content/plugins has white-space in it; WordPress does not like this. You should rename the directory to wp-content/plugins/updraftplus to fix this problem."
1653
  msgstr ""
1654
 
1655
- #: methods/updraftvault.php:322
1656
  msgid "Don't know your email address, or forgotten your password?"
1657
  msgstr "আপনার ইমেল ঠিকানা জানা নেই, নাকি আপনার পাসওয়ার্ড ভুলে গিয়েছেন?"
1658
 
1659
- #: methods/updraftvault.php:315
1660
  msgid "Enter your UpdraftPlus.Com email / password here to connect:"
1661
  msgstr ""
1662
 
1663
- #: methods/updraftvault.php:277 methods/updraftvault.php:307
1664
  msgid "Read the FAQs here."
1665
  msgstr "এখানে প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী পড়ুন।"
1666
 
1667
- #: addons/s3-enhanced.php:61
1668
  msgid "Check this box to use Amazon's server-side encryption"
1669
  msgstr "আমাজনের সার্ভার সাইড এনক্রিপশন ব্যবহার করতে এই বক্সটি টিক দিন"
1670
 
1671
- #: addons/s3-enhanced.php:60
1672
  msgid "Server-side encryption"
1673
  msgstr "সার্ভার সাইড এনক্রিপশন"
1674
 
1675
- #: methods/updraftvault.php:604
1676
  msgid "If you have forgotten your password, then go here to change your password on updraftplus.com."
1677
  msgstr ""
1678
 
1679
- #: admin.php:929
1680
  msgid "Go to the remote storage settings in order to connect."
1681
  msgstr ""
1682
 
1683
- #: admin.php:929
1684
  msgid "%s has been chosen for remote storage, but you are not currently connected."
1685
  msgstr ""
1686
 
1687
- #: methods/updraftvault.php:304
1688
  msgid "Payments can be made in US dollars, euros or GB pounds sterling, via card or PayPal."
1689
  msgstr "পেমেন্ট ইউএস ডলার, ইউরো বা GB pounds sterling এর মাধ্যমে কার্ড বা পেপ্যাল এর দ্বারা করতে হবে।"
1690
 
1691
- #: admin.php:653
1692
  msgid "Update quota count"
1693
  msgstr " প্রাপ্য সংখ্যা হালনাগাদ"
1694
 
1695
- #: admin.php:652
1696
  msgid "Counting..."
1697
  msgstr "গণনা করা হচ্ছে..."
1698
 
1699
- #: admin.php:651
1700
  msgid "Disconnecting..."
1701
  msgstr "সংযোগ বিচ্ছিন্ন করা হচ্ছে..."
1702
 
1703
- #: admin.php:649
1704
  msgid "Connecting..."
1705
  msgstr "সংযোগ করা হচ্ছে..."
1706
 
1707
- #: methods/updraftvault.php:378 methods/updraftvault.php:447
1708
  msgid "Refresh current status"
1709
  msgstr "বর্তমান অবস্থা পুনঃবিবেচনা করুন"
1710
 
1711
- #: methods/updraftvault.php:376 methods/updraftvault.php:392
1712
- #: methods/updraftvault.php:394 methods/updraftvault.php:447
1713
  msgid "Get more quota"
1714
  msgstr "আরও প্রাপ্য নিন"
1715
 
1716
- #: methods/updraftvault.php:373 methods/updraftvault.php:389
1717
- #: methods/updraftvault.php:428
1718
  msgid "Current use:"
1719
  msgstr "বর্তমান ব্যাবহার:"
1720
 
1721
- #: methods/updraftvault.php:368
1722
  msgid "You can get more quota here"
1723
  msgstr "আপনি এখান থেকে আরও প্রাপ্য পেতে পারেন"
1724
 
1725
- #: methods/updraftvault.php:368
1726
  msgid "%s Error: you have insufficient storage quota available (%s) to upload this archive (%s)."
1727
  msgstr "%s ইরোর: আপনার যথেষ্ট প্রাপ্য(%s) নেই আর্কাইভটি(%s) আপলোড করার জন্য।"
1728
 
1729
- #: admin.php:650 methods/updraftvault.php:360
1730
  msgid "Disconnect"
1731
  msgstr "সংযোগ বিচ্ছিন্ন করুন"
1732
 
1733
- #: methods/updraftvault.php:352
1734
  msgid "Quota:"
1735
  msgstr "প্রাপ্য:"
1736
 
1737
- #: methods/updraftvault.php:350
1738
  msgid "Vault owner"
1739
  msgstr "ভল্টের মালিক"
1740
 
1741
- #: methods/updraftvault.php:350
1742
  msgid "Well done - there's nothing more needed to set up."
1743
  msgstr "চমৎকার - এখন আর আপনাকে কিছুই করতে হবে না।"
1744
 
1745
- #: methods/updraftvault.php:350
1746
  msgid "This site is <strong>connected</strong> to UpdraftPlus Vault."
1747
  msgstr "এই সাইটটি UpdraftPlus Vault এ <strong>সংযুক্ত</strong>।"
1748
 
1749
- #: methods/updraftvault.php:346
1750
  msgid "You are <strong>not connected</strong> to UpdraftPlus Vault."
1751
  msgstr "আপনি UpdraftPlus Vault এ<strong>সংযুক্ত নন</strong>।"
1752
 
1753
- #: methods/updraftvault.php:322
1754
  msgid "Go here for help"
1755
  msgstr "সাহায্যের জন্য এখানে যান"
1756
 
1757
- #: methods/updraftvault.php:317
1758
  msgid "E-mail"
1759
  msgstr "ই-মেইল"
1760
 
1761
- #: methods/updraftvault.php:310 methods/updraftvault.php:325
1762
  msgid "Back..."
1763
  msgstr "ফিরে চলুন..."
1764
 
1765
- #: methods/updraftvault.php:304
1766
  msgid "Subscriptions can be cancelled at any time."
1767
  msgstr "সাবস্ক্রিপশন যেকোনো সময় বাতিল করা সম্ভব"
1768
 
1769
- #: methods/updraftvault.php:287 methods/updraftvault.php:293
1770
- #: methods/updraftvault.php:299
1771
  msgid "%s per quarter"
1772
  msgstr "%s প্রতি তিন মাসে"
1773
 
1774
- #: central/bootstrap.php:542 methods/updraftvault.php:277
1775
- #: methods/updraftvault.php:307
1776
  msgid "Read more about it here."
1777
  msgstr "এইটি সম্পর্কে আরও পড়ুন এখানে।"
1778
 
1779
- #: methods/updraftvault.php:277 methods/updraftvault.php:307
1780
  msgid "UpdraftPlus Vault is built on top of Amazon's world-leading data-centres, with redundant data storage to achieve 99.999999999% reliability."
1781
  msgstr "UpdraftPlus Vault অ্যামাজনের বিশ্বসেরা ডাটা সেন্টারে তৈরী। এছাড়া অতিরিক্ত ডাটার স্টোরেজের মাধ্যমে আছে ৯৯.৯৯৯৯৯৯৯৯৯% বিশ্বাসযোগ্যতা"
1782
 
1783
- #: methods/updraftvault.php:273
1784
  msgid "Already purchased space?"
1785
  msgstr "জায়গা আগে থেকে কিনেছেন?"
1786
 
1787
- #: methods/updraftvault.php:270
1788
  msgid "Show the options"
1789
  msgstr "অপশন দেখান"
1790
 
1791
- #: methods/updraftvault.php:269
1792
  msgid "First time user?"
1793
  msgstr "প্রথম বার ব্যাবহারকারি?"
1794
 
1795
- #: methods/updraftvault.php:266 methods/updraftvault.php:283
1796
  msgid "Press a button to get started."
1797
  msgstr "কাজ শুরু করতে যেকোনো একটি বোতাম চাপুন।"
1798
 
1799
- #: methods/updraftvault.php:266 methods/updraftvault.php:283
1800
  msgid "UpdraftPlus Vault brings you storage that is <strong>reliable, easy to use and a great price</strong>."
1801
  msgstr "UpdraftPlus Vault আপনাকে স্টোরেজের সুবিধা দেয় যেটি <strong>বিশ্বাসযোগ্য, সহজে ব্যাবহারযোগ্য এবং চমৎকার দামে</strong>।"
1802
 
1803
- #: methods/updraftvault.php:229
1804
  msgid "You have an UpdraftPlus Vault subscription that has not been renewed, and the grace period has expired. In a few days' time, your stored data will be permanently removed. If you do not wish this to happen, then you should renew as soon as possible."
1805
  msgstr ""
1806
 
1807
- #: methods/updraftvault.php:226
1808
  msgid "You have an UpdraftPlus Vault subscription with overdue payment. You are within the few days of grace period before it will be suspended, and you will lose your quota and access to data stored within it. Please renew as soon as possible!"
1809
  msgstr "আপনার UpdraftPlus Vault এর পেমেন্ট নির্দিষ্ট সময় অতিক্রম করে ফেলেছে। এবং আপনার এ্যাকাউন্ট কিছু দিনের মাঝে বন্ধ করে দেয়া হবে, এবং আপনি আপনার প্রাপ্য এবং এর সকল তথ্য হারাবেন। দয়া করে তাড়াতাড়ি রিনিউ করুন!"
1810
 
1811
- #: methods/updraftvault.php:223
1812
  msgid "Your UpdraftPlus Premium purchase is over a year ago. You should renew immediately to avoid losing the 12 months of free storage allowance that you get for being a current UpdraftPlus Premium customer."
1813
  msgstr "আপনার UpdraftPlus Premium কেনার এক বছর অতিক্রান্ত হয়ে গিয়েছে। আপনার এখনি তা নবিনীকরন করা উচিত আপনার ১২ মাসের বিনামূল্যের স্টোরেজ এর সুবিধা রক্ষার্থে যা আপনি UpdraftPlus Premium কাস্টমার হওয়ার জন্য পেয়ে থাকেন।"
1814
 
1815
- #: methods/updraftvault.php:77
1816
  msgid "Updraft Vault"
1817
  msgstr "ভল্ট আপডেট করুন"
1818
 
1819
- #: addons/azure.php:365 addons/googlecloud.php:693 methods/s3.php:1042
1820
  msgid "Delete failed:"
1821
  msgstr "ডিলিট ব্যর্থ:"
1822
 
@@ -1824,19 +1840,19 @@ msgstr "ডিলিট ব্যর্থ:"
1824
  msgid "The zip engine returned the message: %s."
1825
  msgstr "Zip engine টি এই বার্তা নিয়ে এসেছে: %s।"
1826
 
1827
- #: addons/s3-enhanced.php:352
1828
  msgid "Without this permission, UpdraftPlus cannot delete backups - you should also set your 'retain' settings very high to prevent seeing deletion errors."
1829
  msgstr ""
1830
 
1831
- #: addons/s3-enhanced.php:350
1832
  msgid "Allow deletion"
1833
  msgstr "ডিলিট করার অনুমতি দিন"
1834
 
1835
- #: addons/s3-enhanced.php:348
1836
  msgid "Without this permission, you cannot directly download or restore using UpdraftPlus, and will instead need to visit the AWS website."
1837
  msgstr "এই অনুমতি ছাড়া আপনি সরাসরি UpdraftPlus ব্যাবহার করে ডাউনলোড বা রিস্টোর করতে পারবেন না, বরং আপনাকে AWS ওয়েবসাইটটি ভিজিট করতে হবে।"
1838
 
1839
- #: addons/s3-enhanced.php:346
1840
  msgid "Allow download"
1841
  msgstr "ডাউনলোড এর অনুমতি দিন"
1842
 
@@ -1844,7 +1860,7 @@ msgstr "ডাউনলোড এর অনুমতি দিন"
1844
  msgid "If sending directly from site to site does not work for you, then there are three other methods - please try one of these instead."
1845
  msgstr ""
1846
 
1847
- #: addons/migrator.php:1742 admin.php:659
1848
  msgid "You should check that the remote site is online, not firewalled, does not have security modules that may be blocking access, has UpdraftPlus version %s or later active and that the keys have been entered correctly."
1849
  msgstr ""
1850
 
@@ -1912,19 +1928,19 @@ msgstr ""
1912
  msgid "Backup made by %s"
1913
  msgstr "ব্যাকআপ তৈরি করেছেন %s"
1914
 
1915
- #: methods/addon-base-v2.php:187
1916
  msgid "This storage method does not allow downloading"
1917
  msgstr "এই স্টোরেজ পদ্ধতি ডাউনলোড করার অনুমতি দেয় না"
1918
 
1919
- #: admin.php:3364
1920
  msgid "(backup set imported from remote location)"
1921
  msgstr "(ব্যাকআপ সেট দূরবর্তী অবস্থান থেকে আমদানি করা হয়েছে)"
1922
 
1923
- #: templates/wp-admin/settings/existing-backups-table.php:65
1924
  msgid "Site"
1925
  msgstr "সাইট"
1926
 
1927
- #: templates/wp-admin/settings/existing-backups-table.php:64
1928
  msgid "Backup sent to remote site - not available for download."
1929
  msgstr "ব্যাকআপ রিমোট সাইটের পাঠানো হয়েছে - ডাউনলোডের জন্য উপলব্ধ না"
1930
 
@@ -1936,23 +1952,23 @@ msgstr ""
1936
  msgid "This backup set was not known by UpdraftPlus to be created by the current WordPress installation, but was either found in remote storage, or was sent from a remote site."
1937
  msgstr ""
1938
 
1939
- #: addons/migrator.php:1770 admin.php:666
1940
  msgid "Testing connection..."
1941
  msgstr "কানেকশন পরীক্ষা করা হচ্ছে..."
1942
 
1943
- #: admin.php:663
1944
  msgid "Deleting..."
1945
  msgstr "মুছে ফেলা হচ্ছে..."
1946
 
1947
- #: admin.php:662
1948
  msgid "key name"
1949
  msgstr "চাবির(কি) নাম"
1950
 
1951
- #: admin.php:660
1952
  msgid "Please give this key a name (e.g. indicate the site it is for):"
1953
  msgstr "এই চাবিকাঠির একটি নাম দিন (e.g. indicate the site it is for):"
1954
 
1955
- #: admin.php:657
1956
  msgid "Creating..."
1957
  msgstr "তৈরি করা হচ্ছে..."
1958
 
@@ -1976,11 +1992,11 @@ msgstr ""
1976
  msgid "Or, send a backup to another site"
1977
  msgstr "অথবা, ব্যাকআপ অন্য একটি সাইটে পাঠান"
1978
 
1979
- #: addons/migrator.php:1937 admin.php:667
1980
  msgid "Send"
1981
  msgstr "পাঠান"
1982
 
1983
- #: addons/migrator.php:1931 admin.php:658
1984
  msgid "Send to site:"
1985
  msgstr ""
1986
 
@@ -2044,11 +2060,11 @@ msgstr ""
2044
  msgid "A \"migration\" is ultimately the same as a restoration - but using backup archives that you import from another site."
2045
  msgstr ""
2046
 
2047
- #: addons/migrator.php:2180 admin.php:655
2048
  msgid "Add site"
2049
  msgstr "সাইট যুক্ত করুন"
2050
 
2051
- #: admin.php:654
2052
  msgid "Adding..."
2053
  msgstr "যুক্ত করা হচ্ছে..."
2054
 
@@ -2080,39 +2096,39 @@ msgstr ""
2080
  msgid "To import a backup set, go to the \"Existing Backups\" tab"
2081
  msgstr ""
2082
 
2083
- #: admin.php:646 admin.php:672 admin.php:673
2084
  msgid "You have made changes to your settings, and not saved."
2085
  msgstr ""
2086
 
2087
- #: addons/onedrive.php:989
2088
  msgid "N.B. %s is not case-sensitive."
2089
  msgstr ""
2090
 
2091
- #: addons/onedrive.php:977
2092
  msgid "If OneDrive later shows you the message \"unauthorized_client\", then you did not enter a valid client ID here."
2093
  msgstr ""
2094
 
2095
- #: addons/azure.php:501 addons/migrator.php:1757 addons/onedrive.php:961
2096
  msgid "For longer help, including screenshots, follow this link."
2097
  msgstr ""
2098
 
2099
- #: addons/onedrive.php:961
2100
  msgid "Create OneDrive credentials in your OneDrive developer console."
2101
  msgstr ""
2102
 
2103
- #: addons/onedrive.php:956
2104
  msgid "You must add the following as the authorised redirect URI in your OneDrive console (under \"API Settings\") when asked"
2105
  msgstr ""
2106
 
2107
- #: addons/onedrive.php:931 addons/onedrive.php:933
2108
  msgid "%s authorisation failed:"
2109
  msgstr ""
2110
 
2111
- #: addons/onedrive.php:793 addons/onedrive.php:976 addons/onedrive.php:980
2112
  msgid "OneDrive"
2113
  msgstr "OneDrive"
2114
 
2115
- #: addons/onedrive.php:626
2116
  msgid "Please re-authorize the connection to your %s account."
2117
  msgstr ""
2118
 
@@ -2120,152 +2136,152 @@ msgstr ""
2120
  msgid "configure it here"
2121
  msgstr "এটিকে এইখানে কনফিগার করুন"
2122
 
2123
- #: addons/onedrive.php:619 methods/updraftvault.php:568
2124
  msgid "To remove the block, please go here."
2125
  msgstr "ব্লক সরাতে, এখানে যান।"
2126
 
2127
- #: addons/s3-enhanced.php:439
2128
  msgid "Do remember to save your settings."
2129
  msgstr "আপনার নির্বাচিত বৈশিষ্ট্যগুলি সংরক্ষণ করতে ভুলবেন না।"
2130
 
2131
- #: addons/s3-enhanced.php:439
2132
  msgid "You are now using a IAM user account to access your bucket."
2133
  msgstr ""
2134
 
2135
- #: addons/s3-enhanced.php:344
2136
  msgid "S3 bucket"
2137
  msgstr "S3 bucket"
2138
 
2139
- #: addons/s3-enhanced.php:334
2140
  msgid "China (Beijing) (restricted)"
2141
  msgstr "চায়না (বেইজিং) (সীমাবদ্ধ)"
2142
 
2143
- #: addons/s3-enhanced.php:333
2144
  msgid "South America (Sao Paulo)"
2145
  msgstr "দক্ষিণ আমেরিকা (সাও পাওলো)"
2146
 
2147
- #: addons/s3-enhanced.php:332
2148
  msgid "Asia Pacific (Tokyo)"
2149
  msgstr "এশিয়া প্যাসিফিক (টোকিও)"
2150
 
2151
- #: addons/s3-enhanced.php:330
2152
  msgid "Asia Pacific (Sydney)"
2153
  msgstr "এশিয়া প্যাসিফিক (সিডনি)"
2154
 
2155
- #: addons/s3-enhanced.php:329
2156
  msgid "Asia Pacific (Singapore)"
2157
  msgstr "এশিয়া প্যাসিফিক (সিঙ্গাপুর)"
2158
 
2159
- #: addons/s3-enhanced.php:323
2160
  msgid "US Government West (restricted)"
2161
  msgstr "US Government West (সীমাবদ্ধ)"
2162
 
2163
- #: addons/s3-enhanced.php:322
2164
  msgid "US West (N. California)"
2165
  msgstr "US West (N. California)"
2166
 
2167
- #: addons/s3-enhanced.php:321
2168
  msgid "US West (Oregon)"
2169
  msgstr "US West (Oregon)"
2170
 
2171
- #: addons/s3-enhanced.php:319
2172
  msgid "US Standard (default)"
2173
  msgstr "US Standard (default)"
2174
 
2175
- #: addons/s3-enhanced.php:315
2176
  msgid "S3 storage region"
2177
  msgstr "S3 storage region"
2178
 
2179
- #: addons/s3-enhanced.php:313
2180
  msgid "New IAM username"
2181
  msgstr ""
2182
 
2183
- #: addons/s3-enhanced.php:312
2184
  msgid "Admin secret key"
2185
  msgstr ""
2186
 
2187
- #: addons/s3-enhanced.php:311
2188
  msgid "Admin access key"
2189
  msgstr ""
2190
 
2191
- #: addons/s3-enhanced.php:304
2192
  msgid "Then, these lower-powered access credentials can be used, instead of storing your administrative keys."
2193
  msgstr ""
2194
 
2195
- #: addons/s3-enhanced.php:304
2196
  msgid "These will be used to create a new user and key pair with an IAM policy attached which will only allow it to access the indicated bucket."
2197
  msgstr ""
2198
 
2199
- #: addons/s3-enhanced.php:304
2200
  msgid "Enter your administrative Amazon S3 access/secret keys (this needs to be a key pair with enough rights to create new users and buckets), and a new (unique) username for the new user and a bucket name."
2201
  msgstr ""
2202
 
2203
- #: addons/s3-enhanced.php:381
2204
  msgid "Create new IAM user and S3 bucket"
2205
  msgstr ""
2206
 
2207
- #: addons/s3-enhanced.php:294
2208
  msgid "Secret Key: %s"
2209
  msgstr "গোপন চাবি: %s"
2210
 
2211
- #: addons/s3-enhanced.php:294
2212
  msgid "Access Key: %s"
2213
  msgstr "অ্যাক্সেস চাবি: %s"
2214
 
2215
- #: addons/s3-enhanced.php:282 addons/s3-enhanced.php:284
2216
  msgid "Failed to apply User Policy"
2217
  msgstr ""
2218
 
2219
- #: addons/s3-enhanced.php:223 addons/s3-enhanced.php:227
2220
  msgid "Operation to create user Access Key failed"
2221
  msgstr ""
2222
 
2223
- #: addons/s3-enhanced.php:221
2224
  msgid "Failed to create user Access Key"
2225
  msgstr ""
2226
 
2227
- #: addons/s3-enhanced.php:201 addons/s3-enhanced.php:204
2228
- #: addons/s3-enhanced.php:208
2229
  msgid "IAM operation failed
11
  "Language: bn\n"
12
  "Project-Id-Version: UpdraftPlus\n"
13
 
14
+ #: templates/wp-admin/settings/existing-backups-table.php:69
15
+ msgid "Stored at: %s"
16
+ msgstr ""
17
+
18
+ #: methods/cloudfiles.php:500
19
+ msgid "Cloud Files"
20
+ msgstr ""
21
+
22
+ #: admin.php:4114
23
+ msgid "Your settings failed to save. Please refresh the settings page and try again"
24
+ msgstr ""
25
+
26
+ #: admin.php:4073
27
+ msgid "UpdraftPlus seems to have been updated to version (%s) different to the version running when this settings page was loaded. Please reload the settings page before trying to save settings."
28
+ msgstr ""
29
+
30
+ #: methods/updraftvault.php:62
31
  msgid "UpdraftVault"
32
  msgstr ""
33
 
55
  msgid "Extra database"
56
  msgstr ""
57
 
58
+ #: admin.php:3372
59
  msgid "Press here to download or browse"
60
  msgstr ""
61
 
62
+ #: admin.php:1059 admin.php:1069
63
  msgid "Error: invalid path"
64
  msgstr ""
65
 
66
+ #: admin.php:917
67
  msgid "An error occurred when fetching storage module options: "
68
  msgstr ""
69
 
70
+ #: admin.php:745
71
  msgid "Loading log file"
72
  msgstr ""
73
 
74
+ #: admin.php:744
75
  msgid "Unable to download file. This could be caused by a timeout. It would be best to download the zip to your computer."
76
  msgstr ""
77
 
78
+ #: admin.php:743
79
  msgid "Search"
80
  msgstr ""
81
 
82
+ #: admin.php:742
83
  msgid "Select a file to view information about it"
84
  msgstr ""
85
 
86
+ #: admin.php:741
87
  msgid "Browsing zip file"
88
  msgstr ""
89
 
90
+ #: admin.php:711
91
  msgid "With UpdraftPlus Premium, you can directly download individual files from here."
92
  msgstr ""
93
 
94
+ #: admin.php:659
95
  msgid "Browse contents"
96
  msgstr ""
97
 
99
  msgid "Skipped tables:"
100
  msgstr ""
101
 
102
+ #: class-updraftplus.php:4327
103
  msgid "This database backup has the following WordPress tables excluded: %s"
104
  msgstr ""
105
 
106
+ #: admin.php:2368
107
  msgid "With UpdraftPlus Premium, you can choose to backup non-WordPress tables, backup only specified tables, and backup other databases too."
108
  msgstr ""
109
 
110
+ #: admin.php:2368
111
  msgid "All WordPress tables will be backed up."
112
  msgstr ""
113
 
114
+ #: admin.php:740
115
  msgid "Further information may be found in the browser JavaScript console, and the server PHP error logs."
116
  msgstr ""
117
 
118
+ #: admin.php:740
119
  msgid "That you are attempting to upload a zip file previously created by UpdraftPlus."
120
  msgstr ""
121
 
122
+ #: admin.php:740
123
  msgid "The available memory on the server."
124
  msgstr ""
125
 
126
+ #: admin.php:740
127
  msgid "Any settings in your .htaccess or web.config file that affects the maximum upload or post size."
128
  msgstr ""
129
 
130
+ #: admin.php:740
131
  msgid "The file failed to upload. Please check the following:"
132
  msgstr ""
133
 
134
+ #: admin.php:739
135
  msgid "HTTP code:"
136
  msgstr ""
137
 
138
+ #: admin.php:636
139
  msgid "You have chosen to backup a database, but no tables have been selected"
140
  msgstr ""
141
 
298
  msgid "UpdraftPlus"
299
  msgstr ""
300
 
301
+ #: templates/wp-admin/settings/form-contents.php:286
302
  msgid "Recommended: optimize your database with WP-Optimize."
303
  msgstr ""
304
 
369
  msgid "Comments"
370
  msgstr ""
371
 
372
+ #: addons/s3-enhanced.php:335
373
  msgid "Europe (Frankfurt)"
374
  msgstr ""
375
 
376
+ #: addons/s3-enhanced.php:334
377
  msgid "Europe (London)"
378
  msgstr ""
379
 
380
+ #: addons/s3-enhanced.php:333
381
  msgid "Europe (Ireland)"
382
  msgstr ""
383
 
562
  msgid "Then, try out our \"Migrator\" add-on which can perform a direct site-to-site migration. After using it once, you'll have saved the purchase price compared to the time needed to copy a site by hand."
563
  msgstr ""
564
 
565
+ #: addons/s3-enhanced.php:332
566
  msgid "Canada Central"
567
  msgstr ""
568
 
625
  msgid "The client has been deleted from the Google Drive API console. Please create a new Google Drive project and reconnect with UpdraftPlus."
626
  msgstr ""
627
 
628
+ #: methods/dropbox.php:571
629
  msgid "%s de-authentication"
630
  msgstr ""
631
 
632
+ #: methods/dropbox.php:536
633
  msgid "You must add the following as the authorised redirect URI in your Dropbox console (under \"API Settings\") when asked"
634
  msgstr ""
635
 
636
+ #: methods/dropbox.php:510
637
  msgid "Follow this link to deauthenticate with %s."
638
  msgstr ""
639
 
649
  msgid "You have selected a remote storage option which has an authorization step to complete:"
650
  msgstr ""
651
 
652
+ #: admin.php:1488
653
  msgid "Remote files deleted:"
654
  msgstr ""
655
 
656
+ #: admin.php:1487
657
  msgid "Local files deleted:"
658
  msgstr ""
659
 
660
+ #: admin.php:962 admin.php:966 admin.php:974 admin.php:978
661
  msgid "Follow this link to authorize access to your %s account (you will not be able to back up to %s without it)."
662
  msgstr ""
663
 
664
+ #: admin.php:738
665
  msgid "remote files deleted"
666
  msgstr ""
667
 
668
+ #: admin.php:736
669
  msgid "Complete"
670
  msgstr ""
671
 
672
+ #: admin.php:735
673
  msgid "Do you want to carry out the import?"
674
  msgstr ""
675
 
676
+ #: admin.php:734
677
  msgid "Which was exported on:"
678
  msgstr ""
679
 
680
+ #: admin.php:733
681
  msgid "This will import data from:"
682
  msgstr ""
683
 
684
+ #: admin.php:732
685
  msgid "Importing..."
686
  msgstr ""
687
 
688
+ #: admin.php:729
689
  msgid "You have not yet selected a file to import."
690
  msgstr ""
691
 
692
+ #: admin.php:713
693
  msgid "Your export file will be of your displayed settings, not your saved ones."
694
  msgstr ""
695
 
697
  msgid "template not found"
698
  msgstr ""
699
 
700
+ #: addons/s3-enhanced.php:328
701
  msgid "US East (Ohio)"
702
  msgstr ""
703
 
704
+ #: addons/onedrive.php:962
705
  msgid "This site uses a URL which is either non-HTTPS, or is localhost or 127.0.0.1 URL. As such, you must use the main %s %s App to authenticate with your account."
706
  msgstr ""
707
 
708
+ #: addons/onedrive.php:637
709
  msgid "Account is not authorized (%s)."
710
  msgstr ""
711
 
712
+ #: addons/onedrive.php:598 udaddons/updraftplus-addons.php:732
713
  msgid "Your IP address:"
714
  msgstr "আপনার আইপি অ্যাড্রেসঃ"
715
 
716
+ #: addons/onedrive.php:598 udaddons/updraftplus-addons.php:732
717
  #: udaddons/updraftplus-addons.php:747
718
  msgid "To remove any block, please go here."
719
  msgstr "কোন ব্লক সরাতে এখানে যান।"
720
 
721
+ #: addons/onedrive.php:583 udaddons/updraftplus-addons.php:717
722
  msgid "An error response was received; HTTP code:"
723
  msgstr ""
724
 
725
+ #: includes/class-commands.php:310
726
  msgid "%s add-on not found"
727
  msgstr "%s অ্যাড-অন পাওয়া যায়নি"
728
 
734
  msgid "This makes time-outs much more likely. You are recommended to turn safe_mode off, or to restore only one entity at a time"
735
  msgstr "এভাবে \"টাইম-আউট\" হতে পারে। আপনাকে safe_mode বন্ধ করার অথবা একসাথে শুধুমাত্র একটা জিনিস পুনরুদ্ধার করার পরামর্শ দেয়া হচ্ছে"
736
 
737
+ #: admin.php:2193
738
  msgid "To fix this problem go here."
739
  msgstr "এই সমস্যা সমাধান করতে এখানে যান।"
740
 
741
+ #: admin.php:2193
742
  msgid "OptimizePress 2.0 encodes its contents, so search/replace does not work."
743
  msgstr "অপটিমাইজপ্রেস ২.০ এর কন্টেন্টসমূহ সঙ্কেতাক্ষরে লিখে রাখে, তাই সার্চ/প্রতিস্থাপন কাজ করে না।"
744
 
745
+ #: admin.php:697
746
  msgid "your PHP install lacks the openssl module; as a result, this can take minutes; if nothing has happened by then, then you should either try a smaller key size, or ask your web hosting company how to enable this PHP module on your setup."
747
  msgstr "আপনার পিএইচপি ইনস্টলের ওপেন এসএসএল (SSL) মডিউল নেই, যার ফলে এটা বেশ কয়েক মিনিট সময় নিতে পারে। তারপরও যদি কিছু না ঘটে, তবে অপেক্ষাকৃত ছোট \"key size\" ব্যাবহার করুন। অথবা আপনার হোস্টিং কোম্পানিকে জিজ্ঞাস করুন কিভাবে পিএইচপি ইনস্টলের ওপেন এসএসএল (SSL) মডিউল চালু করতে হয়।"
748
 
749
+ #: addons/webdav.php:115
750
  msgid "Path"
751
  msgstr "রাস্তা (Path)"
752
 
753
+ #: addons/webdav.php:110
754
  msgid "Leave this blank to use the default (80 for webdav, 443 for webdavs)"
755
  msgstr "ডিফল্ট ভ্যালু ব্যাবহার করতে এটা ফাকা রাখুন (webdav এর জন্য 80, webdavs এর জন্য 443)"
756
 
757
+ #: addons/webdav.php:102
758
  msgid "Enter any path in the field below."
759
  msgstr "এই স্থানে যেকোন রাস্তা (Path) প্রবেশ করান।"
760
 
761
+ #: addons/webdav.php:102
762
  msgid "A host name cannot contain a slash."
763
  msgstr "\"host name\" এর ক্ষত্রে স্ল্যাশ ব্যাবহার করা যাবে না।"
764
 
765
+ #: addons/webdav.php:77
766
  msgid "Protocol (SSL or not)"
767
  msgstr "প্রোটোকল (SSL অথবা SSL না)"
768
 
769
+ #: addons/webdav.php:72
770
  msgid "This WebDAV URL is generated by filling in the options below. If you do not know the details, then you will need to ask your WebDAV provider."
771
  msgstr "এই WebDAV URL নিচের অপশনসমূহ পূরণ করার মাধ্যমে সৃষ্ট। আপনি যদি বিস্তারিত না জানেন, তাহলে আপনার WebDAV প্রোভাইডারকে জিজ্ঞেস করুন।"
772
 
774
  msgid "No response data was received. This usually indicates a network connectivity issue (e.g. an outgoing firewall or overloaded network) between this site and UpdraftPlus.com."
775
  msgstr "কোন রেসপন্স ডাটা পাওয়া যায়নি। এটা সাধারণত এই সাইট এবং UpdraftPlus.com এর মধ্যে নেটওয়ার্ক সংযোগ সমস্যা নির্দেশ করে (যেমনঃ আউটগোয়িং ফায়ারওয়াল অথবা ওভারলোডেড নেটওয়ার্ক)।"
776
 
777
+ #: methods/s3.php:1031
778
  msgid "The AWS access key looks to be wrong (valid %s access keys begin with \"AK\")"
779
  msgstr "এই AWS access key মনে হয় ভূল (সঠিক %s access keys \"AK\" দিয়ে শুরু হয়)"
780
 
781
+ #: methods/s3.php:101
782
  msgid "No settings were found - please go to the Settings tab and check your settings"
783
  msgstr "কোন সেটিং পাওয়া যায়নি - দয়া করে সেটিং ট্যাবে গিয়ে আপনার সেটিং যাচাই করুন।"
784
 
786
  msgid "Backup using %s?"
787
  msgstr " %s ব্যাবহার করে ব্যাকআপ?"
788
 
789
+ #: addons/s3-enhanced.php:339
790
  msgid "Asia Pacific (Mumbai)"
791
  msgstr "এশিয়া প্যাসিফিক (মুম্বাই)"
792
 
793
+ #: addons/s3-enhanced.php:63
794
  msgid "Reduced redundancy"
795
  msgstr "কম আতিশয্য "
796
 
797
+ #: addons/s3-enhanced.php:62
798
  msgid "Standard (infrequent access)"
799
  msgstr "স্ট্যান্ডার্ড (কদাচিৎ অ্যাকসেস)"
800
 
916
  msgid "This backup archive is %s MB in size - the attempt to send this via email is likely to fail (few email servers allow attachments of this size). If so, you should switch to using a different remote storage method."
917
  msgstr ""
918
 
919
+ #: class-updraftplus.php:1590
920
  msgid "Size: %s MB"
921
  msgstr "সাইজঃ %s MB"
922
 
928
  msgid "i.e. you have an account there"
929
  msgstr "যদি আপনার সেখানে একটি একাউণ্ট (পরিচিতি) থাকে"
930
 
931
+ #: templates/wp-admin/settings/form-contents.php:371
932
  msgid "UpdraftPlus will split up backup archives when they exceed this file size. The default value is %s megabytes. Be careful to leave some margin if your web-server has a hard size limit (e.g. the 2 GB / 2048 MB limit on some 32-bit servers/file systems)."
933
  msgstr ""
934
 
936
  msgid "Now"
937
  msgstr "এখন"
938
 
939
+ #: class-updraftplus.php:4191 restorer.php:996
940
  msgid "You should enable %s to make any pretty permalinks (e.g. %s) work"
941
  msgstr ""
942
 
944
  msgid "(tap on an icon to select or unselect)"
945
  msgstr "(সিলেক্ট অথবা আনসিলেক্ট করার জন্য আইকনের উপর টিপ দিন)"
946
 
947
+ #: methods/updraftvault.php:310 methods/updraftvault.php:316
948
+ #: methods/updraftvault.php:322
949
  msgid "%s per year"
950
  msgstr "প্রতি বৎসর %s"
951
 
952
+ #: methods/updraftvault.php:309 methods/updraftvault.php:315
953
+ #: methods/updraftvault.php:321
954
  msgid "or (annual discount)"
955
  msgstr "অথবা (বাৎসরিক মূল্যছাড়)"
956
 
957
+ #: methods/updraftvault.php:246
958
  msgid "No Vault connection was found for this site (has it moved?); please disconnect and re-connect."
959
  msgstr "এই সাইটের জন্য কোন ভল্ট কানেকশন পাওয়া যায়নি (এটা কি স্থানান্তর করা হয়েছে?), দয়া করে ডিসকানেক্ট করে আবার কানেক্ট করুন।"
960
 
961
+ #: class-updraftplus.php:451 class-updraftplus.php:496
962
  msgid "The given file was not found, or could not be read."
963
  msgstr "প্রদত্ত ফাইল পাওয়া যায়নি অথবা পড়া সম্ভব হয়নি।"
964
 
1058
  msgid "UpdraftCentral Connection"
1059
  msgstr ""
1060
 
1061
+ #: backup.php:849 class-updraftplus.php:2846
1062
  msgid "The backup was aborted by the user"
1063
  msgstr ""
1064
 
1065
+ #: admin.php:4109
1066
  msgid "Your settings have been saved."
1067
  msgstr "আপনার সেটিংস সংরক্ষণ করা হয়েছে। "
1068
 
1069
+ #: admin.php:3266
1070
  msgid "Total backup size:"
1071
  msgstr ""
1072
 
1073
+ #: admin.php:2690
1074
  msgid "stop"
1075
  msgstr ""
1076
 
1077
+ #: admin.php:2528
1078
  msgid "The backup has finished running"
1079
  msgstr ""
1080
 
1100
  msgid "calculate"
1101
  msgstr "গণনা করুন"
1102
 
1103
+ #: admin.php:712
1104
  msgid "You should save your changes to ensure that they are used for making your backup."
1105
  msgstr ""
1106
 
1107
+ #: admin.php:705
1108
  msgid "We requested to delete the file, but could not understand the server's response"
1109
  msgstr ""
1110
 
1111
+ #: admin.php:704
1112
  msgid "Please enter a valid URL"
1113
  msgstr "দয়া করে সঠিক URL প্রবেশ করান"
1114
 
1115
+ #: admin.php:687
1116
  msgid "Saving..."
1117
  msgstr "সংরক্ষণ হচ্ছে..."
1118
 
1119
+ #: admin.php:650
1120
  msgid "Error: the server sent us a response which we did not understand."
1121
  msgstr ""
1122
 
1123
+ #: admin.php:642
1124
  msgid "Fetching..."
1125
  msgstr "আনা হচ্ছে..."
1126
 
1127
+ #: addons/s3-enhanced.php:336
1128
  msgid "Asia Pacific (Seoul)"
1129
  msgstr ""
1130
 
1136
  msgid "Unexpected error: no class '%s' was found (your UpdraftPlus installation seems broken - try re-installing)"
1137
  msgstr ""
1138
 
1139
+ #: addons/onedrive.php:58
1140
  msgid "The required %s PHP module is not installed - ask your web hosting company to enable it."
1141
  msgstr ""
1142
 
1144
  msgid "Skipping table %s: this table will not be restored"
1145
  msgstr ""
1146
 
1147
+ #: class-updraftplus.php:4242 restorer.php:1642
1148
  msgid "To import an ordinary WordPress site into a multisite installation requires %s."
1149
  msgstr ""
1150
 
1151
+ #: class-updraftplus.php:4238
1152
  msgid "Please read this link for important information on this process."
1153
  msgstr ""
1154
 
1155
+ #: class-updraftplus.php:4238
1156
  msgid "It will be imported as a new site."
1157
  msgstr ""
1158
 
1159
+ #: admin.php:2341 templates/wp-admin/notices/horizontal-notice.php:16
1160
  #: templates/wp-admin/notices/horizontal-notice.php:18
1161
  msgid "Dismiss"
1162
  msgstr "খারিজ"
1163
 
1164
+ #: admin.php:724
1165
  msgid "Please fill in the required information."
1166
  msgstr ""
1167
 
1233
  msgid "Call WordPress action:"
1234
  msgstr ""
1235
 
1236
+ #: admin.php:2376
1237
  msgid "Your saved settings also affect what is backed up - e.g. files excluded."
1238
  msgstr ""
1239
 
1240
+ #: admin.php:3677
1241
  msgid "Skipping: this archive was already restored."
1242
  msgstr ""
1243
 
1244
+ #: templates/wp-admin/settings/form-contents.php:212
1245
  msgid "File Options"
1246
  msgstr ""
1247
 
1269
  msgid "This button will delete all UpdraftPlus settings and progress information for in-progress backups (but not any of your existing backups from your cloud storage)."
1270
  msgstr ""
1271
 
1272
+ #: admin.php:3986
1273
  msgid "Send this backup to remote storage"
1274
  msgstr ""
1275
 
1276
+ #: admin.php:3984
1277
  msgid "Check out UpdraftPlus Vault."
1278
  msgstr ""
1279
 
1280
+ #: admin.php:3984
1281
  msgid "Not got any remote storage?"
1282
  msgstr ""
1283
 
1284
+ #: admin.php:3984
1285
  msgid "settings"
1286
  msgstr "সেটিংস"
1287
 
1288
+ #: admin.php:3984
1289
  msgid "Backup won't be sent to any remote storage - none has been saved in the %s"
1290
  msgstr ""
1291
 
1292
+ #: admin.php:2374
1293
  msgid "Include any files in the backup"
1294
  msgstr ""
1295
 
1296
+ #: admin.php:2360
1297
  msgid "Include the database in the backup"
1298
  msgstr ""
1299
 
1300
+ #: admin.php:2340
1301
  msgid "Continue restoration"
1302
  msgstr ""
1303
 
1304
+ #: admin.php:2335
1305
  msgid "You have an unfinished restoration operation, begun %s ago."
1306
  msgstr ""
1307
 
1308
+ #: admin.php:2334
1309
  msgid "Unfinished restoration"
1310
  msgstr ""
1311
 
1312
+ #: admin.php:2332
1313
  msgid "%s minutes, %s seconds"
1314
  msgstr ""
1315
 
1316
+ #: admin.php:2279
1317
  msgid "Backup Contents And Schedule"
1318
  msgstr ""
1319
 
1321
  msgid "Premium / Extensions"
1322
  msgstr ""
1323
 
1324
+ #: admin.php:2059 admin.php:2068
1325
  msgid "Sufficient information about the in-progress restoration operation could not be found."
1326
  msgstr ""
1327
 
1328
+ #: addons/morefiles.php:53 admin.php:710
1329
  msgctxt "(verb)"
1330
  msgid "Download"
1331
  msgstr ""
1332
 
1333
+ #: admin.php:635
1334
  msgid "You have chosen to backup files, but no file entities have been selected"
1335
  msgstr ""
1336
 
1337
+ #: admin.php:542
1338
  msgid "Extensions"
1339
  msgstr ""
1340
 
1341
+ #: admin.php:534 templates/wp-admin/settings/tab-bar.php:8
1342
  msgid "Advanced Tools"
1343
  msgstr ""
1344
 
1345
+ #: addons/googlecloud.php:926
1346
  msgid "Bucket location"
1347
  msgstr ""
1348
 
1349
+ #: addons/googlecloud.php:921
1350
  msgid "Note that Google do not support every storage class in every location - you should read their documentation to learn about current availability."
1351
  msgstr ""
1352
 
1353
+ #: addons/googlecloud.php:921 addons/googlecloud.php:936
1354
  msgid "This setting applies only when a new bucket is being created."
1355
  msgstr ""
1356
 
1357
+ #: addons/googlecloud.php:906
1358
  msgid "You must use a bucket name that is unique, for all %s users."
1359
  msgstr ""
1360
 
1361
+ #: addons/googlecloud.php:862
1362
  msgid "Do not confuse %s with %s - they are separate things."
1363
  msgstr ""
1364
 
1365
+ #: addons/googlecloud.php:294
1366
  msgid "You do not have access to this bucket"
1367
  msgstr ""
1368
 
1415
  msgid "Durable reduced availability"
1416
  msgstr ""
1417
 
1418
+ #: addons/googlecloud.php:35 addons/s3-enhanced.php:61
1419
  msgid "Standard"
1420
  msgstr ""
1421
 
1422
+ #: addons/azure.php:553
1423
  msgid "container"
1424
  msgstr ""
1425
 
1426
+ #: addons/azure.php:553
1427
  msgid "You can enter the path of any %s virtual folder you wish to use here."
1428
  msgstr ""
1429
 
1430
+ #: addons/azure.php:552
1431
  msgid "optional"
1432
  msgstr ""
1433
 
1434
+ #: addons/azure.php:552
1435
  msgid "Prefix"
1436
  msgstr ""
1437
 
1438
+ #: addons/azure.php:547
1439
  msgid "See Microsoft's guidelines on container naming by following this link."
1440
  msgstr ""
1441
 
1442
+ #: addons/azure.php:547
1443
  msgid "If the %s does not already exist, then it will be created."
1444
  msgstr ""
1445
 
1446
+ #: addons/azure.php:547
1447
  msgid "Enter the path of the %s you wish to use here."
1448
  msgstr ""
1449
 
1450
+ #: addons/azure.php:536
1451
  msgid "This is not your Azure login - see the instructions if needing more guidance."
1452
  msgstr ""
1453
 
1454
+ #: addons/azure.php:535
1455
  msgid "Account Name"
1456
  msgstr ""
1457
 
1458
+ #: addons/azure.php:535 addons/azure.php:539
1459
  msgid "Azure"
1460
  msgstr ""
1461
 
1462
+ #: addons/azure.php:531
1463
  msgid "Create Azure credentials in your Azure developer console."
1464
  msgstr ""
1465
 
1466
+ #: addons/azure.php:480
1467
  msgid "Could not create the container"
1468
  msgstr ""
1469
 
1470
+ #: addons/azure.php:353
1471
  msgid "Could not access container"
1472
  msgstr ""
1473
 
1474
+ #: class-updraftplus.php:2863
1475
  msgid "To complete your migration/clone, you should now log in to the remote site and restore the backup set."
1476
  msgstr ""
1477
 
1499
  msgid "Not installed"
1500
  msgstr ""
1501
 
1502
+ #: addons/googlecloud.php:911 addons/s3-enhanced.php:54
1503
  msgid "Storage class"
1504
  msgstr ""
1505
 
1506
+ #: addons/googlecloud.php:906
1507
  msgid "See Google's guidelines on bucket naming by following this link."
1508
  msgstr ""
1509
 
1510
+ #: addons/googlecloud.php:906
1511
  msgid "Bucket names have to be globally unique. If the bucket does not already exist, then it will be created."
1512
  msgstr ""
1513
 
1514
+ #: addons/googlecloud.php:906
1515
  msgid "Enter the name of the %s bucket you wish to use here."
1516
  msgstr ""
1517
 
1518
+ #: addons/googlecloud.php:905
1519
  msgid "Bucket"
1520
  msgstr ""
1521
 
1522
+ #: addons/googlecloud.php:901
1523
  msgid "Otherwise, you can leave it blank."
1524
  msgstr ""
1525
 
1526
+ #: addons/googlecloud.php:901
1527
  msgid "N.B. This is only needed if you have not already created the bucket, and you wish UpdraftPlus to create it for you."
1528
  msgstr ""
1529
 
1530
+ #: addons/googlecloud.php:901
1531
  msgid "Enter the ID of the %s project you wish to use here."
1532
  msgstr ""
1533
 
1534
+ #: addons/googlecloud.php:874
1535
  msgid "Follow this link to your Google API Console, and there activate the Storage API and create a Client ID in the API Access section."
1536
  msgstr ""
1537
 
1538
+ #: addons/googlecloud.php:779
1539
  msgid "You must enter a project ID in order to be able to create a new bucket."
1540
  msgstr ""
1541
 
1542
+ #: addons/googlecloud.php:900
1543
  msgid "Project ID"
1544
  msgstr ""
1545
 
1546
+ #: addons/googlecloud.php:645
1547
  msgid "You must save and authenticate before you can test your settings."
1548
  msgstr ""
1549
 
1550
+ #: addons/googlecloud.php:510
1551
  msgid "Have not yet obtained an access token from Google - you need to authorise or re-authorise your connection to Google Cloud."
1552
  msgstr ""
1553
 
1554
+ #: addons/googlecloud.php:241 addons/googlecloud.php:314
1555
+ #: addons/googlecloud.php:771 addons/googlecloud.php:818
1556
  msgid "You do not have access to this bucket."
1557
  msgstr ""
1558
 
1559
+ #: addons/googlecloud.php:241 addons/googlecloud.php:294
1560
+ #: addons/googlecloud.php:304 addons/googlecloud.php:314
1561
+ #: addons/googlecloud.php:610 addons/googlecloud.php:771
1562
+ #: addons/googlecloud.php:818 addons/googlecloud.php:868
1563
+ #: addons/googlecloud.php:885 addons/googlecloud.php:893
1564
+ #: addons/googlecloud.php:906
1565
  msgid "Google Cloud"
1566
  msgstr ""
1567
 
1568
+ #: addons/googlecloud.php:241 addons/googlecloud.php:294
1569
+ #: addons/googlecloud.php:314 addons/googlecloud.php:771
1570
+ #: addons/googlecloud.php:818
1571
  msgid "%s Service Exception."
1572
  msgstr ""
1573
 
1604
  msgid "Press here to look inside your remote storage methods for any existing backup sets (from any site, if they are stored in the same folder)."
1605
  msgstr ""
1606
 
1607
+ #: admin.php:1486
1608
  msgid "Backup sets removed:"
1609
  msgstr ""
1610
 
1611
+ #: admin.php:723
1612
  msgid "Processing..."
1613
  msgstr ""
1614
 
1615
+ #: admin.php:721
1616
  msgid "For backups older than"
1617
  msgstr ""
1618
 
1619
+ #: admin.php:720
1620
  msgid "week(s)"
1621
  msgstr ""
1622
 
1623
+ #: admin.php:719
1624
  msgid "hour(s)"
1625
  msgstr ""
1626
 
1627
+ #: admin.php:718
1628
  msgid "day(s)"
1629
  msgstr ""
1630
 
1631
+ #: admin.php:717
1632
  msgid "in the month"
1633
  msgstr ""
1634
 
1635
+ #: admin.php:716
1636
  msgid "day"
1637
  msgstr ""
1638
 
1652
  msgid "This problem is caused by trying to restore a database on a very old MySQL version that is incompatible with the source database."
1653
  msgstr ""
1654
 
1655
+ #: methods/updraftvault.php:616
1656
  msgid "You do not currently have any UpdraftPlus Vault quota"
1657
  msgstr ""
1658
 
1659
+ #: class-updraftplus.php:4277
1660
  msgid "You must upgrade MySQL to be able to use this database."
1661
  msgstr ""
1662
 
1663
+ #: class-updraftplus.php:4277
1664
  msgid "The database backup uses MySQL features not available in the old MySQL version (%s) that this site is running on."
1665
  msgstr ""
1666
 
1667
+ #: admin.php:2178
1668
  msgid "The UpdraftPlus directory in wp-content/plugins has white-space in it; WordPress does not like this. You should rename the directory to wp-content/plugins/updraftplus to fix this problem."
1669
  msgstr ""
1670
 
1671
+ #: methods/updraftvault.php:343
1672
  msgid "Don't know your email address, or forgotten your password?"
1673
  msgstr "আপনার ইমেল ঠিকানা জানা নেই, নাকি আপনার পাসওয়ার্ড ভুলে গিয়েছেন?"
1674
 
1675
+ #: methods/updraftvault.php:336
1676
  msgid "Enter your UpdraftPlus.Com email / password here to connect:"
1677
  msgstr ""
1678
 
1679
+ #: methods/updraftvault.php:298 methods/updraftvault.php:328
1680
  msgid "Read the FAQs here."
1681
  msgstr "এখানে প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী পড়ুন।"
1682
 
1683
+ #: addons/s3-enhanced.php:69
1684
  msgid "Check this box to use Amazon's server-side encryption"
1685
  msgstr "আমাজনের সার্ভার সাইড এনক্রিপশন ব্যবহার করতে এই বক্সটি টিক দিন"
1686
 
1687
+ #: addons/s3-enhanced.php:68
1688
  msgid "Server-side encryption"
1689
  msgstr "সার্ভার সাইড এনক্রিপশন"
1690
 
1691
+ #: methods/updraftvault.php:625
1692
  msgid "If you have forgotten your password, then go here to change your password on updraftplus.com."
1693
  msgstr ""
1694
 
1695
+ #: admin.php:970
1696
  msgid "Go to the remote storage settings in order to connect."
1697
  msgstr ""
1698
 
1699
+ #: admin.php:970
1700
  msgid "%s has been chosen for remote storage, but you are not currently connected."
1701
  msgstr ""
1702
 
1703
+ #: methods/updraftvault.php:325
1704
  msgid "Payments can be made in US dollars, euros or GB pounds sterling, via card or PayPal."
1705
  msgstr "পেমেন্ট ইউএস ডলার, ইউরো বা GB pounds sterling এর মাধ্যমে কার্ড বা পেপ্যাল এর দ্বারা করতে হবে।"
1706
 
1707
+ #: admin.php:693
1708
  msgid "Update quota count"
1709
  msgstr " প্রাপ্য সংখ্যা হালনাগাদ"
1710
 
1711
+ #: admin.php:692
1712
  msgid "Counting..."
1713
  msgstr "গণনা করা হচ্ছে..."
1714
 
1715
+ #: admin.php:691
1716
  msgid "Disconnecting..."
1717
  msgstr "সংযোগ বিচ্ছিন্ন করা হচ্ছে..."
1718
 
1719
+ #: admin.php:689
1720
  msgid "Connecting..."
1721
  msgstr "সংযোগ করা হচ্ছে..."
1722
 
1723
+ #: methods/updraftvault.php:399 methods/updraftvault.php:468
1724
  msgid "Refresh current status"
1725
  msgstr "বর্তমান অবস্থা পুনঃবিবেচনা করুন"
1726
 
1727
+ #: methods/updraftvault.php:397 methods/updraftvault.php:413
1728
+ #: methods/updraftvault.php:415 methods/updraftvault.php:468
1729
  msgid "Get more quota"
1730
  msgstr "আরও প্রাপ্য নিন"
1731
 
1732
+ #: methods/updraftvault.php:394 methods/updraftvault.php:410
1733
+ #: methods/updraftvault.php:449
1734
  msgid "Current use:"
1735
  msgstr "বর্তমান ব্যাবহার:"
1736
 
1737
+ #: methods/updraftvault.php:389
1738
  msgid "You can get more quota here"
1739
  msgstr "আপনি এখান থেকে আরও প্রাপ্য পেতে পারেন"
1740
 
1741
+ #: methods/updraftvault.php:389
1742
  msgid "%s Error: you have insufficient storage quota available (%s) to upload this archive (%s)."
1743
  msgstr "%s ইরোর: আপনার যথেষ্ট প্রাপ্য(%s) নেই আর্কাইভটি(%s) আপলোড করার জন্য।"
1744
 
1745
+ #: admin.php:690 methods/updraftvault.php:381
1746
  msgid "Disconnect"
1747
  msgstr "সংযোগ বিচ্ছিন্ন করুন"
1748
 
1749
+ #: methods/updraftvault.php:373
1750
  msgid "Quota:"
1751
  msgstr "প্রাপ্য:"
1752
 
1753
+ #: methods/updraftvault.php:371
1754
  msgid "Vault owner"
1755
  msgstr "ভল্টের মালিক"
1756
 
1757
+ #: methods/updraftvault.php:371
1758
  msgid "Well done - there's nothing more needed to set up."
1759
  msgstr "চমৎকার - এখন আর আপনাকে কিছুই করতে হবে না।"
1760
 
1761
+ #: methods/updraftvault.php:371
1762
  msgid "This site is <strong>connected</strong> to UpdraftPlus Vault."
1763
  msgstr "এই সাইটটি UpdraftPlus Vault এ <strong>সংযুক্ত</strong>।"
1764
 
1765
+ #: methods/updraftvault.php:367
1766
  msgid "You are <strong>not connected</strong> to UpdraftPlus Vault."
1767
  msgstr "আপনি UpdraftPlus Vault এ<strong>সংযুক্ত নন</strong>।"
1768
 
1769
+ #: methods/updraftvault.php:343
1770
  msgid "Go here for help"
1771
  msgstr "সাহায্যের জন্য এখানে যান"
1772
 
1773
+ #: methods/updraftvault.php:338
1774
  msgid "E-mail"
1775
  msgstr "ই-মেইল"
1776
 
1777
+ #: methods/updraftvault.php:331 methods/updraftvault.php:346
1778
  msgid "Back..."
1779
  msgstr "ফিরে চলুন..."
1780
 
1781
+ #: methods/updraftvault.php:325
1782
  msgid "Subscriptions can be cancelled at any time."
1783
  msgstr "সাবস্ক্রিপশন যেকোনো সময় বাতিল করা সম্ভব"
1784
 
1785
+ #: methods/updraftvault.php:308 methods/updraftvault.php:314
1786
+ #: methods/updraftvault.php:320
1787
  msgid "%s per quarter"
1788
  msgstr "%s প্রতি তিন মাসে"
1789
 
1790
+ #: central/bootstrap.php:542 methods/updraftvault.php:298
1791
+ #: methods/updraftvault.php:328
1792
  msgid "Read more about it here."
1793
  msgstr "এইটি সম্পর্কে আরও পড়ুন এখানে।"
1794
 
1795
+ #: methods/updraftvault.php:298 methods/updraftvault.php:328
1796
  msgid "UpdraftPlus Vault is built on top of Amazon's world-leading data-centres, with redundant data storage to achieve 99.999999999% reliability."
1797
  msgstr "UpdraftPlus Vault অ্যামাজনের বিশ্বসেরা ডাটা সেন্টারে তৈরী। এছাড়া অতিরিক্ত ডাটার স্টোরেজের মাধ্যমে আছে ৯৯.৯৯৯৯৯৯৯৯৯% বিশ্বাসযোগ্যতা"
1798
 
1799
+ #: methods/updraftvault.php:294
1800
  msgid "Already purchased space?"
1801
  msgstr "জায়গা আগে থেকে কিনেছেন?"
1802
 
1803
+ #: methods/updraftvault.php:291
1804
  msgid "Show the options"
1805
  msgstr "অপশন দেখান"
1806
 
1807
+ #: methods/updraftvault.php:290
1808
  msgid "First time user?"
1809
  msgstr "প্রথম বার ব্যাবহারকারি?"
1810
 
1811
+ #: methods/updraftvault.php:287 methods/updraftvault.php:304
1812
  msgid "Press a button to get started."
1813
  msgstr "কাজ শুরু করতে যেকোনো একটি বোতাম চাপুন।"
1814
 
1815
+ #: methods/updraftvault.php:287 methods/updraftvault.php:304
1816
  msgid "UpdraftPlus Vault brings you storage that is <strong>reliable, easy to use and a great price</strong>."
1817
  msgstr "UpdraftPlus Vault আপনাকে স্টোরেজের সুবিধা দেয় যেটি <strong>বিশ্বাসযোগ্য, সহজে ব্যাবহারযোগ্য এবং চমৎকার দামে</strong>।"
1818
 
1819
+ #: methods/updraftvault.php:242
1820
  msgid "You have an UpdraftPlus Vault subscription that has not been renewed, and the grace period has expired. In a few days' time, your stored data will be permanently removed. If you do not wish this to happen, then you should renew as soon as possible."
1821
  msgstr ""
1822
 
1823
+ #: methods/updraftvault.php:239
1824
  msgid "You have an UpdraftPlus Vault subscription with overdue payment. You are within the few days of grace period before it will be suspended, and you will lose your quota and access to data stored within it. Please renew as soon as possible!"
1825
  msgstr "আপনার UpdraftPlus Vault এর পেমেন্ট নির্দিষ্ট সময় অতিক্রম করে ফেলেছে। এবং আপনার এ্যাকাউন্ট কিছু দিনের মাঝে বন্ধ করে দেয়া হবে, এবং আপনি আপনার প্রাপ্য এবং এর সকল তথ্য হারাবেন। দয়া করে তাড়াতাড়ি রিনিউ করুন!"
1826
 
1827
+ #: methods/updraftvault.php:236
1828
  msgid "Your UpdraftPlus Premium purchase is over a year ago. You should renew immediately to avoid losing the 12 months of free storage allowance that you get for being a current UpdraftPlus Premium customer."
1829
  msgstr "আপনার UpdraftPlus Premium কেনার এক বছর অতিক্রান্ত হয়ে গিয়েছে। আপনার এখনি তা নবিনীকরন করা উচিত আপনার ১২ মাসের বিনামূল্যের স্টোরেজ এর সুবিধা রক্ষার্থে যা আপনি UpdraftPlus Premium কাস্টমার হওয়ার জন্য পেয়ে থাকেন।"
1830
 
1831
+ #: methods/updraftvault.php:90
1832
  msgid "Updraft Vault"
1833
  msgstr "ভল্ট আপডেট করুন"
1834
 
1835
+ #: addons/azure.php:375 addons/googlecloud.php:729 methods/s3.php:1059
1836
  msgid "Delete failed:"
1837
  msgstr "ডিলিট ব্যর্থ:"
1838
 
1840
  msgid "The zip engine returned the message: %s."
1841
  msgstr "Zip engine টি এই বার্তা নিয়ে এসেছে: %s।"
1842
 
1843
+ #: addons/s3-enhanced.php:360
1844
  msgid "Without this permission, UpdraftPlus cannot delete backups - you should also set your 'retain' settings very high to prevent seeing deletion errors."
1845
  msgstr ""
1846
 
1847
+ #: addons/s3-enhanced.php:358
1848
  msgid "Allow deletion"
1849
  msgstr "ডিলিট করার অনুমতি দিন"
1850
 
1851
+ #: addons/s3-enhanced.php:356
1852
  msgid "Without this permission, you cannot directly download or restore using UpdraftPlus, and will instead need to visit the AWS website."
1853
  msgstr "এই অনুমতি ছাড়া আপনি সরাসরি UpdraftPlus ব্যাবহার করে ডাউনলোড বা রিস্টোর করতে পারবেন না, বরং আপনাকে AWS ওয়েবসাইটটি ভিজিট করতে হবে।"
1854
 
1855
+ #: addons/s3-enhanced.php:354
1856
  msgid "Allow download"
1857
  msgstr "ডাউনলোড এর অনুমতি দিন"
1858
 
1860
  msgid "If sending directly from site to site does not work for you, then there are three other methods - please try one of these instead."
1861
  msgstr ""
1862
 
1863
+ #: addons/migrator.php:1742 admin.php:699
1864
  msgid "You should check that the remote site is online, not firewalled, does not have security modules that may be blocking access, has UpdraftPlus version %s or later active and that the keys have been entered correctly."
1865
  msgstr ""
1866
 
1928
  msgid "Backup made by %s"
1929
  msgstr "ব্যাকআপ তৈরি করেছেন %s"
1930
 
1931
+ #: methods/addon-base-v2.php:177
1932
  msgid "This storage method does not allow downloading"
1933
  msgstr "এই স্টোরেজ পদ্ধতি ডাউনলোড করার অনুমতি দেয় না"
1934
 
1935
+ #: admin.php:3437
1936
  msgid "(backup set imported from remote location)"
1937
  msgstr "(ব্যাকআপ সেট দূরবর্তী অবস্থান থেকে আমদানি করা হয়েছে)"
1938
 
1939
+ #: templates/wp-admin/settings/existing-backups-table.php:82
1940
  msgid "Site"
1941
  msgstr "সাইট"
1942
 
1943
+ #: templates/wp-admin/settings/existing-backups-table.php:81
1944
  msgid "Backup sent to remote site - not available for download."
1945
  msgstr "ব্যাকআপ রিমোট সাইটের পাঠানো হয়েছে - ডাউনলোডের জন্য উপলব্ধ না"
1946
 
1952
  msgid "This backup set was not known by UpdraftPlus to be created by the current WordPress installation, but was either found in remote storage, or was sent from a remote site."
1953
  msgstr ""
1954
 
1955
+ #: addons/migrator.php:1770 admin.php:706
1956
  msgid "Testing connection..."
1957
  msgstr "কানেকশন পরীক্ষা করা হচ্ছে..."
1958
 
1959
+ #: admin.php:703
1960
  msgid "Deleting..."
1961
  msgstr "মুছে ফেলা হচ্ছে..."
1962
 
1963
+ #: admin.php:702
1964
  msgid "key name"
1965
  msgstr "চাবির(কি) নাম"
1966
 
1967
+ #: admin.php:700
1968
  msgid "Please give this key a name (e.g. indicate the site it is for):"
1969
  msgstr "এই চাবিকাঠির একটি নাম দিন (e.g. indicate the site it is for):"
1970
 
1971
+ #: admin.php:697
1972
  msgid "Creating..."
1973
  msgstr "তৈরি করা হচ্ছে..."
1974
 
1992
  msgid "Or, send a backup to another site"
1993
  msgstr "অথবা, ব্যাকআপ অন্য একটি সাইটে পাঠান"
1994
 
1995
+ #: addons/migrator.php:1937 admin.php:707
1996
  msgid "Send"
1997
  msgstr "পাঠান"
1998
 
1999
+ #: addons/migrator.php:1931 admin.php:698
2000
  msgid "Send to site:"
2001
  msgstr ""
2002
 
2060
  msgid "A \"migration\" is ultimately the same as a restoration - but using backup archives that you import from another site."
2061
  msgstr ""
2062
 
2063
+ #: addons/migrator.php:2180 admin.php:695
2064
  msgid "Add site"
2065
  msgstr "সাইট যুক্ত করুন"
2066
 
2067
+ #: admin.php:694
2068
  msgid "Adding..."
2069
  msgstr "যুক্ত করা হচ্ছে..."
2070
 
2096
  msgid "To import a backup set, go to the \"Existing Backups\" tab"
2097
  msgstr ""
2098
 
2099
+ #: admin.php:686 admin.php:712 admin.php:713
2100
  msgid "You have made changes to your settings, and not saved."
2101
  msgstr ""
2102
 
2103
+ #: addons/onedrive.php:998
2104
  msgid "N.B. %s is not case-sensitive."
2105
  msgstr ""
2106
 
2107
+ #: addons/onedrive.php:986
2108
  msgid "If OneDrive later shows you the message \"unauthorized_client\", then you did not enter a valid client ID here."
2109
  msgstr ""
2110
 
2111
+ #: addons/azure.php:531 addons/migrator.php:1757 addons/onedrive.php:970
2112
  msgid "For longer help, including screenshots, follow this link."
2113
  msgstr ""
2114
 
2115
+ #: addons/onedrive.php:970
2116
  msgid "Create OneDrive credentials in your OneDrive developer console."
2117
  msgstr ""
2118
 
2119
+ #: addons/onedrive.php:965
2120
  msgid "You must add the following as the authorised redirect URI in your OneDrive console (under \"API Settings\") when asked"
2121
  msgstr ""
2122
 
2123
+ #: addons/onedrive.php:938 addons/onedrive.php:940
2124
  msgid "%s authorisation failed:"
2125
  msgstr ""
2126
 
2127
+ #: addons/onedrive.php:795 addons/onedrive.php:985 addons/onedrive.php:989
2128
  msgid "OneDrive"
2129
  msgstr "OneDrive"
2130
 
2131
+ #: addons/onedrive.php:628
2132
  msgid "Please re-authorize the connection to your %s account."
2133
  msgstr ""
2134
 
2136
  msgid "configure it here"
2137
  msgstr "এটিকে এইখানে কনফিগার করুন"
2138
 
2139
+ #: addons/onedrive.php:621 methods/updraftvault.php:589
2140
  msgid "To remove the block, please go here."
2141
  msgstr "ব্লক সরাতে, এখানে যান।"
2142
 
2143
+ #: addons/s3-enhanced.php:447
2144
  msgid "Do remember to save your settings."
2145
  msgstr "আপনার নির্বাচিত বৈশিষ্ট্যগুলি সংরক্ষণ করতে ভুলবেন না।"
2146
 
2147
+ #: addons/s3-enhanced.php:447
2148
  msgid "You are now using a IAM user account to access your bucket."
2149
  msgstr ""
2150
 
2151
+ #: addons/s3-enhanced.php:352
2152
  msgid "S3 bucket"
2153
  msgstr "S3 bucket"
2154
 
2155
+ #: addons/s3-enhanced.php:342
2156
  msgid "China (Beijing) (restricted)"
2157
  msgstr "চায়না (বেইজিং) (সীমাবদ্ধ)"
2158
 
2159
+ #: addons/s3-enhanced.php:341
2160
  msgid "South America (Sao Paulo)"
2161
  msgstr "দক্ষিণ আমেরিকা (সাও পাওলো)"
2162
 
2163
+ #: addons/s3-enhanced.php:340
2164
  msgid "Asia Pacific (Tokyo)"
2165
  msgstr "এশিয়া প্যাসিফিক (টোকিও)"
2166
 
2167
+ #: addons/s3-enhanced.php:338
2168
  msgid "Asia Pacific (Sydney)"
2169
  msgstr "এশিয়া প্যাসিফিক (সিডনি)"
2170
 
2171
+ #: addons/s3-enhanced.php:337
2172
  msgid "Asia Pacific (Singapore)"
2173
  msgstr "এশিয়া প্যাসিফিক (সিঙ্গাপুর)"
2174
 
2175
+ #: addons/s3-enhanced.php:331
2176
  msgid "US Government West (restricted)"
2177
  msgstr "US Government West (সীমাবদ্ধ)"
2178
 
2179
+ #: addons/s3-enhanced.php:330
2180
  msgid "US West (N. California)"
2181
  msgstr "US West (N. California)"
2182
 
2183
+ #: addons/s3-enhanced.php:329
2184
  msgid "US West (Oregon)"
2185
  msgstr "US West (Oregon)"
2186
 
2187
+ #: addons/s3-enhanced.php:327
2188
  msgid "US Standard (default)"
2189
  msgstr "US Standard (default)"
2190
 
2191
+ #: addons/s3-enhanced.php:323
2192
  msgid "S3 storage region"
2193
  msgstr "S3 storage region"
2194
 
2195
+ #: addons/s3-enhanced.php:321
2196
  msgid "New IAM username"
2197
  msgstr ""
2198
 
2199
+ #: addons/s3-enhanced.php:320
2200
  msgid "Admin secret key"
2201
  msgstr ""
2202
 
2203
+ #: addons/s3-enhanced.php:319
2204
  msgid "Admin access key"
2205
  msgstr ""
2206
 
2207
+ #: addons/s3-enhanced.php:312
2208
  msgid "Then, these lower-powered access credentials can be used, instead of storing your administrative keys."
2209
  msgstr ""
2210
 
2211
+ #: addons/s3-enhanced.php:312
2212
  msgid "These will be used to create a new user and key pair with an IAM policy attached which will only allow it to access the indicated bucket."
2213
  msgstr ""
2214
 
2215
+ #: addons/s3-enhanced.php:312
2216
  msgid "Enter your administrative Amazon S3 access/secret keys (this needs to be a key pair with enough rights to create new users and buckets), and a new (unique) username for the new user and a bucket name."
2217
  msgstr ""
2218
 
2219
+ #: addons/s3-enhanced.php:389
2220
  msgid "Create new IAM user and S3 bucket"
2221
  msgstr ""
2222
 
2223
+ #: addons/s3-enhanced.php:302
2224
  msgid "Secret Key: %s"
2225
  msgstr "গোপন চাবি: %s"
2226
 
2227
+ #: addons/s3-enhanced.php:302
2228
  msgid "Access Key: %s"
2229
  msgstr "অ্যাক্সেস চাবি: %s"
2230
 
2231
+ #: addons/s3-enhanced.php:290 addons/s3-enhanced.php:292
2232
  msgid "Failed to apply User Policy"
2233
  msgstr ""
2234
 
2235
+ #: addons/s3-enhanced.php:231 addons/s3-enhanced.php:235
2236
  msgid "Operation to create user Access Key failed"
2237
  msgstr ""
2238
 
2239
+ #: addons/s3-enhanced.php:229
2240
  msgid "Failed to create user Access Key"
2241
  msgstr ""
2242
 
2243
+ #: addons/s3-enhanced.php:209 addons/s3-enhanced.php:212
2244
+ #: addons/s3-enhanced.php:216
2245
  msgid "IAM operation failed