diff --git a/sites/all/modules/contrib/admin/nodeformcols/nfcbiblio.info b/sites/all/modules/contrib/admin/nodeformcols/nfcbiblio.info
index 71b112a5..4e4bd005 100644
--- a/sites/all/modules/contrib/admin/nodeformcols/nfcbiblio.info
+++ b/sites/all/modules/contrib/admin/nodeformcols/nfcbiblio.info
@@ -5,9 +5,9 @@ dependencies[] = biblio
core = 7.x
package = Node form columns
-; Information added by Drupal.org packaging script on 2014-01-15
-version = "7.x-1.0"
+; Information added by Drupal.org packaging script on 2016-09-16
+version = "7.x-1.1"
core = "7.x"
project = "nodeformcols"
-datestamp = "1389798806"
+datestamp = "1474036440"
diff --git a/sites/all/modules/contrib/admin/nodeformcols/nfcbiblio.module b/sites/all/modules/contrib/admin/nodeformcols/nfcbiblio.module
index e5502c53..b7dcad38 100644
--- a/sites/all/modules/contrib/admin/nodeformcols/nfcbiblio.module
+++ b/sites/all/modules/contrib/admin/nodeformcols/nfcbiblio.module
@@ -19,7 +19,7 @@ function nfcbiblio_nodeformcols_variants_alter(&$variants, $type) {
WHERE tid >= :tid
AND visible = :visible
ORDER BY weight ASC', array(':tid' => 0, ':visible' => 1));
- while ($option = db_fetch_object($res)) {
+ while ($option = $res->fetchObject()) {
$variants[$option->tid] = $option->name;
}
}
@@ -35,8 +35,8 @@ function _nfcbiblio_top_visible_type() {
return db_query_range("SELECT tid
FROM {biblio_types}
WHERE visible = :visible
- AND tid> = :tid>
- ORDER BY weight ASC", array(':visible' => 1, ':tid>' => 0))->fetchField();
+ AND tid >= :tid
+ ORDER BY weight ASC", 0, 1, array(':visible' => 1, ':tid' => 0))->fetchField();
}
/**
diff --git a/sites/all/modules/contrib/admin/nodeformcols/nfccaptcha.info b/sites/all/modules/contrib/admin/nodeformcols/nfccaptcha.info
index e0323c7b..73067437 100644
--- a/sites/all/modules/contrib/admin/nodeformcols/nfccaptcha.info
+++ b/sites/all/modules/contrib/admin/nodeformcols/nfccaptcha.info
@@ -5,9 +5,9 @@ dependencies[] = captcha
core = 7.x
package = Node form columns
-; Information added by Drupal.org packaging script on 2014-01-15
-version = "7.x-1.0"
+; Information added by Drupal.org packaging script on 2016-09-16
+version = "7.x-1.1"
core = "7.x"
project = "nodeformcols"
-datestamp = "1389798806"
+datestamp = "1474036440"
diff --git a/sites/all/modules/contrib/admin/nodeformcols/nodeformcols.admin.inc b/sites/all/modules/contrib/admin/nodeformcols/nodeformcols.admin.inc
index 79d422b8..05dc54cc 100644
--- a/sites/all/modules/contrib/admin/nodeformcols/nodeformcols.admin.inc
+++ b/sites/all/modules/contrib/admin/nodeformcols/nodeformcols.admin.inc
@@ -21,6 +21,20 @@ function _nodeformcols_get_node_type_form($type) {
);
$fs += form_state_defaults();
$nf = drupal_retrieve_form($nfid, $fs);
+ // Add in field_groups if they exist.
+ if (module_exists('field_group') && !empty($nf['#groups'])) {
+ foreach ($nf['#groups'] as $group) {
+ $group_title = $group->label . ' (' . t('Field group') . ')';
+ $nf[$group->group_name] = array(
+ '#group' => $group,
+ '#weight' => $group->weight,
+ '#title' => $group_title,
+ );
+ foreach ($nf['#groups'][$group->group_name]->children as $group_field) {
+ unset($nf[$group_field]);
+ }
+ }
+ }
drupal_prepare_form($nfid, $nf, $fs);
drupal_process_form($nfid, $nf, $fs);
return $nf;
@@ -35,8 +49,10 @@ function nodeformcols_update_placements($type, $variant, &$placements) {
$field = $form[$key];
if (
substr($key, 0, 8) == 'section_' ||
+ // Exclude hidden fields.
(isset($field['#type']) && in_array($field['#type'], array('value', 'hidden', 'token'))) ||
- (isset($field['#type'], $field['#group']) && $field['#type'] === 'fieldset')
+ // Exclude the vertical tabs.
+ (isset($field['#group']) && $field['#group'] == 'additional_settings')
) {
// Remove placements that meet exclusion rules.
if (isset($placements[$key])) {
@@ -128,7 +144,7 @@ function nodeformcols_configuration_form($form, $form_state, $node_type, $varian
$form['variant'] = array(
'#type' => 'item',
'#title' => t('Select a form variant'),
- '#value' => theme('links', array('links' => $variant_links)),
+ '#markup' => theme('links', array('links' => $variant_links)),
);
}
diff --git a/sites/all/modules/contrib/admin/nodeformcols/nodeformcols.info b/sites/all/modules/contrib/admin/nodeformcols/nodeformcols.info
index 720563a0..c0585e9a 100644
--- a/sites/all/modules/contrib/admin/nodeformcols/nodeformcols.info
+++ b/sites/all/modules/contrib/admin/nodeformcols/nodeformcols.info
@@ -3,9 +3,9 @@ description = Separates the node forms into two columns and a footer.
core = 7.x
package = Node form columns
-; Information added by Drupal.org packaging script on 2014-01-15
-version = "7.x-1.0"
+; Information added by Drupal.org packaging script on 2016-09-16
+version = "7.x-1.1"
core = "7.x"
project = "nodeformcols"
-datestamp = "1389798806"
+datestamp = "1474036440"
diff --git a/sites/all/modules/contrib/admin/nodeformcols/nodeformcols.module b/sites/all/modules/contrib/admin/nodeformcols/nodeformcols.module
index 793edcf1..245e5aa7 100644
--- a/sites/all/modules/contrib/admin/nodeformcols/nodeformcols.module
+++ b/sites/all/modules/contrib/admin/nodeformcols/nodeformcols.module
@@ -160,8 +160,8 @@ function template_preprocess_node_form(&$aVars) {
}
}
- foreach ($has_elements as $name => $has) {
- if ($has) {
+ foreach ($regions as $name => $data) {
+ if (!empty($has_elements[$name])) {
$class[] = 'node-form-has-region-' . $name;
$form['nodeformcols_region_' . $name] = $regions[$name];
}
@@ -191,8 +191,8 @@ function nodeformcols_node_type_update($info) {
$base = 'nodeformscols_field_placements_' . $info->old_type;
$new_base = 'nodeformscols_field_placements_' . $info->type;
$result = db_select('variable')
- ->condition('name', $base . '%', 'LIKE')
->fields('variable', array('name'))
+ ->condition('name', $base . '%', 'LIKE')
->execute();
foreach ($result as $row) {
$value = variable_get($row->name, NULL);
diff --git a/sites/all/modules/contrib/content/diff/DiffEngine.php b/sites/all/modules/contrib/content/diff/DiffEngine.php
index 04234b76..07d3554e 100644
--- a/sites/all/modules/contrib/content/diff/DiffEngine.php
+++ b/sites/all/modules/contrib/content/diff/DiffEngine.php
@@ -312,7 +312,8 @@ class _DiffEngine {
}
$matches = $ymatches[$line];
reset($matches);
- while (list ($junk, $y) = each($matches)) {
+ while ($y = current($matches)) {
+ next($matches);
if (empty($this->in_seq[$y])) {
$k = $this->_lcs_pos($y);
USE_ASSERTS && assert($k > 0);
@@ -320,7 +321,8 @@ class _DiffEngine {
break;
}
}
- while (list ($junk, $y) = each($matches)) {
+ while ($y = current($matches)) {
+ next($matches);
if ($y > $this->seq[$k-1]) {
USE_ASSERTS && assert($y < $this->seq[$k]);
// Optimization: this is a common case:
@@ -454,7 +456,7 @@ class _DiffEngine {
$i = 0;
$j = 0;
- USE_ASSERTS && assert('sizeof($lines) == sizeof($changed)');
+ USE_ASSERTS && assert(sizeof($lines) == sizeof($changed));
$len = sizeof($lines);
$other_len = sizeof($other_changed);
@@ -474,7 +476,7 @@ class _DiffEngine {
$j++;
}
while ($i < $len && ! $changed[$i]) {
- USE_ASSERTS && assert('$j < $other_len && ! $other_changed[$j]');
+ USE_ASSERTS && assert($j < $other_len && ! $other_changed[$j]);
$i++;
$j++;
while ($j < $other_len && $other_changed[$j]) {
@@ -510,11 +512,11 @@ class _DiffEngine {
while ($start > 0 && $changed[$start - 1]) {
$start--;
}
- USE_ASSERTS && assert('$j > 0');
+ USE_ASSERTS && assert($j > 0);
while ($other_changed[--$j]) {
continue;
}
- USE_ASSERTS && assert('$j >= 0 && !$other_changed[$j]');
+ USE_ASSERTS && assert($j >= 0 && !$other_changed[$j]);
}
/*
@@ -537,7 +539,7 @@ class _DiffEngine {
while ($i < $len && $changed[$i]) {
$i++;
}
- USE_ASSERTS && assert('$j < $other_len && ! $other_changed[$j]');
+ USE_ASSERTS && assert($j < $other_len && ! $other_changed[$j]);
$j++;
if ($j < $other_len && $other_changed[$j]) {
$corresponding = $i;
@@ -555,11 +557,11 @@ class _DiffEngine {
while ($corresponding < $i) {
$changed[--$start] = 1;
$changed[--$i] = 0;
- USE_ASSERTS && assert('$j > 0');
+ USE_ASSERTS && assert($j > 0);
while ($other_changed[--$j]) {
continue;
}
- USE_ASSERTS && assert('$j >= 0 && !$other_changed[$j]');
+ USE_ASSERTS && assert($j >= 0 && !$other_changed[$j]);
}
}
}
@@ -742,8 +744,8 @@ class MappedDiff extends Diff {
* have the same number of elements as $to_lines.
*/
function __construct($from_lines, $to_lines, $mapped_from_lines, $mapped_to_lines) {
- assert(sizeof($from_lines) == sizeof($mapped_from_lines));
- assert(sizeof($to_lines) == sizeof($mapped_to_lines));
+ USE_ASSERTS && assert(sizeof($from_lines) == sizeof($mapped_from_lines));
+ USE_ASSERTS && assert(sizeof($to_lines) == sizeof($mapped_to_lines));
parent::__construct($mapped_from_lines, $mapped_to_lines);
@@ -1000,7 +1002,7 @@ class _HWLDF_WordAccumulator {
$this->_flushLine($tag);
$word = drupal_substr($word, 1);
}
- assert(!strstr($word, "\n"));
+ USE_ASSERTS && assert(!strstr($word, "\n"));
$this->_group .= $word;
}
}
diff --git a/sites/all/modules/contrib/content/diff/diff.admin.inc b/sites/all/modules/contrib/content/diff/diff.admin.inc
index 8c5202f2..1a61ba1d 100644
--- a/sites/all/modules/contrib/content/diff/diff.admin.inc
+++ b/sites/all/modules/contrib/content/diff/diff.admin.inc
@@ -112,7 +112,12 @@ function diff_admin_field_overview() {
'#markup' => '
' . t('This table provides a summary of the field type support found on the system. It is recommended that you use global settings whenever possible to configure field comparison settings.') . '
',
);
- $header = array(t('Type'), t('Module'), t('Operations'));
+ $header = array(
+ t('Type'),
+ t('Machine name'),
+ t('Module'),
+ t('Operations'),
+ );
$rows = array();
// Skip field types which have no widget types.
@@ -129,10 +134,8 @@ function diff_admin_field_overview() {
foreach ($field_types as $field_name => $field_type) {
if (!empty($widgets[$field_name])) {
$row = array();
- $row[] = t('@field_label (%field_type)', array(
- '@field_label' => $field_type['label'],
- '%field_type' => $field_name,
- ));
+ $row[] = $field_type['label'];
+ $row[] = $field_name;
$row[] = $field_type['module'];
$row[] = l(t('Global settings'), 'admin/config/content/diff/fields/' . $field_name);
$rows[] = $row;
diff --git a/sites/all/modules/contrib/content/diff/diff.api.php b/sites/all/modules/contrib/content/diff/diff.api.php
index e2b6f848..f85beb7e 100644
--- a/sites/all/modules/contrib/content/diff/diff.api.php
+++ b/sites/all/modules/contrib/content/diff/diff.api.php
@@ -108,6 +108,22 @@ function hook_entity_diff($old_entity, $new_entity, $context) {
* @see hook_entity_diff()
*/
function hook_entity_diff_alter(&$entity_diffs, $context) {
+ if ($context['entity_type'] == 'node') {
+ $old_entity = $context['old_entity'];
+ $new_entity = $context['new_entity'];
+ $entity_diffs['custom_vid'] = array(
+ '#name' => t('Second VID'),
+ '#old' => array($old_entity->vid),
+ '#new' => array($new_entity->vid),
+ '#weight' => 5,
+ );
+ $entity_diffs['custom_log'] = array(
+ '#name' => t('Second log'),
+ '#old' => array($old_entity->log),
+ '#new' => array($new_entity->log),
+ '#weight' => 6,
+ );
+ }
}
/**
diff --git a/sites/all/modules/contrib/content/diff/diff.info b/sites/all/modules/contrib/content/diff/diff.info
index 77b73168..4bc64e40 100644
--- a/sites/all/modules/contrib/content/diff/diff.info
+++ b/sites/all/modules/contrib/content/diff/diff.info
@@ -5,9 +5,8 @@ configure = admin/config/content/diff
files[] = DiffEngine.php
-; Information added by Drupal.org packaging script on 2016-12-20
-version = "7.x-3.3"
+; Information added by Drupal.org packaging script on 2018-11-05
+version = "7.x-3.4"
core = "7.x"
project = "diff"
-datestamp = "1482211686"
-
+datestamp = "1541401388"
diff --git a/sites/all/modules/contrib/content/diff/diff.install b/sites/all/modules/contrib/content/diff/diff.install
index 9d8b585d..6af5801a 100644
--- a/sites/all/modules/contrib/content/diff/diff.install
+++ b/sites/all/modules/contrib/content/diff/diff.install
@@ -133,9 +133,14 @@ function diff_update_7306() {
}
/**
- * Grants access to the Diff "View Changes" button permission to all users.
+ * Grants access to the Diff "View Changes" button permission to all users
+ * if the Diff module is enabled. You need to manually update the permissions
+ * if the module is currently disabled.
*/
function diff_update_7307() {
- user_role_grant_permissions(DRUPAL_ANONYMOUS_RID, array('diff view changes'));
- user_role_grant_permissions(DRUPAL_AUTHENTICATED_RID, array('diff view changes'));
+ // The update hooks run even if disabled, and this throws an error.
+ if (module_exists('diff')) {
+ user_role_grant_permissions(DRUPAL_ANONYMOUS_RID, array('diff view changes'));
+ user_role_grant_permissions(DRUPAL_AUTHENTICATED_RID, array('diff view changes'));
+ }
}
diff --git a/sites/all/modules/contrib/content/diff/diff.module b/sites/all/modules/contrib/content/diff/diff.module
index d3050e3b..a8193c0b 100644
--- a/sites/all/modules/contrib/content/diff/diff.module
+++ b/sites/all/modules/contrib/content/diff/diff.module
@@ -475,7 +475,8 @@ function diff_node_form_build_preview_changes($form, &$form_state) {
$node = node_form_submit_build_node($form, $form_state);
// Create diff of old node and edited node.
- $rows = _diff_body_rows($old_node, $node);
+ $state = variable_get('diff_default_state_node', 'raw');
+ $rows = _diff_body_rows($old_node, $node, $state);
$header = _diff_default_header(t('Original'), t('Changes'));
$changes = theme('table__diff__preview', array(
diff --git a/sites/all/modules/contrib/dev/elysia_cron/README.txt b/sites/all/modules/contrib/dev/elysia_cron/README.txt
index e5f5d56c..a8c8f544 100644
--- a/sites/all/modules/contrib/dev/elysia_cron/README.txt
+++ b/sites/all/modules/contrib/dev/elysia_cron/README.txt
@@ -153,6 +153,8 @@ Options:
--verbose, but without enabling drush
verbose mode)
--ignore-disable run channels/tasks even if disabled
+ --ignore-maintenance run channels/tasks even if
+ maintenance mode is enabled
--ignore-running run channels/tasks even
if already running
--ignore-time run channels/tasks even if not ready
diff --git a/sites/all/modules/contrib/dev/elysia_cron/elysia_cron.admin.inc b/sites/all/modules/contrib/dev/elysia_cron/elysia_cron.admin.inc
index ba6251d8..74288204 100644
--- a/sites/all/modules/contrib/dev/elysia_cron/elysia_cron.admin.inc
+++ b/sites/all/modules/contrib/dev/elysia_cron/elysia_cron.admin.inc
@@ -10,6 +10,9 @@
*
* @return array
* Renderable array.
+ *
+ * @throws Exception
+ * Exceptions from theme().
*/
function elysia_cron_admin_page() {
$aoutput = array();
@@ -151,10 +154,26 @@ function elysia_cron_admin_page() {
$output .= ' ';
$legend_icons = array(
- 'idle' => theme('image', array('path' => $ipath . 'idle.png')),
- 'waiting' => theme('image', array('path' => $ipath . 'waiting.png')),
- 'running' => theme('image', array('path' => $ipath . 'running.png')),
- 'disabled' => theme('image', array('path' => $ipath . 'disabled.png')),
+ 'idle' => theme('image', array(
+ 'path' => $ipath . 'idle.png',
+ 'alt' => t('Idle'),
+ 'title' => t('Idle'),
+ )),
+ 'waiting' => theme('image', array(
+ 'path' => $ipath . 'waiting.png',
+ 'alt' => t('Waiting for execution'),
+ 'title' => t('Waiting for execution'),
+ )),
+ 'running' => theme('image', array(
+ 'path' => $ipath . 'running.png',
+ 'alt' => t('Running'),
+ 'title' => t('Running'),
+ )),
+ 'disabled' => theme('image', array(
+ 'path' => $ipath . 'disabled.png',
+ 'alt' => t('Disabled'),
+ 'title' => t('Disabled'),
+ )),
);
$output .= theme('table', array(
'header' => array(t('Legend')),
@@ -187,6 +206,7 @@ function elysia_cron_settings_form() {
elysia_cron_initialize();
$form = array();
+ $form['#attached']['js'][] = drupal_get_path('module', 'elysia_cron') . '/js/elysia_cron.js';
$form['prefix_1'] = array(
'#type' => 'fieldset',
@@ -429,14 +449,6 @@ EOT
'#collapsible' => TRUE,
);
- $jobchannels = array(
- '#title' => t('Job channel associations'),
- '#description' => t('Leave empty for default channel'),
- '#type' => 'fieldset',
- '#collapsible' => TRUE,
- '#collapsed' => TRUE,
- );
-
foreach ($_elysia_cron_settings_by_channel as $channel => $cconf) {
foreach ($cconf as $job => $conf) {
if ($job != '#data' && empty($conf['expression'])) {
@@ -546,12 +558,6 @@ EOT
function theme_elysia_cron_settings_form(array &$variables) {
$form = &$variables['form'];
- $output = '';
-
$coutput = '
';
$i = 0;
@@ -579,7 +585,8 @@ function theme_elysia_cron_settings_form(array &$variables) {
$form['single_job'][$c]['_elysia_cron_seljob_rule_' . $key]['#suffix'] = '';
$form['single_job'][$c]['_elysia_cron_seljob_rule_' . $key]['#title'] = NULL;
$form['single_job'][$c]['_elysia_cron_seljob_rule_' . $key]['#description'] = NULL;
- $form['single_job'][$c]['_elysia_cron_seljob_rule_' . $key]['#attributes']['onchange'] = '_ec_select(\'' . $key . '\', this)';
+ $form['single_job'][$c]['_elysia_cron_seljob_rule_' . $key]['#attributes']['class'][] = 'ec-select';
+ $form['single_job'][$c]['_elysia_cron_seljob_rule_' . $key]['#attributes']['data-key'] = $key;
$form['single_job'][$c]['_elysia_cron_job_weight_' . $key]['#title'] = NULL;
$form['single_job'][$c]['_elysia_cron_job_weight_' . $key]['#description'] = NULL;
@@ -631,7 +638,7 @@ function theme_elysia_cron_settings_form(array &$variables) {
$form['channels']['#children'] = $coutput;
- return $output . drupal_render_children($form);
+ return drupal_render_children($form);
}
/**
diff --git a/sites/all/modules/contrib/dev/elysia_cron/elysia_cron.ctools.inc b/sites/all/modules/contrib/dev/elysia_cron/elysia_cron.ctools.inc
index 776a9285..73124850 100644
--- a/sites/all/modules/contrib/dev/elysia_cron/elysia_cron.ctools.inc
+++ b/sites/all/modules/contrib/dev/elysia_cron/elysia_cron.ctools.inc
@@ -5,6 +5,8 @@
* Ctools integration.
*/
+define('ELYSIA_CRON_CTOOLS_LINEBREAK', "\n");
+
/**
* Get default cron jobs.
*
@@ -203,13 +205,13 @@ function elysia_cron_ctools_export_callback($object, $indent) {
$schema = ctools_export_get_schema($table);
$identifier = $schema['export']['identifier'];
- $output = $indent . '$' . $identifier . ' = new ' . get_class($object) . ';' . PHP_EOL;
+ $output = $indent . '$' . $identifier . ' = new ' . get_class($object) . '();' . ELYSIA_CRON_CTOOLS_LINEBREAK;
if ($schema['export']['can disable']) {
- $output .= $indent . '$' . $identifier . '->disabled = FALSE; /* Edit this to true to make a default ' . $identifier . ' disabled initially */' . PHP_EOL;
+ $output .= $indent . '$' . $identifier . '->disabled = FALSE; /* Edit this to true to make a default ' . $identifier . ' disabled initially */' . ELYSIA_CRON_CTOOLS_LINEBREAK;
}
if (!empty($schema['export']['api']['current_version'])) {
- $output .= $indent . '$' . $identifier . '->api_version = ' . $schema['export']['api']['current_version'] . ';' . PHP_EOL;
+ $output .= $indent . '$' . $identifier . '->api_version = ' . $schema['export']['api']['current_version'] . ';' . ELYSIA_CRON_CTOOLS_LINEBREAK;
}
$fields = $schema['fields'];
@@ -222,7 +224,7 @@ function elysia_cron_ctools_export_callback($object, $indent) {
if (!is_null($value) && $info['type'] == 'int') {
$value = (isset($info['size']) && $info['size'] == 'tiny') ? (bool) $value : (int) $value;
}
- $output .= $indent . '$' . $identifier . '->' . $field . ' = ' . ctools_var_export($value, $indent) . ';' . PHP_EOL;
+ $output .= $indent . '$' . $identifier . '->' . $field . ' = ' . ctools_var_export($value, $indent) . ';' . ELYSIA_CRON_CTOOLS_LINEBREAK;
}
return $output;
@@ -253,19 +255,19 @@ function elysia_cron_ctools_to_hook_code(array $names, $name) {
$objects = array_intersect_key($objects, array_flip($names));
if ($objects) {
- $output = '/**' . PHP_EOL;
- $output .= " * Implementation of hook_{$export['default hook']}()" . PHP_EOL;
- $output .= ' */' . PHP_EOL;
- $output .= "function " . $name . "_{$export['default hook']}() {" . PHP_EOL;
- $output .= " \${$export['identifier']}s = array();" . PHP_EOL . PHP_EOL;
+ $output = '/**' . ELYSIA_CRON_CTOOLS_LINEBREAK;
+ $output .= " * Implementation of hook_{$export['default hook']}()" . ELYSIA_CRON_CTOOLS_LINEBREAK;
+ $output .= ' */' . ELYSIA_CRON_CTOOLS_LINEBREAK;
+ $output .= "function " . $name . "_{$export['default hook']}() {" . ELYSIA_CRON_CTOOLS_LINEBREAK;
+ $output .= " \${$export['identifier']}s = array();" . ELYSIA_CRON_CTOOLS_LINEBREAK . ELYSIA_CRON_CTOOLS_LINEBREAK;
foreach ($objects as $object) {
$output .= ctools_export_crud_export($table, $object, ' ');
- $output .= " \${$export['identifier']}s['" . check_plain($object->{$export['key']}) . "'] = \${$export['identifier']};" . PHP_EOL . PHP_EOL;
+ $output .= " \${$export['identifier']}s['" . check_plain($object->{$export['key']}) . "'] = \${$export['identifier']};" . ELYSIA_CRON_CTOOLS_LINEBREAK . ELYSIA_CRON_CTOOLS_LINEBREAK;
}
- $output .= " return \${$export['identifier']}s;" . PHP_EOL;
- $output .= '}' . PHP_EOL;
+ $output .= " return \${$export['identifier']}s;" . ELYSIA_CRON_CTOOLS_LINEBREAK;
+ $output .= '}' . ELYSIA_CRON_CTOOLS_LINEBREAK;
}
return $output;
diff --git a/sites/all/modules/contrib/dev/elysia_cron/elysia_cron.drush.inc b/sites/all/modules/contrib/dev/elysia_cron/elysia_cron.drush.inc
index f162552e..0c6e372f 100644
--- a/sites/all/modules/contrib/dev/elysia_cron/elysia_cron.drush.inc
+++ b/sites/all/modules/contrib/dev/elysia_cron/elysia_cron.drush.inc
@@ -63,7 +63,9 @@ function elysia_cron_drush_command() {
'quiet' => 'suppress all output',
'verbose' => 'enable extended output',
'elysia-cron-verbose' => 'enable extended output (the same as --verbose, but without enabling drush verbose mode)',
+ 'force' => 'run channels/tasks even if it disabled/not ready for execution/already running',
'ignore-disable' => 'run channels/tasks even if disabled',
+ 'ignore-maintenance' => 'run channels/tasks even if maintenance mode is enabled',
'ignore-time' => 'run channels/tasks even if not ready for execution',
'ignore-running' => 'run channels/tasks even if already running',
),
@@ -79,8 +81,10 @@ function elysia_cron_drush_command() {
function drush_elysia_cron_run_wrapper($op = FALSE, $target = FALSE) {
global $_elysia_cron_drush;
+ $force = drush_get_option('force', FALSE);
if (variable_get('maintenance_mode', FALSE)) {
- if (!variable_get('elysia_cron_run_maintenance', FALSE)) {
+ $ignore_maintenance = $force || drush_get_option('ignore-maintenance', FALSE);
+ if (!$ignore_maintenance && !variable_get('elysia_cron_run_maintenance', FALSE)) {
drush_set_error('Cron run is not allowed in maintenance mode');
return;
}
@@ -91,7 +95,16 @@ function drush_elysia_cron_run_wrapper($op = FALSE, $target = FALSE) {
if (!$verbose) {
$verbose = drush_get_option('elysia-cron-verbose', FALSE);
}
- $_elysia_cron_drush = $quiet ? 1 : !$verbose ? 2 : 3;
+
+ if ($quiet) {
+ $_elysia_cron_drush = 1;
+ }
+ elseif ($verbose) {
+ $_elysia_cron_drush = 3;
+ }
+ else {
+ $_elysia_cron_drush = 2;
+ }
switch ($op) {
case 'list':
@@ -140,13 +153,18 @@ function drush_elysia_cron_run_wrapper($op = FALSE, $target = FALSE) {
break;
case 'run':
+ // Collect options.
+ $ignore_disable = $force || drush_get_option('ignore-disable', FALSE);
+ $ignore_time = $force || drush_get_option('ignore-time', FALSE);
+ $ignore_running = $force || drush_get_option('ignore-running', FALSE);
+
if (empty($target)) {
- elysia_cron_run(FALSE, drush_get_option('ignore-disable', FALSE), drush_get_option('ignore-time', FALSE), drush_get_option('ignore-running', FALSE));
+ elysia_cron_run(FALSE, $ignore_disable, $ignore_time, $ignore_running);
}
elseif (strpos($target, '@') === 0) {
elysia_cron_initialize();
if (elysia_cron_channel_exists(substr($target, 1))) {
- elysia_cron_run_channel(substr($target, 1), drush_get_option('ignore-disable', FALSE), drush_get_option('ignore-time', FALSE), drush_get_option('ignore-running', FALSE));
+ elysia_cron_run_channel(substr($target, 1), $ignore_disable, $ignore_time, $ignore_running);
}
else {
drush_set_error('Channel ' . substr($target, 1) . ' does not exists');
@@ -155,7 +173,7 @@ function drush_elysia_cron_run_wrapper($op = FALSE, $target = FALSE) {
else {
elysia_cron_initialize();
if (elysia_cron_job_exists($target)) {
- elysia_cron_run_job($target, drush_get_option('ignore-disable', FALSE), drush_get_option('ignore-time', FALSE), drush_get_option('ignore-running', FALSE));
+ elysia_cron_run_job($target, $ignore_disable, $ignore_time, $ignore_running);
}
else {
drush_set_error('Job ' . $target . ' does not exists');
diff --git a/sites/all/modules/contrib/dev/elysia_cron/elysia_cron.info b/sites/all/modules/contrib/dev/elysia_cron/elysia_cron.info
index 6d9457da..e01c7e21 100644
--- a/sites/all/modules/contrib/dev/elysia_cron/elysia_cron.info
+++ b/sites/all/modules/contrib/dev/elysia_cron/elysia_cron.info
@@ -4,9 +4,8 @@ core = 7.x
configure = admin/config/system/cron
-; Information added by Drupal.org packaging script on 2016-11-23
-version = "7.x-2.4"
+; Information added by Drupal.org packaging script on 2019-04-24
+version = "7.x-2.7"
core = "7.x"
project = "elysia_cron"
-datestamp = "1479877741"
-
+datestamp = "1556076200"
diff --git a/sites/all/modules/contrib/dev/elysia_cron/elysia_cron.module b/sites/all/modules/contrib/dev/elysia_cron/elysia_cron.module
index d245ac34..7342bfc5 100644
--- a/sites/all/modules/contrib/dev/elysia_cron/elysia_cron.module
+++ b/sites/all/modules/contrib/dev/elysia_cron/elysia_cron.module
@@ -64,14 +64,15 @@ function elysia_cron_menu() {
*/
function elysia_cron_menu_alter(&$items) {
// Override default cron page.
- $items['admin/config/system/cron'] = array(
- 'title' => 'Cron Settings',
- 'description' => 'View and manage cron table',
- 'page callback' => 'elysia_cron_admin_page',
- 'access callback' => 'elysia_cron_access',
- 'access arguments' => array('view elysia_cron'),
- 'file' => NULL,
- ) + $items['admin/config/system/cron'];
+ $items['admin/config/system/cron']['title'] = 'Cron Settings';
+ $items['admin/config/system/cron']['description'] = 'View and manage cron table';
+ $items['admin/config/system/cron']['page callback'] = 'elysia_cron_admin_page';
+ $items['admin/config/system/cron']['access callback'] = 'elysia_cron_access';
+ $items['admin/config/system/cron']['access arguments'] = array('view elysia_cron');
+ $items['admin/config/system/cron']['file'] = NULL;
+
+ $items['admin/reports/status/run-cron']['page callback'] = 'elysia_cron_run_manually';
+ $items['admin/reports/status/run-cron']['file'] = NULL;
}
/**
@@ -113,7 +114,7 @@ function elysia_cron_permission() {
'administer elysia_cron' => array(
'title' => t('Administer elysia cron'),
'description' => t('Perform changes to cron jobs timings, disable cron or single jobs and access cron execution statistics'),
- 'restrict access' => TRUE,
+ 'restrict access' => TRUE,
),
'execute elysia_cron' => array(
'title' => t('Execute elysia cron jobs'),
@@ -143,6 +144,12 @@ function elysia_cron_exit() {
function elysia_cron_cron() {
global $_elysia_cron_exit_phase, $_elysia_cron_drush;
+ // First cron run is executed in standard drupal way.
+ // This is to enable the use of install profiles.
+ if (variable_get('cron_last', 0) <= variable_get('install_time', 0)) {
+ return;
+ }
+
// If cron has been executed via "drush core-cron" or any other custom drush
// command then we run internal cron handler which is designed to handle
// cron executions from drush.
@@ -150,11 +157,6 @@ function elysia_cron_cron() {
elysia_cron_drush_invoke();
}
- // First cron run is executed in standard drupal way.
- // This is to enable the use of install profiles.
- if (variable_get('cron_last', 0) <= variable_get('install_time', 0)) {
- return;
- }
// If the path is 'admin/*', or if the user is not anonymous,
// this is a manual cron run (probably by admin/logs/status),
// but not if we are in the exit phase (= this a "poormanscron" run).
@@ -187,7 +189,7 @@ function elysia_cron_cron() {
variable_set('cron_last', time());
}
- exit();
+ drupal_exit();
}
/**
@@ -238,8 +240,11 @@ $GLOBALS['_ec_variables_allowed'] = array(
*/
function _ec_variable_init() {
global $_ec_variables, $_ec_variables_allowed;
+
$_ec_variables = array();
- $_ec_variables = array_map('unserialize', db_query("SELECT name, value FROM {variable} where name like '" . implode("' or name like '", $_ec_variables_allowed) . "'")->fetchAllKeyed());
+ foreach ($_ec_variables_allowed as $name) {
+ $_ec_variables[$name] = variable_get($name);
+ }
}
/**
@@ -925,7 +930,7 @@ function elysia_cron_debug($message, $vars = array(), $type = WATCHDOG_NOTICE) {
if ($type < WATCHDOG_NOTICE || variable_get('elysia_cron_debug_messages', 0)) {
watchdog('cron', $message, $vars, $type);
}
- if (!empty($_elysia_cron_drush) && $_elysia_cron_drush >= 2 && ($type >= WATCHDOG_NOTICE || !drush_get_option("verbose", FALSE))) {
+ if (!empty($_elysia_cron_drush) && $_elysia_cron_drush >= 2 && ($type >= WATCHDOG_NOTICE || drush_get_option("verbose", FALSE))) {
if ($type >= WATCHDOG_NOTICE) {
drush_print(strip_tags(dt($message, $vars)));
}
@@ -1143,7 +1148,7 @@ function elysia_cron_prepare_run($manual_run, $start = TRUE) {
// Try to allocate enough time to run all the hook_cron implementations.
if (!ini_get('safe_mode') && _elysia_cron_function_available('set_time_limit')) {
- set_time_limit(variable_get('elysia_cron_time_limit', 240));
+ @set_time_limit(variable_get('elysia_cron_time_limit', 240));
}
// Prevent session information from being saved while cron is running.
@@ -1294,6 +1299,21 @@ function elysia_cron_run($manual_run = FALSE, $ignore_disable = FALSE, $ignore_t
return $execute;
}
+/**
+ * Menu callback: run cron manually.
+ */
+function elysia_cron_run_manually() {
+ // Run cron manually
+ if (elysia_cron_run(TRUE)) {
+ drupal_set_message(t('Cron ran successfully.'));
+ }
+ else {
+ drupal_set_message(t('Cron run failed.'), 'error');
+ }
+
+ drupal_goto('admin/reports/status');
+}
+
/**
* Public function to execute all jobs in a channel.
*
@@ -1303,6 +1323,9 @@ function elysia_cron_run($manual_run = FALSE, $ignore_disable = FALSE, $ignore_t
* Run channel (and all it's jobs) job even if not ready.
* @param bool $ignore_running
* Run the channel (and all it's jobs) even if already running.
+ *
+ * @return bool
+ * Result of execution.
*/
function elysia_cron_run_channel($channel, $ignore_disable = FALSE, $ignore_time = FALSE, $ignore_running = FALSE) {
global $_elysia_cron_settings_by_channel;
@@ -1530,7 +1553,8 @@ function elysia_cron_check_run_job($job) {
/**
* Find an idle channel (not running, or stuck). If found one, set it as running and returns available jobs.
*
- * @return if found returns array { 'name' => name of channel, 'jobs' => array of active jobs }, else return FALSE
+ * @return array|bool
+ * If found returns array { 'name' => name of channel, 'jobs' => array of active jobs }, else return FALSE.
*/
function elysia_cron_run_available_channel($ignore_disable = FALSE, $ignore_time = FALSE, $ignore_running = FALSE) {
global $_elysia_cron_settings_by_channel;
@@ -1592,7 +1616,7 @@ function elysia_cron_execute_aborted($channel) {
* Used for unexpected termination of code.
*/
function elysia_cron_internal_execute_channel_cleanup() {
- global $_elysia_cron_settings, $_elysia_cron_current_channel, $_cron_completed, $_cron_completed_time;
+ global $_elysia_cron_current_channel, $_cron_completed;
if ($_cron_completed) {
return;
@@ -1825,16 +1849,16 @@ function elysia_cron_ping_page() {
$max_interval = variable_get('elysia_cron_alert_interval', 60) * 60;
if ($diff > $max_interval) {
- return drupal_not_found();
- }
- else {
- $aoutput = array();
- $aoutput[] = array(
- '#type' => 'markup',
- '#markup' => t('Cron has been called within maximum lapse time.'),
- );
- return $aoutput;
+ drupal_not_found();
+ drupal_exit();
}
+
+ $aoutput = array();
+ $aoutput[] = array(
+ '#type' => 'markup',
+ '#markup' => t('Cron has been called within maximum lapse time.'),
+ );
+ return $aoutput;
}
/*******************************************************************************
@@ -1842,6 +1866,9 @@ function elysia_cron_ping_page() {
* ONLY FOR D7
******************************************************************************/
+/**
+ * Implements hook_cronapi().
+ */
function elysia_cron_cronapi($op, $job = FALSE) {
$items = array();
@@ -1879,6 +1906,14 @@ function elysia_cron_cronapi($op, $job = FALSE) {
return $items;
}
+/**
+ * Callback for cronapi.
+ *
+ * @param string $queue_name
+ * Queue name.
+ * @param array $info
+ * Info about queue.
+ */
function elysia_cron_queue_exec($queue_name, $info) {
$function = $info['worker callback'];
$end = time() + (isset($info['time']) ? $info['time'] : 15);
@@ -1908,6 +1943,9 @@ function elysia_cron_queue_exec($queue_name, $info) {
* Array of links under admin/* that were removed by
* admin_menu_adjust_items(). If one of these links is added back,
* it should be removed from the array.
+ *
+ * @return array
+ * Links array.
*/
function elysia_cron_admin_menu(&$deleted) {
$links = array();
diff --git a/sites/all/modules/contrib/dev/elysia_cron/elysia_cron_scheduler.inc b/sites/all/modules/contrib/dev/elysia_cron/elysia_cron_scheduler.inc
index 5d13cef1..9a8f9585 100644
--- a/sites/all/modules/contrib/dev/elysia_cron/elysia_cron_scheduler.inc
+++ b/sites/all/modules/contrib/dev/elysia_cron/elysia_cron_scheduler.inc
@@ -9,8 +9,6 @@
* Function for cron run schedule.
*/
function elysia_cron_should_run($conf, $now = -1, $ignore_disable = FALSE, $ignore_time = FALSE) {
- // What time SHOULD the job be executed last time.
- $prev_rule_run = 0;
if (!$ignore_disable && $conf['disabled']) {
return FALSE;
}
@@ -53,17 +51,17 @@ function _elysia_cron_next_run($conf) {
$rule = array($rules[1], $rules[2], array($rules[3], $rules[5]), $rules[4]);
$ruledec = array();
- $date = __cronDecodeDate($conf['last_run'], 1);
- $expected_date = __cronDecodeDate(!empty($conf['last_run_expected']) ? $conf['last_run_expected'] : 0);
+ $date = _cronDecodeDate($conf['last_run'], 1);
+ $expected_date = _cronDecodeDate(!empty($conf['last_run_expected']) ? $conf['last_run_expected'] : 0);
for ($i = 0; $i < 4; $i++) {
if ($i != 2) {
// Standard scheme for mins, hours, month.
- $ruledec[$i] = __cronDecodeRule($rule[$i], $ranges[$i][0], $ranges[$i][1]);
+ $ruledec[$i] = _cronDecodeRule($rule[$i], $ranges[$i][0], $ranges[$i][1]);
}
else {
// For mday+week we follow another scheme.
- $ruledec[$i] = __cronDecodeRuleMday($rule[2], $date[3], $date[4]);
+ $ruledec[$i] = _cronDecodeRuleMday($rule[2], $date[3], $date[4]);
}
$r = $ruledec[$i];
$new = $date[$i];
@@ -74,7 +72,7 @@ function _elysia_cron_next_run($conf) {
$new = $expected_date[$i] + ceil(($date[$i] - $expected_date[$i]) / $r['d']) * $r['d'];
}
elseif ($r['n']) {
- $new = __cronNextOrEqual($date[$i], $r['n'], $ranges[$i][0], $ranges[$i][1]);
+ $new = _cronNextOrEqual($date[$i], $r['n'], $ranges[$i][0], $ranges[$i][1]);
}
if ($new != $date[$i]) {
$date[$i] = $new;
@@ -85,7 +83,7 @@ function _elysia_cron_next_run($conf) {
for ($j = 0; $j < $i; $j++) {
if ($j == 2) {
// For mday+week decoded rule could be changed (by month+year)
- $ruledec[$j] = __cronDecodeRuleMday($rule[2], $date[3], $date[4]);
+ $ruledec[$j] = _cronDecodeRuleMday($rule[2], $date[3], $date[4]);
}
$date[$j] = $ruledec[$j]['d'] ? ($ranges[$j][0] == 0 ? 0 : $ruledec[$j]['d']) : ($ruledec[$j]['n'] ? reset($ruledec[$j]['n']) : $ranges[$j][0]);
$expected_date[$j] = 0;
@@ -93,13 +91,13 @@ function _elysia_cron_next_run($conf) {
}
}
- return __cronEncodeDate($date);
+ return _cronEncodeDate($date);
}
/**
* Helper function for _elysia_cron_next_run().
*/
-function __cronDecodeDate($timestamp, $min_diff = 0) {
+function _cronDecodeDate($timestamp, $min_diff = 0) {
$time = floor($timestamp / 60);
$time += $min_diff;
@@ -117,14 +115,14 @@ function __cronDecodeDate($timestamp, $min_diff = 0) {
/**
* Helper function for _elysia_cron_next_run().
*/
-function __cronEncodeDate($date) {
+function _cronEncodeDate($date) {
return mktime($date[1], $date[0], 0, $date[3], $date[2], $date[4]);
}
/**
* Helper function for _elysia_cron_next_run().
*/
-function __cronNextOrEqual($el, $arr, $range_start, $range_end) {
+function _cronNextOrEqual($el, $arr, $range_start, $range_end) {
if (empty($arr)) {
return $el;
}
@@ -139,7 +137,7 @@ function __cronNextOrEqual($el, $arr, $range_start, $range_end) {
/**
* Helper function for _elysia_cron_next_run().
*/
-function __cronDecodeRule($rule, $min, $max) {
+function _cronDecodeRule($rule, $min, $max) {
if ($rule == '*') {
return array('n' => array(), 'd' => 0);
}
@@ -163,11 +161,11 @@ function __cronDecodeRule($rule, $min, $max) {
/**
* Helper function for _elysia_cron_next_run().
*/
-function __cronDecodeRuleMday($rule, $month, $year) {
+function _cronDecodeRuleMday($rule, $month, $year) {
$range_from = 1;
$range_to = $month != 2 ? (in_array($month, array(4, 6, 9, 11)) ? 30 : 31) : ($year % 4 == 0 ? 29 : 28);
- $r1 = __cronDecodeRule($rule[0], $range_from, $range_to);
- $r2 = __cronDecodeRule($rule[1], $range_from, $range_to);
+ $r1 = _cronDecodeRule($rule[0], $range_from, $range_to);
+ $r2 = _cronDecodeRule($rule[1], $range_from, $range_to);
if ($r2['d']) {
for ($i = 0; $i < 7; $i++) {
if ($i % $r2['d'] == 0) {
@@ -178,7 +176,7 @@ function __cronDecodeRuleMday($rule, $month, $year) {
if ($r2['n']) {
$r2['n'] = array_unique($r2['n']);
// Use always "31" and not $range_to, see http://drupal.org/node/1668302.
- $r1['n'] = array_merge($r1['n'], __cronMonDaysFromWeekDays($year, $month, $r2['n']), __cronMonDaysFromWeekDays($year, $month + 1, $r2['n'], 31));
+ $r1['n'] = array_merge($r1['n'], _cronMonDaysFromWeekDays($year, $month, $r2['n']), _cronMonDaysFromWeekDays($year, $month + 1, $r2['n'], 31));
}
return $r1;
}
@@ -186,7 +184,7 @@ function __cronDecodeRuleMday($rule, $month, $year) {
/**
* Helper function for _elysia_cron_next_run().
*/
-function __cronMonDaysFromWeekDays($year, $mon, $weekdays, $offset = 0) {
+function _cronMonDaysFromWeekDays($year, $mon, $weekdays, $offset = 0) {
if ($mon > 12) {
$year++;
$mon = $mon - 12;
@@ -350,15 +348,15 @@ function test_elysia_cron_should_run() {
'last_run' => mktime(23, 59, 0, 2, 29, 2008),
), mktime(23, 59, 0, 2, 6, 2009))));
dprint("34." . (TRUE == elysia_cron_should_run(array(
- 'rule' => '59 23 *' . '/10 * *',
+ 'rule' => '59 23 */10 * *',
'last_run' => mktime(23, 58, 0, 1, 10, 2008),
), mktime(23, 59, 0, 1, 10, 2008))));
dprint("35." . (FALSE == elysia_cron_should_run(array(
- 'rule' => '59 23 *' . '/10 * *',
+ 'rule' => '59 23 */10 * *',
'last_run' => mktime(23, 59, 0, 1, 10, 2008),
), mktime(23, 59, 0, 1, 11, 2008))));
dprint("36." . (TRUE == elysia_cron_should_run(array(
- 'rule' => '59 23 *' . '/10 * *',
+ 'rule' => '59 23 */10 * *',
'last_run' => mktime(23, 59, 0, 1, 10, 2008),
), mktime(23, 59, 0, 1, 20, 2008))));
dprint("37." . (TRUE == elysia_cron_should_run(array(
diff --git a/sites/all/modules/contrib/dev/elysia_cron/js/elysia_cron.js b/sites/all/modules/contrib/dev/elysia_cron/js/elysia_cron.js
new file mode 100644
index 00000000..5bf27c43
--- /dev/null
+++ b/sites/all/modules/contrib/dev/elysia_cron/js/elysia_cron.js
@@ -0,0 +1,16 @@
+(function ($) {
+
+ Drupal.behaviors.elysiaCron = {
+ attach: function (context, settings) {
+ $('.ec-select').once().change(function () {
+ if (this.value === 'custom') {
+ var key = $(this).data('key');
+
+ $("#_ec_select_" + key).hide();
+ $("#_ec_custom_" + key).show();
+ }
+ });
+ }
+ }
+
+})(jQuery);
diff --git a/sites/all/modules/contrib/dev/libraries/CHANGELOG.txt b/sites/all/modules/contrib/dev/libraries/CHANGELOG.txt
index 33fa5e8a..bec30401 100644
--- a/sites/all/modules/contrib/dev/libraries/CHANGELOG.txt
+++ b/sites/all/modules/contrib/dev/libraries/CHANGELOG.txt
@@ -1,4 +1,21 @@
+Libraries 7.x-2.5, 2018-10-5
+-----------------------------
+#2815965 by plach, Manav, tstoeckler, Proteo: Base theme is not loaded when checking for theme library info
+#2999116 by Anghelu, joshbrown81: Finds no library after update
+
+Libraries 7.x-2.4, 2018-09-10
+-----------------------------
+#2779591 by mark_fullmer, cglauren, improved PHP 7.x.x support.
+#2699799 by flaviovs, hanoii: Support reading version from package.json.
+#2816781 by joelstein: Add a 'access library reports' permission.
+#2823735 by amanaplan, tstoeckler: Add admin_menu cache clear integration.
+#2745763 by Albert Volkman, tstoeckler: Allow downloading all libraries at once.
+#2310753 by tstoeckler: Avoid libraries_get_libraries() scanning the root.
+#2341955 by sadashiv, tstoeckler: Clear library cache on library report.
+#819610 by tstoeckler: Show variants and dependencies in the UI.
+#2724925 by ron_s, tstoeckler: Separate installed from uninstalled libraries.
+
Libraries 7.x-2.3, 2016-05-12
-----------------------------
#1884246 by BR0kEN, tstoeckler et al: Allow downloading libraries via Drush.
@@ -94,17 +111,11 @@ by sun: Fixed testbot breaks upon .info file without .module file.
#719896 by tstoeckler, sun: Added starting point for hook_libraries_info().
-Libraries 7.x-1.x, xxxx-xx-xx
------------------------------
-
Libraries 7.x-1.0, 2010-01-27
-----------------------------
#743522 by sun: Ported to D7.
-Libraries 6.x-1.x, xxxx-xx-xx
------------------------------
-
Libraries 6.x-1.0, 2010-01-27
-----------------------------
#1028744 by tstoeckler: Code clean-up.
diff --git a/sites/all/modules/contrib/dev/libraries/css/libraries.admin.css b/sites/all/modules/contrib/dev/libraries/css/libraries.admin.css
new file mode 100644
index 00000000..f344ff0c
--- /dev/null
+++ b/sites/all/modules/contrib/dev/libraries/css/libraries.admin.css
@@ -0,0 +1,3 @@
+.libraries-table {
+ margin-bottom: 2em;
+}
diff --git a/sites/all/modules/contrib/dev/libraries/libraries.admin.inc b/sites/all/modules/contrib/dev/libraries/libraries.admin.inc
index 8d9e0fbd..29ddec14 100644
--- a/sites/all/modules/contrib/dev/libraries/libraries.admin.inc
+++ b/sites/all/modules/contrib/dev/libraries/libraries.admin.inc
@@ -20,41 +20,112 @@
* The form array for the overview form.
*/
function libraries_admin_overview(array $form, array &$form_state) {
- $header = array(t('Name'), t('Status'), t('Installed version'), t('Provider'), t('Links'));
- $rows = array();
+ // Only show variants for installed libraries.
+ $header_installed = array(t('Name'), t('Version'), t('Variants'), t('Dependencies'), t('Provider'), t('Links'));
+ // Only show status for libraries with an error.
+ $header_error = array(t('Name'), t('Status'), t('Version'), t('Dependencies'), t('Provider'), t('Links'));
+ // For unregistered libraries the only information we can show is the path.
+ $header_unregistered = array(t('Name'), t('Path'));
- $libraries = libraries_detect();
- uasort($libraries, 'libraries_admin_sort_title');
+ $rows_installed = array();
+ $rows_error = array();
+ $rows_unregistered = array();
- foreach ($libraries as $machine_name => $library) {
+ // Registered libraries: we prefer to use libraries_detect() since it provides
+ // library metadata.
+ $libraries_registered = libraries_detect();
+ uasort($libraries_registered, 'libraries_admin_sort_title');
+
+ // Unregistered libraries: modules can depend on Libraries API without sharing
+ // metadata by using libraries_get_path(). Libraries can also be placed in the
+ // filesystem that are incorrectly installed, a wrong version, or a standalone
+ // not connected to any module. In these cases, libraries_get_libraries()
+ // provides a full library list. Libraries found by libraries_get_libraries(),
+ // but not identified by libraries_detect, are displayed in a separate table.
+ $libraries_unregistered = libraries_get_libraries();
+ natcasesort($libraries_unregistered);
+
+ foreach ($libraries_registered as $machine_name => $library) {
$actions = array();
+ $row = array();
if ($library['vendor url']) {
- $actions[] = l('Homepage', $library['vendor url']);
+ $actions[] = l(t('Homepage'), $library['vendor url']);
}
if ($library['download url']) {
- $actions[] = l('Download', $library['download url']);
+ $actions[] = l(t('Download'), $library['download url']);
}
- $rows[] = array(
- 'data' => array(
- l($library['name'], 'admin/reports/libraries/' . $machine_name),
- ($library['installed'] ? t('OK') : drupal_ucfirst($library['error'])),
- (isset($library['version']) ? $library['version'] : ''),
- libraries_admin_get_provider_with_type($library),
- implode(' | ', $actions),
- ),
- 'class' => ($library['installed'] ? array('ok') : array('error')),
- );
+ $row['data'][] = l($library['name'], 'admin/reports/libraries/' . $machine_name);
+ // Only show status for libraries with an error. See above.
+ if (!$library['installed']) {
+ $row['data'][] = drupal_ucfirst($library['error']);
+ }
+ $row['data'][] = isset($library['version']) ? $library['version'] : '';
+ if ($library['installed']) {
+ $row['data'][] = implode(', ', array_keys($library['variants']));
+ }
+ $row['data'][] = libraries_admin_get_dependencies($library);
+ $row['data'][] = libraries_admin_get_provider_with_type($library);
+ $row['data'][] = implode(' | ', $actions);
+ $row['class'] = $library['installed'] ? array('ok') : array('warning');
+
+ if ($library['installed']) {
+ $rows_installed[] = $row;
+ }
+ else {
+ $rows_error[] = $row;
+ }
+
+ // Filter registered libraries from unregistered libraries.
+ unset($libraries_unregistered[$library['machine name']]);
}
- $form['libraries']['list'] = array(
- '#theme' => 'table',
- '#header' => $header,
- '#rows' => $rows,
- '#empty' => t('There are currently no libraries installed'),
+ // Build table of registered libraries with installed status.
+ $form['libraries']['installed'] = array(
+ '#theme' => 'libraries_table_with_title',
+ '#title' => t('Installed'),
+ '#header' => $header_installed,
+ '#rows' => $rows_installed,
+ '#description' => t('These libraries are registered and installed correctly.'),
+ '#empty' => t('There are currently no libraries that are registered and installed.'),
);
+ // Build table of registered libraries with error status.
+ $form['libraries']['error'] = array(
+ '#theme' => 'libraries_table_with_title',
+ '#title' => t('Uninstalled'),
+ '#header' => $header_error,
+ '#rows' => $rows_error,
+ '#description' => t('These libraries are registered but not installed. They may not need to be installed in case a module or theme provides optional integration with a library.'),
+ '#empty' => t('There are currently no libraries that are registered but not installed.'),
+ );
+
+ // Build table of unregistered libraries.
+ foreach ($libraries_unregistered as $name => $path) {
+ $rows_unregistered[] = array(
+ 'data' => array(
+ $name,
+ $path,
+ ),
+ );
+ }
+ $form['libraries']['unregistered'] = array(
+ '#theme' => 'libraries_table_with_title',
+ '#title' => t('Unregistered'),
+ '#header' => $header_unregistered,
+ '#rows' => $rows_unregistered,
+ '#description' => t('These libraries were found in the filesystem but there is no metadata about them.'),
+ // Do not show the table at all, if there are no unregistered libraries.
+ '#access' => (bool) $libraries_unregistered,
+ );
+
+ // Clear the cached library information so that the library can be loaded if
+ // it was just downloaded. Because these instructions use libraries_detect()
+ // directly, they will never use the cached information, but this avoids the
+ // overview showing a library as installed but it not being loadable.
+ libraries_cache_clear();
+
return $form;
}
@@ -99,11 +170,11 @@ function libraries_admin_library_status_form(array $form, array &$form_state, $l
break;
case 'missing dependency':
- $form['instructions']['instruction']['#markup'] = t('There a missing dependency in your configuration that prevent this library to work properly.') . ' ';
+ $form['instructions']['instruction']['#markup'] = t('There is a missing dependency in your configuration that prevents this library from working properly.') . ' ';
break;
case 'incompatible dependency':
- $form['instructions']['instruction']['#markup'] = t('There an incompatible dependency in your configuration that prevent this library to work properly.') . ' ';
+ $form['instructions']['instruction']['#markup'] = t('There is an incompatible dependency in your configuration that prevents this library from working properly.') . ' ';
break;
}
}
@@ -483,6 +554,28 @@ function libraries_admin_sort_title(array $a, array $b) {
return strnatcasecmp($a['name'], $b['name']);
}
+/**
+ * Returns the library's dependencies, if any.
+ *
+ * @param array $library
+ * A library information array.
+ *
+ * @return string
+ * The dependencies.
+ */
+function libraries_admin_get_dependencies($library) {
+ $dependencies = array();
+ foreach ($library['dependencies'] as $dependency_name) {
+ if ($dependency = libraries_info($dependency_name)) {
+ $dependencies[] = $dependency['name'];
+ }
+ else {
+ $dependencies[] = $dependency_name;
+ }
+ }
+ return implode(', ', $dependencies);
+}
+
/**
* Returns the library's provider.
*
diff --git a/sites/all/modules/contrib/dev/libraries/libraries.api.php b/sites/all/modules/contrib/dev/libraries/libraries.api.php
index 71e90e0c..fe0c2418 100644
--- a/sites/all/modules/contrib/dev/libraries/libraries.api.php
+++ b/sites/all/modules/contrib/dev/libraries/libraries.api.php
@@ -47,6 +47,8 @@
* Unless 'version' is declared or libraries_get_version() is being used as
* a version callback, 'version callback' must be declared. In the latter
* case, however, 'version arguments' must be declared in the specified way.
+ * For libraries that provide a package.json file, use
+ * 'libraries_get_package_json_version' as the version callback.
* - version arguments: (optional) A list of arguments to pass to the version
* callback. Version arguments can be declared either as an associative
* array whose keys are the argument names or as an indexed array without
diff --git a/sites/all/modules/contrib/dev/libraries/libraries.drush.inc b/sites/all/modules/contrib/dev/libraries/libraries.drush.inc
index 32587135..550b7af5 100644
--- a/sites/all/modules/contrib/dev/libraries/libraries.drush.inc
+++ b/sites/all/modules/contrib/dev/libraries/libraries.drush.inc
@@ -23,7 +23,9 @@ function libraries_drush_command() {
'arguments' => array(
'libraries' => 'A comma delimited list of library machine names.',
),
- 'required-arguments' => TRUE,
+ 'options' => array(
+ 'all' => 'Download all registered libraries.',
+ ),
);
return $items;
@@ -42,10 +44,7 @@ function libraries_drush_cache_clear(array &$types) {
* Clears the library cache.
*/
function libraries_drush_invalidate_cache() {
- // @see drupal_flush_all_caches()
- foreach (libraries_flush_caches() as $table) {
- cache_clear_all('*', $table, TRUE);
- }
+ libraries_cache_clear();
}
/**
@@ -109,28 +108,61 @@ function drush_libraries_list() {
function drush_libraries_download() {
drush_command_include('pm-download');
- $libraries = libraries_info();
+ $all_libraries = libraries_detect();
- // @todo Consider supporting downloading all downloadable libraries.
- // @todo Consider offering a selection if no library is specified.
- foreach (pm_parse_arguments(func_get_args(), FALSE) as $machine_name) {
- if (!isset($libraries[$machine_name])) {
- $message = dt("The !library library is not registered with Libraries API.\n", array('!library' => $machine_name));
- $message .= dt("Provide an info file for it or implement hook_libraries_info().\n");
- $message .= dt("See hook_libraries_info() for more information.\n");
- drush_set_error('DRUSH_LIBRARY_UKNOWN', $message);
- continue;
+ // Prepare a list of names of downloadable libraries.
+ $downloadable_names = array();
+ foreach ($all_libraries as $machine_name => $library) {
+ // Skip libraries that are already installed.
+ // @todo Allow (optionally) re-downloading installing libraries.
+ if (!empty($library['download file url']) && !$library['installed']) {
+ $downloadable_names[] = $machine_name;
}
- $library = $libraries[$machine_name];
+ }
- if (empty($library['download file url'])) {
- $message = dt("The !library library cannot be downloaded.\n", array('!library' => $machine_name));
- $message .= dt("Libraries need to specify a download file URL to support being downloaded via Drush.\n");
- $message .= dt("See hook_libraries_info() for more information.\n");
- drush_set_error('DRUSH_LIBRARY_NOT_DOWNLOADABLE', $message);
- continue;
+ // Gather a list of libraries to download. If '--all' was specified, that
+ // takes precedence over any other arguments. Otherwise and if no arguments
+ // are specified, we present a choice of all downloadable libraries.
+ if (drush_get_option('all', FALSE) && $downloadable_names) {
+ $machine_names = $downloadable_names;
+ }
+ elseif (pm_parse_arguments(func_get_args(), FALSE)) {
+ $machine_names = array();
+ foreach (pm_parse_arguments(func_get_args(), FALSE) as $machine_name) {
+ // If there was an error with with one of the libraries, continue to try
+ // to install any remaining libraries.
+ if (!isset($all_libraries[$machine_name])) {
+ $message = dt("The !library library is not registered with Libraries API.\n", array('!library' => $machine_name));
+ $message .= dt("Provide an info file for it or implement hook_libraries_info().\n");
+ $message .= dt("See hook_libraries_info() for more information.\n");
+ drush_set_error('DRUSH_LIBRARY_UKNOWN', $message);
+ continue;
+ }
+ if (empty($all_libraries[$machine_name]['download file url'])) {
+ $message = dt("The !library library cannot be downloaded.\n", array('!library' => $machine_name));
+ $message .= dt("Libraries need to specify a download file URL to support being downloaded via Drush.\n");
+ $message .= dt("See hook_libraries_info() for more information.\n");
+ drush_set_error('DRUSH_LIBRARY_NOT_DOWNLOADABLE', $message);
+ continue;
+ }
+ $machine_names[] = $machine_name;
}
- $download_url = $library['download file url'];
+ }
+ elseif ($downloadable_names) {
+ $machine_names = drush_choice_multiple(drupal_map_assoc($downloadable_names), FALSE, 'Select which libraries to download.');
+ // If the operation was cancelled by the user, or if no libraries were
+ // selected, bail out without any further error message.
+ if (!$machine_names) {
+ return;
+ }
+ }
+ else {
+ drush_log(dt('There are no registered, uninstalled libraries that can be downloaded.'), 'warning');
+ return;
+ }
+
+ foreach ($machine_names as $machine_name) {
+ $download_url = $all_libraries[$machine_name]['download file url'];
drush_log(dt('Downloading library !name ...', array('!name' => $machine_name)));
@@ -205,7 +237,7 @@ function drush_libraries_download() {
drush_delete_dir($install_location, TRUE);
}
else {
- drush_log(dt("Skip installation of !project to !dest.", array('!project' => $library['machine name'], '!dest' => $install_location)), 'warning');
+ drush_log(dt("Skip installation of !project to !dest.", array('!project' => $machine_name, '!dest' => $install_location)), 'warning');
continue;
}
}
diff --git a/sites/all/modules/contrib/dev/libraries/libraries.info b/sites/all/modules/contrib/dev/libraries/libraries.info
index dcd2d486..e721cb4c 100644
--- a/sites/all/modules/contrib/dev/libraries/libraries.info
+++ b/sites/all/modules/contrib/dev/libraries/libraries.info
@@ -8,9 +8,8 @@ files[] = tests/LibrariesLoadWebTest.test
files[] = tests/LibrariesUnitTest.test
files[] = tests/LibrariesWebTestBase.test
-; Information added by Drupal.org packaging script on 2016-05-12
-version = "7.x-2.3"
+; Information added by Drupal.org packaging script on 2018-10-05
+version = "7.x-2.5"
core = "7.x"
project = "libraries"
-datestamp = "1463077450"
-
+datestamp = "1538770685"
diff --git a/sites/all/modules/contrib/dev/libraries/libraries.install b/sites/all/modules/contrib/dev/libraries/libraries.install
index ebc4087b..e8c795ff 100644
--- a/sites/all/modules/contrib/dev/libraries/libraries.install
+++ b/sites/all/modules/contrib/dev/libraries/libraries.install
@@ -34,3 +34,13 @@ function libraries_update_7201() {
// during the 7.x-2.x cycle.
registry_rebuild();
}
+
+/**
+ * Grant the "View library reports" permission to roles with the "View site reports" permission.
+ */
+function libraries_update_7202() {
+ $rids = array_keys(user_roles(FALSE, 'access site reports'));
+ foreach ($rids as $rid) {
+ _update_7000_user_role_grant_permissions($rid, array('access library reports'), 'libraries');
+ }
+}
diff --git a/sites/all/modules/contrib/dev/libraries/libraries.module b/sites/all/modules/contrib/dev/libraries/libraries.module
index 48275250..480289cd 100644
--- a/sites/all/modules/contrib/dev/libraries/libraries.module
+++ b/sites/all/modules/contrib/dev/libraries/libraries.module
@@ -25,6 +25,29 @@ function libraries_flush_caches() {
}
}
+/**
+ * Implements hook_admin_menu_cache_info().
+ */
+function libraries_admin_menu_cache_info() {
+ $caches['libraries'] = array(
+ 'title' => t('Libraries'),
+ 'callback' => 'libraries_cache_clear',
+ );
+ return $caches;
+}
+
+/**
+ * Clears the cached library information.
+ */
+function libraries_cache_clear() {
+ foreach (libraries_flush_caches() as $bin) {
+ // Using the wildcard argument leads to DrupalDatabaseCache::clear()
+ // truncating the libraries cache table which is more performant that
+ // deleting the rows.
+ cache_clear_all('*', $bin, TRUE);
+ }
+}
+
/**
* Gets the path of a library.
*
@@ -56,6 +79,52 @@ function libraries_get_path($name, $base_path = FALSE) {
return $path;
}
+/**
+ * Returns all enabled themes.
+ *
+ * Themes are sorted so that base themes always precede their child themes.
+ *
+ * @return array
+ * An associative array of theme objects keyed by theme name.
+ */
+function libraries_get_enabled_themes() {
+ $themes = array();
+ foreach (list_themes() as $name => $theme) {
+ if ($theme->status) {
+ $themes[$name] = $theme;
+ }
+ }
+
+ return libraries_sort_themes($themes);
+}
+
+/**
+ * Sort a themes array.
+ *
+ * @param array $themes
+ * Array of themes as objects, keyed by theme name.
+ * @param string $base
+ * A base theme (internal use only).
+ *
+ * @return array
+ * A similar array to $themes, but sorted in such a way that subthemes are
+ * always located after its base theme.
+ */
+function libraries_sort_themes($themes, $base = '') {
+ $output = array();
+ foreach ($themes as $name => $theme) {
+ if (!isset($theme->base_theme) || $theme->base_theme == $base) {
+ $output[$name] = $theme;
+ unset($themes[$name]);
+ $subthemes = libraries_sort_themes($themes, $name);
+ foreach ($subthemes as $sub_name => $subtheme) {
+ $output[$sub_name] = $subtheme;
+ }
+ }
+ }
+ return $output;
+}
+
/**
* Returns an array of library directories.
*
@@ -77,6 +146,13 @@ function libraries_get_libraries() {
$profile = drupal_get_path('profile', drupal_get_profile());
$config = conf_path();
+ // $config and $profile should never be empty in a proper Drupal setup.
+ // However, we should never search into the root filesystem under any
+ // circumstances, so just bail out in that case.
+ if (!$profile && !$config) {
+ return array();
+ }
+
// Similar to 'modules' and 'themes' directories in the root directory,
// certain distributions may want to place libraries into a 'libraries'
// directory in Drupal's root directory.
@@ -358,10 +434,12 @@ function &libraries_info($name = NULL) {
}
}
- // Gather information from hook_libraries_info() in enabled themes.
+ // Gather information from hook_libraries_info() in enabled themes. Themes
+ // are sorted to ensure that a base theme's template.php is included before
+ // its children's ones.
$themes = array();
- foreach (list_themes() as $theme_name => $theme_info) {
- if ($theme_info->status && file_exists(drupal_get_path('theme', $theme_name) . '/template.php')) {
+ foreach (libraries_get_enabled_themes() as $theme_name => $theme_info) {
+ if (file_exists(drupal_get_path('theme', $theme_name) . '/template.php')) {
// Collect a list of viable themes for re-use when calling the alter
// hook.
$themes[] = $theme_name;
@@ -546,7 +624,7 @@ function libraries_detect($name = NULL) {
$library['version'] = call_user_func_array($library['version callback'], array_merge(array($library), $library['version arguments']));
}
else {
- $library['version'] = call_user_func($library['version callback'], $library, $library['version arguments']);
+ $library['version'] = call_user_func_array($library['version callback'], array(&$library, $library['version arguments']));
}
if (empty($library['version'])) {
$library['error'] = 'not detected';
@@ -887,16 +965,56 @@ function libraries_get_version($library, $options) {
fclose($file);
}
+/**
+ * Gets the version information from a library's package.json file.
+ *
+ * @param $library
+ * An associative array containing all information about the library.
+ * @param $options
+ * This callback expects no option.
+ * @return
+ * A string containing the version of the library.
+ *
+ * @see libraries_get_path()
+ */
+function libraries_get_package_json_version($library, $options) {
+ $file = DRUPAL_ROOT . '/' . $library['library path'] . '/package.json';
+ if (!file_exists($file)) {
+ return;
+ }
+
+ $content = file_get_contents($file);
+ if (!$content) {
+ return;
+ }
+
+ $data = drupal_json_decode($content);
+ if (isset($data['version'])) {
+ return $data['version'];
+ }
+}
+
/**
* Implements hook_help().
*/
function libraries_help($path, $arg) {
switch ($path) {
case 'admin/reports/libraries':
- return t('Click on a library for a status report or detailed installation instructions in case the library is not installed correctly.');
+ return t('Click on a library for a status report or detailed installation instructions.');
}
}
+/**
+ * Implements hook_permission().
+ */
+function libraries_permission() {
+ return array(
+ 'access library reports' => array(
+ 'title' => t('View library reports'),
+ ),
+ );
+}
+
/**
* Implements hook_menu().
*/
@@ -907,7 +1025,7 @@ function libraries_menu() {
'description' => 'An overview of libraries installed on this site.',
'page callback' => 'drupal_get_form',
'page arguments' => array('libraries_admin_overview'),
- 'access arguments' => array('access site reports'),
+ 'access arguments' => array('access library reports'),
'file' => 'libraries.admin.inc'
);
$items['admin/reports/libraries/%libraries_ui'] = array(
@@ -915,7 +1033,7 @@ function libraries_menu() {
'description' => 'Status overview for a single library',
'page callback' => 'drupal_get_form',
'page arguments' => array('libraries_admin_library_status_form', 3),
- 'access arguments' => array('access site reports'),
+ 'access arguments' => array('access library reports'),
'file' => 'libraries.admin.inc'
);
return $items;
@@ -944,3 +1062,19 @@ function libraries_menu() {
function libraries_ui_load($name) {
return libraries_detect($name);
}
+
+/**
+ * Implements hook_theme().
+ */
+function libraries_theme($existing, $type, $theme, $path) {
+ // Because we extend the 'table' theme function, fetch the respective
+ // variables dynamically.
+ $common_theme = drupal_common_theme();
+ $variables = $common_theme['table']['variables'] + array('title' => '', 'description' => '');
+ return array(
+ 'libraries_table_with_title' => array(
+ 'variables' => $variables,
+ 'file' => 'libraries.theme.inc',
+ ),
+ );
+}
diff --git a/sites/all/modules/contrib/dev/libraries/libraries.theme.inc b/sites/all/modules/contrib/dev/libraries/libraries.theme.inc
new file mode 100644
index 00000000..ff3ed719
--- /dev/null
+++ b/sites/all/modules/contrib/dev/libraries/libraries.theme.inc
@@ -0,0 +1,36 @@
+ array());
+ $variables['attributes']['class'][] = 'libraries-table';
+}
+
+/**
+ * Returns HTML for a table with a title.
+ *
+ * @param array $variables
+ * An array theme variables.
+ *
+ * @return string
+ * The HTML output for this table with a title.
+ */
+function theme_libraries_table_with_title(array $variables) {
+ $output = '';
+ $output .= '
' . $variables['title'] . '
';
+ $output .= '
' . $variables['description'] . '
';
+ $output .= theme_table($variables);
+ return $output;
+}
diff --git a/sites/all/modules/contrib/dev/libraries/tests/LibrariesAdminWebTest.test b/sites/all/modules/contrib/dev/libraries/tests/LibrariesAdminWebTest.test
index a4d2188b..87c9de0e 100644
--- a/sites/all/modules/contrib/dev/libraries/tests/LibrariesAdminWebTest.test
+++ b/sites/all/modules/contrib/dev/libraries/tests/LibrariesAdminWebTest.test
@@ -40,8 +40,20 @@ class LibrariesAdminWebTest extends LibrariesWebTestBase {
* Tests the libraries report at /admin/reports/libraries.
*/
public function testLibrariesReportOverview() {
- $this->getWithPermissions(array('access site reports'), 'admin/reports/libraries');
- $this->assertRaw('Libraries');
+ $this->getWithPermissions(array('access library reports'), 'admin/reports/libraries');
+ // Assert the page title and table titles show up.
+ $this->assertText('Libraries');
+ $this->assertRaw('
Installed
');
+ $this->assertRaw('
Uninstalled
');
+
+ // Make sure the table headings show up.
+ $this->assertText('Name');
+ $this->assertText('Status');
+ $this->assertText('Version');
+ $this->assertText('Variants');
+ $this->assertText('Dependencies');
+ $this->assertText('Provider');
+ $this->assertText('Links');
// Make sure that all the libraries are listed.
$libraries = libraries_info();
@@ -51,8 +63,7 @@ class LibrariesAdminWebTest extends LibrariesWebTestBase {
$this->assertLinkByHref('admin/reports/libraries/' . $library['machine name']);
}
- // Make sure that all possible statuses are displayed.
- $this->assertText('OK');
+ // Make sure that all possible error statuses are displayed.
$this->assertText('Not found');
$this->assertText('Not detected');
$this->assertText('Not supported');
@@ -73,7 +84,7 @@ class LibrariesAdminWebTest extends LibrariesWebTestBase {
* Tests the libraries report for an installed library.
*/
public function testLibrariesReportInstalled() {
- $this->getWithPermissions(array('access site reports'), 'admin/reports/libraries/example_files');
+ $this->getWithPermissions(array('access library reports'), 'admin/reports/libraries/example_files');
$this->assertRaw('Status report for library Example files');
$this->assertRaw('The Example files library is installed correctly.');
// Check that the information in the status report is displayed.
@@ -88,7 +99,7 @@ class LibrariesAdminWebTest extends LibrariesWebTestBase {
* Tests the libraries report for a missing library.
*/
public function testLibrariesReportMissing() {
- $this->getWithPermissions(array('access site reports'), 'admin/reports/libraries/example_missing');
+ $this->getWithPermissions(array('access library reports'), 'admin/reports/libraries/example_missing');
$this->assertRaw('Status report for library Example missing');
$this->assertRaw('The Example missing library could not be found.');
// Check that the download link is being displayed.
@@ -100,7 +111,7 @@ class LibrariesAdminWebTest extends LibrariesWebTestBase {
* Tests the libraries report for a missing library.
*/
public function testLibrariesReportNotDetected() {
- $this->getWithPermissions(array('access site reports'), 'admin/reports/libraries/example_undetected_version');
+ $this->getWithPermissions(array('access library reports'), 'admin/reports/libraries/example_undetected_version');
$this->assertRaw('Status report for library Example undetected version');
$this->assertRaw('The version of the Example undetected version library could not be detected.');
}
@@ -109,7 +120,7 @@ class LibrariesAdminWebTest extends LibrariesWebTestBase {
* Tests the libraries report for a missing library.
*/
public function testLibrariesReportNotSupported() {
- $this->getWithPermissions(array('access site reports'), 'admin/reports/libraries/example_unsupported_version');
+ $this->getWithPermissions(array('access library reports'), 'admin/reports/libraries/example_unsupported_version');
$this->assertRaw('Status report for library Example unsupported version');
$this->assertRaw('The installed version 1 of the Example unsupported version library is not supported.');
// Check that the download link is being displayed.
diff --git a/sites/all/modules/contrib/dev/libraries/tests/libraries/example_info_file.libraries.info b/sites/all/modules/contrib/dev/libraries/tests/libraries/example_info_file.libraries.info
index 11152731..83ba8a83 100644
--- a/sites/all/modules/contrib/dev/libraries/tests/libraries/example_info_file.libraries.info
+++ b/sites/all/modules/contrib/dev/libraries/tests/libraries/example_info_file.libraries.info
@@ -2,9 +2,8 @@
name = Example info file
-; Information added by Drupal.org packaging script on 2016-05-12
-version = "7.x-2.3"
+; Information added by Drupal.org packaging script on 2018-10-05
+version = "7.x-2.5"
core = "7.x"
project = "libraries"
-datestamp = "1463077450"
-
+datestamp = "1538770685"
diff --git a/sites/all/modules/contrib/dev/libraries/tests/modules/libraries_test_module/libraries_test_module.info b/sites/all/modules/contrib/dev/libraries/tests/modules/libraries_test_module/libraries_test_module.info
index 7ad319a2..756d6a8f 100644
--- a/sites/all/modules/contrib/dev/libraries/tests/modules/libraries_test_module/libraries_test_module.info
+++ b/sites/all/modules/contrib/dev/libraries/tests/modules/libraries_test_module/libraries_test_module.info
@@ -5,9 +5,8 @@ package = Testing
dependencies[] = libraries
hidden = TRUE
-; Information added by Drupal.org packaging script on 2016-05-12
-version = "7.x-2.3"
+; Information added by Drupal.org packaging script on 2018-10-05
+version = "7.x-2.5"
core = "7.x"
project = "libraries"
-datestamp = "1463077450"
-
+datestamp = "1538770685"
diff --git a/sites/all/modules/contrib/dev/libraries/tests/themes/libraries_test_theme/libraries_test_theme.info b/sites/all/modules/contrib/dev/libraries/tests/themes/libraries_test_theme/libraries_test_theme.info
index 255d1040..194954e7 100644
--- a/sites/all/modules/contrib/dev/libraries/tests/themes/libraries_test_theme/libraries_test_theme.info
+++ b/sites/all/modules/contrib/dev/libraries/tests/themes/libraries_test_theme/libraries_test_theme.info
@@ -3,9 +3,8 @@ description = Tests that themes can provide and alter library information.
core = 7.x
hidden = TRUE
-; Information added by Drupal.org packaging script on 2016-05-12
-version = "7.x-2.3"
+; Information added by Drupal.org packaging script on 2018-10-05
+version = "7.x-2.5"
core = "7.x"
project = "libraries"
-datestamp = "1463077450"
-
+datestamp = "1538770685"
diff --git a/sites/all/modules/contrib/files/elfinder/CHANGELOG.txt b/sites/all/modules/contrib/files/elfinder/CHANGELOG.txt
index 704c1e09..028506c8 100644
--- a/sites/all/modules/contrib/files/elfinder/CHANGELOG.txt
+++ b/sites/all/modules/contrib/files/elfinder/CHANGELOG.txt
@@ -1,6 +1,6 @@
2.x-dev
-------
- - Now requires elFinder 2.0.9+
+ - Now requires elFinder 2.0.9+ or 2.1.38+
- Added multiple root directories support
- Added Drupal file_managed table synchronization
- Added per-role configurable profiles support
@@ -8,4 +8,7 @@
- Added CKEditor and FCKeditor Upload tab support
- New library search algoritm with install profiles and multiple sites support
- Search support
+ - Inline preview support for PSD, md, html, office docs (by Google/Microsoft online tools), CAD (by sharecad.org online tools), etc (disabled by default, be careful)
+ - Auto fit window
+ - File owner available in list view
diff --git a/sites/all/modules/contrib/files/elfinder/LICENSE.txt b/sites/all/modules/contrib/files/elfinder/LICENSE.txt
index d159169d..85f71a5f 100644
--- a/sites/all/modules/contrib/files/elfinder/LICENSE.txt
+++ b/sites/all/modules/contrib/files/elfinder/LICENSE.txt
@@ -1,339 +1,14 @@
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
+elFinder Integration
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
+Copyright (c) 2010-2018, Alexey Sukhotin. All rights reserved.
- Preamble
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Lesser General Public License instead.) You can apply it to
-your programs, too.
+1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
+2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
+3. Neither the name of the Alexey Sukhotin nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-
- Copyright (C)
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with this program; if not, write to the Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
- Gnomovision version 69, Copyright (C) year name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- , 1 April 1989
- Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs. If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL "ALEXEY SUKHOTIN" OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/sites/all/modules/contrib/files/elfinder/README.txt b/sites/all/modules/contrib/files/elfinder/README.txt
index 8959ab3a..823f92cc 100644
--- a/sites/all/modules/contrib/files/elfinder/README.txt
+++ b/sites/all/modules/contrib/files/elfinder/README.txt
@@ -1,83 +1,79 @@
-elFinder file manager integration module for Drupal
-===================================================
-
-System Requirements:
-
- - Drupal 7.x
- - elFinder 2.0.9+
-
- Note: elFinder 2.0rc1 no more supported - use 2.x dev build from
- http://sourceforge.net/projects/drupal-elfinder/files/Library/
- or use production version if it is available
-
-Optional:
-
- - Wysiwyg module
- - Wysiwyg editor:
-
- - CKEditor
- - FCKeditor
- - TinyMCE 3
- - BUEdtor
- - jWYSIWYG (jWYSIWYG 0.93+, jquery 1.3+, jquery ui 1.7+)
- - YUI Editor
- - WYMeditor
-
-
-Installation:
-
- 1. Unpack archive contents into modules/elfinder
- 2. Get latest elFinder at http://sourceforge.net/projects/drupal-elfinder/files/Library/ and it's contents to sites/all/libraries/elfinder
- 3. REMOVE following files from library directory if it exists to avoid security hole:
-
- sites/all/libraries/elfinder/elfinder.php.html
- sites/all/libraries/elfinder/connectors/php/connector.php
- sites/all/libraries/elfinder/php/connector.php
-
- 4. Enable elFinder module in Modules > List menu
- 5. Add 'use file manager' permission to users who will be able to use elFinder at Modules > elFinder > Permissions menu
- 6. Enable elFinder checkbox in your editor Wysiwyg profile at Configuration > Wysiwyg profiles > Buttons and Plugins
-
-Usage:
-
- 1. Administration backend
-
- a. Open /elfinder url (or ?q=elfinder if seo-capable urls disabled)
- b. Go to Administer page. Click 'Files' under Content section.
-
- 2. Inside CKEditor (FCKeditor)
- 2.1. Open Image Properties dialog in editor
- 2.2. Click Browse Server button near image url
-
- 3. Inside TinyMCE
- 3.1. Open Insert/edit image dialog
- 3.2. Click Browse button near image url
-
- 4. Inside BUEditor
- 4.1. Click 'Insert/edit image'
- 4.2. Click 'Browse'
- 4.3. Select file
- 4.4. Enter alt text then click OK
-
- 5. Inside jWYSIWYG
- 5.1. Make sure that you have jWYSYWIG 0.93+ (http://github.com/akzhan/jwysiwyg/), jQuery 1.3+ and jQuery UI 1.7+ installed
- 5.2. Click 'Insert image' button
- 5.3. Click 'Browse Server' button near image url
-
- 6. Inside YUI Editor
- 6.1. Click 'Insert Image' button
- 6.2. Click 'Browse Server' button near image url
-
- 7. Inside WYMeditor
- 7.1. Click 'Image' button
- 7.2. Click 'Browse Server' button near image url
-
-
-
-Known Issues:
-
- - Not all editors supported
- - Conflicting with some devel module features
-
-
-
+elFinder file manager integration module for Drupal
+===================================================
+
+System Requirements:
+
+ - Drupal 7.x
+ - elFinder 2.0.9+ or 2.1.38+
+
+ Note: elFinder 2.0rc1 no more supported - use 2.0.9+ or 2.1.38+ dev build from
+ http://elfinder.org
+ or use production version if it is available
+
+Optional:
+
+ - Wysiwyg module
+ - Wysiwyg editor:
+
+ - CKEditor
+ - FCKeditor
+ - TinyMCE 3
+ - BUEdtor
+ - jWYSIWYG (jWYSIWYG 0.93+, jquery 1.3+, jquery ui 1.7+)
+ - YUI Editor
+ - WYMeditor
+
+
+Installation:
+
+ 1. Unpack archive contents into modules/elfinder
+ 2. Get latest elFinder at http://elfinder.org and it's contents to sites/all/libraries/elfinder
+ 3. REMOVE following files from library directory if it exists to avoid security hole:
+
+ sites/all/libraries/elfinder/connectors/php/connector.php
+ sites/all/libraries/elfinder/php/connector.php
+
+ 4. Enable elFinder module in Modules > List menu
+ 5. Add 'use file manager' permission to users who will be able to use elFinder at Modules > elFinder > Permissions menu
+ 6. Enable elFinder checkbox in your editor Wysiwyg profile at Configuration > Wysiwyg profiles > Buttons and Plugins
+
+Usage:
+
+ 1. Administration backend
+ a. Open /elfinder url (or ?q=elfinder if seo-capable urls disabled)
+ b. Go to Administer page. Click 'Files' under Content section.
+
+ 2. Inside CKEditor (FCKeditor)
+ 2.1. Open Image Properties dialog in editor
+ 2.2. Click Browse Server button near image url
+
+ 3. Inside TinyMCE
+ 3.1. Open Insert/edit image dialog
+ 3.2. Click Browse button near image url
+
+ 4. Inside BUEditor
+ 4.1. Click 'Insert/edit image'
+ 4.2. Click 'Browse'
+ 4.3. Select file
+ 4.4. Enter alt text then click OK
+
+ 5. Inside jWYSIWYG
+ 5.1. Make sure that you have jWYSYWIG 0.93+ (http://github.com/akzhan/jwysiwyg/), jQuery 1.3+ and jQuery UI 1.7+ installed
+ 5.2. Click 'Insert image' button
+ 5.3. Click 'Browse Server' button near image url
+
+ 6. Inside YUI Editor
+ 6.1. Click 'Insert Image' button
+ 6.2. Click 'Browse Server' button near image url
+
+ 7. Inside WYMeditor
+ 7.1. Click 'Image' button
+ 7.2. Click 'Browse Server' button near image url
+
+
+Known Issues:
+
+ - Not all editors supported
+ - Conflicting with some devel module features
+
+
diff --git a/sites/all/modules/contrib/files/elfinder/css/elfinder.admin.css b/sites/all/modules/contrib/files/elfinder/css/elfinder.admin.css
index 8a151d4c..2bc0142b 100644
--- a/sites/all/modules/contrib/files/elfinder/css/elfinder.admin.css
+++ b/sites/all/modules/contrib/files/elfinder/css/elfinder.admin.css
@@ -1,5 +1,11 @@
-.elfinder-field-wrapper-volume-path {
- float:left;
- width:300px;
- bborder:#f00 1px solid;
+/*
+ * elFinder Integration
+ *
+ * Copyright (c) 2010-2018, Alexey Sukhotin. All rights reserved.
+ */
+
+.elfinder-field-wrapper-volume-path {
+ float: left;
+ width: 300px;
+ bborder: #f00 1px solid;
}
\ No newline at end of file
diff --git a/sites/all/modules/contrib/files/elfinder/css/elfinder.common.css b/sites/all/modules/contrib/files/elfinder/css/elfinder.common.css
index 6a82b204..9e485041 100644
--- a/sites/all/modules/contrib/files/elfinder/css/elfinder.common.css
+++ b/sites/all/modules/contrib/files/elfinder/css/elfinder.common.css
@@ -1,27 +1,48 @@
-
-.el-finder-nav ul li {
- background:none;
- padding:0;
- margin:0;
-}
-.elfinder-cwd, .elfinder-navbar {
- font-size:13px!important;
-}
-
-.elfinder-cwd-view-icons .elfinder-cwd-file {
- height: 150px;
- width: 100px;
-}
-
-.elfinder-cwd-view-icons .elfinder-cwd-filename {
- white-space: normal;
- overflow:visible;
-}
-
-body.elfinder #finder {
- border: none;
-}
-
-body.elfinder .elfinder-toolbar, body.elfinder .elfinder-statusbar {
- border-radius: 0 !important;
-}
+/*
+ * elFinder Integration
+ *
+ * Copyright (c) 2010-2018, Alexey Sukhotin. All rights reserved.
+ */
+
+#finder .elfinder-statusbar {
+ padding: .2em 1em;
+}
+
+#finder fieldset.elfinder-resize-preset-container {
+ padding: .5em;
+}
+
+#finder .ui-dialog input[type='text'] {
+ padding: 1px 2px;
+}
+
+#finder .ui-dialog tr td {
+ border-right: none;
+ vertical-align: top;
+}
+
+#finder .ui-dialog textarea#elfinder-fm-file-desc {
+ background: #FFF;
+}
+
+#finder .elfinder-cwd-view-icons .elfinder-cwd-icon.elfinder-cwd-bgurl:before {
+ font-family: inherit;
+}
+
+/* elfinder popup window */
+body.elfinder #finder {
+ border: none;
+}
+
+body.elfinder .elfinder-toolbar,
+body.elfinder .elfinder-statusbar {
+ border-radius: 0 !important;
+}
+
+#elfinder-messages {
+ display: none;
+}
+
+#elfinder-messages.legacy {
+ display: block;
+}
\ No newline at end of file
diff --git a/sites/all/modules/contrib/files/elfinder/css/elfinder.css b/sites/all/modules/contrib/files/elfinder/css/elfinder.css
index b2f13c72..75dff32c 100644
--- a/sites/all/modules/contrib/files/elfinder/css/elfinder.css
+++ b/sites/all/modules/contrib/files/elfinder/css/elfinder.css
@@ -1,6 +1,11 @@
-
-.el-finder-nav ul li {
- background:none;
- padding:0;
- margin:0;
+/*
+ * elFinder Integration
+ *
+ * Copyright (c) 2010-2018, Alexey Sukhotin. All rights reserved.
+ */
+
+.el-finder-nav ul li {
+ background: none;
+ padding: 0;
+ margin: 0;
}
\ No newline at end of file
diff --git a/sites/all/modules/contrib/files/elfinder/css/elfinder.d7.css b/sites/all/modules/contrib/files/elfinder/css/elfinder.d7.css
deleted file mode 100644
index f38e1ad9..00000000
--- a/sites/all/modules/contrib/files/elfinder/css/elfinder.d7.css
+++ /dev/null
@@ -1,9 +0,0 @@
-
-.el-finder-nav ul {
- list-style-type:none!important;
-}
-
-.el-finder-cwd label {
- font-weight:normal!important;
- overflow:visible!important;
-}
\ No newline at end of file
diff --git a/sites/all/modules/contrib/files/elfinder/css/ui-themes/smoothness/jquery-ui.custom.css b/sites/all/modules/contrib/files/elfinder/css/ui-themes/smoothness/jquery-ui.custom.css
index f1bbe49a..550735b1 100644
--- a/sites/all/modules/contrib/files/elfinder/css/ui-themes/smoothness/jquery-ui.custom.css
+++ b/sites/all/modules/contrib/files/elfinder/css/ui-themes/smoothness/jquery-ui.custom.css
@@ -1,3 +1,8 @@
+/*
+ * elFinder Integration
+ *
+ * Copyright (c) 2010-2018, Alexey Sukhotin. All rights reserved.
+ */
@import url('jquery-ui.min.css');
@import url('jquery-ui.structure.min.css');
@import url('jquery-ui.theme.min.css');
diff --git a/sites/all/modules/contrib/files/elfinder/css/ui-themes/smoothness/jquery-ui.min.css b/sites/all/modules/contrib/files/elfinder/css/ui-themes/smoothness/jquery-ui.min.css
index 1c44092c..dbd72353 100644
--- a/sites/all/modules/contrib/files/elfinder/css/ui-themes/smoothness/jquery-ui.min.css
+++ b/sites/all/modules/contrib/files/elfinder/css/ui-themes/smoothness/jquery-ui.min.css
@@ -1,7 +1,7 @@
-/*! jQuery UI - v1.11.4 - 2015-08-06
+/*! jQuery UI - v1.12.1 - 2016-09-14
* http://jqueryui.com
-* Includes: core.css, draggable.css, resizable.css, selectable.css, sortable.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, menu.css, progressbar.css, selectmenu.css, slider.css, spinner.css, tabs.css, tooltip.css, theme.css
+* Includes: core.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, draggable.css, resizable.css, progressbar.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css
* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
-* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */
+* Copyright jQuery Foundation and other contributors; Licensed MIT */
-.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable{-ms-touch-action:none;touch-action:none}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-sortable-handle{-ms-touch-action:none;touch-action:none}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0 0;padding:.5em .5em .5em .7em;min-height:0;font-size:100%}.ui-accordion .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-button{display:inline-block;position:relative;padding:0;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-dialog{overflow:hidden;position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:none}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{position:relative;margin:0;padding:3px 1em 3px .4em;cursor:pointer;min-height:0;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");height:100%;filter:alpha(opacity=25);opacity:0.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-selectmenu-menu{padding:0;margin:0;position:absolute;top:0;left:0;display:none}.ui-selectmenu-menu .ui-menu{overflow:auto;overflow-x:hidden;padding-bottom:1px}.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup{font-size:1em;font-weight:bold;line-height:1.5;padding:2px 0.4em;margin:0.5em 0 0 0;height:auto;border:0}.ui-selectmenu-open{display:block}.ui-selectmenu-button{display:inline-block;overflow:hidden;position:relative;text-decoration:none;cursor:pointer}.ui-selectmenu-button span.ui-icon{right:0.5em;left:auto;margin-top:-8px;position:absolute;top:50%}.ui-selectmenu-button span.ui-selectmenu-text{text-align:left;padding:0.4em 2.1em 0.4em 1em;display:block;line-height:1.4;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default;-ms-touch-action:none;touch-action:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:none;color:inherit;padding:0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:22px}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:none;border-bottom:none;border-right:none}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px;-webkit-box-shadow:0 0 5px #aaa;box-shadow:0 0 5px #aaa}body .ui-tooltip{border-width:2px}.ui-widget{font-family:Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #aaa;background:#fff url("images/ui-bg_flat_75_ffffff_40x100.png") 50% 50% repeat-x;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #aaa;background:#ccc url("images/ui-bg_highlight-soft_75_cccccc_1x100.png") 50% 50% repeat-x;color:#222;font-weight:bold}.ui-widget-header a{color:#222}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #d3d3d3;background:#e6e6e6 url("images/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #999;background:#dadada url("images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited{color:#212121;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #aaa;background:#fff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee url("images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x;color:#cd0a0a}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url("images/ui-icons_222222_256x240.png")}.ui-widget-header .ui-icon{background-image:url("images/ui-icons_222222_256x240.png")}.ui-state-default .ui-icon{background-image:url("images/ui-icons_888888_256x240.png")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url("images/ui-icons_454545_256x240.png")}.ui-state-active .ui-icon{background-image:url("images/ui-icons_454545_256x240.png")}.ui-state-highlight .ui-icon{background-image:url("images/ui-icons_2e83ff_256x240.png")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("images/ui-icons_cd0a0a_256x240.png")}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:4px}.ui-widget-overlay{background:#aaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30);border-radius:8px}
\ No newline at end of file
+.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important;pointer-events:none}.ui-icon{display:inline-block;vertical-align:middle;margin-top:-.25em;position:relative;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-icon-block{left:50%;margin-left:-8px;display:block}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0 0;padding:.5em .5em .5em .7em;font-size:100%}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:0}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{margin:0;cursor:pointer;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-item-wrapper{position:relative;padding:3px 1em 3px .4em}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item-wrapper{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-button{padding:.4em 1em;display:inline-block;position:relative;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2em;box-sizing:border-box;text-indent:-9999px;white-space:nowrap}input.ui-button.ui-button-icon-only{text-indent:0}.ui-button-icon-only .ui-icon{position:absolute;top:50%;left:50%;margin-top:-8px;margin-left:-8px}.ui-button.ui-icon-notext .ui-icon{padding:0;width:2.1em;height:2.1em;text-indent:-9999px;white-space:nowrap}input.ui-button.ui-icon-notext .ui-icon{width:auto;height:auto;text-indent:0;white-space:normal;padding:.4em 1em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-controlgroup{vertical-align:middle;display:inline-block}.ui-controlgroup > .ui-controlgroup-item{float:left;margin-left:0;margin-right:0}.ui-controlgroup > .ui-controlgroup-item:focus,.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus{z-index:9999}.ui-controlgroup-vertical > .ui-controlgroup-item{display:block;float:none;width:100%;margin-top:0;margin-bottom:0;text-align:left}.ui-controlgroup-vertical .ui-controlgroup-item{box-sizing:border-box}.ui-controlgroup .ui-controlgroup-label{padding:.4em 1em}.ui-controlgroup .ui-controlgroup-label span{font-size:80%}.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item{border-left:none}.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item{border-top:none}.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content{border-right:none}.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content{border-bottom:none}.ui-controlgroup-vertical .ui-spinner-input{width:75%;width:calc( 100% - 2.4em )}.ui-controlgroup-vertical .ui-spinner .ui-spinner-up{border-top-style:solid}.ui-checkboxradio-label .ui-icon-background{box-shadow:inset 1px 1px 1px #ccc;border-radius:.12em;border:none}.ui-checkboxradio-radio-label .ui-icon-background{width:16px;height:16px;border-radius:1em;overflow:visible;border:none}.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon,.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon{background-image:none;width:8px;height:8px;border-width:4px;border-style:solid}.ui-checkboxradio-disabled{pointer-events:none}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-datepicker .ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat;left:.5em;top:.3em}.ui-dialog{position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-n{height:2px;top:0}.ui-dialog .ui-resizable-e{width:2px;right:0}.ui-dialog .ui-resizable-s{height:2px;bottom:0}.ui-dialog .ui-resizable-w{width:2px;left:0}.ui-dialog .ui-resizable-se,.ui-dialog .ui-resizable-sw,.ui-dialog .ui-resizable-ne,.ui-dialog .ui-resizable-nw{width:7px;height:7px}.ui-dialog .ui-resizable-se{right:0;bottom:0}.ui-dialog .ui-resizable-sw{left:0;bottom:0}.ui-dialog .ui-resizable-ne{right:0;top:0}.ui-dialog .ui-resizable-nw{left:0;top:0}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");height:100%;filter:alpha(opacity=25);opacity:0.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-selectable{-ms-touch-action:none;touch-action:none}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-selectmenu-menu{padding:0;margin:0;position:absolute;top:0;left:0;display:none}.ui-selectmenu-menu .ui-menu{overflow:auto;overflow-x:hidden;padding-bottom:1px}.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup{font-size:1em;font-weight:bold;line-height:1.5;padding:2px 0.4em;margin:0.5em 0 0 0;height:auto;border:0}.ui-selectmenu-open{display:block}.ui-selectmenu-text{display:block;margin-right:20px;overflow:hidden;text-overflow:ellipsis}.ui-selectmenu-button.ui-button{text-align:left;white-space:nowrap;width:14em}.ui-selectmenu-icon.ui-icon{float:right;margin-top:0}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default;-ms-touch-action:none;touch-action:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-sortable-handle{-ms-touch-action:none;touch-action:none}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:none;color:inherit;padding:.222em 0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:2em}.ui-spinner-button{width:1.6em;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top-style:none;border-bottom-style:none;border-right-style:none}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px}body .ui-tooltip{border-width:2px}.ui-widget{font-family:Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Verdana,Arial,sans-serif;font-size:1em}.ui-widget.ui-widget-content{border:1px solid #d3d3d3}.ui-widget-content{border:1px solid #aaa;background:#fff;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #aaa;background:#ccc url("images/ui-bg_highlight-soft_75_cccccc_1x100.png") 50% 50% repeat-x;color:#222;font-weight:bold}.ui-widget-header a{color:#222}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default,.ui-button,html .ui-button.ui-state-disabled:hover,html .ui-button.ui-state-disabled:active{border:1px solid #d3d3d3;background:#e6e6e6 url("images/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited,a.ui-button,a:link.ui-button,a:visited.ui-button,.ui-button{color:#555;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus,.ui-button:hover,.ui-button:focus{border:1px solid #999;background:#dadada url("images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited,a.ui-button:hover,a.ui-button:focus{color:#212121;text-decoration:none}.ui-visual-focus{box-shadow:0 0 3px 1px rgb(94,158,214)}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active,a.ui-button:active,.ui-button:active,.ui-button.ui-state-active:hover{border:1px solid #aaa;background:#fff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-icon-background,.ui-state-active .ui-icon-background{border:#aaa;background-color:#212121}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee url("images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x;color:#363636}.ui-state-checked{border:1px solid #fcefa1;background:#fbf9ee}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x;color:#cd0a0a}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url("images/ui-icons_222222_256x240.png")}.ui-widget-header .ui-icon{background-image:url("images/ui-icons_222222_256x240.png")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon,.ui-button:hover .ui-icon,.ui-button:focus .ui-icon{background-image:url("images/ui-icons_454545_256x240.png")}.ui-state-active .ui-icon,.ui-button:active .ui-icon{background-image:url("images/ui-icons_454545_256x240.png")}.ui-state-highlight .ui-icon,.ui-button .ui-state-highlight.ui-icon{background-image:url("images/ui-icons_2e83ff_256x240.png")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("images/ui-icons_cd0a0a_256x240.png")}.ui-button .ui-icon{background-image:url("images/ui-icons_888888_256x240.png")}.ui-icon-blank{background-position:16px 16px}.ui-icon-caret-1-n{background-position:0 0}.ui-icon-caret-1-ne{background-position:-16px 0}.ui-icon-caret-1-e{background-position:-32px 0}.ui-icon-caret-1-se{background-position:-48px 0}.ui-icon-caret-1-s{background-position:-65px 0}.ui-icon-caret-1-sw{background-position:-80px 0}.ui-icon-caret-1-w{background-position:-96px 0}.ui-icon-caret-1-nw{background-position:-112px 0}.ui-icon-caret-2-n-s{background-position:-128px 0}.ui-icon-caret-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-65px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-65px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:1px -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:4px}.ui-widget-overlay{background:#aaa;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{-webkit-box-shadow:-8px -8px 8px #aaa;box-shadow:-8px -8px 8px #aaa}
\ No newline at end of file
diff --git a/sites/all/modules/contrib/files/elfinder/editors/bueditor/bueditor.callback.js b/sites/all/modules/contrib/files/elfinder/editors/bueditor/bueditor.callback.js
index fb40015d..708472e2 100644
--- a/sites/all/modules/contrib/files/elfinder/editors/bueditor/bueditor.callback.js
+++ b/sites/all/modules/contrib/files/elfinder/editors/bueditor/bueditor.callback.js
@@ -1 +1,19 @@
-// $Id$
function elfinder_bueditor_callback(url) {
var img = jQuery('').attr('src', url).css('display', 'none').insertBefore(jQuery('#finder'));
parent.jQuery("#bue-tgd-form input[name=attr_width]").val(img.width());
parent.jQuery("#bue-tgd-form input[name=attr_height]").val(img.height());
parent.BUE.imce.target.value = url;
parent.BUE.popups['bue-imce-pop'].close();
}
function elfinder_bue_callback(url) {
elfinder_bueditor_callback(url);
}
\ No newline at end of file
+/*
+ * elFinder Integration
+ *
+ * Copyright (c) 2010-2018, Alexey Sukhotin. All rights reserved.
+ */
+
+function elfinder_bueditor_callback(url) {
+ var img = jQuery('').attr('src', url).css('display', 'none').insertBefore(jQuery('#finder'));
+ parent.jQuery("#bue-tgd-form input[name=attr_width]").val(img.width());
+ parent.jQuery("#bue-tgd-form input[name=attr_height]").val(img.height());
+ parent.BUE.imce.target.value = url;
+ parent.BUE.popups['bue-imce-pop'].close();
+}
+
+function elfinder_bue_callback(url) {
+ elfinder_bueditor_callback(url);
+}
+
+
diff --git a/sites/all/modules/contrib/files/elfinder/editors/bueditor/bueditor.inc b/sites/all/modules/contrib/files/elfinder/editors/bueditor/bueditor.inc
index 6e0fb39f..926bcdb5 100644
--- a/sites/all/modules/contrib/files/elfinder/editors/bueditor/bueditor.inc
+++ b/sites/all/modules/contrib/files/elfinder/editors/bueditor/bueditor.inc
@@ -1,23 +1,29 @@
array('moduleUrl' => url('elfinder'))), 'setting');
- drupal_add_js(array('elfinder' => array('moduleUrl' => url('elfinder'))), 'setting');
- drupal_add_js($options['plugin_url_base'] . '/bueditor.js');
+ drupal_add_js(array('elfinder' => array('moduleUrl' => url('elfinder'))), 'setting');
+ drupal_add_js(array('elfinder' => array('moduleUrl' => url('elfinder'))), 'setting');
+ drupal_add_js($options['plugin_url_base'] . '/bueditor.js');
- return array(
- 'elfinder' => array(
- 'extensions' => array('elfinder' => t('elFinder')),
- 'url' => $options['homepage_url'],
- 'options' => array(),
- 'load' => FALSE,
- ),
- );
+ return array(
+ 'elfinder' => array(
+ 'extensions' => array('elfinder' => t('elFinder')),
+ 'url' => $options['homepage_url'],
+ 'options' => array(),
+ 'load' => FALSE,
+ ),
+ );
}
diff --git a/sites/all/modules/contrib/files/elfinder/editors/bueditor/bueditor.js b/sites/all/modules/contrib/files/elfinder/editors/bueditor/bueditor.js
index d55f06f7..5b7100dd 100644
--- a/sites/all/modules/contrib/files/elfinder/editors/bueditor/bueditor.js
+++ b/sites/all/modules/contrib/files/elfinder/editors/bueditor/bueditor.js
@@ -1,12 +1,18 @@
+/*
+ * elFinder Integration
+ *
+ * Copyright (c) 2010-2018, Alexey Sukhotin. All rights reserved.
+ */
+
// $Id: elfinder.bueditor.js,v 1.1 2010/10/06 09:44:51 ph0enix Exp $
Drupal.elfinder.editor.bueditor = {
- fn : {
+ fn: {
attach: Drupal.wysiwyg.editor.attach.bueditor
}
}
Drupal.wysiwyg.editor.attach.bueditor = function(context, params, settings) {
- Drupal.settings.BUE.imceURL = Drupal.settings.elfinder.moduleUrl;
- Drupal.elfinder.editor.bueditor.fn.attach.apply(this, arguments);
+ Drupal.settings.BUE.imceURL = Drupal.settings.elfinder.moduleUrl;
+ Drupal.elfinder.editor.bueditor.fn.attach.apply(this, arguments);
}
diff --git a/sites/all/modules/contrib/files/elfinder/editors/ckeditor/ckeditor.callback.js b/sites/all/modules/contrib/files/elfinder/editors/ckeditor/ckeditor.callback.js
index e253c4ac..0059042d 100644
--- a/sites/all/modules/contrib/files/elfinder/editors/ckeditor/ckeditor.callback.js
+++ b/sites/all/modules/contrib/files/elfinder/editors/ckeditor/ckeditor.callback.js
@@ -1,4 +1,8 @@
-
+/*
+ * elFinder Integration
+ *
+ * Copyright (c) 2010-2019, Alexey Sukhotin. All rights reserved.
+ */
function elfinder_ckeditor_callback(arg1) {
@@ -7,13 +11,23 @@ function elfinder_ckeditor_callback(arg1) {
if (typeof arg1 == 'object') {
url = arg1.url;
}
+
funcNum = window.location.search.replace(/^.*CKEditorFuncNum=(\d+).*$/, "$1");
+
window.opener.CKEDITOR.tools.callFunction(funcNum, url, function() {
// adapted from http://docs.ckeditor.com/#!/guide/dev_file_browser_api
+
var dialog = this.getDialog();
- if (dialog.getName() == 'link' ) {
+
+ if (dialog.getName() == 'link') {
+
var element = dialog.getContentElement('info', 'linkDisplayText');
- var display_text = element.getValue();
+ var display_text = null;
+
+ if (element) {
+ display_text = element.getValue();
+ }
+
// If display text is blank, insert the filename.
if (element && !display_text) {
element.setValue(arg1.name);
@@ -24,7 +38,7 @@ function elfinder_ckeditor_callback(arg1) {
// Avoid beforeunload event when selecting an image.
// See https://github.com/Studio-42/elFinder/issues/1340
// Maybe remove this when elfinder js library gets updated.
- $(window).off('beforeunload');
+ jQuery(window).off('beforeunload');
window.close();
}
diff --git a/sites/all/modules/contrib/files/elfinder/editors/ckeditor/ckeditor.inc b/sites/all/modules/contrib/files/elfinder/editors/ckeditor/ckeditor.inc
index 9482fb40..6935a9c9 100644
--- a/sites/all/modules/contrib/files/elfinder/editors/ckeditor/ckeditor.inc
+++ b/sites/all/modules/contrib/files/elfinder/editors/ckeditor/ckeditor.inc
@@ -1,4 +1,9 @@
array(
@@ -18,6 +23,7 @@ function elfinder_ckeditor_elfinder_editor_plugin($options) {
'filebrowserUploadUrl' => url('elfinder/upload/ckeditor'),
'filebrowserImageUploadUrl' => url('elfinder/upload/ckeditor'),
'filebrowserFlashUploadUrl' => url('elfinder/upload/ckeditor'),
+ //'filebrowserBrowseUrl' => 'javascript:alert(12345);return false;//',
),
'load' => FALSE,
),
diff --git a/sites/all/modules/contrib/files/elfinder/editors/ckeditor/ckeditor.upload.inc b/sites/all/modules/contrib/files/elfinder/editors/ckeditor/ckeditor.upload.inc
index 0d976ae1..b4457414 100644
--- a/sites/all/modules/contrib/files/elfinder/editors/ckeditor/ckeditor.upload.inc
+++ b/sites/all/modules/contrib/files/elfinder/editors/ckeditor/ckeditor.upload.inc
@@ -1,36 +1,42 @@
settings['ckeditor_upload_directory'], '://')) {
- $dest .= $p->settings['ckeditor_upload_directory'];
- } else {
- $dest = $p->settings['ckeditor_upload_directory'];
- }
-
- $dest = elfinder_parse_path_tokens($dest);
-
- $destabs = drupal_realpath($dest);
-
- if (!file_prepare_directory($destabs, FILE_CREATE_DIRECTORY)) {
+ if (!strpos($p->settings['ckeditor_upload_directory'], '://')) {
+ $dest .= $p->settings['ckeditor_upload_directory'];
+ } else {
+ $dest = $p->settings['ckeditor_upload_directory'];
+ }
+
+ $dest = elfinder_parse_path_tokens($dest);
+
+ $destabs = drupal_realpath($dest);
+
+ if (!file_prepare_directory($destabs, FILE_CREATE_DIRECTORY)) {
drupal_set_message(t('Error. Cannot initialize directory %dir', array('%dir' => $destabs)), 'error');
}
-
+
$tmpf = $_FILES;
-
+
foreach (array_keys($_FILES['upload']) as $key) {
$tmpf['files'][$key]['upload'] = $_FILES['upload'][$key];
}
-
+
$_FILES = $tmpf;
$file = file_save_upload('upload', array(), $dest);
@@ -38,7 +44,7 @@ function elfinder_editor_upload_ckeditor() {
file_save($file);
header('Content-Type: text/html');
-
+
print '';
exit();
diff --git a/sites/all/modules/contrib/files/elfinder/editors/jwysiwyg/jwysiwyg.callback.js b/sites/all/modules/contrib/files/elfinder/editors/jwysiwyg/jwysiwyg.callback.js
index 3c1e291b..d1dc3e84 100644
--- a/sites/all/modules/contrib/files/elfinder/editors/jwysiwyg/jwysiwyg.callback.js
+++ b/sites/all/modules/contrib/files/elfinder/editors/jwysiwyg/jwysiwyg.callback.js
@@ -1 +1,10 @@
-// $Id$
function elfinder_jwysiwyg_callback(url) {
window.opener.jQuery('.ui-dialog input[type=text][name=url]').val(url);
window.close();
}
\ No newline at end of file
+/*
+ * elFinder Integration
+ *
+ * Copyright (c) 2010-2018, Alexey Sukhotin. All rights reserved.
+ */
+
+function elfinder_jwysiwyg_callback(url) {
+ window.opener.jQuery('.ui-dialog input[type=text][name=url]').val(url);
+ window.close();
+}
\ No newline at end of file
diff --git a/sites/all/modules/contrib/files/elfinder/editors/jwysiwyg/jwysiwyg.inc b/sites/all/modules/contrib/files/elfinder/editors/jwysiwyg/jwysiwyg.inc
index cf9567bc..673c93f1 100644
--- a/sites/all/modules/contrib/files/elfinder/editors/jwysiwyg/jwysiwyg.inc
+++ b/sites/all/modules/contrib/files/elfinder/editors/jwysiwyg/jwysiwyg.inc
@@ -1,29 +1,39 @@
jquery_update and jquery_ui modules.'), 'error');
- }
-
- drupal_add_js(array('elfinder' => array('file_browser_url' => $options['elfinder_url'])), 'setting');
- drupal_add_js($options['plugin_url_base'] . '/jwysiwyg.js');
-
- return array(
- 'elfinder' => array(
- 'extensions' => array('elfinder' => t('elFinder')),
- 'url' => $options['homepage_url'],
- 'options' => array(),
- 'load' => FALSE,
- ),
- );
+ if (VERSION < 7) {
+ if (module_exists('jquery_update') && module_exists('jquery_ui')) {
+ drupal_add_css(JQUERY_UI_PATH . '/themes/base/ui.all.css');
+ jquery_ui_add(array('ui.dialog', 'ui.accordion', 'ui.draggable', 'ui.droppable', 'ui.selectable'));
+ } else {
+ drupal_set_message(t('elFinder requires jQuery 1.3+ and jQuery UI 1.7+ for jWYSIWYG support. Please install and enable jquery_update and jquery_ui modules.'), 'error');
+ }
+ }
+
+ drupal_add_js(array('elfinder' => array('file_browser_url' => $options['elfinder_url'])), 'setting');
+ drupal_add_js($options['plugin_url_base'] . '/jwysiwyg.js');
+
+ return array(
+ 'elfinder' => array(
+ 'extensions' => array('elfinder' => t('elFinder')),
+ 'url' => $options['homepage_url'],
+ 'options' => array(),
+ 'load' => FALSE,
+ ),
+ );
}
diff --git a/sites/all/modules/contrib/files/elfinder/editors/jwysiwyg/jwysiwyg.js b/sites/all/modules/contrib/files/elfinder/editors/jwysiwyg/jwysiwyg.js
index 3ef21647..fe8c94b6 100644
--- a/sites/all/modules/contrib/files/elfinder/editors/jwysiwyg/jwysiwyg.js
+++ b/sites/all/modules/contrib/files/elfinder/editors/jwysiwyg/jwysiwyg.js
@@ -1,34 +1,40 @@
+/*
+ * elFinder Integration
+ *
+ * Copyright (c) 2010-2018, Alexey Sukhotin. All rights reserved.
+ */
+
// $Id: elfinder.jwysiwyg.js,v 1.1 2010/10/06 09:44:51 ph0enix Exp $
(function($) {
-Drupal.elfinder.editor.jwysiwyg = {
- fn : {
- attach: Drupal.wysiwyg.editor.attach.jwysiwyg
- }
-}
-
-Drupal.wysiwyg.editor.attach.jwysiwyg = function(context, params, settings) {
-
- var imgHtml = null;
-
- if (jQuery.fn.wysiwyg.defaults) {
- imgHtml = jQuery.fn.wysiwyg.defaults.formImageHtml;
- }
-
- var oImgHtml = $('