diff options
Diffstat (limited to 'views/default')
275 files changed, 13486 insertions, 5047 deletions
diff --git a/views/default/admin/appearance/default_widgets.php b/views/default/admin/appearance/default_widgets.php new file mode 100644 index 000000000..1bf5791ac --- /dev/null +++ b/views/default/admin/appearance/default_widgets.php @@ -0,0 +1,82 @@ +<?php +/** + * Default widgets landing page. + * + * @package Elgg.Core + * @subpackage Administration.DefaultWidgets + */ + +$object = elgg_get_entities(array( + 'type' => 'object', + 'subtype' => 'moddefaultwidgets', + 'limit' => 1, +)); + +if ($object) { + echo elgg_view('output/url', array( + 'text' => elgg_echo('upgrade'), + 'href' => 'action/widgets/upgrade', + 'is_action' => true, + 'is_trusted' => true, + 'class' => 'elgg_button elgg-button-submit', + 'title' => 'Upgrade your default widgets to work on Elgg 1.8', + )); +} + +elgg_push_context('default_widgets'); +$widget_context = get_input('widget_context'); +$list = elgg_trigger_plugin_hook('get_list', 'default_widgets', null, array()); + +// default to something if we can +if (!$widget_context && $list) { + $widget_context = $list[0]['widget_context']; +} + +$current_info = null; +$tabs = array(); +foreach ($list as $info) { + $url = "admin/appearance/default_widgets?widget_context={$info['widget_context']}"; + $selected = false; + if ($widget_context == $info['widget_context']) { + $selected = true; + $current_info = $info; + } + + $tabs[] = array( + 'title' => $info['name'], + 'url' => $url, + 'selected' => $selected + ); +} + +$tabs_vars = array( + 'tabs' => $tabs +); + +echo elgg_view('navigation/tabs', $tabs_vars); + +echo elgg_view('output/longtext', array('value' => elgg_echo('admin:default_widgets:instructions'))); + +if (!$current_info) { + $content = elgg_echo('admin:default_widgets:unknown_type'); +} else { + // default widgets are owned and saved to the site. + elgg_set_page_owner_guid(elgg_get_config('site_guid')); + elgg_push_context($current_info['widget_context']); + + $default_widgets_input = elgg_view('input/hidden', array( + 'name' => 'default_widgets', + 'value' => 1 + )); + + $params = array( + 'content' => $default_widgets_input, + 'num_columns' => $current_info['widget_columns'], + ); + + $content = elgg_view_layout('widgets', $params); + elgg_pop_context(); +} +elgg_pop_context(); + +echo $content; diff --git a/views/default/admin/appearance/menu_items.php b/views/default/admin/appearance/menu_items.php new file mode 100644 index 000000000..1d5c95cf9 --- /dev/null +++ b/views/default/admin/appearance/menu_items.php @@ -0,0 +1,10 @@ +<?php +/** + * Elgg administration menu items + * + * @package Elgg + * @subpackage Core + */ + + +echo elgg_view_form('admin/menu/save', array('class' => 'elgg-form-settings')); diff --git a/views/default/admin/appearance/profile_fields.php b/views/default/admin/appearance/profile_fields.php new file mode 100644 index 000000000..f1d78c19f --- /dev/null +++ b/views/default/admin/appearance/profile_fields.php @@ -0,0 +1,24 @@ +<?php +/** + * Admin area: edit default profile fields + */ + +$add = elgg_view_form('profile/fields/add', array('class' => 'elgg-form-settings'), array()); +$list = elgg_view('admin/appearance/profile_fields/list'); + +$reset = elgg_view('output/confirmlink', array( + 'text' => elgg_echo('reset'), + 'href' => 'action/profile/fields/reset', + 'title' => elgg_echo('profile:resetdefault'), + 'confirm' => elgg_echo('profile:resetdefault:confirm'), + 'class' => 'elgg-button elgg-button-cancel', + 'is_trusted' => 'true', +)); + +$body = <<<__HTML +$add +$list +<div class="mtl">$reset</div> +__HTML; + +echo $body; diff --git a/views/default/admin/appearance/profile_fields/list.php b/views/default/admin/appearance/profile_fields/list.php new file mode 100644 index 000000000..b9440a95d --- /dev/null +++ b/views/default/admin/appearance/profile_fields/list.php @@ -0,0 +1,55 @@ +<?php +/** + * Profile fields. + * + * @todo Needs some review + */ + +// List form elements +$n = 0; +$loaded_defaults = array(); +$items = array(); +$fieldlist = elgg_get_config('profile_custom_fields'); +if ($fieldlist) { + $fieldlistarray = explode(',', $fieldlist); + foreach ($fieldlistarray as $listitem) { + $translation = elgg_get_config("admin_defined_profile_$listitem"); + $type = elgg_get_config("admin_defined_profile_type_$listitem"); + if ($translation && $type) { + $item = new stdClass; + $item->translation = $translation; + $item->shortname = $listitem; + $item->name = "admin_defined_profile_$listitem"; + $item->type = elgg_echo("profile:field:$type"); + $items[] = $item; + } + } +} +?> +<ul id="elgg-profile-fields" class="mvm"> +<?php + +$save = elgg_echo('save'); +$cancel = elgg_echo('cancel'); + +foreach ($items as $item) { + echo elgg_view("profile/", array('value' => $item->translation)); + + //$even_odd = ( 'odd' != $even_odd ) ? 'odd' : 'even'; + $url = elgg_view('output/url', array( + 'href' => "action/profile/fields/delete?id={$item->shortname}", + 'text' => elgg_view_icon('delete-alt'), + 'is_action' => true, + 'is_trusted' => true, + )); + $type = elgg_echo($item->type); + echo <<<HTML +<li id="$item->shortname" class="clearfix"> + <span class="elgg-icon elgg-icon-drag-arrow elgg-state-draggable"></span> + <b><span id="elgg-profile-field-{$item->shortname}" class="elgg-state-editable">$item->translation</span></b> [$type] $url +</li> +HTML; +} + +?> +</ul>
\ No newline at end of file diff --git a/views/default/admin/dashboard.php b/views/default/admin/dashboard.php new file mode 100644 index 000000000..d3976ca38 --- /dev/null +++ b/views/default/admin/dashboard.php @@ -0,0 +1,12 @@ +<?php + +elgg_set_page_owner_guid(elgg_get_logged_in_user_guid()); + +$params = array( + 'num_columns' => 2, + 'exact_match' => true, + 'show_access' => false, +); +$widgets = elgg_view_layout('widgets', $params); + +echo $widgets;
\ No newline at end of file diff --git a/views/default/admin/footer.php b/views/default/admin/footer.php new file mode 100644 index 000000000..ce420e99a --- /dev/null +++ b/views/default/admin/footer.php @@ -0,0 +1,9 @@ +<?php +/** + * Elgg admin footer. Extend this view to add content to the admin footer + */ + +$options = array( + 'class' => 'elgg-menu-hz' +); +echo elgg_view_menu('admin_footer', $options);
\ No newline at end of file diff --git a/views/default/admin/header.php b/views/default/admin/header.php new file mode 100644 index 000000000..331190a88 --- /dev/null +++ b/views/default/admin/header.php @@ -0,0 +1,27 @@ +<?php +/** + * Elgg admin header + */ +$admin_title = elgg_get_site_entity()->name . ' ' . elgg_echo('admin'); + +$view_site = elgg_view('output/url', array( + 'href' => elgg_get_site_url(), + 'text' => elgg_echo('admin:view_site'), + 'is_trusted' => true, +)); +$logout = elgg_view('output/url', array( + 'href' => 'action/logout', + 'text' => elgg_echo('logout'), + 'is_trusted' => true, +)); +?> +<h1 class="elgg-heading-site"> + <a href="<?php echo elgg_get_site_url(); ?>admin"> + <?php echo $admin_title; ?> + </a> +</h1> +<ul class="elgg-menu-user"> + <li><?php echo elgg_echo('admin:loggedin', array(elgg_get_logged_in_user_entity()->name)); ?></li> + <li><?php echo $view_site; ?></li> + <li><?php echo $logout; ?></li> +</ul>
\ No newline at end of file diff --git a/views/default/admin/plugin_settings.php b/views/default/admin/plugin_settings.php new file mode 100644 index 000000000..1c6e9e206 --- /dev/null +++ b/views/default/admin/plugin_settings.php @@ -0,0 +1,26 @@ +<?php +/** + * Elgg plugin settings + * + * @uses ElggPlugin $vars['plugin'] The plugin object to display settings for. + * + * @package Elgg.Core + * @subpackage Plugins.Settings + */ + +$plugin = $vars['plugin']; +$plugin_id = $plugin->getID(); + +// required for plugin settings backward compatibility +$vars['entity'] = $plugin; + +$settings = false; + +if (elgg_view_exists("settings/$plugin_id/edit") || elgg_view_exists("plugins/$plugin_id/settings")) { + $title = $plugin->getManifest()->getName(); + + $params = array('id' => "$plugin_id-settings", 'class' => 'elgg-form-settings'); + $body = elgg_view_form("plugins/settings/save", $params, $vars); + + echo elgg_view_module('info', $title, $body); +}
\ No newline at end of file diff --git a/views/default/admin/plugins.php b/views/default/admin/plugins.php new file mode 100644 index 000000000..42f153d0f --- /dev/null +++ b/views/default/admin/plugins.php @@ -0,0 +1,197 @@ +<?php +/** + * Elgg administration plugin screen + * + * Shows a list of plugins that can be sorted and filtered. + * + * @package Elgg.Core + * @subpackage Admin.Plugins + */ + +elgg_load_js('lightbox'); +elgg_load_css('lightbox'); + +elgg_generate_plugin_entities(); +$installed_plugins = elgg_get_plugins('any'); +$show_category = get_input('category', 'all'); +$sort = get_input('sort', 'priority'); + +// Get a list of the all categories +// and trim down the plugin list if we're not viewing all categories. +// @todo this could be cached somewhere after have the manifest loaded +$categories = array(); + +foreach ($installed_plugins as $id => $plugin) { + if (!$plugin->isValid()) { + if ($plugin->isActive()) { + // force disable and warn + elgg_add_admin_notice('invalid_and_deactivated_' . $plugin->getID(), + elgg_echo('ElggPlugin:InvalidAndDeactivated', array($plugin->getId()))); + $plugin->deactivate(); + } + continue; + } + + $plugin_categories = $plugin->getManifest()->getCategories(); + + // handle plugins that don't declare categories + // unset them here because this is the list we foreach + switch ($show_category) { + case 'all': + break; + case 'active': + if (!$plugin->isActive()) { + unset($installed_plugins[$id]); + } + break; + case 'inactive': + if ($plugin->isActive()) { + unset($installed_plugins[$id]); + } + break; + case 'nonbundled': + if (in_array('bundled', $plugin_categories)) { + unset($installed_plugins[$id]); + } + break; + default: + if (!in_array($show_category, $plugin_categories)) { + unset($installed_plugins[$id]); + } + break; + } + + if (isset($plugin_categories)) { + foreach ($plugin_categories as $category) { + if (!array_key_exists($category, $categories)) { + $categories[$category] = ElggPluginManifest::getFriendlyCategory($category); + } + } + } +} + +$guids = array(); +foreach ($installed_plugins as $plugin) { + $guids[] = $plugin->getGUID(); +} + +// sort plugins +switch ($sort) { + case 'date': + $plugin_list = array(); + foreach ($installed_plugins as $plugin) { + $create_date = $plugin->getTimeCreated(); + while (isset($plugin_list[$create_date])) { + $create_date++; + } + $plugin_list[$create_date] = $plugin; + } + krsort($plugin_list); + break; + case 'alpha': + $plugin_list = array(); + foreach ($installed_plugins as $plugin) { + $plugin_list[$plugin->getFriendlyName()] = $plugin; + } + ksort($plugin_list); + break; + case 'priority': + default: + $plugin_list = $installed_plugins; + break; +} + + + +asort($categories); + +// we want bundled/nonbundled pulled to be at the top of the list +unset($categories['bundled']); +unset($categories['nonbundled']); + +$common_categories = array( + 'all' => elgg_echo('admin:plugins:category:all'), + 'active' => elgg_echo('admin:plugins:category:active'), + 'inactive' => elgg_echo('admin:plugins:category:inactive'), + 'bundled' => elgg_echo('admin:plugins:category:bundled'), + 'nonbundled' => elgg_echo('admin:plugins:category:nonbundled'), +); + +$categories = array_merge($common_categories, $categories); +// security - only want a defined option +if (!array_key_exists($show_category, $categories)) { + $show_category = reset($categories); +} + +$category_form = elgg_view_form('admin/plugins/filter', array( + 'action' => 'admin/plugins', + 'method' => 'get', + 'disable_security' => true, +), array( + 'category' => $show_category, + 'category_options' => $categories, + 'sort' => $sort, +)); + + +$sort_options = array( + 'priority' => elgg_echo('admin:plugins:sort:priority'), + 'alpha' => elgg_echo('admin:plugins:sort:alpha'), + 'date' => elgg_echo('admin:plugins:sort:date'), +); +// security - only want a defined option +if (!array_key_exists($sort, $sort_options)) { + $sort = reset($sort_options); +} + +$sort_form = elgg_view_form('admin/plugins/sort', array( + 'action' => 'admin/plugins', + 'method' => 'get', + 'disable_security' => true, +), array( + 'sort' => $sort, + 'sort_options' => $sort_options, + 'category' => $show_category, +)); + +$buttons = "<div class=\"clearfix mbm\">"; +$buttons .= elgg_view_form('admin/plugins/change_state', array( + 'action' => 'action/admin/plugins/activate_all', + 'class' => 'float', +), array( + 'guids' => $guids, + 'action' => 'activate', +)); +$buttons .= elgg_view_form('admin/plugins/change_state', array( + 'action' => 'action/admin/plugins/deactivate_all', + 'class' => 'float', +), array( + 'guids' => $guids, + 'action' => 'deactivate', +)); +$buttons .= "</div>"; + +$buttons .= $category_form . $sort_form; + +// construct page header +?> +<div id="content_header" class="mbm clearfix"> + <div class="content-header-options"><?php echo $buttons ?></div> +</div> + +<div id="elgg-plugin-list"> +<?php + +$options = array( + 'limit' => 0, + 'full_view' => true, + 'list_type_toggle' => false, + 'pagination' => false, +); +if ($show_category == 'all' && $sort == 'priority') { + $options['display_reordering'] = true; +} +echo elgg_view_entity_list($plugin_list, $options); + +?> +</div>
\ No newline at end of file diff --git a/views/default/admin/settings/advanced.php b/views/default/admin/settings/advanced.php new file mode 100644 index 000000000..a262740f2 --- /dev/null +++ b/views/default/admin/settings/advanced.php @@ -0,0 +1,9 @@ +<?php +/** + * Elgg administration site advanced settings + * + * @package Elgg + * @subpackage Core + */ + +echo elgg_view_form('admin/site/update_advanced', array('class' => 'elgg-form-settings')); diff --git a/views/default/admin/settings/basic.php b/views/default/admin/settings/basic.php new file mode 100644 index 000000000..9334ba81b --- /dev/null +++ b/views/default/admin/settings/basic.php @@ -0,0 +1,9 @@ +<?php +/** + * Elgg administration site basic settings + * + * @package Elgg + * @subpackage Core + */ + +echo elgg_view_form('admin/site/update_basic', array('class' => 'elgg-form-settings')); diff --git a/views/default/admin/sidebar.php b/views/default/admin/sidebar.php new file mode 100644 index 000000000..100ce2af8 --- /dev/null +++ b/views/default/admin/sidebar.php @@ -0,0 +1,8 @@ +<?php +/** + * Admin sidebar -- just outputs the page menus + */ + +$content = elgg_view_menu('page', array('sort_by' => 'priority', 'show_section_headers' => true)); + +echo elgg_view_module('main', '', $content, array('class' => 'elgg-admin-sidebar-menu'));
\ No newline at end of file diff --git a/views/default/admin/statistics/overview.php b/views/default/admin/statistics/overview.php new file mode 100644 index 000000000..ac5aaac36 --- /dev/null +++ b/views/default/admin/statistics/overview.php @@ -0,0 +1,13 @@ +<?php +/** + * Elgg statistics screen + * + * @package Elgg + * @subpackage Core + */ + +echo elgg_view('admin/statistics/extend'); + +echo elgg_view_module('inline', elgg_echo('admin:statistics:label:basic'), elgg_view('admin/statistics/overview/basic')); + +echo elgg_view_module('inline', elgg_echo('admin:statistics:label:numentities'), elgg_view('admin/statistics/overview/numentities')); diff --git a/views/default/admin/statistics/overview/basic.php b/views/default/admin/statistics/overview/basic.php new file mode 100644 index 000000000..2c9b3b88e --- /dev/null +++ b/views/default/admin/statistics/overview/basic.php @@ -0,0 +1,19 @@ +<?php +// Work out number of users +$users_stats = get_number_users(); +$total_users = get_number_users(true); + +// Get version information +$version = get_version(); +$release = get_version(true); +?> +<table class="elgg-table-alt"> + <tr class="odd"> + <td><b><?php echo elgg_echo('admin:statistics:label:version'); ?> :</b></td> + <td><?php echo elgg_echo('admin:statistics:label:version:release'); ?> - <?php echo $release; ?>, <?php echo elgg_echo('admin:statistics:label:version:version'); ?> - <?php echo $version; ?></td> + </tr> + <tr class="even"> + <td><b><?php echo elgg_echo('admin:statistics:label:numusers'); ?> :</b></td> + <td><?php echo $users_stats; ?> <?php echo elgg_echo('active'); ?> / <?php echo $total_users; ?> <?php echo elgg_echo('total') ?></td> + </tr> +</table>
\ No newline at end of file diff --git a/views/default/admin/statistics/overview/numentities.php b/views/default/admin/statistics/overview/numentities.php new file mode 100644 index 000000000..af4ae2773 --- /dev/null +++ b/views/default/admin/statistics/overview/numentities.php @@ -0,0 +1,40 @@ +<?php +// Get entity statistics +$entity_stats = get_entity_statistics(); +$even_odd = ""; +?> +<table class="elgg-table-alt"> +<?php +foreach ($entity_stats as $k => $entry) { + arsort($entry); + foreach ($entry as $a => $b) { + + //This function controls the alternating class + $even_odd = ( 'odd' != $even_odd ) ? 'odd' : 'even'; + + if ($a == "__base__") { + $a = elgg_echo("item:{$k}"); + if (empty($a)) + $a = $k; + } else { + if (empty($a)) { + $a = elgg_echo("item:{$k}"); + } else { + $a = elgg_echo("item:{$k}:{$a}"); + } + + if (empty($a)) { + $a = "$k $a"; + } + } + + echo <<< END + <tr class="{$even_odd}"> + <td>{$a}:</td> + <td>{$b}</td> + </tr> +END; + } + } +?> +</table> diff --git a/views/default/admin/statistics/server.php b/views/default/admin/statistics/server.php new file mode 100644 index 000000000..9d21addc1 --- /dev/null +++ b/views/default/admin/statistics/server.php @@ -0,0 +1,8 @@ +<?php +/** + * Server information + */ + +echo elgg_view_module('inline', elgg_echo('admin:server:label:web_server'), elgg_view('admin/statistics/server/web_server')); + +echo elgg_view_module('inline', elgg_echo('admin:server:label:php'), elgg_view('admin/statistics/server/php')); diff --git a/views/default/admin/statistics/server/php.php b/views/default/admin/statistics/server/php.php new file mode 100644 index 000000000..7c6a51383 --- /dev/null +++ b/views/default/admin/statistics/server/php.php @@ -0,0 +1,50 @@ +<?php +/** + * Server PHP info + */ + +$php_log = ini_get('error_log'); +if (!$php_log) { + $php_log = elgg_echo('admin:server:error_log'); +} + +$post_max_size = elgg_get_ini_setting_in_bytes('post_max_size'); +$upload_max_filesize = elgg_get_ini_setting_in_bytes('upload_max_filesize'); + +$post_max_size_warning = ''; +if ($upload_max_filesize > $post_max_size) { + // @todo show a link to something like http://nigel.mcnie.name/blog/uploadmaxfilesizepostmaxsize-experimentation ? + $post_max_size_warning = elgg_echo('admin:server:warning:post_max_too_small'); +} + +?> +<table class="elgg-table-alt"> + <tr class="odd"> + <td><b><?php echo elgg_echo('admin:server:label:php_version'); ?> :</b></td> + <td><?php echo phpversion(); ?></td> + </tr> + <tr class="even"> + <td><b><?php echo elgg_echo('admin:server:label:php_ini'); ?> :</b></td> + <td><?php echo php_ini_loaded_file(); ?></td> + </tr> + <tr class="odd"> + <td><b><?php echo elgg_echo('admin:server:label:php_log'); ?> :</b></td> + <td><?php echo $php_log; ?></td> + </tr> + <tr class="even"> + <td><b><?php echo elgg_echo('admin:server:label:mem_avail'); ?> :</b></td> + <td><?php echo number_format(elgg_get_ini_setting_in_bytes('memory_limit')); ?></td> + </tr> + <tr class="odd"> + <td><b><?php echo elgg_echo('admin:server:label:mem_used'); ?> :</b></td> + <td><?php echo number_format(memory_get_peak_usage()); ?></td> + </tr> + <tr class="even"> + <td><b><?php echo elgg_echo('admin:server:label:post_max_size'); ?> :</b></td> + <td><?php echo number_format($post_max_size); ?></td> + </tr> + <tr class="odd"> + <td><b><?php echo elgg_echo('admin:server:label:upload_max_filesize'); ?> :</b></td> + <td><?php echo number_format($upload_max_filesize) . ' ' . $post_max_size_warning; ?></td> + </tr> +</table> diff --git a/views/default/admin/statistics/server/web_server.php b/views/default/admin/statistics/server/web_server.php new file mode 100644 index 000000000..904a54f4b --- /dev/null +++ b/views/default/admin/statistics/server/web_server.php @@ -0,0 +1,16 @@ +<?php +/** + * Web server info + */ + +?> +<table class="elgg-table-alt"> + <tr class="odd"> + <td><b><?php echo elgg_echo('admin:server:label:server'); ?> :</b></td> + <td><?php echo $_SERVER['SERVER_SOFTWARE']; ?></td> + </tr> + <tr class="even"> + <td><b><?php echo elgg_echo('admin:server:label:log_location'); ?> :</b></td> + <td><?php echo getenv('APACHE_LOG_DIR'); ?></td> + </tr> +</table> diff --git a/views/default/admin/users/add.php b/views/default/admin/users/add.php new file mode 100644 index 000000000..6d22b9c29 --- /dev/null +++ b/views/default/admin/users/add.php @@ -0,0 +1,9 @@ +<?php +/** + * Display an add user form. + */ + +$title = elgg_echo('adduser'); +$body = elgg_view_form('useradd', array(), array('show_admin' => true)); + +echo elgg_view_module('inline', $title, $body);
\ No newline at end of file diff --git a/views/default/admin/users/admins.php b/views/default/admin/users/admins.php new file mode 100644 index 000000000..9b175d437 --- /dev/null +++ b/views/default/admin/users/admins.php @@ -0,0 +1,12 @@ +<?php +$admins = elgg_list_entities(array(), 'elgg_get_admins'); + +?> +<div class="elgg-module elgg-module-inline"> + <div class="elgg-head"> + <h3><?php echo elgg_echo('admin:statistics:label:admins'); ?></h3> + </div> + <div class="elgg-body"> + <?php echo $admins; ?> + </div> +</div> diff --git a/views/default/admin/users/newest.php b/views/default/admin/users/newest.php new file mode 100644 index 000000000..91a6fa338 --- /dev/null +++ b/views/default/admin/users/newest.php @@ -0,0 +1,18 @@ +<?php +// newest users +$users = elgg_list_entities(array( + 'type' => 'user', + 'subtype'=> null, + 'full_view' => FALSE +)); + +?> + +<div class="elgg-module elgg-module-inline"> + <div class="elgg-head"> + <h3><?php echo elgg_echo('admin:users:newest'); ?></h3> + </div> + <div class="elgg-body"> + <?php echo $users; ?> + </div> +</div> diff --git a/views/default/admin/users/online.php b/views/default/admin/users/online.php new file mode 100644 index 000000000..dbda06066 --- /dev/null +++ b/views/default/admin/users/online.php @@ -0,0 +1,13 @@ +<?php + +$users_online = get_online_users(); + +?> +<div class="elgg-module elgg-module-inline"> + <div class="elgg-head"> + <h3><?php echo elgg_echo('admin:statistics:label:onlineusers'); ?></h3> + </div> + <div class="elgg-body"> + <?php echo $users_online; ?> + </div> +</div> diff --git a/views/default/annotation/default.php b/views/default/annotation/default.php new file mode 100644 index 000000000..5d29a53e2 --- /dev/null +++ b/views/default/annotation/default.php @@ -0,0 +1,40 @@ +<?php +/** + * Elgg default annotation view + * + * @note To add or remove from the annotation menu, register handlers for the menu:annotation hook. + * + * @uses $vars['annotation'] + */ + +$annotation = $vars['annotation']; + +$owner = get_entity($annotation->owner_guid); +if (!$owner) { + return true; +} +$icon = elgg_view_entity_icon($owner, 'tiny'); +$owner_link = "<a href=\"{$owner->getURL()}\">$owner->name</a>"; + +$menu = elgg_view_menu('annotation', array( + 'annotation' => $annotation, + 'sort_by' => 'priority', + 'class' => 'elgg-menu-hz float-alt', +)); + +$text = elgg_view("output/longtext", array("value" => $annotation->value)); + +$friendlytime = elgg_view_friendly_time($annotation->time_created); + +$body = <<<HTML +<div class="mbn"> + $menu + $owner_link + <span class="elgg-subtext"> + $friendlytime + </span> + $text +</div> +HTML; + +echo elgg_view_image_block($icon, $body); diff --git a/views/default/annotation/generic_comment.php b/views/default/annotation/generic_comment.php new file mode 100644 index 000000000..22a8d9211 --- /dev/null +++ b/views/default/annotation/generic_comment.php @@ -0,0 +1,69 @@ +<?php +/** + * Elgg generic comment view + * + * @uses $vars['annotation'] ElggAnnotation object + * @uses $vars['full_view'] Display fill view or brief view + */ + +if (!isset($vars['annotation'])) { + return true; +} + +$full_view = elgg_extract('full_view', $vars, true); + +$comment = $vars['annotation']; + +$entity = get_entity($comment->entity_guid); +$commenter = get_user($comment->owner_guid); +if (!$entity || !$commenter) { + return true; +} + +$friendlytime = elgg_view_friendly_time($comment->time_created); + +$commenter_icon = elgg_view_entity_icon($commenter, 'tiny'); +$commenter_link = "<a href=\"{$commenter->getURL()}\">$commenter->name</a>"; + +$entity_title = $entity->title ? $entity->title : elgg_echo('untitled'); +$entity_link = "<a href=\"{$entity->getURL()}\">$entity_title</a>"; + +if ($full_view) { + $menu = elgg_view_menu('annotation', array( + 'annotation' => $comment, + 'sort_by' => 'priority', + 'class' => 'elgg-menu-hz float-alt', + )); + + $comment_text = elgg_view("output/longtext", array("value" => $comment->value)); + + $body = <<<HTML +<div class="mbn"> + $menu + $commenter_link + <span class="elgg-subtext"> + $friendlytime + </span> + $comment_text +</div> +HTML; + + echo elgg_view_image_block($commenter_icon, $body); + +} else { + // brief view + + //@todo need link to actual comment! + + $commented_on = elgg_echo('generic_comment:on', array($commenter_link, $entity_link)); + + $excerpt = elgg_get_excerpt($comment->value, 80); + + $body = <<<HTML +<span class="elgg-subtext"> + $commented_on ($friendlytime): $excerpt +</span> +HTML; + + echo elgg_view_image_block($commenter_icon, $body); +} diff --git a/views/default/api/output.php b/views/default/api/output.php new file mode 100644 index 000000000..a7041c0f4 --- /dev/null +++ b/views/default/api/output.php @@ -0,0 +1,42 @@ +<?php +/** + * Elgg API default output + * This outputs the api in a human readable way. + * + * @package Elgg + * @subpackage Core + * + */ + +$result = $vars['result']; +$export = $result->export(); + +?> +<div id="api_result"> + <table width="100%"> + <tr><td width="100" valign="top"><b>Status:</b></td> <td> + <?php + if ($result instanceof SuccessResult) + echo "OK"; + else + echo "**** ERROR ({$export->status}) ****"; + ?> + </td></tr> + + <?php if ($export->message!="") { ?> + <tr><td width="100" valign="top"><b>Message:</b></td> <td><?php echo $export->message; ?></td></tr> + <?php } ?> + <?php if ($export->result) { ?> + <tr><td width="100" valign="top"><b>Result:</b></td> <td><pre><?php print_r($export->result); ?></pre></td></tr> + <?php } ?> + + + <?php if ($export->pam) { ?> + <tr><td width="100" valign="top"><b>PAM:</b></td> <td><pre><?php print_r($export->pam); ?></pre></td></tr> + <?php } ?> + + <?php if ($export->runtime_errors) { ?> + <tr><td width="100" valign="top"><b>Runtime:</b></td> <td><pre><?php print_r($export->runtime_errors); ?></pre></td></tr> + <?php } ?> + </table> +</div>
\ No newline at end of file diff --git a/views/default/beechat/beechat.js.php b/views/default/beechat/beechat.js.php deleted file mode 100644 index 09f4e8852..000000000 --- a/views/default/beechat/beechat.js.php +++ /dev/null @@ -1,2498 +0,0 @@ -/** - * Beechat - * - * @package beechat - * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2 - * @author Beechannels <contact@beechannels.com> - * @copyright Beechannels 2007-2010 - * @link http://beechannels.com/ - */ - -/** Globals - * - */ -g_beechat_user = null; -g_beechat_roster_items = null; -g_beechat_rooms = new Array(); - -function debugXMPP(msg) { - try { - //console.log(msg) - } - catch (err) { - } - //$('#layout_footer').html($('#layout_footer').html()+'<br/>'+msg); -} - -/** Class: BeeChat - * An object container for all BeeChat mod functions - * - */ -BeeChat = { - BOSH_SERVICE: '/http-bind/', - DOMAIN: '<?php echo $vars['config']->chatsettings['domain'] ?>', - RESOURCE: 'beebac', - INACTIVITY_PERIOD_LENGTH: 60, - - NS: { - CHAT_STATES: 'http://jabber.org/protocol/chatstates' - }, - - Message: { - Types: { - NORMAL: 'normal', - CHAT: 'chat', - GROUPCHAT: 'groupchat', - HEADLINE: 'headline', - ERROR: 'error' - }, - - ChatStates: { - COMPOSING: 'composing', - PAUSED: 'paused', - ACTIVE: 'active', - INACTIVE: 'inactive', - GONE: 'gone' - } - }, - - IQ: { - Types: { - GET: 'get', - RESULT: 'result', - SET: 'set', - ERROR: 'error' - } - }, - - Presence: { - Types: { - UNAVAILABLE: 'unavailable', - SUBSCRIBE: 'subscribe', - SUBSCRIBED: 'subscribed', - UNSUBSCRIBE: 'unsubscribe', - UNSUBSCRIBED: 'unsubscribed', - PROBE: 'probe', - ERROR: 'error' - }, - - ChildElements: { - SHOW: 'show', - STATUS: 'status', - PRIORITY: 'priority' - }, - - ShowElements: { - CHAT: 'chat', - DND: 'dnd', - AWAY: 'away', - XA: 'xa' - } - }, - - Roster: { - DEFAULT_GROUP: 'Contacts' - }, - - - Events: { - Identifiers: { - UPDATE_CONNECTION_STATE: 0, - UPDATE_ROSTER: 1, - RECV_PRESENCE: 2, - RECV_CHAT_MESSAGE: 3 - }, - Messages: { - ConnectionStates: { - CONNECTING: "<?php echo elgg_echo('beechat:connection:state:connecting'); ?>", - AUTHENTICATING: "<?php echo elgg_echo('beechat:connection:state:authenticating'); ?>", - FAILED: "<?php echo elgg_echo('beechat:connection:state:failed'); ?>", - DISCONNECTING: "<?php echo elgg_echo('beechat:connection:state:disconnecting'); ?>", - OFFLINE: "<?php echo elgg_echo('beechat:connection:state:offline'); ?>", - ONLINE: "<?php echo elgg_echo('beechat:connection:state:online'); ?>" - } - } - } -}; - - -/** Class: BeeChat.Core - * An object container for all BeeChat Core functions - * - */ -BeeChat.Core = { - ReferenceTables: { - AvailabilityRates: { - AVAILABLE: 0, - ONLINE: 0, - CHAT: 0, - DND: 1, - AWAY: 2, - XA: 3, - UNAVAILABLE: 10, - OFFLINE: 10 - } - } -}; - - -/** Class: BeeChat.Core.User - * Create a BeeChat.Core.User object - * - * Parameters: - * (String) jid - The user's jabber id - * - * Returns: - * A new BeeChat.Core.User. - */ -BeeChat.Core.User = function(jid) -{ - if (!(this instanceof arguments.callee)) - return new BeeChat.Core.User(jid); - - /** Private members - * - */ - var _connection = null; - var _attached = false; - var _initialized = false; - var _jid = null; - var _roster = null; - var _msgTemp = []; - var _funcs = []; - - /** Constructor - * - */ - this.init = function(jid) - { - _jid = jid; - _roster = new BeeChat.Core.Roster(); - } - - /** Accessors - * - */ - this.getConnection = function() - { - return _connection; - } - - this.getJid = function() - { - return _jid; - } - - this.getRoster = function() - { - return _roster; - } - - this.isAttached = function() - { - return _attached; - } - - this.isInitialized = function() - { - return _initialized; - } - - /** Mutators - * - */ - this.setInitialized = function(isInitialized) - { - _initialized = isInitialized; - } - - /** Function: addObserver - * Add an observer for a specified type of event - * - * Parameters: - * (BeeChat.Events.Identifiers) eventType - The type of event to observer - * (Object) pFunc - A function to call when the event will be triggered - */ - this.addObserver = function(eventType, pFunc) - { - if (jQuery.inArray(pFunc, _funcs) == -1) { - if (!_funcs[eventType]) - _funcs[eventType] = []; - _funcs[eventType].push(pFunc); - } - } - - /** Function: removeObserver - * Remove an observer - * - * Parameters: - * (Object) pFunc - The registered function - */ - this.removeObserver = function(pFunc) - { - var index = null; - - for (var key in _funcs) { - if (typeof _funcs[key] != 'object') - continue; - if ((index = jQuery.inArray(pFunc, _funcs[key])) != -1) - _funcs.splice(index, 1); - } - } - - /** Function: connect - * Connect the user to the BOSH service - * - * Parameters: - * (String) password - The user's password - * - */ - this.connect = function(password) - { - debugXMPP('connect'); - if (_connection == null) - _connection = new Strophe.Connection(BeeChat.BOSH_SERVICE); - _connection.connect(_jid, password, _onConnect); - } - - /** Function: attach - * Attach user's connection to an existing XMPP session - * - * Parameters: - * (String) sid - The SID of the existing XMPP session - * (String) rid - The RID of the existing XMPP session - */ - this.attach = function(sid, rid) - { - if (_connection == null) { - _connection = new Strophe.Connection(BeeChat.BOSH_SERVICE); - } - _connection.attach(_jid, sid, rid, _onConnect); - _attached = true; - _onConnect(Strophe.Status.CONNECTED); - } - - /** Function: disconnect - * Disconnect the user from the BOSH service - * - */ - this.disconnect = function() - { - debugXMPP('disconnect'); - if (_connection != null) { - _connection.disconnect(); - _connection = null; - } - } - - /** Function: requestSessionPause - * Request a session pause to the server connection manager - * - */ - this.requestSessionPause = function() - { - var req = $build('body', { - rid: _connection.rid, - sid: _connection.sid, - pause: BeeChat.INACTIVITY_PERIOD_LENGTH, - xmlns: Strophe.NS.HTTPBIND - }); - - _attached = false; - _connection.send(req.tree()); - } - - /** Function: requestRoster - * Request a new roster to the server - * - */ - this.requestRoster = function() - { - var req = $iq({from: _jid, type: BeeChat.IQ.Types.GET}) - .c('query', {xmlns: Strophe.NS.ROSTER}); - - _connection.send(req.tree()); - } - - /** Function: sendInitialPresence - * Send initial presence to the server in order to signal availability for communications - * - */ - this.sendInitialPresence = function() - { - _connection.send($pres().tree()); - _initialized = true; - } - - /** Function: sendChatMessage - * Send a chat message to the server - * - * Parameters: - * (String) addressee - The addressee of the chat message - * (String) msg - The chat message - * - */ - this.sendChatMessage = function(addressee, msg, msgtype) - { - if (msgtype == null) - msgtype = BeeChat.Message.Types.CHAT; - var req = $msg({ - type: msgtype, - to: addressee, - from: _connection.jid - }).c('body').t(msg).up().c(BeeChat.Message.ChatStates.ACTIVE, {xmlns: BeeChat.NS.CHAT_STATES}); - - _connection.send(req.tree()); - } - - /** Function: sendChatStateMessage - * Send a chat state message to the server - * - * Parameters: - * (String) addressee - The addressee of the chat state message - * (BeeChat.Message.ChatsState) state - The chat state that will be send - * - */ - this.sendChatStateMessage = function(addressee, state) - { - var req = $msg({ - type: BeeChat.Message.Types.CHAT, - to: addressee, - from: _connection.jid - }).c(state, {xmlns: BeeChat.NS.CHAT_STATES}); - - _connection.send(req.tree()); - } - - /** Function: sendPresenceAvailabiliy - * Send a detailed presence stanza to the server - * - * Parameters: - * (BeeChat.Presence.ShowElements) availability - The availability status - * (String) details - Detailed status information - * - */ - this.sendPresenceAvailability = function(availability, details) - { - var req = $pres() - .c(BeeChat.Presence.ChildElements.SHOW).t(availability).up() - .c(BeeChat.Presence.ChildElements.STATUS).t(details).up() - .c(BeeChat.Presence.ChildElements.PRIORITY).t('1'); - - _connection.send(req.tree()); - } - - /** PrivateFunction: _fire - * Triggers registered funcs of registered observers for a specified type of event - * - */ - function _fire(eventType, data, scope) - { - if (_funcs[eventType] != undefined) { - for (var i = 0; i < _funcs[eventType].length; i++) - _funcs[eventType][i].call((scope || window), data); - } - } - this.joinRoom = function(roomname, room_guid) { - var roomJid = roomname; - _connection['muc'].join(roomJid, BeeChat.UI.Resources.Strings.ChatMessages.SELF, false, false, ''); - if (!(roomJid in g_beechat_rooms)) { - g_beechat_rooms[roomJid] = room_guid; - $.ajax({ - url: BeeChat.UI.addActionTokens('<?php echo $vars['url'] . "action/beechat/join_groupchat?group_guid="; ?>'+room_guid, '&'), - async: true }); - } - - - } - - this.reconnectRooms = function() { - $('#' + BeeChat.UI.Resources.Elements.ID_DIV_CHATBOXES).children().each(function() { - if (roomJid in g_beechat_rooms) - delete g_beechat_rooms[roomJid]; - var contactBareJid = $(this).attr('bareJid'); - var isroom = ($(this).attr('isroom')=='true')?true:false; - if (isroom) { - _connection['muc'].join(contactBareJid, BeeChat.UI.Resources.Strings.ChatMessages.SELF, false, false, ''); - } - }); - } - - this.leaveRoom = function(roomJid) { - if (roomJid in g_beechat_rooms) { - $.ajax({ - url: BeeChat.UI.addActionTokens('<?php echo $vars['url'] . "action/beechat/leave_groupchat?group_guid="; ?>'+g_beechat_rooms[roomJid], '&'), - async: true }); - - } - _connection['muc'].leave(roomJid, BeeChat.UI.Resources.Strings.ChatMessages.SELF, function(){}); - } - - /** PrivateFunction: _onConnect - * Connection state manager - * - * Parameters: - * (Strophe.Status) status - A Strophe connection status constant - * - */ - function _onConnect(status) - { - var msg = null; - - if (status == Strophe.Status.CONNECTING) -{ - msg = BeeChat.Events.Messages.ConnectionStates.CONNECTING; - } - else if (status == Strophe.Status.AUTHENTICATING) { - msg = BeeChat.Events.Messages.ConnectionStates.AUTHENTICATING; - } - else if (status == Strophe.Status.AUTHFAIL) - msg = BeeChat.Events.Messages.ConnectionStates.FAILED; - else if (status == Strophe.Status.CONNFAIL) - msg = BeeChat.Events.Messages.ConnectionStates.FAILED; - else if (status == Strophe.Status.DISCONNECTING) - msg = BeeChat.Events.Messages.ConnectionStates.DISCONNECTING; - else if (status == Strophe.Status.DISCONNECTED) - msg = BeeChat.Events.Messages.ConnectionStates.OFFLINE; - else if (status == Strophe.Status.CONNECTED) { - msg = BeeChat.Events.Messages.ConnectionStates.ONLINE; - _connection.addHandler(_onIQResult, null, 'iq', BeeChat.IQ.Types.RESULT, null, null); - _connection.addHandler(_onPresence, null, 'presence', null, null, null); - _connection.addHandler(_onMessageChat, null, 'message', BeeChat.Message.Types.CHAT, null, null); - _connection.addHandler(_onMessageChatRoom, null, 'message', BeeChat.Message.Types.GROUPCHAT, null, null); - } - - _fire(BeeChat.Events.Identifiers.UPDATE_CONNECTION_STATE, msg); - } - - /** PrivateFunction: _onIQResult - * Manage received IQ stanza of 'result' type - * - * Parameters: - * (XMLElement) iq - The iq stanza received - * - */ - function _onIQResult(iq) - { - _roster.updateFromIQResult(iq); - _fire(BeeChat.Events.Identifiers.UPDATE_ROSTER, _roster.getItems()); - - return true; - } - - /** PrivateFunction: _onPresence - * Manage received presence stanza - * - * Parameters: - * (XMLElement) presence - The presence stanza received - * - */ - function _onPresence(presence) - { - var xquery = presence.getElementsByTagName("x"); - debugXMPP('_onPresence'+xquery); - if (xquery.length > 0) - { - //Ignore MUC user protocol - for (var i = 0; i < xquery.length; i++) - { - var xmlns = xquery[i].getAttribute("xmlns"); - if (xmlns && xmlns.match(Strophe.NS.MUC + '#user')) - { - var contactBareJid = $(presence).attr('from').split('/')[0]; - var userNick = $(presence).attr('from').split('/')[1]; - var chatBoxElm = BeeChat.UI.ChatBoxes.getChatBoxElm(contactBareJid); - if ($(presence).attr('type') != 'unavailable') { - BeeChat.UI.ChatBoxes.updateRoster(contactBareJid, userNick, presence); - } - else { - if (chatBoxElm.length) { - BeeChat.UI.ChatBoxes.updateRoster(contactBareJid, userNick, presence); - } - } - return true; - } - - if (xmlns && xmlns.match(Strophe.NS.MUC)) - { - var contactBareJid = $(presence).attr('from').split('/')[0]; - var chatBoxElm = BeeChat.UI.ChatBoxes.getChatBoxElm(contactBareJid); - - if ($(presence).attr('type') != 'unavailable' && $(presence).attr('type') != 'error') { - if (chatBoxElm.length == 0) { - BeeChat.UI.ScrollBoxes.add(contactBareJid); - } - } - return true; - } - - } - } - - if (Strophe.getBareJidFromJid($(presence).attr('from')).toLowerCase() != Strophe.getBareJidFromJid(_jid).toLowerCase()) { - _roster.updateFromPresence(presence); - } - _fire(BeeChat.Events.Identifiers.RECV_PRESENCE, _roster.getOnlineItems()); - return true; - } - - /** PrivateFunction: _onMessageChat - * Manage received message stanza of 'chat' type - * - * Parameters: - * (XMLElement) message - The message stanza received - * - */ - function _onMessageChatRoom(message) - { - var roomJid = $(message).attr('from').split('/'); - -// BeeChat.UI.ChatBoxes.updateChatState($(message).attr('from'), message); - BeeChat.UI.ChatBoxes.update(roomJid[0], roomJid[1], Strophe.getText($(message).find('body')[0]), true); - - return true; - } - - function _onMessageChat(message) - { - var data = { - contactBareJid: Strophe.getBareJidFromJid($(message).attr('from')), - msg: message - }; - _msgTemp.push(data); - //alert("message"); - if (_initialized == true) { - for (var key in _msgTemp) { - if (typeof _msgTemp[key] != 'object') - continue; - _fire(BeeChat.Events.Identifiers.RECV_CHAT_MESSAGE, _msgTemp[key]); - _msgTemp.shift(); - } - } - - return true; - } - - this.init(jid); -}; - - -/** Constructor: BeeChat.Core.Roster - * Create a BeeChat.Core.Roster object - * - * Parameters: - * (Object) items - The roster's items in object notation - * - * Returns: - * A new BeeChat.Core.Roster. - */ -BeeChat.Core.Roster = function() -{ - if (!(this instanceof arguments.callee)) - return new BeeChat.Core.Roster(); - - /** Private members - * - */ - _items = null; - - - /** Constructor - * - */ - this.init = function() - { - _items = (arguments.length > 0) ? arguments[0] : {}; - } - - /** Accessors - * - */ - this.getItems = function() - { - return _items; - } - - /** Mutators - * - */ - this.setItems = function(items) - { - for (var key in items) { - _items[key] = new BeeChat.Core.RosterItem(items[key]); - var contactBareJid = items[key].bareJid; - var chatBoxElm = BeeChat.UI.ChatBoxes.getChatBoxElm(contactBareJid); - var status = items[key].status; - /*if (status != 'unavailable' && status != 'error') { - if (chatBoxElm.length == 0) { - BeeChat.UI.ScrollBoxes.add(contactBareJid); - } - }*/ - - } - } - - this.setIcons = function(icons) - { - if (_items) { - for (var key in icons) { - if (_items[key]) { - _items[key].icon_small = icons[key].small; - _items[key].icon_tiny = icons[key].tiny; - } - } - } - } - - this.setStatuses = function(statuses) - { - if (_items) { - for (var key in statuses) { - if (_items[key]) { - _items[key].status = statuses[key]; - } - } - } - } - - /** Function: updateFromIQResult - * Update the roster items from an IQ result stanza - * - * Parameters: - * (XMLElement) iq - The IQ result stanza - */ - this.updateFromIQResult = function(iq) - { - $(iq).find('item').each(function() { - var attr = { - bareJid: Strophe.getBareJidFromJid($(this).attr('jid')).toLowerCase(), - name: $(this).attr('name'), - subscription: $(this).attr('subscription'), - groups: [], - presences: {} - }; - - $(this).find('group').each(function() { - attr['groups'].push($(this).text()); - }); - - if (attr['groups'].length == 0) - attr['groups'].push(BeeChat.Roster.DEFAULT_GROUP); - - if (!_items[attr.bareJid]) - _items[attr.bareJid] = new BeeChat.Core.RosterItem(attr); - else { - _items[attr.bareJid].bareJid = attr.bareJid; - _items[attr.bareJid].name = attr.name; - _items[attr.bareJid].subscription = attr.subscription; - _items[attr.bareJid].groups = attr.groups; - } - }); - } - - /** Function: updateFromPresence - * Update the roster items from a presence stanza - * - * Parameters: - * (XMLElement) presence - The presence stanza - * - * Returns: - * (String) The bare jid of the roster item who updated his presence - */ - this.updateFromPresence = function(presence) - { - var jid = $(presence).attr('from').toLowerCase(); - var attr = { - bareJid: Strophe.getBareJidFromJid(jid), - name: null, - subscription: null, - groups: null, - presences: {} - }; - - attr.presences[jid] = {}; - attr.presences[jid].type = (!$(presence).attr('type')) ? 'available' : $(presence).attr('type'); - //alert($(presence).attr('from')+presence.toString()); - //alert("presencetype"+attr.presences[jid].type); - - if (attr.presences[jid].type == 'available') { - $(presence).children().each(function() { - if (this.tagName == BeeChat.Presence.ChildElements.SHOW) - attr.presences[jid].show = $(this).text(); - if (this.tagName == BeeChat.Presence.ChildElements.STATUS) - attr.presences[jid].status = $(this).text(); - }); - - if (!attr.presences[jid].show) - attr.presences[jid].show = 'chat'; - } else { - attr.presences[jid].show = 'offline'; - } - - if (!_items[attr.bareJid]) - _items[attr.bareJid] = new BeeChat.Core.RosterItem(attr); - else - _items[attr.bareJid].presences[jid] = attr.presences[jid]; - } - - /** Function: getOnlineItems - * - * - */ - this.getOnlineItems = function() - { - var sortedOnlineBareJid = []; - var sortedOnlineItems = {}; - - for (var key in _items) { - if (typeof _items[key] != 'object') - continue; - - var pres = _items[key].getStrongestPresence(); - - if (pres != null && pres.type == 'available') { - sortedOnlineBareJid.push(key); - } - } - - if (sortedOnlineBareJid.length > 1) { - sortedOnlineBareJid.sort(); - sortedOnlineBareJid.sort(statusSort); - } - - for (var key in sortedOnlineBareJid) { - sortedOnlineItems[sortedOnlineBareJid[key]] = _items[sortedOnlineBareJid[key]]; - } - - return (sortedOnlineItems); - } - - /** Function: getSizeOnlineItems - * Return the number of available items - * - * Returns: - * (int) The number of available items - */ - this.getSizeOnlineItems = function() - { - var n = 0; - - for (var key in _items) { - if (typeof _items[key] != 'object') - continue; - - var pres = _items[key].getStrongestPresence(); - - if (pres != null && pres.type == 'available') - ++n; - } - return (n); - } - - /** Function: getItemsUsernamesAsList - * - */ - this.getItemsUsernamesAsList = function() - { - var data = ''; - - for (var key in _items) { - if (typeof _items[key] != 'object') - continue; - data = data + Strophe.getBareJidFromJid(key) + ','; - // data = data + Strophe.getNodeFromJid(key) + ','; - } - - return (data); - } - - /** PrivateFunction: statusSort - * - */ - function statusSort(x, y) - { - var xPres = _items[x].getStrongestPresence(); - var yPres = _items[y].getStrongestPresence(); - - if (xPres != null && yPres != null) - return (BeeChat.Core.Roster.Utils.comparePresences(xPres, yPres)); - return (0); - } - - this.init(); -}; - -BeeChat.Core.Roster.Utils = { - - /** Function: comparePresences - * Compare the two presences x and y - * - * Parameters: - * (Object) xPres - The x presence in object notation - * (Object) yPres - The y presence in object notation - * - * Returns: - * 0 if presence are equal, 1 if x > y, -1 if y > x - * - * Note: - * Presences are tagged in the following order: - * ONLINE < DND < AWAY < XA < OFFLINE - * - */ - comparePresences: function(xPres, yPres) - { - var xRate = 0; - var yRate = 0; - - if (xPres.type == 'unavailable') - xRate += BeeChat.Core.ReferenceTables.AvailabilityRates[xPres.type.toUpperCase()]; - if (yPres.type == 'unavailable') - yRate += BeeChat.Core.ReferenceTables.AvailabilityRates[yPres.type.toUpperCase()]; - - if (xPres.show != null) - xRate += BeeChat.Core.ReferenceTables.AvailabilityRates[xPres.show.toUpperCase()]; - if (yPres.show != null) - yRate =+ BeeChat.Core.ReferenceTables.AvailabilityRates[yPres.show.toUpperCase()]; - - if (xRate > yRate) - return (1); - else if (xRate == yRate) - return (0); - return (-1); - } -}; - - -/** Constructor: BeeChat.Core.RosterItem - * Create a BeeChat.Core.RosterItem object - * - * Parameters: - * (Object) attr - The RosterItem's attributes in object notation - * - * Returns: - * A new BeeChat.Core.RosterItem. - */ -BeeChat.Core.RosterItem = function() -{ - this.bareJid = (arguments.length > 0) ? arguments[0].bareJid : null; - this.name = (arguments.length > 0) ? arguments[0].name : null; - this.subscription = (arguments.length > 0) ? arguments[0].subscription : null; - this.groups = (arguments.length > 0) ? arguments[0].groups : null; - this.presences = (arguments.length > 0) ? arguments[0].presences : null; - this.icon_small = (arguments.length > 0) ? arguments[0].icon_small : null; - this.icon_tiny = (arguments.length > 0) ? arguments[0].icon_tiny : null; - this.status = (arguments.length > 0) ? arguments[0].status : null; -}; -BeeChat.Core.RosterItem.prototype = { - /** Function: getStrongestPresence - * Return the strongest presence of the RosterItem - * - */ - getStrongestPresence: function() - { - var res = null; - - for (var key in this.presences) { - if (typeof this.presences[key] != 'object') - continue; - if (res == null) - res = this.presences[key]; - else - if (BeeChat.Core.Roster.Utils.comparePresences(this.presences[key], res) == -1) - res = this.presences[key]; - } - return (res); - } -}; - - -/** Class: BeeChat.UI - * An object container for all BeeChat UI functions - * - */ -BeeChat.UI = { - HAS_FOCUS: true, - - Resources: { - Paths: { - ICONS: '<?php echo $vars['config']->url; ?>mod/beechat/graphics/icons/', - MEMBER_PROFILE: '<?php echo $vars['url']; ?>profile/' - }, - - Sounds: { - NEW_MESSAGE: 'beechat_sounds_new_message' - }, - - /* - Cookies: { - DOMAIN: 'beechannels.com', - FILENAME_CONN: 'beechat_conn' - }, - */ - - Emoticons: { - FILENAME_SMILE: 'emoticon_smile.png', - FILENAME_UNHAPPY: 'emoticon_unhappy.png', - FILENAME_GRIN: 'emoticon_grin.png', - FILENAME_EVILGRIN: 'emoticon_evilgrin.png', - FILENAME_SURPRISED: 'emoticon_surprised.png', - FILENAME_TONGUE: 'emoticon_tongue.png', - FILENAME_WINK: 'emoticon_wink.png' - }, - - Strings: { - Availability: { - AVAILABLE: "<?php echo elgg_echo('beechat:availability:available'); ?>", - CHAT: "<?php echo elgg_echo('beechat:availability:available'); ?>", - ONLINE: "<?php echo elgg_echo('beechat:availability:available'); ?>", - DND: "<?php echo elgg_echo('beechat:availability:dnd'); ?>", - AWAY: "<?php echo elgg_echo('beechat:availability:away'); ?>", - XA:"<?php echo elgg_echo('beechat:availability:xa'); ?>", - OFFLINE: "<?php echo elgg_echo('beechat:availability:offline'); ?>" - }, - - Contacts: { - BUTTON: "<?php echo elgg_echo('beechat:contacts:button'); ?>" - }, - - ChatMessages: { - SELF: "<?php echo $_SESSION['user']->name; ?>", - COMPOSING: "<?php echo elgg_echo('beechat:chat:composing'); ?>" - }, - - Box: { - MINIMIZE: "<?php echo elgg_echo('beechat:box:minimize'); ?>", - CLOSE: "<?php echo elgg_echo('beechat:box:close'); ?>", - SHOWHIDE: "<?php echo elgg_echo('beechat:box:showhide'); ?>" - } - }, - - StyleClasses: { - Availability: { - Left: { - ONLINE: 'beechat_left_availability_chat', - DND: 'beechat_left_availability_dnd', - AWAY: 'beechat_left_availability_away', - XA: 'beechat_left_availability_xa', - OFFLINE: 'beechat_left_availability_offline', - ROOM: 'beechat_left_availability_room' - }, - - Right: { - ONLINE: 'beechat_right_availability_chat', - DND: 'beechat_right_availability_dnd', - AWAY: 'beechat_right_availability_away', - XA: 'beechat_right_availability_xa', - OFFLINE: 'beechat_right_availability_offline', - ROOM: 'beechat_right_availability_room' - }, - - Control: { - UP: 'beechat_availability_switcher_control_up', - DOWN: 'beechat_availability_switcher_control_down' - } - }, - - ChatBox: { - MAIN: 'beechat_chatbox', - MAINROOM: 'beechat_chatbox_room', - TOP: 'beechat_chatbox_top', - SUBTOP: 'beechat_chatbox_subtop', - TOP_ICON: 'beechat_chatbox_top_icon', - TOP_CONTROLS: 'beechat_chatbox_top_controls', - CONTENT: 'beechat_chatbox_content', - INPUT: 'beechat_chatbox_input', - BOTTOM: 'beechat_chatbox_bottom', - CONTROL: 'beechat_chatbox_control', - STATE: 'beechat_chatbox_state', - MESSAGE: 'beechat_chatbox_message', - MESSAGE_SENDER: 'beechat_chatbox_message_sender', - MESSAGE_DATE: 'beechat_chatbox_message_date', - CHATROOM: 'beechat_chatbox_chatroom', - ROOMROSTER: 'beechat_chatbox_roomroster', - ROSTER_ITEM: 'beechat_chatbox_roomrosteritem' - }, - - ScrollBox: { - SELECTED: 'beechat_scrollbox_selected' - }, - - BOX_CONTROL: 'beechat_box_control', - LABEL: 'beechat_label', - UNREAD_COUNT: 'beechat_unread_count' - }, - - Elements: { - ID_DIV_BAR: 'beechat', - ID_DIV_BAR_CENTER: 'beechat_center', - ID_DIV_BAR_RIGHT: 'beechat_right', - - ID_TOOLTIP_TRIGGER: 'beechat_tooltip_trigger', - - ID_SPAN_CONTACTS_BUTTON: 'beechat_contacts_button', - ID_SPAN_CLOSE_BOX: 'beechat_box_control_close', - - ID_DIV_CONTACTS: 'beechat_contacts', - ID_DIV_CONTACTS_CONTROLS: 'beechat_contacts_controls', - ID_SPAN_CONTACTS_CONTROL_MINIMIZE: 'beechat_contacts_control_minimize', - ID_DIV_CONTACTS_CONTENT: 'beechat_contacts_content', - ID_UL_CONTACTS_LIST: 'beechat_contacts_list', - - ID_DIV_AVAILABILITY_SWITCHER: 'beechat_availability_switcher', - ID_SPAN_AVAILABILITY_SWITCHER_CONTROL: 'beechat_availability_switcher_control', - ID_SPAN_CURRENT_AVAILABILITY: 'beechat_current_availability', - ID_UL_AVAILABILITY_SWITCHER_LIST: 'beechat_availability_switcher_list', - - ID_DIV_CHATBOXES: 'beechat_chatboxes', - - ID_DIV_SCROLLBOXES: 'beechat_scrollboxes' - } - }, - - - /** Function: initialize - * Initialize the BeeChat UI - * - */ - initialize: function(ts, token) - { - this.ts = ts; - this.token = token; - $('#' + BeeChat.UI.Resources.Elements.ID_TOOLTIP_TRIGGER).tooltip({ - offset: [-3, 8], - effect: 'fade' - }); - - $('#accountlinks').find('li').filter('[class=last]').bind('click', function() { - if (g_beechat_user != null) - g_beechat_user.disconnect(); - }); - - BeeChat.UI.AvailabilitySwitcher.initialize(BeeChat.Presence.ShowElements.CHAT); - BeeChat.UI.ContactsList.initialize(); - BeeChat.UI.ScrollBoxes.initialize(); - BeeChat.UI.loadConnection(); - }, - - /** Function: getUserDetails - * Retrieve user details - * - * Returns: - * User details in object notation. - * - */ - addActionTokens: function(url_string, sep) - { - if (sep == null) - sep = "?"; - return url_string + sep + "__elgg_ts="+this.ts + "&__elgg_token=" + this.token; - }, - - getUserDetails: function(cb_func) - { - var json = null; - var self = this; - - $.ajax({ - url: self.addActionTokens('<?php echo $vars['url'] . "action/beechat/get_details"; ?>'), - async: true, - dataType: 'json', - success: function(data) { - cb_func(data); - } - }); - - return (json); - }, - - /** Function: connect - * Create the user and connect him to the BOSH service - * - * Parameters: - * (Object) conn - Running connection informations in object notation - */ - connect: function() - { - var conn = (arguments.length > 0) ? arguments[0] : null; - var userDetails = { - jid: (conn != null) ? conn.jid : null, - password: null - } - var self = this; - //alert("connect"); - if (conn == null || (conn != null && conn.attached)) { - BeeChat.UI.getUserDetails(function(retrievedUserDetails) { - userDetails.jid = retrievedUserDetails.username + '@' + BeeChat.DOMAIN + '/' + BeeChat.RESOURCE; - userDetails.password = retrievedUserDetails.password; - self.connect_end(conn, userDetails) - }); - } - else - this.connect_end(conn, userDetails) - }, - - connect_end: function(conn, userDetails) - { - g_beechat_user = new BeeChat.Core.User(userDetails.jid); - g_beechat_user.addObserver(BeeChat.Events.Identifiers.UPDATE_CONNECTION_STATE, BeeChat.UI.updateConnectionStatus); - g_beechat_user.addObserver(BeeChat.Events.Identifiers.UPDATE_ROSTER, BeeChat.UI.onRosterUpdate); - g_beechat_user.addObserver(BeeChat.Events.Identifiers.RECV_PRESENCE, BeeChat.UI.ContactsList.update); - g_beechat_user.addObserver(BeeChat.Events.Identifiers.RECV_CHAT_MESSAGE, BeeChat.UI.onChatMessage); - - if (conn == null || (conn != null && conn.attached)) - g_beechat_user.connect(userDetails.password); - else - g_beechat_user.attach(conn.sid, conn.rid); - }, - - /** Function: disconnect - * Terminate the user's XMPP session - * - */ - disconnect: function() - { - g_beechat_user.disconnect(); - }, - - /** Function: updateConnectionStatus - * - */ - updateConnectionStatus: function(connStatusMsg) - { - BeeChat.UI.ContactsList.updateButtonText(connStatusMsg); - if (connStatusMsg == BeeChat.Events.Messages.ConnectionStates.ONLINE) { - if (!g_beechat_user.isAttached()) { - debugXMPP("not attached"); - BeeChat.UI.ScrollBoxes.isOpened = true; - g_beechat_user.requestRoster(); - g_beechat_user.reconnectRooms(); - //BeeChat.UI.ContactsList.toggleDisplay(); - $('#' + BeeChat.UI.Resources.Elements.ID_UL_CONTACTS_LIST).show(); - $('.' + BeeChat.UI.Resources.StyleClasses.ChatBox.INPUT + '>textarea').removeAttr('disabled'); - for (room_idx in g_user_rooms) { - var room = g_user_rooms[room_idx]; - var chatBox = BeeChat.UI.ChatBoxes.getChatBoxElm(room[0]); - if (chatBox.length == 0) { - g_beechat_user.joinRoom(room[0], room[1]) - } - } - - } - if (g_beechat_user.isAttached()) { - debugXMPP("attached"); - BeeChat.UI.loadState(); - } - - - $('#' + BeeChat.UI.Resources.Elements.ID_SPAN_CONTACTS_BUTTON).attr('class', 'online'); - BeeChat.UI.saveConnection(); - } - else if (connStatusMsg == BeeChat.Events.Messages.ConnectionStates.OFFLINE) { - var contactsBoxElm = $('#' + BeeChat.UI.Resources.Elements.ID_DIV_CONTACTS); - - if (!contactsBoxElm.is(':hidden')) - BeeChat.UI.ContactsList.toggleDisplay(); - - $('#' + BeeChat.UI.Resources.Elements.ID_UL_CONTACTS_LIST).empty(); - BeeChat.UI.AvailabilitySwitcher.initialize(BeeChat.Presence.ShowElements.CHAT); - BeeChat.UI.ContactsList.updateButtonText(BeeChat.UI.Resources.Strings.Contacts.BUTTON); - $('#' + BeeChat.UI.Resources.Elements.ID_SPAN_CONTACTS_BUTTON).attr('class', 'offline'); - $('.' + BeeChat.UI.Resources.StyleClasses.ChatBox.INPUT + '>textarea').attr('disabled', 'true'); - $('#' + BeeChat.UI.Resources.Elements.ID_DIV_CHATBOXES).children().hide(); - $('#' + BeeChat.UI.Resources.Elements.ID_DIV_SCROLLBOXES).find('ul').children() - .attr('class', BeeChat.UI.Resources.StyleClasses.LABEL + ' ' + BeeChat.UI.Resources.ReferenceTables.Styles.Availability.Left[BeeChat.Presence.Types.UNAVAILABLE.toUpperCase()]); - g_beechat_user = null; - BeeChat.UI.saveConnection(); - } - }, - - /** Function: saveConnection - * Save connection informations (non sensible data) in $_SESSION. - * - */ - saveConnection: function() - { - var conn = null; - - if (g_beechat_user != null) { - var userConn = g_beechat_user.getConnection(); - - conn = { - 'jid': userConn.jid, - 'sid': userConn.sid, - 'rid': userConn.rid, - 'attached': g_beechat_user.isAttached() - }; - } - var self = this; - - $.ajax({ - type: 'POST', - async: false, - url: self.addActionTokens('<?php echo $vars['url'] . "action/beechat/save_state"; ?>'), - data: { beechat_conn: JSON.stringify(conn) } - }); - - /* - $.cookie(BeeChat.UI.Resources.Cookies.FILENAME_CONN, null); - $.cookie(BeeChat.UI.Resources.Cookies.FILENAME_CONN, JSON.stringify(conn), {path: '/', domain: BeeChat.UI.Resources.Cookies.DOMAIN}); - */ - }, - - /** Function: loadConnection - * Check if a connection already exists. In the case that a connection exists, - * this function triggers the connection process. - * - */ - loadConnection: function() - { - var self = this; - $.ajax({ - type: 'GET', - async: false, - cache: false, - dataType: 'json', - url: self.addActionTokens('<?php echo $vars['url'] . "action/beechat/get_connection"; ?>'), - success: function(conn) { - if (conn != null) { - if (conn.attached) - BeeChat.UI.connect(); - else - BeeChat.UI.connect(conn); - } - }, - error: function() { - BeeChat.UI.connect(); - } - }); - - /* - var conn = JSON.parse($.cookie(BeeChat.UI.Resources.Cookies.FILENAME_CONN)); - - if (conn != null) { - if (conn.attached) - BeeChat.UI.connect(); - else - BeeChat.UI.connect(conn); - } else - BeeChat.UI.connect(); - */ - }, - - /** Function: saveState - * Save app state in $_SESSION - * - */ - saveState: function() - { - var self = this; - var currentAvailabilityClass = $('#' + BeeChat.UI.Resources.Elements.ID_SPAN_CURRENT_AVAILABILITY).attr('class'); - var currentAvailability = currentAvailabilityClass.substr(currentAvailabilityClass.lastIndexOf('_') + 1); - - var data = { - availability: currentAvailability, - contacts: g_beechat_roster_items, - chats: {}, - contacts_list: { - minimized: $('#' + BeeChat.UI.Resources.Elements.ID_DIV_CONTACTS).is(':hidden') - } - }; - - $('#' + BeeChat.UI.Resources.Elements.ID_DIV_CHATBOXES).children().each(function() { - var contactBareJid = $(this).attr('bareJid'); - //var contactBareJid = $(this).data('bareJid'); - var isroom = ($(this).attr('isroom') == 'true'); - if (isroom) - var roster = $(this).find('div').filter('[class=' + BeeChat.UI.Resources.StyleClasses.ChatBox.ROOMROSTER + ']'); - var html_content = $(this).children().filter('[bareJid="' + contactBareJid + '"]').html(); - data.chats[contactBareJid] = { - 'html_content': escape(html_content), - 'roster_content': isroom?escape(roster.html()):'', - 'isroom': $(this).attr('isroom'), - 'group_guid': (contactBareJid in g_beechat_rooms)?g_beechat_rooms[contactBareJid]:0, - 'minimized': $(this).is(':hidden'), - 'unread': BeeChat.UI.UnreadCountBox.getElm(contactBareJid).text() - }; - }); - - $.ajax({ - type: 'POST', - async: false, - url: self.addActionTokens('<?php echo $vars['url'] . "action/beechat/save_state"; ?>'), - data: { beechat_state: JSON.stringify(data) } - }); - }, - - /** Function: loadState - * Load app state from $_SESSION - * - */ - loadState: function() - { - var self = this; - $.ajax({ - type: 'GET', - async: true, - cache: false, - dataType: 'json', - url: self.addActionTokens('<?php echo $vars['url'] . "action/beechat/get_state"; ?>'), - error: function() { - alert('error getting state'); - }, - success: function(json) { - debugXMPP('loadState'); - BeeChat.UI.AvailabilitySwitcher.initialize(json.availability); - - if (!json.contacts_list.minimized) { - $('#' + BeeChat.UI.Resources.Elements.ID_DIV_CONTACTS).show(); - BeeChat.UI.ContactsList.showedStyle(); - } - - g_beechat_user.getRoster().setItems(json.contacts); - self.loadRosterItemsIcons(false); - self.loadRosterItemsStatuses(false); - g_beechat_roster_items = g_beechat_user.getRoster().getItems(); - BeeChat.UI.ContactsList.update(g_beechat_user.getRoster().getOnlineItems()) - g_beechat_user.setInitialized(true); - - var scrollBoxesElm = $('#' + BeeChat.UI.Resources.Elements.ID_DIV_SCROLLBOXES); - var scrollBoxElmToShow = null; - - // Load saved chats - for (var key in json.chats) { - var isroom = (json.chats[key].isroom == 'true'); - if (isroom) - BeeChat.UI.ScrollBoxes.addRoom(key); - else - BeeChat.UI.ScrollBoxes.add(key); - - var chatBoxElm = BeeChat.UI.ChatBoxes.getChatBoxElm(key); - debugXMPP("load chat " + key); - chatBoxElm.hide(); - - if (!json.chats[key].minimized) { - scrollBoxElmToShow = BeeChat.UI.ScrollBoxes.getScrollBoxElm(key); - } - - var chatBoxContentElm = chatBoxElm.children().filter('[bareJid="' + key + '"]'); - - chatBoxContentElm.append(unescape(json.chats[key].html_content)); - chatBoxContentElm.attr({scrollTop: chatBoxContentElm.attr('scrollHeight')}); - if (isroom) { - g_beechat_rooms[key] = json.chats[key].room_guid; - var rosterElm = chatBoxElm.find('div').filter('[class=' + BeeChat.UI.Resources.StyleClasses.ChatBox.ROOMROSTER + ']'); - rosterElm.append(unescape(json.chats[key].roster_content)); - } - - BeeChat.UI.UnreadCountBox.update(key, json.chats[key].unread); - } - if (scrollBoxElmToShow != null) - scrollBoxesElm.trigger('goto', scrollBoxesElm.find('ul').children().index(scrollBoxElmToShow)); - else - scrollBoxesElm.trigger('goto', 0); - - // g_beechat_user.sendPresenceAvailability(json.availability, ''); - BeeChat.UI.ScrollBoxes.isInitialized = true; - BeeChat.UI.ScrollBoxes.isOpened = true; - - for (var key in json.chats) { - if (json.chats[key].minimized) { - BeeChat.UI.ChatBoxes.getChatBoxElm(key).hide(); - BeeChat.UI.ScrollBoxes.unselect(key); - } - else { - BeeChat.UI.ChatBoxes.getChatBoxElm(key).show(); - BeeChat.UI.ScrollBoxes.select(key); - } - } - for (room_idx in g_user_rooms) { - var room = g_user_rooms[room_idx]; - var chatBox = BeeChat.UI.ChatBoxes.getChatBoxElm(room[0]); - if (chatBox.length == 0) { - g_beechat_user.joinRoom(room[0], room[1]) - } - } - - }, - error: function() { - BeeChat.UI.ContactsList.initialize(); - } - }); - }, - - /** Function: loadRosterItemsIcons - * - */ - loadRosterItemsIcons: function(is_async, cb) - { - var data = g_beechat_user.getRoster().getItemsUsernamesAsList(); - var self = this; - - $.ajax({ - type: 'POST', - url: self.addActionTokens('<?php echo $vars['url'] . "action/beechat/get_icons"; ?>'), - async: is_async, - cache: false, - data: {'beechat_roster_items_usernames': data}, - dataType: 'json', - success: function(json) { - g_beechat_user.getRoster().setIcons(json); - g_beechat_roster_items = g_beechat_user.getRoster().getItems(); - - BeeChat.UI.ContactsList.update(g_beechat_user.getRoster().getOnlineItems()) - if (cb) { - cb(); - } - } - }); - }, - - /** Function: loadRosterItemsStatuses - * - */ - loadRosterItemsStatuses: function(is_async, cb) - { - var data = g_beechat_user.getRoster().getItemsUsernamesAsList(); -//alert(data) - var self = this; - $.ajax({ - type: 'POST', - url: self.addActionTokens('<?php echo $vars['url'] . "action/beechat/get_statuses"; ?>'), - async: true, // force - cache: false, - data: {'beechat_roster_items_usernames': data}, - dataType: 'json', - success: function(json) { - g_beechat_user.getRoster().setStatuses(json); - g_beechat_roster_items = g_beechat_user.getRoster().getItems(); - BeeChat.UI.ContactsList.update(g_beechat_user.getRoster().getOnlineItems()) - if (cb) { - cb(); - } - } - }); - }, - - /** Function: onRosterUpdate - * Notified by core on a roster update - * - */ - onRosterUpdate: function(rosterItems) - { - g_beechat_roster_items = rosterItems; - //alert("get roster"); - if (!g_beechat_user.isInitialized()) { - //alert("load roster" + rosterItems.length); - BeeChat.UI.loadRosterItemsStatuses(true, - function() { BeeChat.UI.loadRosterItemsIcons(true, - function() {g_beechat_user.sendInitialPresence();}); }); - //BeeChat.UI.loadRosterItemsIcons(false); - //g_beechat_user.sendInitialPresence(); - } - }, - - /** Function: onChatMessage - * - */ - onChatMessage: function(data) - { - if ($(data.msg).find('body').length == 0) { - BeeChat.UI.ChatBoxes.updateChatState(data.contactBareJid, data.msg); - } - else { - BeeChat.UI.ChatBoxes.update(data.contactBareJid, BeeChat.UI.Utils.getContactName(data.contactBareJid), Strophe.getText($(data.msg).find('body')[0])); - } - } -}; - - -/** Class: BeeChat.UI.Resources.ReferenceTables - * An object container for all reference tables - * - */ -BeeChat.UI.Resources.ReferenceTables = { - Styles: { - Availability: { - Left: { - AVAILABLE: BeeChat.UI.Resources.StyleClasses.Availability.Left.ONLINE, - CHAT: BeeChat.UI.Resources.StyleClasses.Availability.Left.ONLINE, - DND: BeeChat.UI.Resources.StyleClasses.Availability.Left.DND, - AWAY: BeeChat.UI.Resources.StyleClasses.Availability.Left.AWAY, - XA: BeeChat.UI.Resources.StyleClasses.Availability.Left.XA, - UNAVAILABLE: BeeChat.UI.Resources.StyleClasses.Availability.Left.OFFLINE, - OFFLINE: BeeChat.UI.Resources.StyleClasses.Availability.Left.OFFLINE, - ROOM: BeeChat.UI.Resources.StyleClasses.Availability.Left.ROOM - }, - - Right: { - AVAILABLE: BeeChat.UI.Resources.StyleClasses.Availability.Right.ONLINE, - CHAT: BeeChat.UI.Resources.StyleClasses.Availability.Right.ONLINE, - DND: BeeChat.UI.Resources.StyleClasses.Availability.Right.DND, - AWAY: BeeChat.UI.Resources.StyleClasses.Availability.Right.AWAY, - XA: BeeChat.UI.Resources.StyleClasses.Availability.Right.XA, - UNAVAILABLE: BeeChat.UI.Resources.StyleClasses.Availability.Right.OFFLINE, - OFFLINE: BeeChat.UI.Resources.StyleClasses.Availability.Right.OFFLINE, - ROOM: BeeChat.UI.Resources.StyleClasses.Availability.Right.ROOM - } - } - } -}; - - -/** Class: BeeChat.UI.ContactsList - * An object container for all ContactsList functions - * - */ -BeeChat.UI.ContactsList = { - /** Function: initialize - * Initialize the contacts list by binding elements - * - */ - initialize: function() - { - $('#' + BeeChat.UI.Resources.Elements.ID_SPAN_CONTACTS_CONTROL_MINIMIZE).unbind('click').bind('click', BeeChat.UI.ContactsList.toggleDisplay); - $('#' + BeeChat.UI.Resources.Elements.ID_SPAN_CONTACTS_BUTTON).unbind('click').bind('click', function() { - if (g_beechat_user == null) - BeeChat.UI.connect(); - else - BeeChat.UI.ContactsList.toggleDisplay(); - }); - }, - - /** Function: update - * Update the contacts list content - * - * Parameters: - * (Object)(BeeChat.Core.RosterItem) onlineRosterItems - A hash of RosterItems in object notation - * - */ - update: function(onlineRosterItems) - { - var contactsListElm = $('#' + BeeChat.UI.Resources.Elements.ID_UL_CONTACTS_LIST); - - contactsListElm.children().each(function() { - var contactBareJid = $(this).attr('bareJid'); - - if (g_beechat_roster_items != null) { - if ($.inArray(contactBareJid, onlineRosterItems) == -1) { - BeeChat.UI.ScrollBoxes.updateAvailability(contactBareJid); - $(this).remove(); - } - } - }); - - for (var key in onlineRosterItems) { - if (typeof onlineRosterItems[key] != 'object') - continue; - - var contactElm = contactsListElm.find('li').filter('[bareJid="' + key + '"]'); - - if (contactElm.length == 0) { - contactElm = $('<li></li>') - .attr('bareJid', key) - .append($('<img />') - .attr('src', g_beechat_roster_items[key].icon_tiny)) - .append(BeeChat.UI.Utils.getTruncatedContactName(key, 25)) - .appendTo(contactsListElm) - .bind('click', function() { - if (!BeeChat.UI.ChatBoxes.getChatBoxElm($(this).attr('bareJid')).is(':visible')) { - BeeChat.UI.ContactsList.toggleDisplay(); - } - - BeeChat.UI.ScrollBoxes.add($(this).attr('bareJid'), false, true); - }); - } - - BeeChat.UI.ContactsList.updateContactAvailability(contactElm, key); - } - - BeeChat.UI.ContactsList.updateButtonText(BeeChat.UI.Resources.Strings.Contacts.BUTTON + ' (<strong>' + g_beechat_user.getRoster().getSizeOnlineItems() + '</strong>)'); - }, - - /** Function: updateContactAvailability - * - */ - updateContactAvailability: function(contactElm, contactBareJid) - { - // Update from contactsList - contactElm.attr('class', BeeChat.UI.Resources.ReferenceTables.Styles.Availability.Right[g_beechat_roster_items[contactBareJid].getStrongestPresence().show.toUpperCase()]); - - // Update from scrollBoxes - BeeChat.UI.ScrollBoxes.updateAvailability(contactBareJid); - }, - - /** Function: updateButtonText - * - * - */ - updateButtonText: function(msg) - { - $('#' + BeeChat.UI.Resources.Elements.ID_SPAN_CONTACTS_BUTTON).html(msg); - }, - - /** Function: toggleDisplay - * Toggle the contacts box display (hide | show) - * - */ - toggleDisplay: function() - { - var contactsBoxElm = $('#' + BeeChat.UI.Resources.Elements.ID_DIV_CONTACTS); - - contactsBoxElm.toggle(); - if (contactsBoxElm.is(':hidden')) { - BeeChat.UI.ContactsList.hiddenStyle(); - } else { - BeeChat.UI.ContactsList.showedStyle(); - } - $('#' + BeeChat.UI.Resources.Elements.ID_UL_AVAILABILITY_SWITCHER_LIST).hide(); - }, - - /** Function: hiddenStyle - * - */ - hiddenStyle: function() - { - $('#' + BeeChat.UI.Resources.Elements.ID_DIV_BAR_RIGHT).css({'border-left': '1px solid #BBBBBB', 'border-right': '1px solid #BBBBBB', 'background-color': '#DDDDDD'}); - }, - - /** Function: showedStyle - * - */ - showedStyle: function() - { - $('#' + BeeChat.UI.Resources.Elements.ID_DIV_BAR_RIGHT).css({'border-left': '1px solid #666666', 'border-right': '1px solid #666666', 'background-color': 'white'}); - } -}; - - -/** Class: BeeChat.UI.AvailabilitySwitcher - * An object container for all AvailabilitySwitcher functions - * - */ -BeeChat.UI.AvailabilitySwitcher = { - /** Function: initialize - * Initialize the availability switcher by setting the current user's availability - * and binding actions - * - */ - initialize: function(availability) - { - $('#' + BeeChat.UI.Resources.Elements.ID_SPAN_CURRENT_AVAILABILITY).unbind('click').bind('click', BeeChat.UI.AvailabilitySwitcher.toggleListDisplay); - - $('#' + BeeChat.UI.Resources.Elements.ID_SPAN_AVAILABILITY_SWITCHER_CONTROL).unbind('click').bind('click', BeeChat.UI.AvailabilitySwitcher.toggleListDisplay); - - $('#' + BeeChat.UI.Resources.Elements.ID_UL_AVAILABILITY_SWITCHER_LIST).find('li').each(function() { - $(this).unbind('click').bind('click', function() { - var availabilityClass = $(this).attr('class'); - var availability = availabilityClass.substr(availabilityClass.lastIndexOf('_') + 1); - - if (availability == 'offline') - BeeChat.UI.disconnect(); - else { - g_beechat_user.sendPresenceAvailability(availability, ''); - BeeChat.UI.AvailabilitySwitcher.update(availability); - $('#' + BeeChat.UI.Resources.Elements.ID_UL_AVAILABILITY_SWITCHER_LIST).hide('slow'); - $('#' + BeeChat.UI.Resources.Elements.ID_UL_CONTACTS_LIST).show('slow'); - } - }); - }); - BeeChat.UI.AvailabilitySwitcher.update(availability); - }, - - /** Function: update - * Update the current user's availability - * - * Parameters: - * (BeeChat.Presence.ShowElements) availability - The current user's availability - */ - update: function(availability) - { - var upperCasedAvailability = availability.toUpperCase(); - - $('#' + BeeChat.UI.Resources.Elements.ID_SPAN_CURRENT_AVAILABILITY) - .attr('class', BeeChat.UI.Resources.ReferenceTables.Styles.Availability.Left[upperCasedAvailability]) - .text(BeeChat.UI.Resources.Strings.Availability[upperCasedAvailability]); - - if (availability == 'chat') - $('#' + BeeChat.UI.Resources.Elements.ID_SPAN_CONTACTS_BUTTON).attr('class', 'online'); - else if (availability == 'xa' || availability == 'away') - $('#' + BeeChat.UI.Resources.Elements.ID_SPAN_CONTACTS_BUTTON).attr('class', 'away'); - else if (availability == 'dnd') - $('#' + BeeChat.UI.Resources.Elements.ID_SPAN_CONTACTS_BUTTON).attr('class', 'dnd'); - }, - - /** Function: switchControlClass - * - */ - switchControlClass: function() - { - var switcherControlElm = $('#' + BeeChat.UI.Resources.Elements.ID_SPAN_AVAILABILITY_SWITCHER_CONTROL); - - if (switcherControlElm.attr('class') == BeeChat.UI.Resources.StyleClasses.Availability.Control.UP) - switcherControlElm.attr('class', BeeChat.UI.Resources.StyleClasses.Availability.Control.DOWN); - else - switcherControlElm.attr('class', BeeChat.UI.Resources.StyleClasses.Availability.Control.UP); - }, - - /** Function: toggleListDisplay - * - */ - toggleListDisplay: function() - { - BeeChat.UI.AvailabilitySwitcher.switchControlClass(); - $('#' + BeeChat.UI.Resources.Elements.ID_UL_CONTACTS_LIST).toggle('slow'); - $('#' + BeeChat.UI.Resources.Elements.ID_UL_AVAILABILITY_SWITCHER_LIST).toggle('slow'); - } -}; - - -/** Class: BeeChat.UI.ScrollBoxes - * An object container for all ScrollBoxes related functions - * - */ -BeeChat.UI.ScrollBoxes = { - isInitialized: false, - isOpened: false, - - /** Function: initialize - * - */ - initialize: function() { - var $prev = $('#beechat_center_prev'), - $next = $('#beechat_center_next'); - - $('#' + BeeChat.UI.Resources.Elements.ID_DIV_BAR_CENTER).serialScroll({ - target: '#beechat_scrollboxes', - items: 'li', - prev: '#beechat_center_prev', - next: '#beechat_center_next', - axys: 'x', - start: 2, - step: -1, - interval: 0, - duration: 0, - cycle: false, - force: true, - jump: true, - lock: true, - lazy: true, - constant: true, - - onBefore: function(e, elem, $pane, $items, pos) { - $next.add($prev).hide(); - $prev.add($next).hide(); - if (pos != 0) { - $next.show(); - } - if (pos != $items.length - 1) - $prev.show(); - }, - - onAfter: function(elem) { - BeeChat.UI.ChatBoxes.takeStand($(elem).attr('bareJid')); - BeeChat.UI.ScrollBoxes.isInitialized = true; - } - }); - }, - - /** Function: add - * Add a scrollbox to the scrollboxes bar - * - */ - addRoom: function(contactBareJid) - { - debugXMPP('addRoom' + contactBareJid); - BeeChat.UI.ScrollBoxes.add(contactBareJid, true); - var scrollBoxElm = BeeChat.UI.ScrollBoxes.getScrollBoxElm(contactBareJid); - scrollBoxElm.attr('class', BeeChat.UI.Resources.StyleClasses.Availability.Left.ROOM); - }, - - add: function(contactBareJid, isroom) - { - var scrollBoxesElm = $('#' + BeeChat.UI.Resources.Elements.ID_DIV_SCROLLBOXES); - var scrollBoxElm = scrollBoxesElm.find('ul').children().filter('[bareJid="' + contactBareJid + '"]'); - debugXMPP("add " + contactBareJid + " " + scrollBoxElm.length); - if (scrollBoxElm.length == 0) { - var availClass = null; - var pres = null; - if (g_beechat_roster_items != undefined) - pres = g_beechat_roster_items[contactBareJid] != null ? g_beechat_roster_items[contactBareJid].getStrongestPresence() : null; - - if (pres != null) - availClass = BeeChat.UI.Resources.ReferenceTables.Styles.Availability.Left[pres.show.toUpperCase()]; - else - availClass = BeeChat.UI.Resources.ReferenceTables.Styles.Availability.Left[BeeChat.Presence.Types.UNAVAILABLE.toUpperCase()]; - - scrollBoxElm = $('<li></li>') - .attr('class', BeeChat.UI.Resources.StyleClasses.LABEL + ' ' + availClass) - .attr('bareJid', contactBareJid) - .attr('isroom', isroom?'true':'false') - .attr('title', BeeChat.UI.Resources.Strings.Box.SHOWHIDE) - .text(BeeChat.UI.Utils.getTruncatedContactName(contactBareJid, 11)) - .append($('<span></span>') - .attr('class', BeeChat.UI.Resources.StyleClasses.BOX_CONTROL) - .attr('id', BeeChat.UI.Resources.Elements.ID_SPAN_CLOSE_BOX) - .text('X') - .attr('title', BeeChat.UI.Resources.Strings.Box.CLOSE) - .bind('click', function() { - if (isroom) - g_beechat_user.leaveRoom(contactBareJid); - var scrollBoxesElm = $('#' + BeeChat.UI.Resources.Elements.ID_DIV_SCROLLBOXES); - - BeeChat.UI.ChatBoxes.remove($(this).parent().attr('bareJid')); - BeeChat.UI.UnreadCountBox.remove($(this).parent().attr('bareJid')); - scrollBoxesElm.trigger('goto', scrollBoxesElm.find('ul').children().index(BeeChat.UI.ScrollBoxes.getSelectedScrollBoxElm())); - BeeChat.UI.saveState(); - })); - - scrollBoxesElm.find('ul').append(scrollBoxElm); - BeeChat.UI.ChatBoxes.add(contactBareJid, isroom); - if (arguments.length == 3 && arguments[2]) - scrollBoxesElm.trigger('goto', scrollBoxesElm.find('ul').children().index(scrollBoxElm)); - if (!isroom) { - BeeChat.UI.loadRosterItemsStatuses(true, function () { BeeChat.UI.loadRosterItemsIcons(true); }); - } - } else { - scrollBoxesElm.trigger('goto', scrollBoxesElm.find('ul').children().index(scrollBoxElm)); - } - }, - - /** Function: remove - * - */ - remove: function(contactBareJid) - { - BeeChat.UI.ScrollBoxes.getScrollBoxElm(contactBareJid).remove(); - }, - - /** Function: unselect - * - */ - unselect: function(contactBareJid) - { - var scrollBoxElm = BeeChat.UI.ScrollBoxes.getScrollBoxElm(contactBareJid); - scrollBoxElm.attr('class', (scrollBoxElm.attr('class')).replace(/beechat_scrollbox_selected/, '')); - }, - - /** Function: select - * - */ - select: function(contactBareJid) - { - var scrollBoxElm = BeeChat.UI.ScrollBoxes.getScrollBoxElm(contactBareJid); - var scrollBoxElmClasses = scrollBoxElm.attr('class'); - - if (scrollBoxElmClasses.search(/beechat_scrollbox_selected/) == -1) - scrollBoxElm.attr('class', scrollBoxElmClasses + ' ' + BeeChat.UI.Resources.StyleClasses.ScrollBox.SELECTED); - }, - - /** Function: updateAvailability - * - */ - updateAvailability: function(contactBareJid) - { - var pres = g_beechat_roster_items[contactBareJid].getStrongestPresence(); - var scrollBoxElm = BeeChat.UI.ScrollBoxes.getScrollBoxElm(contactBareJid); - var scrollBoxElmClasses = scrollBoxElm.attr('class'); - var updatedAvailability = null; - - if (pres != null) - updatedAvailability = BeeChat.UI.Resources.ReferenceTables.Styles.Availability.Left[pres.show.toUpperCase()]; - else - updatedAvailability = BeeChat.UI.Resources.ReferenceTables.Styles.Availability.Left[BeeChat.Presence.Types.UNAVAILABLE.toUpperCase()]; - - if (scrollBoxElmClasses == undefined || scrollBoxElmClasses.search(/(beechat_left_availability_)/g) == -1) { - scrollBoxElm.attr('class', BeeChat.UI.Resources.StyleClasses.LABEL + ' ' + updatedAvailability); - } else { - updatedAvailability = updatedAvailability.replace(/(beechat_left_availability)/g, ''); - - scrollBoxElmClasses = scrollBoxElmClasses.replace(/(_chat)/g, updatedAvailability); - scrollBoxElmClasses = scrollBoxElmClasses.replace(/(_dnd)/g, updatedAvailability); - scrollBoxElmClasses = scrollBoxElmClasses.replace(/(_away)/g, updatedAvailability); - scrollBoxElmClasses = scrollBoxElmClasses.replace(/(_xa)/g, updatedAvailability); - scrollBoxElmClasses = scrollBoxElmClasses.replace(/(_offline)/g, updatedAvailability); - - scrollBoxElm.attr('class', scrollBoxElmClasses); - } - }, - - /** Function: getSelectedScrollBoxElm - * - */ - getSelectedScrollBoxElm: function(contactBareJid) - { - var elm = undefined; - - $('#' + BeeChat.UI.Resources.Elements.ID_DIV_SCROLLBOXES).find('ul').children().each(function() { - if ($(this).attr('class').search(/beechat_scrollbox_selected/) != -1) - elm = $(this); - }); - - return (elm); - }, - - /** Function: getScrollBoxElm - * - */ - getScrollBoxElm: function(contactBareJid) - { - return $('#' + BeeChat.UI.Resources.Elements.ID_DIV_SCROLLBOXES).find('ul').children().filter('[bareJid="' + contactBareJid + '"]'); - } -}; - - -/** Class: BeeChat.UI.ChatBoxes - * An object container for all ChatBoxes related functions - * - */ -BeeChat.UI.ChatBoxes = { - dateLastComposing: {}, - lastTimedPauses: {}, - - /** Function: add - * - */ - add: function(contactBareJid, isroom) - { - var chatBoxes = $('#' + BeeChat.UI.Resources.Elements.ID_DIV_CHATBOXES); - - if ($(chatBoxes).children().filter('[bareJid="' + contactBareJid + '"]').length == 0) { - debugXMPP("create chatbox " + contactBareJid); - var chatBox = $('<div></div>') - .attr('class', isroom ? BeeChat.UI.Resources.StyleClasses.ChatBox.MAIN : BeeChat.UI.Resources.StyleClasses.ChatBox.MAIN) - .attr('bareJid', contactBareJid) - .attr('isroom', isroom ? 'true' : 'false') - .hide(); - - var chatBoxTop = $('<div></div>') - .attr('class', BeeChat.UI.Resources.StyleClasses.ChatBox.TOP); - if (!isroom) - chatBoxTop.append($('<a></a>') - .attr('href', BeeChat.UI.Resources.Paths.MEMBER_PROFILE + Strophe.getNodeFromJid(contactBareJid)) - .append($('<img />') - .attr('class', BeeChat.UI.Resources.StyleClasses.ChatBox.TOP_ICON) - .attr('src', (g_beechat_roster_items != null && g_beechat_roster_items[contactBareJid] != undefined)?g_beechat_roster_items[contactBareJid].icon_small:''))) - chatBoxTop.append($('<span></span>') - .attr('class', BeeChat.UI.Resources.StyleClasses.LABEL) - .html(isroom?BeeChat.UI.Utils.getTruncatedContactName(contactBareJid).split('@')[0]:'<a href="' + BeeChat.UI.Resources.Paths.MEMBER_PROFILE + Strophe.getNodeFromJid(contactBareJid) + '">' + BeeChat.UI.Utils.getTruncatedContactName(contactBareJid) + '</a>')) - .append($('<div></div>') - .attr('class', BeeChat.UI.Resources.StyleClasses.ChatBox.TOP_CONTROLS) - .append($('<span></span>') - .attr('class', BeeChat.UI.Resources.StyleClasses.ChatBox.CONTROL) - .attr('id', BeeChat.UI.Resources.Elements.ID_SPAN_CLOSE_BOX) - .text('X') - .attr('title', BeeChat.UI.Resources.Strings.Box.CLOSE) - .bind('click', function() { - if (isroom) - g_beechat_user.leaveRoom(contactBareJid); - BeeChat.UI.ChatBoxes.remove(contactBareJid); - })) - .append($('<span></span>') - .attr('class', BeeChat.UI.Resources.StyleClasses.ChatBox.CONTROL) - .attr('id', BeeChat.UI.Resources.Elements.ID_SPAN_CLOSE_BOX) - .text('_') - .attr('title', BeeChat.UI.Resources.Strings.Box.MINIMIZE) - .css({'font-size': '1.6em', 'position': 'relative', 'line-height': '4px'}) - .bind('click', function() { - BeeChat.UI.ScrollBoxes.unselect($(this).parent().parent().parent().attr('bareJid')); - $(this).parent().parent().parent().fadeOut('slow'); - }))); - - var chatBoxSubTop = $('<div></div>') - .attr('class', BeeChat.UI.Resources.StyleClasses.ChatBox.SUBTOP) - .append(BeeChat.UI.Utils.getTruncatedContactStatus((g_beechat_roster_items != null && g_beechat_roster_items[contactBareJid] != undefined && g_beechat_roster_items[contactBareJid].status != undefined) ? g_beechat_roster_items[contactBareJid].status : '')); - - var chatBoxContent = $('<div></div>') - .attr('class', BeeChat.UI.Resources.StyleClasses.ChatBox.CONTENT) - .attr('bareJid', contactBareJid); - - var chatBoxInput = $('<div></div>') - .attr('class', BeeChat.UI.Resources.StyleClasses.ChatBox.INPUT) - .append($('<textarea></textarea>') - .attr('bareJid', contactBareJid) - .bind('keypress', isroom?BeeChat.UI.ChatBoxes.onRoomTypingMessage:BeeChat.UI.ChatBoxes.onTypingMessage) - .bind('keyup', function(e) { - if ((e.keyCode ? e.keyCode : e.which) == 13) - $(this).attr('value', ''); - })); - - var chatBoxBottom = $('<div></div>') - .attr('class', BeeChat.UI.Resources.StyleClasses.ChatBox.BOTTOM) - .append($('<span></span>') - .append($('<span></span>'))); - if (isroom) { - //var chatBoxBox = $('<div></div>') - // .attr('class', BeeChat.UI.Resources.StyleClasses.ChatBox.CHATROOM) - var chatBoxRoster = $('<div></div>') - .attr('class', BeeChat.UI.Resources.StyleClasses.ChatBox.ROOMROSTER) - //chatBoxBox.append(chatBoxTop).append(chatBoxSubTop).append(chatBoxContent).append(chatBoxInput).append(chatBoxBottom) - //chatBox.append(chatBoxRoster).append(chatBoxBox).appendTo(chatBoxes); - chatBox.append(chatBoxTop).append(chatBoxSubTop).append(chatBoxContent).append(chatBoxInput).append(chatBoxBottom).append(chatBoxRoster).appendTo(chatBoxes); - } - else - chatBox.append(chatBoxTop).append(chatBoxSubTop).append(chatBoxContent).append(chatBoxInput).append(chatBoxBottom).appendTo(chatBoxes); - } - else { - /*debugXMPP("show chatbox " + contactBareJid); - var chatBox = $(chatBoxes).children().filter('[bareJid="' + contactBareJid + '"]'); - chatBox.show();*/ - } - }, - - /** Function: takeStand - * - */ - takeStand: function(contactBareJid) - { - var chatBoxesElm = $('#' + BeeChat.UI.Resources.Elements.ID_DIV_CHATBOXES).children(); - var chatBoxElm = chatBoxesElm.filter('[bareJid="' + contactBareJid + '"]'); - var chatBoxContentElm = chatBoxElm.children().filter('[bareJid="' + contactBareJid + '"]'); - var scrollBoxesElm = $('#' + BeeChat.UI.Resources.Elements.ID_DIV_SCROLLBOXES); - var scrollBoxElm = BeeChat.UI.ScrollBoxes.getScrollBoxElm(contactBareJid); - - if (!chatBoxElm.is(':hidden')) { - BeeChat.UI.ScrollBoxes.unselect(contactBareJid); - chatBoxElm.hide(); - } else { - // Hide all other chatboxes - $.each(chatBoxesElm.filter('[bareJid!="' + contactBareJid + '"]'), function() { - BeeChat.UI.ScrollBoxes.unselect($(this).attr('bareJid')); - $(this).hide(); - }); - // Add selected scrollbox style - BeeChat.UI.ScrollBoxes.select(contactBareJid); - // Remove UnreadCountBox - BeeChat.UI.UnreadCountBox.remove(contactBareJid); - // Position the chatbox - var pos = scrollBoxElm.position().left - (chatBoxElm.width() - scrollBoxElm.width()) + 24; - chatBoxElm.css({'left': pos}); - if (!BeeChat.UI.ScrollBoxes.isOpened) - return; - chatBoxElm.show().css({'left': pos}); - // Scroll down the content of the chatbox - chatBoxContentElm.attr({scrollTop: chatBoxContentElm.attr('scrollHeight')}); - // Focus textarea - chatBoxElm.children().filter('[class=' + BeeChat.UI.Resources.StyleClasses.ChatBox.INPUT + ']').find('textarea').focus(); - } - }, - - /** Function: onTypingMessage - * - */ - onRoomTypingMessage: function(e) { - BeeChat.UI.ChatBoxes._onTypingMessage(e, true, this); - }, - - onTypingMessage: function(e) { - BeeChat.UI.ChatBoxes._onTypingMessage(e, false, this); - }, - - _onTypingMessage: function(e, isroom, self) - { - var keyCode = (e.keyCode) ? e.keyCode : e.which; - var contactBareJid = $(self).attr('bareJid'); - - var msgtype = BeeChat.Message.Types.CHAT; - if (isroom) - msgtype = BeeChat.Message.Types.GROUPCHAT; - - if (keyCode == 13 && $(self).val() != '') { - g_beechat_user.sendChatMessage(contactBareJid, jQuery.trim($(self).val()), msgtype); - if (!isroom) - BeeChat.UI.ChatBoxes.update(contactBareJid, BeeChat.UI.Utils.truncateString(BeeChat.UI.Resources.Strings.ChatMessages.SELF, 24), $(self).val(), isroom); - clearTimeout(BeeChat.UI.ChatBoxes.lastTimedPauses[contactBareJid]); - BeeChat.UI.ChatBoxes.lastTimedPauses[contactBareJid] = null; - } else { - var nowTime = new Date().getTime(); - - if (BeeChat.UI.ChatBoxes.dateLastComposing[contactBareJid] == null || BeeChat.UI.ChatBoxes.dateLastComposing[contactBareJid] + 2000 < nowTime) { - BeeChat.UI.ChatBoxes.dateLastComposing[contactBareJid] = nowTime; - g_beechat_user.sendChatStateMessage(contactBareJid, BeeChat.Message.ChatStates.COMPOSING); - } - - clearTimeout(BeeChat.UI.ChatBoxes.lastTimedPauses[contactBareJid]); - BeeChat.UI.ChatBoxes.lastTimedPauses[contactBareJid] = setTimeout('g_beechat_user.sendChatStateMessage(\'' + contactBareJid + '\', BeeChat.Message.ChatStates.PAUSED)', 2000); - - var chatBoxTextAreaElm = BeeChat.UI.ChatBoxes.getChatBoxElm(contactBareJid).children().filter('[class=' + BeeChat.UI.Resources.StyleClasses.ChatBox.INPUT + ']').find('textarea'); - chatBoxTextAreaElm.attr({scrollTop: chatBoxTextAreaElm.attr('scrollHeight')}); - } - }, - - updateRoster: function(contactBareJid, fromName, presence) - { - var availability = $(presence).attr('type'); - var item = $(presence).find('item'); - var chatBoxElm = BeeChat.UI.ChatBoxes.getChatBoxElm(contactBareJid); - - if (chatBoxElm.length == 0) { - BeeChat.UI.ScrollBoxes.add(contactBareJid); - //BeeChat.UI.ScrollBoxes.addRoom(contactBareJid); - chatBoxElm = BeeChat.UI.ChatBoxes.getChatBoxElm(contactBareJid); - } - - //var chatBoxContentElm = chatBoxElm.children().filter('[bareJid="' + contactBareJid + '"]'); - - var roster = chatBoxElm.find('div').filter('[class=' + BeeChat.UI.Resources.StyleClasses.ChatBox.ROOMROSTER + ']'); - if (availability == 'unavailable') { - roster.find('div').filter('[contactName='+fromName+']').remove(); - } - else { - var hasName = roster.find('div').filter('[contactName='+fromName+']'); - if (hasName.length == 0) { - roster.append($('<div>' + fromName + '</div>') - .attr('class', BeeChat.UI.Resources.StyleClasses.ChatBox.ROSTER_ITEM) - .attr('title', item.attr('affiliation') + '/' + item.attr('role')) - .attr('contactName', fromName)) - } - } - }, - - - /** Function: update - * - */ - update: function(contactBareJid, fromName, msg, isroom) - { - var chatBoxElm = BeeChat.UI.ChatBoxes.getChatBoxElm(contactBareJid); - debugXMPP(contactBareJid + " " + msg + " " + chatBoxElm.length); - if (chatBoxElm.length == 0) { - if (isroom) { - BeeChat.UI.ScrollBoxes.addRoom(contactBareJid); - BeeChat.UI.ChatBoxes.show(contactBareJid); - BeeChat.UI.ChatBoxes.takeStand(contactBareJid); - } - else { - BeeChat.UI.ScrollBoxes.add(contactBareJid,false,true); - // BeeChat.UI.ChatBoxes.show(contactBareJid); - BeeChat.UI.ChatBoxes.takeStand(contactBareJid); - } - chatBoxElm = BeeChat.UI.ChatBoxes.getChatBoxElm(contactBareJid); - } - - var chatBoxContentElm = chatBoxElm.children().filter('[bareJid="' + contactBareJid + '"]'); - - chatBoxContentElm.find('p').filter('[class=' + BeeChat.UI.Resources.StyleClasses.ChatBox.STATE + ']').remove(); - - var chatBoxLastMessageElm = $(chatBoxContentElm).find('div').filter('[class=' + BeeChat.UI.Resources.StyleClasses.ChatBox.MESSAGE + ']').filter(':last'); - - if (chatBoxLastMessageElm && chatBoxLastMessageElm.find('span').filter('[class=' + BeeChat.UI.Resources.StyleClasses.ChatBox.MESSAGE_SENDER + ']').text() == fromName) { - chatBoxLastMessageElm.append('<p>' + BeeChat.UI.Utils.getPrintableChatMessage(msg) + '</p>'); - } else { - chatBoxContentElm.append($('<div></div>') - .attr('class', BeeChat.UI.Resources.StyleClasses.ChatBox.MESSAGE) - .append($('<span></span>') - .attr('class', BeeChat.UI.Resources.StyleClasses.ChatBox.MESSAGE_SENDER) - .text(fromName)) - .append($('<span></span>') - .attr('class', BeeChat.UI.Resources.StyleClasses.ChatBox.MESSAGE_DATE) - .text(BeeChat.UI.Utils.getNowFormattedTime())) - .append('<p>' + BeeChat.UI.Utils.getPrintableChatMessage(msg) + '</p>')); - } - - chatBoxContentElm.attr({scrollTop: chatBoxContentElm.attr('scrollHeight')}); - - var scrollBoxesElm = $('#' + BeeChat.UI.Resources.Elements.ID_DIV_SCROLLBOXES); - var scrollBoxElm = BeeChat.UI.ScrollBoxes.getScrollBoxElm(contactBareJid); - - if (BeeChat.UI.ScrollBoxes.isInitialized == false) { - scrollBoxesElm.trigger('goto', scrollBoxesElm.find('ul').children().index(scrollBoxElm)); - } - - debugXMPP("about to update number!"); - if (chatBoxElm.is(':hidden')) { - debugXMPP("update number!"); - BeeChat.UI.UnreadCountBox.update(contactBareJid); -// if (BeeChat.UI.HAS_FOCUS) -// document.getElementById(BeeChat.UI.Resources.Sounds.NEW_MESSAGE).Play(); - } - -// if (!BeeChat.UI.HAS_FOCUS) -// document.getElementById(BeeChat.UI.Resources.Sounds.NEW_MESSAGE).Play(); - }, - - /** Function: updateChatState - * - */ - updateChatState: function(contactBareJid, msg) - { - var chatBoxContentElm = BeeChat.UI.ChatBoxes.getChatBoxElm(contactBareJid).children().filter('[bareJid="' + contactBareJid + '"]'); - - $(msg).children().each(function() { - if (this.tagName == BeeChat.Message.ChatStates.COMPOSING) { - if (chatBoxContentElm.find('p').filter('[class=' + BeeChat.UI.Resources.StyleClasses.ChatBox.STATE + ']').length == 0) { - $('<p></p>') - .attr('class', BeeChat.UI.Resources.StyleClasses.ChatBox.STATE) - .html(BeeChat.UI.Utils.getContactName(contactBareJid) + BeeChat.UI.Resources.Strings.ChatMessages.COMPOSING + "</br />") - .appendTo(chatBoxContentElm); - } - } else if (this.tagName == BeeChat.Message.ChatStates.PAUSED) { - chatBoxContentElm.find('p').filter('[class=' + BeeChat.UI.Resources.StyleClasses.ChatBox.STATE + ']').remove(); - } - }); - chatBoxContentElm.attr({scrollTop: chatBoxContentElm.attr('scrollHeight')}); - }, - - /** Function: remove - * - */ - remove: function(contactBareJid) - { - BeeChat.UI.ChatBoxes.getChatBoxElm(contactBareJid).remove(); - BeeChat.UI.ScrollBoxes.getScrollBoxElm(contactBareJid).remove(); - }, - - /** Function: show - * - */ - show: function(contactBareJid) - { - BeeChat.UI.ChatBoxes.getChatBoxElm(contactBareJid).show(); - }, - - /** Function: hide - * - */ - hide: function(contactBareJid) - { - BeeChat.UI.ChatBoxes.getChatBoxElm(contactBareJid).hide(); - }, - - /** Function: getChatBoxElm - * - */ - getChatBoxElm: function(contactBareJid) - { - return $('#' + BeeChat.UI.Resources.Elements.ID_DIV_CHATBOXES).children().filter('[bareJid="' + contactBareJid + '"]'); - } -}; - -BeeChat.UI.UnreadCountBox = { - /** Function: add - * - */ - add: function(contactBareJid) - { - BeeChat.UI.ScrollBoxes.getScrollBoxElm(contactBareJid) - .append($('<span></span>') - .attr('class', BeeChat.UI.Resources.StyleClasses.UNREAD_COUNT)); - }, - - /** Function: remove - * - */ - remove: function(contactBareJid) - { - BeeChat.UI.UnreadCountBox.getElm(contactBareJid).remove(); - }, - - /** Function: update - * - */ - update: function(contactBareJid) - { - if (arguments.length > 1 && !arguments[1]) - return; - - var unreadCountBoxElm = BeeChat.UI.UnreadCountBox.getElm(contactBareJid); - if (unreadCountBoxElm.length == 0) { - BeeChat.UI.UnreadCountBox.add(contactBareJid); - unreadCountBoxElm = BeeChat.UI.UnreadCountBox.getElm(contactBareJid); - } - if (arguments.length == 1) { - var unreadCount = unreadCountBoxElm.text(); - unreadCountBoxElm.text(++unreadCount); - } else - unreadCountBoxElm.text(arguments[1]); - }, - - /** Function: getElm - * - */ - getElm: function(contactBareJid) - { - return BeeChat.UI.ScrollBoxes.getScrollBoxElm(contactBareJid).find('span').filter('[class=' + BeeChat.UI.Resources.StyleClasses.UNREAD_COUNT +' ]'); - } -}; - -/** Class: BeeChat.UI.Utils - * An object container for all UI utilities functions - * - */ -BeeChat.UI.Utils = { - /** Function: getTruncatedContactName - * - */ - getTruncatedContactName: function(bareJid) - { - return (BeeChat.UI.Utils.truncateString(BeeChat.UI.Utils.getContactName(bareJid), (arguments.length == 2) ? arguments[1] : 21)); - }, - - /** Function: getTruncatedContactStatus - * - */ - getTruncatedContactStatus: function(contactStatus) - { - return (BeeChat.UI.Utils.truncateString(contactStatus, (arguments.length == 2 ? arguments[1] : 50))); - }, - - /** Function: getContactName - * - */ - getContactName: function(bareJid) - { - var contactName = bareJid; - - if (g_beechat_roster_items != null && g_beechat_roster_items[bareJid]) - contactName = g_beechat_roster_items[bareJid].name; - // no contact name so we show bareJid - if (!contactName || contactName == '') - contactName = bareJid; - - return (contactName); - }, - - /** Function: getPrintableChatMessage - * - */ - getPrintableChatMessage: function(msg) - { - var val = new String; - val = $('<div>' + msg + '</div>'); - msg = val.text(); - - msg = jQuery.trim(msg); - msg = BeeChat.UI.Utils.replaceLinks(msg); - msg = BeeChat.UI.Utils.replaceSmileys(msg); - - return msg; - }, - - /** Function: getNowFormattedTime - * - */ - getNowFormattedTime: function() - { - var date = new Date(); - - var hours = date.getHours(); - var minutes = date.getMinutes(); - var seconds = date.getSeconds(); - - if (hours < 10) - hours = '0' + hours; - if (minutes < 10) - minutes = '0' + minutes; - if (seconds < 10) - seconds = '0' + seconds; - return (hours + ':' + minutes + ':' + seconds); - }, - - - /** Function: replaceSmileys - * Replace smileys founded in a string to beautiful icons :) - * - * Parameters: - * (String) str - The string containing smileys - * - */ - replaceSmileys: function(str) - { - str = str.replace(/(;\))/gi, '<img src="' + BeeChat.UI.Resources.Paths.ICONS + BeeChat.UI.Resources.Emoticons.FILENAME_WINK + '" />'); - str = str.replace(/(:\))/gi, '<img src="' + BeeChat.UI.Resources.Paths.ICONS + BeeChat.UI.Resources.Emoticons.FILENAME_SMILE + '" />'); - str = str.replace(/(:\()/gi, '<img src="' + BeeChat.UI.Resources.Paths.ICONS + BeeChat.UI.Resources.Emoticons.FILENAME_UNHAPPY + '" />'); - str = str.replace(/(:D)/gi, '<img src="' + BeeChat.UI.Resources.Paths.ICONS + BeeChat.UI.Resources.Emoticons.FILENAME_GRIN + '" />'); - str = str.replace(/(:o)/gi, '<img src="' + BeeChat.UI.Resources.Paths.ICONS + BeeChat.UI.Resources.Emoticons.FILENAME_SURPRISED + '" />'); - str = str.replace(/(xD)/gi, '<img src="' + BeeChat.UI.Resources.Paths.ICONS + BeeChat.UI.Resources.Emoticons.FILENAME_EVILGRIN + '" />'); - str = str.replace(/(:p)/gi, '<img src="' + BeeChat.UI.Resources.Paths.ICONS + BeeChat.UI.Resources.Emoticons.FILENAME_TONGUE + '" />'); - - return (str); - }, - - /** Function: replaceLinks - * Transform links founded in a string to clickable links - * - * Parameters: - * (String) str - The string where will be replaced links - */ - replaceLinks: function(str) - { - var xpr = - /((ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?)/gi; - - return (str.replace(xpr, '<a href="$1" target="_blank">$1</a>')); - }, - - /** Function: truncateString - * Truncate a string at a specified length - * - * Parameters: - * (String) str - The string to truncate - * (int) len - The maximum length of str - */ - truncateString: function(str, len) - { - if (str != null && str.length > len) - return ((str.substr(0, len) + '...')); - return (str); - } -}; - - -/** Executed when the DOM is ready - * - */ -function init_beechat(ts, token) { - if (typeof document.body.style.maxHeight === "undefined") { // IE6 - return; - } - - BeeChat.UI.initialize(ts, token); -} - -/** Window resizing - * - */ -$(window).resize(function() { - if (typeof document.body.style.maxHeight === "undefined") { // IE6 - return; - } - - $('#' + BeeChat.UI.Resources.Elements.ID_DIV_CHATBOXES).children().each(function() { - var scrollBoxElm = BeeChat.UI.ScrollBoxes.getScrollBoxElm($(this).attr('bareJid')); - var pos = scrollBoxElm.position().left - ($(this).width() - scrollBoxElm.width()) + 24; - - $(this).css({'left': pos}); - }); -}); - - -/** Executed when the page is unloaded - * - */ -$(window).unload(function() { - if (typeof document.body.style.maxHeight === "undefined") { // IE6 - return; - } - - if (!$('#beechat').length) - return; - - if (g_beechat_user != null) { - g_beechat_user.requestSessionPause(); - BeeChat.UI.saveState(); - } - - BeeChat.UI.saveConnection(); - }); - - -/** Check whether the BeeChat tab is active or not - * - */ -$(window).bind('blur', function() { - BeeChat.UI.HAS_FOCUS = false; - }); - -$(window).bind('focus', function() { - BeeChat.UI.HAS_FOCUS = true; - }); diff --git a/views/default/beechat/beechat.php b/views/default/beechat/beechat.php deleted file mode 100644 index 397d35f74..000000000 --- a/views/default/beechat/beechat.php +++ /dev/null @@ -1,84 +0,0 @@ -<?php - /** - * Beechat - * - * @package beechat - * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2 - * @author Beechannels <contact@beechannels.com> - * @copyright Beechannels 2007-2010 - * @link http://beechannels.com/ - */ - -if (elgg_is_logged_in() && elgg_get_logged_in_user_entity()->chatenabled && elgg_get_context() != 'admin') { -?> -<div id="beechat"> - <div id="beechat_left"> - <a id="beechat_tooltip_trigger" href="<?php echo $vars['url']; ?>"><img src="<?php echo $vars['config']->wwwroot; ?>favicon.ico" /></a> - <div class="tooltip tooltipchat"> - <h3><?php echo elgg_echo('beechat:icons:home'); ?></h3> - </div> - </div> - <div id="beechat_center"> - <span id="beechat_center_prev" class="prev"></span> - <div id="beechat_scrollboxes"><ul></ul></div> - <span id="beechat_center_next" class="next"></span> - </div> - <div id="beechat_right"> - <span id="beechat_contacts_button" class="offline"> - <?php echo elgg_echo('beechat:contacts:button'); ?> - </span> - </div> - <div id="beechat_contacts"> - <div id="beechat_contacts_top"> - <span class="beechat_label"><?php echo elgg_echo('beechat:contacts:button'); ?></span> - <div id="beechat_contacts_controls"> - <span id="beechat_contacts_control_minimize" class="beechat_control" title="<?php echo elgg_echo('beechat:box:minimize'); ?>">_</span> - </div> - <br clear="all" /> - </div> - <div id="beechat_availability_switcher"> - <span id="beechat_current_availability"></span> - <span class="beechat_availability_switcher_control_down" id="beechat_availability_switcher_control"></span> - </div> - <div id="beechat_contacts_content"> - <ul id="beechat_contacts_list"></ul> - <ul id="beechat_availability_switcher_list"> - <li class="beechat_left_availability_chat"><?php echo elgg_echo('beechat:availability:available'); ?></li> - <li class="beechat_left_availability_dnd"><?php echo elgg_echo('beechat:availability:dnd'); ?></li> - <li class="beechat_left_availability_away"><?php echo elgg_echo('beechat:availability:away'); ?></li> - <li class="beechat_left_availability_xa"><?php echo elgg_echo('beechat:availability:xa'); ?></li> - <li class="beechat_left_availability_offline"><?php echo elgg_echo('beechat:availability:offline'); ?></li> - </ul> - </div> - <div id="beechat_contacts_bottom"> - <span id="beechat_contacts_bottom_bar"></span> - </div> - </div> - <div id="beechat_chatboxes"></div> -</div> -<!-- SOUNDS --> -<!-- -<embed src="<?php echo $vars['config']->staticurl; ?>mod/beechat/sounds/newmessage.wav" autostart=false width=0 height=0 - id="beechat_sounds_new_message" - enablejavascript="true" /> ---> - -<?php - $ts = time(); - $token = generate_action_token($ts); -?> - -<script> - $(function () { - var e = document.createElement('script'); - e.async = true; - e.type = 'text/javascript'; - e.text = 'init_beechat("<?php echo $ts; ?>","<?php echo $token; ?>");'; - document.getElementById('beechat').appendChild(e); - - }) -</script> - -<?php - } -?> diff --git a/views/default/beechat/beechat.userjs.php b/views/default/beechat/beechat.userjs.php deleted file mode 100644 index ed59b683f..000000000 --- a/views/default/beechat/beechat.userjs.php +++ /dev/null @@ -1,54 +0,0 @@ -<script type="text/javascript"> -BeeChat.Events.Messages = { - ConnectionStates: { - CONNECTING: "<?php echo elgg_echo('beechat:connection:state:connecting'); ?>", - AUTHENTICATING: "<?php echo elgg_echo('beechat:connection:state:authenticating'); ?>", - FAILED: "<?php echo elgg_echo('beechat:connection:state:failed'); ?>", - DISCONNECTING: "<?php echo elgg_echo('beechat:connection:state:disconnecting'); ?>", - OFFLINE: "<?php echo elgg_echo('beechat:connection:state:offline'); ?>", - ONLINE: "<?php echo elgg_echo('beechat:connection:state:online'); ?>" - } - } - -BeeChat.UI.Resources.Strings = { - Availability: { - AVAILABLE: "<?php echo elgg_echo('beechat:availability:available'); ?>", - CHAT: "<?php echo elgg_echo('beechat:availability:available'); ?>", - ONLINE: "<?php echo elgg_echo('beechat:availability:available'); ?>", - DND: "<?php echo elgg_echo('beechat:availability:dnd'); ?>", - AWAY: "<?php echo elgg_echo('beechat:availability:away'); ?>", - XA:"<?php echo elgg_echo('beechat:availability:xa'); ?>", - OFFLINE: "<?php echo elgg_echo('beechat:availability:offline'); ?>" - }, - - Contacts: { - BUTTON: "<?php echo elgg_echo('beechat:contacts:button'); ?>" - }, - - ChatMessages: { - SELF: "<?php echo $_SESSION['user']->name; ?>", - COMPOSING: "<?php echo elgg_echo('beechat:chat:composing'); ?>" - }, - - Box: { - MINIMIZE: "<?php echo elgg_echo('beechat:box:minimize'); ?>", - CLOSE: "<?php echo elgg_echo('beechat:box:close'); ?>", - SHOWHIDE: "<?php echo elgg_echo('beechat:box:showhide'); ?>" - } - } -g_user_rooms = new Array(); -<?php -if (elgg_is_logged_in()) { - $user = elgg_get_logged_in_user_entity(); - $chatrooms = elgg_get_entities_from_relationship(array('relationship' => 'groupchat', - 'relationship_guid' => $user->guid, - 'inverse_relationship' => false, - 'limit' => 0)); - if (!empty($chatrooms)) { - foreach($chatrooms as $chatroom) { - echo "g_user_rooms.push(['".beechat_friendly_title($chatroom->name)."@".elgg_get_plugin_setting("groupdomain", "beechat")."', '".$chatroom->guid."']);"; - } - } -} -?> -</script> diff --git a/views/default/beechat/screen.css.php b/views/default/beechat/screen.css.php deleted file mode 100644 index 930e60089..000000000 --- a/views/default/beechat/screen.css.php +++ /dev/null @@ -1,672 +0,0 @@ -<?php - global $CONFIG; - $url = $CONFIG->wwwroot; - -?> -/** - * Beechat - * - * @package beechat - * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2 - * @author Beechannels <contact@beechannels.com> - * @copyright Beechannels 2007-2010 - * @link http://beechannels.com/ - */ - -div#beechat { - display: block !important; - display: none; - position: fixed; - left: 1%; - right: 1%; - bottom: 0; - margin: 0; - padding: 0; - height: 20px; - z-index: 999; - - font-family: Arial, Helvetica, "Liberation Sans", FreeSans, sans-serif; - font-size: 0.9em; - color: #222222; - background-color: #DDDDDD; - border-top: 1px solid #BBBBBB; - border-left: 1px solid #BBBBBB; -} -div#beechat a img { - border: none; -} -div#beechat a { - text-decoration: none; -} -div#beechat img { - vertical-align: middle; -} -div#beechat a:hover { - text-decoration: underline; -} -.beechat_control { - cursor: pointer; - color: #CCCCFF; - font-size: 1.6em; -} -.beechat_control:hover { - color: white; -} -.beechat_box_control { - cursor: pointer; - color: #888888; - font-size: 1em; -} -.beechat_box_control:hover { - color: #222222; -} -.beechat_chatbox_control { - cursor: pointer; - color: #CCCCFF; - font-size: 1.6em; -} -.beechat_chatbox_control:hover { - color: white; -} -.beechat_label { - font-weight: bold; - font-size: 1.1em; -} - -/* -** - -** left side -** - -*/ -div#beechat_left { - position: absolute; - top: 0; - left: 0; - width: 116px; - height: 18px; - margin: 0; - padding: 1px 2px; -} - - -/* -** - -** right side -** - -*/ -div#beechat_right { - position: absolute; - top: 0; - right: 0; - width: 220px; - height: 20px; - margin: 0; - padding: 0 0 0 0; - - border-left: 1px solid #BBBBBB; - border-right: 1px solid #BBBBBB; -} -div#beechat_contacts { - position: absolute; - right: 0px; - bottom: 0; - width: 222px; - height: 240px; - margin: 0 auto 20px auto; - padding: 0; - display: none; - - background-color: white; -} -div#beechat_contacts_top { - color: white; - background-color: #193C60; - width: 220px; - height: 32px; - - border-top: 1px solid #0B2C4F; - border-left: 1px solid #0B2C4F; - border-right: 1px solid #0B2C4F; -} -div#beechat_contacts_top .beechat_label { - float: left; - height: 20px; - padding: 6px; -} -div#beechat_contacts_controls { - margin: 0; - padding: 0; -} -div#beechat_contacts_controls span#beechat_contacts_control_minimize { - position: relative; - top: -7px; - float: right; - display: block; - width: 20px; - height: 20px; - padding: 2px; - - font-size: 1.6em; - font-weight: bold; - text-align: center; -} -span#beechat_contacts_button { - display: block; - width: 190px; - padding: 2px 6px 0 24px; - height: 18px; - cursor: pointer; - font-size: 1.1em; - font-weight: normal; - - background-image: url('<?php echo $url; ?>mod/beechat/graphics/icons/statuses.png'); -} -span#beechat_contacts_button.online { - background-position: 4px -750px; - background-repeat: no-repeat; -} -span#beechat_contacts_button.dnd { - background-position: 4px -796px; - background-repeat: no-repeat; -} -span#beechat_contacts_button.away { - background-position: 4px -842px; - background-repeat: no-repeat; -} -span#beechat_contacts_button.offline { - background-position: 4px -888px; - background-repeat: no-repeat; -} -span#beechat_contacts_button:hover { - background-color: white; -} -div#beechat_availability_switcher { - width: 218px; - height: 24px; - margin: 0; - padding: 0 0 0 2px; - - background-color: #EEEEEE; - border-left: 1px solid #666666; - border-right: 1px solid #666666; - border-bottom: 1px solid #BBBBBB; -} -span#beechat_current_availability { - float: left; - padding: 4px 4px 4px 22px; - - font-weight: bold; - cursor: pointer; -} -span#beechat_current_availability:hover { - text-decoration: underline; -} -span#beechat_availability_switcher_control { - float: right; - width: 24px; - height: 20px; - cursor: pointer; -} -span.beechat_availability_switcher_control_up { - background: no-repeat 50% 50% url('<?php echo $url; ?>mod/beechat/graphics/icons/bullet_arrow_up.png'); -} -span.beechat_availability_switcher_control_down { - background: no-repeat 50% 50% url('<?php echo $url; ?>mod/beechat/graphics/icons/bullet_arrow_down.png'); -} -ul#beechat_availability_switcher_list { - display: none; - padding:0; - margin:0; - list-style:none; -} -ul#beechat_availability_switcher_list li { - margin: 0; - padding: 4px 4px 4px 24px; - - cursor: pointer; -} -ul#beechat_availability_switcher_list li:hover { - background-color: #EEEEEE; -} -div#beechat_contacts_content { - width: 220px; - height: 164px; - overflow: auto; - - border-left: 1px solid #666666; - border-right: 1px solid #666666; - background-color: white; -} -ul#beechat_contacts_list { - background-color: white; - padding:0; - margin:0; - list-style:none; -} -ul#beechat_contacts_list li img { - margin: 0 4px 0 0; - width: 25px; - height: 25px; -} -ul#beechat_contacts_list li { - margin: 0; - padding: 4px 4px 4px 6px; - - cursor: pointer; - color: #333; -} -ul#beechat_contacts_list li:hover { - background-color: #F5F6F8; - color: #333; -} -div#beechat_contacts_bottom { - width: 220px; - height: 18px; - - border-left: 1px solid #666666; - border-right: 1px solid #666666; -} -span#beechat_contacts_bottom_bar { - position: absolute; - display: block; - bottom: 0; - width: 210px; - height: 1px; - - background-color: #BBBBBB; - margin: auto 4px; -} - - -/* -** - -** center area -** - -*/ -div#beechat_center { - float: right; - display: block; - width: 586px; - height: 20px; - margin: 0 220px 0 100px; - *margin: 0 312px 0 100px; - padding: 0; -} -div#beechat_center .next, div#beechat_center .prev { - display: none; - - border-left: 1px solid #BBBBBB; - cursor: pointer; -} -div#beechat_center .next { - position: absolute; - right: 220px; - width: 24px; - height: 20px; - - background: no-repeat 50% url("<?php echo $url; ?>mod/beechat/graphics/icons/resultset_next.png"); -} -div#beechat_center .prev { - position: absolute; - right: 872px; - width: 24px; - height: 20px; - - background: no-repeat 50% url("<?php echo $url; ?>mod/beechat/graphics/icons/resultset_previous.png"); -} -div#beechat_scrollboxes { - float: right; - overflow: hidden; - width: 628px; - height: 21px; - margin: 0 24px 0 24px; - text-align: left; -} -div#beechat_scrollboxes ul { - width: 200000em; - list-style: none; - padding:0; - margin:0; -} -div#beechat_scrollboxes ul li { - float: right; - display: block; - width: 130px; - height: 20px; - padding: 1px 0 0 22px; - - cursor: pointer; - border-left: 1px solid #BBBBBB; -} -div#beechat_scrollboxes ul li:hover { - color: #000000; - background-color: white; -} -div#beechat_scrollboxes ul li.beechat_scrollbox_selected { - border-left: 1px solid #666666; - border-right: 1px solid #666666; - background-color: white; -} -div#beechat_scrollboxes ul li span.beechat_unread_count { - float: right; - display: block; - width: 16px; - height: 14px; - padding-top: 2px; - margin: 0 6px 0 0; - - text-align: center; - font-size: 0.7em; - color: white; - background: no-repeat 0% 50% url('<?php echo $url; ?>mod/beechat/graphics/icons/notification_pink.png'); -} -div#beechat_scrollboxes ul li span#beechat_box_control_close { - float: right; - width: auto; - padding: 1px 4px; - height: 20px; -} - -/* -** -- -** availability classes -** -- -*/ -.beechat_left_availability_chat { - background: no-repeat 2% 50% url('<?php echo $url; ?>mod/beechat/graphics/icons/bullet_green.png'); -} -.beechat_left_availability_dnd { - background: no-repeat 2% 50% url('<?php echo $url; ?>mod/beechat/graphics/icons/bullet_delete.png'); -} -.beechat_left_availability_away { - background: no-repeat 2% 50% url('<?php echo $url; ?>mod/beechat/graphics/icons/bullet_orange.png'); -} -.beechat_left_availability_xa { - background: no-repeat 2% 50% url('<?php echo $url; ?>mod/beechat/graphics/icons/bullet_red.png'); -} -.beechat_left_availability_offline { - background: no-repeat 2% 50% url('<?php echo $url; ?>mod/beechat/graphics/icons/bullet_black.png'); -} -.beechat_left_availability_room { - background: no-repeat 2% 50% url('<?php echo $url; ?>mod/beechat/graphics/icons/muc_icon.png'); -} - - - -.beechat_right_availability_chat { - background: no-repeat 96% 50% url('<?php echo $url; ?>mod/beechat/graphics/icons/bullet_green.png'); -} -.beechat_right_availability_dnd { - background: no-repeat 96% 50% url('<?php echo $url; ?>mod/beechat/graphics/icons/bullet_delete.png'); -} -.beechat_right_availability_away { - background: no-repeat 96% 50% url('<?php echo $url; ?>mod/beechat/graphics/icons/bullet_orange.png'); -} -.beechat_right_availability_xa { - background: no-repeat 96% 50% url('<?php echo $url; ?>mod/beechat/graphics/icons/bullet_red.png'); -} -.beechat_right_availability_offline { - background: no-repeat 96% 50% url('<?php echo $url; ?>mod/beechat/graphics/icons/bullet_black.png'); -} -.beechat_right_availability_room { - background: no-repeat 96% 50% url('<?php echo $url; ?>mod/beechat/graphics/icons/muc_icon.png'); -} - -/* -** -- -** tooltips -** -- -*/ -div.tooltip.tooltipchat { - display: none; - padding: 4px; - width: auto; - background: transparent no-repeat left bottom url('<?php echo $url; ?>mod/beechat/graphics/icons/pointer.png'); -} -div.tooltip.tooltipchat h3 { - margin: 0; - padding: 4px; - - font-weight: normal; - font-size: 0.9em; - color: white; - background-color: #222222; -} - - -/* -** -- -** chatboxes -** -- -*/ -div.beechat_chatbox { - position: absolute; - width: 240px; - height: 300px; - bottom: 25px; - margin: 0; - padding: 0; - - background-color: #DDDDDD; -} -div.beechat_chatbox a { - color: white; -} -div.beechat_chatbox a:hover { - text-decoration: underline; -} -div.beechat_chatbox_roomroster { - position: absolute; - width: 100px; - height: 276px; - left: -101px; - bottom: -2px; - margin: 0; - padding: 0; - overflow: auto; - - border: 1px solid #4B6C8F; - - background-color: #EEEEEE; -} -div.beechat_chatbox_roomrosteritem { - background-color: #FFFFFF; - margin: 3px; - padding-left: 2px; -} -div.beechat_chatbox_chatroom { - position: absolute; - width: 240px; - height: 300px; - left: 100px; - bottom: 0px; - margin: 0; - padding: 0; - - background-color: #DDDDDD; -} -div.beechat_chatbox_chatroom a { - color: white; -} -div.beechat_chatbox_chatroom a:hover { - text-decoration: underline; -} - -div.beechat_chatbox_room { - position: absolute; - width: 340px; - height: 300px; - bottom: 25px; - margin: 0; - padding: 0; - - background-color: #DDDDDD; -} -div.beechat_chatbox_room a { - color: white; -} -div.beechat_chatbox_room a:hover { - text-decoration: underline; -} -div.beechat_chatbox_top { - width: 238px; - height: 24px; - margin: 0; - padding: 0; - - font-size: 0.9em; - color: white; - background-color: #193C60; - border-top: 1px solid #0B2C4F; - border-left: 1px solid #0B2C4F; - border-right: 1px solid #0B2C4F; -} -div.beechat_chatbox_top .beechat_chatbox_top_icon { - position: absolute; - top: 4px; - left: 4px; - z-index: 2; - - width: 50px; - height: 50px; -} -div.beechat_chatbox_top .beechat_label { - float: left; - height: 13px; - padding: 4px 6px 6px 6px; - - margin-left: 54px; -} -div.beechat_chatbox_top_controls { - margin: 0; - padding: 0; -} -div.beechat_chatbox_top_controls .beechat_chatbox_control { - float: right; - display: block; - width: 20px; - height: 19px; - padding: 2px; - margin: 0; - - font-size: 1.2em; - font-weight: bold; - text-align: center; -} -div.beechat_chatbox_subtop { - width: 172px; - height: 30px; - padding: 2px 6px 2px 60px; - - border-left: 1px solid #666666; - border-right: 1px solid #666666; - border-bottom: 1px solid #CCCCCC; - background-color: #DDDDDD; -} -div.beechat_chatbox_content { - width: 238px; - height: 202px; - margin: 0; - padding: 0; - overflow: auto; - - border-left: 1px solid #666666; - border-right: 1px solid #666666; - background-color: white; -} -div.beechat_chatbox_content div.beechat_chatbox_message { - width: auto; - height: auto; - margin: 0; - padding: 2px; - border-top: 1px solid #DDDDDD; -} -div.beechat_chatbox_message span.beechat_chatbox_message_sender { - position: relative; - top: 0; - left: 6px; - font-weight: bold; - font-size: 1em; -} -div.beechat_chatbox_message span.beechat_chatbox_message_date { - float: right; - margin: 0 6px 0 0; -} -div.beechat_chatbox_content a { - color: #003399; -} -div.beechat_chatbox_content a:hover { - text-decoration: underline; -} -div.beechat_chatbox_content p { - margin: 0; - padding: 2px 6px; -} -div.beechat_chatbox_content p.beechat_chatbox_state { - font-size: 1em; - color: #888888; -} -div.beechat_chatbox_input { - width: 238px; - height: 40px; - margin: 0; - padding: 0; - - border-top: 2px solid #BBBBBB; - border-left: 1px solid #666666; - border-right: 1px solid #666666; - background-color: #DDDDDD; -} -div.beechat_chatbox_input textarea { - width: 204px; - height: 32px; - max-width: 240px; - max-height: 40px; - padding: 4px 4px 4px 30px; - margin: auto; - overflow: hidden; - vertical-align: top; - resize: none; - - font-size: 1em; - font-family: Arial, Helvetica, "Liberation Sans", FreeSans, sans-serif; - outline: none; - border: none; - background: white no-repeat 4px 3px url('<?php echo $url; ?>mod/beechat/graphics/icons/chat_icon.png'); -} -div.beechat_chatbox_input textarea:focus { - outline: none; - border: none; - background-color: white; -} -div.beechat_chatbox_bottom { - position: absolute; - width: 238px; - height: 1px; - - background-color: white; - border-left: 1px solid #666666; - border-right: 1px solid #666666; - border-bottom: 1px solid #666666; - z-index: 2; -} -div.beechat_chatbox_bottom span { - position: absolute; - display: block; - right: 0; - top: 0; - width: 152px; - height: 1px; - - border-bottom: 1px solid white; -} -div.beechat_chatbox_bottom span span { - position: absolute; - display: block; - width: 146px; - height: 1px; - right: 4px; - top: 0; - - border-bottom: 1px solid #BBBBBB; -} diff --git a/views/default/core/account/login_box.php b/views/default/core/account/login_box.php new file mode 100644 index 000000000..f39113653 --- /dev/null +++ b/views/default/core/account/login_box.php @@ -0,0 +1,21 @@ +<?php +/** + * Elgg login box + * + * @package Elgg + * @subpackage Core + * + * @uses $vars['module'] The module name. Default: aside + */ + +$module = elgg_extract('module', $vars, 'aside'); + +$login_url = elgg_get_site_url(); +if (elgg_get_config('https_login')) { + $login_url = str_replace("http:", "https:", $login_url); +} + +$title = elgg_echo('login'); +$body = elgg_view_form('login', array('action' => "{$login_url}action/login")); + +echo elgg_view_module($module, $title, $body); diff --git a/views/default/core/account/login_dropdown.php b/views/default/core/account/login_dropdown.php new file mode 100644 index 000000000..e90cbf106 --- /dev/null +++ b/views/default/core/account/login_dropdown.php @@ -0,0 +1,27 @@ +<?php +/** + * Elgg drop-down login form + */ + +if (elgg_is_logged_in()) { + return true; +} + +$login_url = elgg_get_site_url(); +if (elgg_get_config('https_login')) { + $login_url = str_replace("http:", "https:", elgg_get_site_url()); +} + +$body = elgg_view_form('login', array('action' => "{$login_url}action/login"), array('returntoreferer' => TRUE)); +?> +<div id="login-dropdown"> + <?php + echo elgg_view('output/url', array( + 'href' => 'login#login-dropdown-box', + 'rel' => 'popup', + 'class' => 'elgg-button elgg-button-dropdown', + 'text' => elgg_echo('login'), + )); + echo elgg_view_module('dropdown', '', $body, array('id' => 'login-dropdown-box')); + ?> +</div> diff --git a/views/default/core/avatar/crop.php b/views/default/core/avatar/crop.php new file mode 100644 index 000000000..1c59842c8 --- /dev/null +++ b/views/default/core/avatar/crop.php @@ -0,0 +1,16 @@ +<?php +/** + * Avatar cropping view + * + * @uses vars['entity'] + */ + +?> +<div id="avatar-croppingtool" class="mtl ptm"> + <label><?php echo elgg_echo('avatar:crop:title'); ?></label> + <br /> + <p> + <?php echo elgg_echo("avatar:create:instructions"); ?> + </p> + <?php echo elgg_view_form('avatar/crop', array(), $vars); ?> +</div> diff --git a/views/default/core/avatar/upload.php b/views/default/core/avatar/upload.php new file mode 100644 index 000000000..6f9124192 --- /dev/null +++ b/views/default/core/avatar/upload.php @@ -0,0 +1,51 @@ +<?php +/** + * Avatar upload view + * + * @uses $vars['entity'] + */ + +$user_avatar = elgg_view('output/img', array( + 'src' => $vars['entity']->getIconUrl('medium'), + 'alt' => elgg_echo('avatar'), +)); + +$current_label = elgg_echo('avatar:current'); + +$remove_button = ''; +if ($vars['entity']->icontime) { + $remove_button = elgg_view('output/url', array( + 'text' => elgg_echo('remove'), + 'title' => elgg_echo('avatar:remove'), + 'href' => 'action/avatar/remove?guid=' . elgg_get_page_owner_guid(), + 'is_action' => true, + 'class' => 'elgg-button elgg-button-cancel mll', + )); +} + +$form_params = array('enctype' => 'multipart/form-data'); +$upload_form = elgg_view_form('avatar/upload', $form_params, $vars); + +?> + +<p class="mtm"> + <?php echo elgg_echo('avatar:upload:instructions'); ?> +</p> + +<?php + +$image = <<<HTML +<div id="current-user-avatar" class="mrl prl"> + <label>$current_label</label><br /> + $user_avatar +</div> +$remove_button +HTML; + +$body = <<<HTML +<div id="avatar-upload"> + $upload_form +</div> +HTML; + +echo elgg_view_image_block($image, $upload_form); diff --git a/views/default/core/friends/collection.php b/views/default/core/friends/collection.php new file mode 100644 index 000000000..1a330af01 --- /dev/null +++ b/views/default/core/friends/collection.php @@ -0,0 +1,64 @@ +<?php +/** + * View a friends collection + * + * @package Elgg + * @subpackage Core + * + * @uses $vars['collection'] The individual friends collection + */ + +$coll = $vars['collection']; + +if (is_array($vars['collection']->members)) { + $count = sizeof($vars['collection']->members); +} else { + $count = 0; +} + +echo "<li><h2>"; + +//as collections are private, check that the logged in user is the owner +if ($coll->owner_guid == elgg_get_logged_in_user_guid()) { + echo "<div class=\"friends_collections_controls\">"; + echo elgg_view('output/confirmlink', array( + 'href' => 'action/friends/collections/delete?collection=' . $coll->id, + 'class' => 'delete_collection', + 'text' => elgg_view_icon('delete'), + 'encode_text' => false, + )); + echo "</div>"; +} +echo $coll->name; +echo " (<span id=\"friends_membership_count{$vars['friendspicker']}\">{$count}</span>) </h2>"; + +// individual collection panels +$friends = $vars['collection']->entities; +if ($friends) { + $content = elgg_view('core/friends/collectiontabs', array( + 'owner' => elgg_get_logged_in_user_entity(), + 'collection' => $vars['collection'], + 'friendspicker' => $vars['friendspicker'], + )); + + echo elgg_view('input/friendspicker', array( + 'entities' => $friends, + 'value' => $vars['collection']->members, + 'content' => $content, + 'replacement' => '', + 'friendspicker' => $vars['friendspicker'], + )); +?> +<?php //@todo JS 1.8: no ?> + <script type="text/javascript"> + $(function () { + + $('#friends-picker_placeholder<?php echo $vars['friendspicker']; ?>').load(elgg.config.wwwroot + 'pages/friends/collections/pickercallback.php?username=<?php echo elgg_get_logged_in_user_entity()->username; ?>&type=list&collection=<?php echo $vars['collection']->id; ?>'); + + }); + </script> + <?php +} + +// close friends-picker div and the accordian list item +echo "</li>"; diff --git a/views/default/core/friends/collections.php b/views/default/core/friends/collections.php new file mode 100644 index 000000000..c6ee082c8 --- /dev/null +++ b/views/default/core/friends/collections.php @@ -0,0 +1,39 @@ +<?php +/** + * Elgg friends collections + * Lists a user's friends collections + * + * @package Elgg + * @subpackage Core + * + * @uses $vars['collections'] The array of friends collections + */ + +if (is_array($vars['collections']) && sizeof($vars['collections'])) { + echo "<ul id=\"friends_collections_accordian\">"; + + $friendspicker = 0; + foreach ($vars['collections'] as $collection) { + $friendspicker++; + echo elgg_view('core/friends/collection', array( + 'collection' => $collection, + 'friendspicker' => $friendspicker, + )); + } + + echo "</ul>"; + +} else { + echo elgg_echo("friends:nocollections"); +} + +?> +<?php //@todo JS 1.8: no ?> +<script> +$(function(){ + $('#friends_collections_accordian h2').click(function () { + $(this.parentNode).children("[class=friends-picker-main-wrapper]").slideToggle("fast"); + //return false; + }); +}); +</script> diff --git a/views/default/core/friends/collectiontabs.php b/views/default/core/friends/collectiontabs.php new file mode 100644 index 000000000..bf12e0edb --- /dev/null +++ b/views/default/core/friends/collectiontabs.php @@ -0,0 +1,62 @@ +<?php +/** + * Elgg friends collections + * Lists a user's friends collections + * + * @package Elgg + * @subpackage Core + * + * @uses $vars['collections'] The array of friends collections + */ + +$friendspicker = $vars['friendspicker']; + +$collectionid = $vars['collection']->id; +$ownerid = $vars['owner']->getGUID(); + +?> + +<ul class="elgg-tabs"> + <li class="elgg-state-selected"> + <a href="#" class="collectionmembers<?php echo $friendspicker; ?>"> + <?php echo elgg_echo('friends:collections:members'); ?> + </a> + </li> + <li> + <a href="#" class="editmembers<?php echo $friendspicker; ?>"> + <?php echo elgg_echo('friends:collections:edit'); ?> + </a> + </li> +</ul> + +<?php //@todo JS 1.8: no ?> +<script type="text/javascript"> +$(function () { + + $('a.collectionmembers<?php echo $friendspicker; ?>').click(function () { + // load collection members pane + $('#friends-picker_placeholder<?php echo $friendspicker; ?>').load('<?php echo elgg_get_site_url(); ?>pages/friends/collections/pickercallback.php?username=<?php echo elgg_get_logged_in_user_entity()->username; ?>&type=list&collection=<?php echo $collectionid; ?>&friendspicker=<?php echo $friendspicker; ?>'); + + // remove selected state from previous tab + $(this).parent().parent().find("li.elgg-state-selected").removeClass("elgg-state-selected"); + // add selected class to current tab + $(this).parent().addClass("elgg-state-selected"); + + return false; + }); + + $('a.editmembers<?php echo $friendspicker; ?>').click(function () { + // load friends picker pane + $('#friends-picker_placeholder<?php echo $friendspicker; ?>').load('<?php echo elgg_get_site_url(); ?>pages/friends/collections/pickercallback.php?username=<?php echo elgg_get_logged_in_user_entity()->username; ?>&type=picker&collection=<?php echo $collectionid; ?>&friendspicker=<?php echo $friendspicker; ?>'); + + // remove selected state from previous tab + $(this).parent().parent().find("li.elgg-state-selected").removeClass("elgg-state-selected"); + // add selected class to current tab + $(this).parent().addClass("elgg-state-selected"); + + return false; + }); + + +}); +</script> diff --git a/views/default/core/friends/tablelist.php b/views/default/core/friends/tablelist.php new file mode 100644 index 000000000..339b9ab1b --- /dev/null +++ b/views/default/core/friends/tablelist.php @@ -0,0 +1,50 @@ +<?php +/** + * Elgg friends picker + * Lists the friends picker + * + * @package Elgg + * @subpackage Core + * + * @uses $vars['entities'] The array of ElggUser objects + */ + +if (is_array($vars['entities'])) { + +?> + +<table cellspacing="0" id="friendspicker-members-table"> + <tr> + <?php + $column = 0; + foreach($vars['entities'] as $entity) { + if (!($entity instanceof ElggEntity)) { + $entity = get_entity($entity); + } + + if ($entity instanceof ElggEntity) { + ?> + <td style="width:25px;"> + <div style="width: 25px;" class="mbl"> + <?php echo elgg_view_entity_icon($entity, 'tiny'); ?> + </div> + </td> + <td style="width: 200px;" class="pas"> + <?php echo $entity->name; ?> + </td> + <?php + $column++; + if ($column == 3) { + echo "</tr><tr>"; + $column = 0; + } + } + } + +if ($column < 3 && $column != 0) echo "</tr>"; + echo "</table>"; +} + +if (isset($vars['content'])) { + echo $vars['content']; +}
\ No newline at end of file diff --git a/views/default/core/friends/tablelistcountupdate.php b/views/default/core/friends/tablelistcountupdate.php new file mode 100644 index 000000000..7a0da1caa --- /dev/null +++ b/views/default/core/friends/tablelistcountupdate.php @@ -0,0 +1,17 @@ +<?php +/** + * Elgg friends picker count updater + * Updates the friends count on a collection + * + * @package Elgg + * @subpackage Core + * + * @uses $vars['count'] The count + * @uses $vars['friendspicker'] The friendspicker counter number + */ + +?> +<?php //@todo JS 1.8: no ?> +<script language="text/javascript"> + $("#friends_membership_count<?php echo $vars['friendspicker']; ?>").html("<?php echo $vars['count']; ?>"); +</script>
\ No newline at end of file diff --git a/views/default/core/river/filter.php b/views/default/core/river/filter.php new file mode 100644 index 000000000..9b7fadaa8 --- /dev/null +++ b/views/default/core/river/filter.php @@ -0,0 +1,38 @@ +<?php +/** + * Content filter for river + * + * @uses $vars[] + */ + +// create selection array +$options = array(); +$options['type=all'] = elgg_echo('river:select', array(elgg_echo('all'))); +$registered_entities = elgg_get_config('registered_entities'); + +if (!empty($registered_entities)) { + foreach ($registered_entities as $type => $subtypes) { + // subtype will always be an array. + if (!count($subtypes)) { + $label = elgg_echo('river:select', array(elgg_echo("item:$type"))); + $options["type=$type"] = $label; + } else { + foreach ($subtypes as $subtype) { + $label = elgg_echo('river:select', array(elgg_echo("item:$type:$subtype"))); + $options["type=$type&subtype=$subtype"] = $label; + } + } + } +} + +$params = array( + 'id' => 'elgg-river-selector', + 'options_values' => $options, +); +$selector = $vars['selector']; +if ($selector) { + $params['value'] = $selector; +} +echo elgg_view('input/dropdown', $params); + +elgg_load_js('elgg.ui.river'); diff --git a/views/default/core/settings/account.php b/views/default/core/settings/account.php new file mode 100644 index 000000000..0c3792ece --- /dev/null +++ b/views/default/core/settings/account.php @@ -0,0 +1,9 @@ +<?php +/** + * Account settings form wrapper + * + * @package Elgg + * @subpackage Core + */ + +echo elgg_view_form('usersettings/save', array('class' => 'elgg-form-alt'));
\ No newline at end of file diff --git a/views/default/core/settings/account/default_access.php b/views/default/core/settings/account/default_access.php new file mode 100644 index 000000000..690f2714a --- /dev/null +++ b/views/default/core/settings/account/default_access.php @@ -0,0 +1,25 @@ +<?php +/** + * Provide a way of setting your default access + * + * @package Elgg + * @subpackage Core + */ +if (elgg_get_config('allow_user_default_access')) { + $user = elgg_get_page_owner_entity(); + + if ($user) { + if (false === ($default_access = $user->getPrivateSetting('elgg_default_access'))) { + $default_access = elgg_get_config('default_access'); + } + + $title = elgg_echo('default_access:settings'); + $content = elgg_echo('default_access:label') . ': '; + $content .= elgg_view('input/access', array( + 'name' => 'default_access', + 'value' => $default_access, + )); + + echo elgg_view_module('info', $title, $content); + } +} diff --git a/views/default/core/settings/account/email.php b/views/default/core/settings/account/email.php new file mode 100644 index 000000000..4bcdbb100 --- /dev/null +++ b/views/default/core/settings/account/email.php @@ -0,0 +1,19 @@ +<?php +/** + * Provide a way of setting your email + * + * @package Elgg + * @subpackage Core + */ + +$user = elgg_get_page_owner_entity(); + +if ($user) { + $title = elgg_echo('email:settings'); + $content = elgg_echo('email:address:label') . ': '; + $content .= elgg_view('input/email', array( + 'name' => 'email', + 'value' => $user->email, + )); + echo elgg_view_module('info', $title, $content); +} diff --git a/views/default/core/settings/account/language.php b/views/default/core/settings/account/language.php new file mode 100644 index 000000000..b36057422 --- /dev/null +++ b/views/default/core/settings/account/language.php @@ -0,0 +1,20 @@ +<?php +/** + * Provide a way of setting your language prefs + * + * @package Elgg + * @subpackage Core + */ + +$user = elgg_get_page_owner_entity(); + +if ($user) { + $title = elgg_echo('user:set:language'); + $content = elgg_echo('user:language:label') . ': '; + $content .= elgg_view("input/dropdown", array( + 'name' => 'language', + 'value' => $user->language, + 'options_values' => get_installed_translations() + )); + echo elgg_view_module('info', $title, $content); +} diff --git a/views/default/core/settings/account/name.php b/views/default/core/settings/account/name.php new file mode 100644 index 000000000..e356146a3 --- /dev/null +++ b/views/default/core/settings/account/name.php @@ -0,0 +1,21 @@ +<?php +/** + * Provide a way of setting your full name. + * + * @package Elgg + * @subpackage Core + */ + +$user = elgg_get_page_owner_entity(); +if ($user) { + $title = elgg_echo('user:name:label'); + $content = elgg_echo('name') . ': '; + $content .= elgg_view('input/text', array( + 'name' => 'name', + 'value' => $user->name, + )); + echo elgg_view_module('info', $title, $content); + + // need the user's guid to make sure the correct user gets updated + echo elgg_view('input/hidden', array('name' => 'guid', 'value' => $user->guid)); +} diff --git a/views/default/core/settings/account/notifications.php b/views/default/core/settings/account/notifications.php new file mode 100644 index 000000000..c212b3886 --- /dev/null +++ b/views/default/core/settings/account/notifications.php @@ -0,0 +1,44 @@ +<?php +/** + * User settings for notifications. + * + * @package Elgg + * @subpackage Core + */ + +global $NOTIFICATION_HANDLERS; +$notification_settings = get_user_notification_settings(elgg_get_page_owner_guid()); + +$title = elgg_echo('notifications:usersettings'); + +$rows = ''; + +// Loop through options +foreach ($NOTIFICATION_HANDLERS as $k => $v) { + + if ($notification_settings->$k) { + $val = "yes"; + } else { + $val = "no"; + } + + $radio = elgg_view('input/radio', array( + 'name' => "method[$k]", + 'value' => $val, + 'options' => array( + elgg_echo('option:yes') => 'yes', + elgg_echo('option:no') => 'no' + ), + )); + + $cells = '<td class="prm pbl">' . elgg_echo("notification:method:$k") . ': </td>'; + $cells .= "<td>$radio</td>"; + + $rows .= "<tr>$cells</tr>"; +} + + +$content = elgg_echo('notifications:methods'); +$content .= "<table>$rows</table>"; + +echo elgg_view_module('info', $title, $content); diff --git a/views/default/core/settings/account/password.php b/views/default/core/settings/account/password.php new file mode 100644 index 000000000..4857034b2 --- /dev/null +++ b/views/default/core/settings/account/password.php @@ -0,0 +1,33 @@ +<?php + +/** + * Provide a way of setting your password + * + * @package Elgg + * @subpackage Core + */ +$user = elgg_get_page_owner_entity(); + +if ($user) { + $title = elgg_echo('user:set:password'); + + // only make the admin user enter current password for changing his own password. + $admin = ''; + if (!elgg_is_admin_logged_in() || elgg_is_admin_logged_in() && $user->guid == elgg_get_logged_in_user_guid()) { + $admin .= elgg_echo('user:current_password:label') . ': '; + $admin .= elgg_view('input/password', array('name' => 'current_password')); + $admin = "<p>$admin</p>"; + } + + $password = elgg_echo('user:password:label') . ': '; + $password .= elgg_view('input/password', array('name' => 'password')); + $password = "<p>$password</p>"; + + $password2 = elgg_echo('user:password2:label') . ': '; + $password2 .= elgg_view('input/password', array('name' => 'password2')); + $password2 = "<p>$password2</p>"; + + $content = $admin . $password . $password2; + + echo elgg_view_module('info', $title, $content); +} diff --git a/views/default/core/settings/statistics.php b/views/default/core/settings/statistics.php new file mode 100644 index 000000000..1d7a5b052 --- /dev/null +++ b/views/default/core/settings/statistics.php @@ -0,0 +1,6 @@ +<?php +/** + * User statitsics + * + * Blank view that can be extended + */ diff --git a/views/default/core/settings/statistics/numentities.php b/views/default/core/settings/statistics/numentities.php new file mode 100644 index 000000000..3782fd8bc --- /dev/null +++ b/views/default/core/settings/statistics/numentities.php @@ -0,0 +1,44 @@ +<?php +/** + * Elgg statistics screen + * + * @package Elgg + * @subpackage Core + */ + +// Get entity statistics +$entity_stats = get_entity_statistics(elgg_get_page_owner_guid()); + +if ($entity_stats) { + $rows = ''; + foreach ($entity_stats as $k => $entry) { + foreach ($entry as $a => $b) { + + // This function controls the alternating class + $even_odd = ( 'odd' != $even_odd ) ? 'odd' : 'even'; + + if ($a == "__base__") { + $a = elgg_echo("item:{$k}"); + if (empty($a)) { + $a = $k; + } + } else { + $a = elgg_echo("item:{$k}:{$a}"); + if (empty($a)) { + $a = "$k $a"; + } + } + $rows .= <<< END + <tr class="{$even_odd}"> + <td class="column-one"><b>{$a}:</b></td> + <td>{$b}</td> + </tr> +END; + } + } + + $title = elgg_echo('usersettings:statistics:label:numentities'); + $content = "<table class=\"elgg-table-alt\">$rows</table>"; + + echo elgg_view_module('info', $title, $content); +} diff --git a/views/default/core/settings/statistics/online.php b/views/default/core/settings/statistics/online.php new file mode 100644 index 000000000..1385ff60f --- /dev/null +++ b/views/default/core/settings/statistics/online.php @@ -0,0 +1,42 @@ +<?php +/** + * Statistics about this user. + * + * @package Elgg + * @subpackage Core + */ + +$user = elgg_get_page_owner_entity(); + +$label_name = elgg_echo('usersettings:statistics:label:name'); +$label_email = elgg_echo('usersettings:statistics:label:email'); +$label_member_since = elgg_echo('usersettings:statistics:label:membersince'); +$label_last_login = elgg_echo('usersettings:statistics:label:lastlogin'); + +$time_created = date("r", $user->time_created); +$last_login = date("r", $user->last_login); + +$title = elgg_echo('usersettings:statistics:yourdetails'); + +$content = <<<__HTML +<table class="elgg-table-alt"> + <tr class="odd"> + <td class="column-one">$label_name</td> + <td>$user->name</td> + </tr> + <tr class="even"> + <td class="column-one">$label_email</td> + <td>$user->email</td> + </tr> + <tr class="odd"> + <td class="column-one">$label_member_since</td> + <td>$time_created</td> + </tr> + <tr class="even"> + <td class="column-one">$label_last_login</td> + <td>$last_login</td> + </tr> +</table> +__HTML; + +echo elgg_view_module('info', $title, $content); diff --git a/views/default/core/settings/tools.php b/views/default/core/settings/tools.php new file mode 100644 index 000000000..195db1d61 --- /dev/null +++ b/views/default/core/settings/tools.php @@ -0,0 +1,34 @@ +<?php +/** + * Elgg plugin specific user settings. + * + * @uses array $vars['installed_plugins'] An array of plugins as returned by elgg_get_plugins() + * + * @package Elgg.Core + * @subpackage Plugins.Settings + */ + +// Description of what's going on +echo elgg_view('output/longtext', array( + 'value' => elgg_echo("usersettings:plugins:description"), + 'class' => 'user-settings mtn mbm', +)); + +// Get the installed plugins +$installed_plugins = $vars['installed_plugins']; +$count = count($installed_plugins); + + +// Display all plugins' usersettings forms +foreach ($installed_plugins as $plugin) { + $plugin_id = $plugin->getID(); + if ($plugin->isActive()) { + if (elgg_view_exists("usersettings/$plugin_id/edit") + || elgg_view_exists("plugins/$plugin_id/usersettings")) { + + $title = $plugin->getManifest()->getName(); + $body = elgg_view_form('plugins/usersettings/save', array(), array('entity' => $plugin)); + echo elgg_view_module('info', $title, $body); + } + } +}
\ No newline at end of file diff --git a/views/default/core/walled_garden/login.php b/views/default/core/walled_garden/login.php new file mode 100644 index 000000000..42b79607d --- /dev/null +++ b/views/default/core/walled_garden/login.php @@ -0,0 +1,31 @@ +<?php +/** + * Walled garden login + */ + +$title = elgg_get_site_entity()->name; +$welcome = elgg_echo('walled_garden:welcome'); +$welcome .= ': <br/>' . $title; + +$menu = elgg_view_menu('walled_garden', array( + 'sort_by' => 'priority', + 'class' => 'elgg-menu-general elgg-menu-hz', +)); + +$login_box = elgg_view('core/account/login_box', array('module' => 'walledgarden-login')); + +echo <<<HTML +<div class="elgg-col elgg-col-1of2"> + <div class="elgg-inner"> + <h1 class="elgg-heading-walledgarden"> + $welcome + </h1> + $menu + </div> +</div> +<div class="elgg-col elgg-col-1of2"> + <div class="elgg-inner"> + $login_box + </div> +</div> +HTML; diff --git a/views/default/core/walled_garden/lost_password.php b/views/default/core/walled_garden/lost_password.php new file mode 100644 index 000000000..82f8caf50 --- /dev/null +++ b/views/default/core/walled_garden/lost_password.php @@ -0,0 +1,13 @@ +<?php +/** + * Walled garden lost password + */ + +$title = elgg_echo('user:password:lost'); +$body = elgg_view_form('user/requestnewpassword'); +echo <<<HTML +<div class="elgg-inner"> + <h3>$title</h3> + $body +</div> +HTML; diff --git a/views/default/core/walled_garden/register.php b/views/default/core/walled_garden/register.php new file mode 100644 index 000000000..1ce2f8716 --- /dev/null +++ b/views/default/core/walled_garden/register.php @@ -0,0 +1,17 @@ +<?php +/** + * Walled garden registration + */ + +$title = elgg_echo('register'); +$body = elgg_view_form('register', array(), array( + 'friend_guid' => (int) get_input('friend_guid', 0), + 'invitecode' => get_input('invitecode'), +)); + +echo <<<__HTML +<div class="elgg-inner"> + <h2>$title</h2> + $body +</div> +__HTML; diff --git a/views/default/css.php b/views/default/css.php new file mode 100644 index 000000000..e67c79c36 --- /dev/null +++ b/views/default/css.php @@ -0,0 +1,7 @@ +<?php +/** + * + * This is a deprecated CSS view used in Elgg 1.0-1.7. + * Please use the view 'css/elgg' now. + * + */ diff --git a/views/default/css/admin.php b/views/default/css/admin.php new file mode 100644 index 000000000..059e51dd6 --- /dev/null +++ b/views/default/css/admin.php @@ -0,0 +1,1652 @@ +<?php +/** + * Elgg Admin CSS + * + * This is a distinct theme from the theme of the site. There are dependencies + * on the HTML created by the views in Elgg core. + * + * @package Elgg.Core + * @subpackage UI + */ + +?> + +/* *************************************** + RESET CSS +*************************************** */ +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, font, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td { + margin: 0; + padding: 0; + border: 0; + font-weight: inherit; + font-style: inherit; + font-size: 100%; + font-family: inherit; + vertical-align: baseline; +} +<?php // force vertical scroll bar ?> +html, body { + height: 100%; + margin-bottom: 1px; +} +img { + border-width: 0; + border-color: transparent; +} +ol, ul { + list-style: none; +} +em, i { + font-style: italic; +} +ins { + text-decoration: none; +} +del { + text-decoration:line-through; +} +strong, b { + font-weight: bold; +} +table { + border-collapse: collapse; + border-spacing: 0; +} +caption, th, td { + text-align: left; + font-weight: normal; + vertical-align: top; +} +blockquote:before, blockquote:after, +q:before, q:after { + content: ""; +} +blockquote, q { + quotes: "" ""; +} + +/* *************************************** + BASICS +*************************************** */ +body { + background-color: #eee; + font-size: 80%; + line-height: 1.4em; + font-family: "Lucida Grande",Arial,Tahoma,Verdana,sans-serif; +} +h1, h2, h3, h4, h5, h6 { + font-weight: bold; + line-height: auto; + color: #666; +} +h1 { font-size: 1.8em; } +h2 { font-size: 1.5em; line-height: 1.1em; } +h3 { font-size: 1.2em; } +h4 { font-size: 1.0em; } +h5 { font-size: 0.9em; } +h6 { font-size: 0.8em; } + +a { + color: #333; + text-decoration: none; +} +a:hover { + color: black; + text-decoration: underline; +} +pre, code { + background-color: #EEE; + border: 1px solid #DDD; + color: #444; + font-family: Monaco, "Courier New", Courier, monospace; + font-size: 13px; + overflow: auto; + margin: 15px 0; + padding: 5px; +} +blockquote { + background: #EBF5FF; +} +p { + margin-bottom: 15px; +} + +.clearfloat { + clear: both; +} + +/* Clearfix! */ +.clearfix:after, +.elgg-grid:after, +.elgg-layout:after, +.elgg-inner:after, +.elgg-page-header:after, +.elgg-page-footer:after, +.elgg-head:after, +.elgg-foot:after, +.elgg-col:after, +.elgg-image-block:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +.elgg-body { + width: auto; + word-wrap: break-word; + overflow: hidden; +} +.elgg-body:after { + display: block; + visibility: hidden; + height: 0 !important; + line-height: 0; + overflow: hidden; + font-size: xx-large; + content: " x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x "; +} + +/* *************************************** + PAGE WRAPPER +*************************************** */ +.elgg-page > .elgg-inner { + margin: 0 auto; + padding: 20px 40px 0; + min-width: 800px; + max-width: 1600px; +} + +/* *************************************** + HEADER +*************************************** */ +.elgg-page-header { + background-color: #111; + border: 1px solid #999; + padding: 20px 20px; +} +.elgg-heading-site { + font-size: 1.8em; + float: left; +} +.elgg-heading-site a { + color: #ffffff; + text-decoration: none; +} +.elgg-heading-site a:hover { + color: white; + text-decoration: none; +} +.elgg-menu-user { + float: right; + margin-top: 5px; +} +.elgg-menu-user, .elgg-menu-user a { + color: #999999; +} +.elgg-menu-user a { + text-decoration: underline; +} +.elgg-menu-user a:hover { + color: white; +} +.elgg-menu-user li { + display: inline; +} +.elgg-menu-user li:after { + content: "|"; + display: inline-block; + font-weight: normal; + margin-left: 8px; + margin-right: 4px; +} +.elgg-menu-user li:last-child:after { + content: ""; +} + +/* *************************************** + MESSAGES +*************************************** */ +.elgg-page-messages { + padding: 20px 0 0; + width: 500px; + margin-bottom: -10px; +} +.elgg-system-messages p { + margin: 0; +} +.elgg-message { + padding: 10px; + margin-bottom: 10px; + border: 2px solid #ddd; + cursor: pointer; +} +.elgg-message.elgg-state-error { + background: #fbe3e4; + color: #8a1f11; + border-color: #fbc2c4; + font-weight: bold; +} +.elgg-message.elgg-state-success { + background: #e6efc2; + color: #264409; + border-color: #c6d880; +} + +.elgg-admin-notices { + padding-bottom: 15px; +} +.elgg-admin-notices p { + background-color: #BDE5F8; + color: black; + border: 1px solid blue; + font-weight: bold; + padding: 3px 0px 3px 10px; + + -webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.45); + -moz-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.45); + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.45); + + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.elgg-admin-notices a.elgg-admin-notice { + float: right; + text-decoration: none; +} + +.elgg-admin-notices a { + text-decoration: underline; +} + +/* *************************************** + BODY +*************************************** */ +.elgg-page-body { + padding: 20px 0; +} +.elgg-main { + background-color: #fff; + border: 1px solid #ccc; + padding: 20px; + position: relative; + min-height: 400px; +} +.elgg-sidebar { + width: 210px; + float: right; + margin-left: 30px; +} +.elgg-main > .elgg-head { + margin-bottom: 10px; +} +.elgg-main h2 { + color: #333333; +} + +/* *************************************** + FOOTER +*************************************** */ +.elgg-page-footer { + background-color: #111; + border: 1px solid #999; + padding: 10px 20px; + margin-bottom: 10px; +} +.elgg-page-footer a { + color: #ddd; + font-weight: bold; + text-decoration: none; +} +.elgg-page-footer a:hover { + text-decoration: underline; +} + +/* *************************************** + MODULES +*************************************** */ +.elgg-module { + overflow: hidden; +} +.elgg-module-main { + background-color: #fff; + border: 1px solid #ccc; + padding: 10px; +} +.elgg-module-main > .elgg-head { + margin-bottom: 5px; +} +.elgg-module-info > .elgg-head { + margin-bottom: 10px; +} +.elgg-module-inline { + margin: 20px 0; +} +.elgg-module-inline > .elgg-head { + background-color: #999; + color: white; + padding: 5px; + margin-bottom: 10px; + + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} +.elgg-module-inline > .elgg-head h3 { + color: white; +} + +/* *************************************** + TABLE +*************************************** */ +.elgg-table { + width: 100%; + border-top: 1px solid #ccc; +} +.elgg-table td, .elgg-table th { + background: white; + border: 1px solid #ccc; + padding: 4px 8px; + vertical-align: middle; +} +.elgg-table th { + background-color: #ddd; +} +.elgg-table .alt td { + background: #eee; +} +.elgg-table input[type=checkbox] { + margin-top: 3px; +} + +.elgg-table-alt { + width: 100%; + border-top: 1px solid #ccc; +} +.elgg-table-alt th { + background-color: #eee; + font-weight: bold; +} +.elgg-table-alt td, th { + padding: 2px 4px; + border-bottom: 1px solid #ccc; +} +.elgg-table-alt td:first-child { + width: 200px; +} +.elgg-table-alt tr:hover { + background: #E4E4E4; +} + +/* *************************************** + LISTS AND IMAGE BLOCK +*************************************** */ +.elgg-image-block { + padding: 3px 0; +} +.elgg-image-block .elgg-image { + float: left; + margin-right: 5px; +} +.elgg-image-block .elgg-image-alt { + float: right; + margin-left: 5px; +} +.elgg-item { + margin: 3px; +} +.elgg-list-simple li { + margin-bottom: 5px; +} +.elgg-list-distinct { + border-top: 1px dotted #CCCCCC; + margin: 5px 0; + clear: both; +} +.elgg-list-distinct > li { + border-bottom: 1px dotted #CCCCCC; +} + +/* *************************************** + FORMS AND INPUT +*************************************** */ +label { + font-weight: bold; + color: #333333; + font-size: 110%; +} +fieldset > div { + margin-bottom: 15px; +} +fieldset > div:last-child { + margin-bottom: 0; +} +input { + font: 120% Arial, Helvetica, sans-serif; + padding: 5px; + border: 1px solid #ccc; + color: #666; + + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + margin: 0; +} + +/* default elgg core input field classes */ +.elgg-input-text, +.elgg-input-tags, +.elgg-input-url, +.elgg-input-plaintext { + width: 98%; +} +textarea { + height: 100px; +} +.elgg-input-thin { + width: 400px; +} +.elgg-input-natural { + width: auto; +} + +.elgg-button { + font-size: 14px; + font-weight: bold; + text-decoration: none; + + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + + width: auto; + padding: 2px 4px; + cursor: pointer; +} +a.elgg-button { + padding: 3px 6px; +} + +.elgg-button + .elgg-button { + margin-left: 5px; +} + +.elgg-button-submit, +.elgg-button-action { + color: white; + border: 1px solid #333; + background-color: #333; + text-shadow: 1px 1px 0px black; +} +.elgg-button-submit:hover, +.elgg-button-action:hover { + color: white; + background-color: #000; + text-decoration: none; +} +.elgg-button-submit.elgg-state-disabled, +.elgg-button-action.elgg-state-disabled { + color: #999; + cursor: default; +} + +.elgg-button-cancel { + color: #333; + background-color: #999; + border: 1px solid #999; +} +.elgg-button-cancel:hover { + color: #222; + background-color: #666; + text-decoration: none; +} + +.elgg-form-useradd input[type=text], +.elgg-form-useradd input[type=password] { + width: 300px; +} + +.elgg-form-settings { + max-width: 800px; +} + +/* ************************************** + DATE PICKER +*************************************** */ +.ui-datepicker { + margin-top: 3px; + padding: 3px 3px 0; + border: 1px solid #ccc; + background-color: white; +} +.ui-datepicker-header { + padding: 2px 0; + border: 1px solid #ccc; + background-color: #eee; + border-radius: 5px; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; +} +.ui-datepicker-prev, .ui-datepicker-next { + position: absolute; + top: 9px; + cursor: pointer; +} +.ui-datepicker-prev { + left: 6px; +} +.ui-datepicker-next { + right: 6px; +} +.ui-datepicker-title { + line-height: 1.8em; + margin: 0 30px; + text-align: center; + font-weight: bold; +} +.ui-datepicker-calendar { + margin-bottom: 2px; +} +.ui-datepicker th { + border: none; + font-weight: bold; + padding: 5px 6px; + text-align: center; +} +.ui-datepicker td { + padding: 1px; +} +.ui-datepicker td span, .ui-datepicker td a { + display: block; + padding: 2px; + line-height: 1.2em; + text-align: right; + text-decoration: none; +} +.ui-datepicker-calendar .ui-state-default { + border: 1px solid #ccc; + color: #555; + background: #fafafa; +} +.ui-datepicker-calendar .ui-state-hover { + border: 1px solid #aaa; + color: #333; + background: #ccc; +} +.ui-datepicker-calendar .ui-state-active, +.ui-datepicker-calendar .ui-state-active.ui-state-hover { + font-weight: bold; + border: 1px solid #999; + color: #333; + background: #ddd; +} + +/* *************************************** + AUTOCOMPLETE +*************************************** */ +<?php //autocomplete will expand to fullscreen without max-width ?> +.ui-autocomplete { + position: absolute; + cursor: default; +} +.elgg-autocomplete-item .elgg-body { + max-width: 600px; +} +.ui-autocomplete { + background-color: white; + border: 1px solid #ccc; + overflow: hidden; + + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; +} +.ui-autocomplete .ui-menu-item { + padding: 0px 4px; + + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; +} +.ui-autocomplete .ui-menu-item:hover { + background-color: #eee; +} +.ui-autocomplete a:hover { + text-decoration: none; + color: #4690D6; +} + +/* *************************************** + USER PICKER +*************************************** */ +.elgg-user-picker-list li:first-child { + border-top: 1px dotted #ccc; + margin-top: 5px; +} +.elgg-user-picker-list > li { + border-bottom: 1px dotted #ccc; +} + +/* *************************************** + FRIENDS PICKER +*************************************** */ +.friends-picker-main-wrapper { + margin-bottom: 15px; +} +.friends-picker-container h3 { + font-size:4em !important; + text-align: left; + margin:10px 0 20px !important; + color:#999 !important; + background: none !important; + padding:0 !important; +} +.friends-picker .friends-picker-container .panel ul { + text-align: left; + margin: 0; + padding:0; +} +.friends-picker-wrapper { + margin: 0; + padding:0; + position: relative; + width: 730px; +} +.friends-picker { + position: relative; + overflow: hidden; + margin: 0; + padding:0; + width: 730px; + height: auto; + background-color: #dedede; + + -webkit-border-radius: 8px; + -moz-border-radius: 8px; + border-radius: 8px; +} +.friendspicker-savebuttons { + background: white; + + -webkit-border-radius: 8px; + -moz-border-radius: 8px; + border-radius: 8px; + + margin:0 10px 10px; +} +.friends-picker .friends-picker-container { /* long container used to house end-to-end panels. Width is calculated in JS */ + position: relative; + left: 0; + top: 0; + width: 100%; + list-style-type: none; +} +.friends-picker .friends-picker-container .panel { + float:left; + height: 100%; + position: relative; + width: 730px; + margin: 0; + padding:0; +} +.friends-picker .friends-picker-container .panel .wrapper { + margin: 0; + padding:4px 10px 10px 10px; + min-height: 230px; +} +.friends-picker-navigation { + margin: 0 0 10px; + padding:0 0 10px; + border-bottom:1px solid #ccc; +} +.friends-picker-navigation ul { + list-style: none; + padding-left: 0; +} +.friends-picker-navigation ul li { + float: left; + margin:0; + background:white; +} +.friends-picker-navigation a { + font-weight: bold; + text-align: center; + background: white; + color: #999; + text-decoration: none; + display: block; + padding: 0; + width:20px; + + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.tabHasContent { + background: white; + color:#333 !important; +} +.friends-picker-navigation li a:hover { + background: #333; + color:white !important; +} +.friends-picker-navigation li a.current { + background: #4690D6; + color:white !important; +} +.friends-picker-navigation-l, .friends-picker-navigation-r { + position: absolute; + top: 46px; + text-indent: -9000em; +} +.friends-picker-navigation-l a, .friends-picker-navigation-r a { + display: block; + height: 40px; + width: 40px; +} +.friends-picker-navigation-l { + right: 48px; + z-index:1; +} +.friends-picker-navigation-r { + right: 0; + z-index:1; +} +.friends-picker-navigation-l { + background: url("<?php echo elgg_get_site_url(); ?>_graphics/friendspicker.png") no-repeat left top; +} +.friends-picker-navigation-r { + background: url("<?php echo elgg_get_site_url(); ?>_graphics/friendspicker.png") no-repeat -60px top; +} +.friends-picker-navigation-l:hover { + background: url("<?php echo elgg_get_site_url(); ?>_graphics/friendspicker.png") no-repeat left -44px; +} +.friends-picker-navigation-r:hover { + background: url("<?php echo elgg_get_site_url(); ?>_graphics/friendspicker.png") no-repeat -60px -44px; +} +.friendspicker-savebuttons .elgg-button-submit, +.friendspicker-savebuttons .elgg-button-cancel { + margin:5px 20px 5px 5px; +} +.friendspicker-members-table { + background: #dedede; + + -webkit-border-radius: 8px; + -moz-border-radius: 8px; + border-radius: 8px; + + margin:10px 0 0; + padding:10px 10px 0; +} + +/* *************************************** + PAGINATION +*************************************** */ +.elgg-pagination { + margin: 10px 0; + display: block; + text-align: center; +} +.elgg-pagination li { + display: inline; + margin: 0 6px 0 0; + text-align: center; +} +.elgg-pagination a, .elgg-pagination span { + padding: 2px 6px; + color: #333; + border: 1px solid #333; + font-size: 12px; + text-decoration: none; +} +.elgg-pagination a:hover { + background: #333; + color: white; + text-decoration: none; +} +.elgg-pagination .elgg-state-disabled span { + color: #CCC; + border-color: #CCC; +} +.elgg-pagination .elgg-state-selected span { + color: #000; + border-color: #ccc; +} + +/* *************************************** + TABS +*************************************** */ +.elgg-tabs { + margin-bottom: 5px; + border-bottom: 1px solid #ccc; + display: table; + width: 100%; +} +.elgg-tabs li { + float: left; + border: 1px solid #ccc; + border-bottom-width: 0; + background: #eee; + margin: 0 0 0 10px; +} +.elgg-tabs a { + text-decoration: none; + display: block; + padding: 3px 10px 0 10px; + text-align: center; + height: 21px; + color: #999; +} +.elgg-tabs a:hover { + background: #dedede; + color:#333; +} +.elgg-tabs .elgg-state-selected { + border-color: #ccc; + background: white; +} +.elgg-tabs .elgg-state-selected a { + position: relative; + top: 2px; + background: white; +} + +/* *************************************** + SIDEBAR MENU +*************************************** */ +.elgg-admin-sidebar-menu a { + border: 1px solid red; + display: block; + padding: 5px; + color: #333; + cursor: pointer; + text-decoration: none; + margin-bottom: 2px; + border: 1px solid #CCC; + + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; +} +.elgg-admin-sidebar-menu a:hover { + text-decoration: none; + background: black; + color: white; + border: 1px solid black; +} +.elgg-admin-sidebar-menu li.elgg-state-selected > a { + background-color: #BBB; +} +.elgg-admin-sidebar-menu .elgg-menu-closed:before { + content: "\25B8"; + padding-right: 4px; +} +.elgg-admin-sidebar-menu .elgg-menu-opened:before { + content: "\25BE"; + padding-right: 4px; +} +.elgg-admin-sidebar-menu .elgg-child-menu { + display: none; + padding-left: 30px; +} +.elgg-admin-sidebar-menu li.elgg-state-selected > ul { + display: block; +} +.elgg-admin-sidebar-menu h2 { + padding-bottom: 5px; +} +.elgg-admin-sidebar-menu ul.elgg-menu-page { + padding-bottom: 15px; +} + +/* *************************************** + TITLE MENU +*************************************** */ +.elgg-menu-title { + float: right; +} +.elgg-menu-title > li { + display: inline-block; + margin-left: 4px; +} + +/* *************************************** + FOOTER MENU +*************************************** */ +.elgg-menu-footer { + color: gray; +} +.elgg-menu-footer li { + float: left; +} +.elgg-menu-footer li:after { + content: "\007C"; + display: inline-block; + padding: 0 4px 0 4px; + font-weight: normal; +} +.elgg-menu-footer li:last-child:after { + content: ""; +} + +/* *************************************** + GENERAL MENU +*************************************** */ +.elgg-menu-general > li, +.elgg-menu-general > li > a { + display: inline-block; + color: #999; +} + +.elgg-menu-general > li:after { + content: "\007C"; + padding: 0 4px; +} + +/* *************************************** + HOVER MENU +*************************************** */ +.elgg-menu-hover { + display: none; + position: absolute; + z-index: 10000; + + width: 165px; + border: solid 1px #E5E5E5; + border-color: #E5E5E5 #999 #999 #E5E5E5; + background-color: #FFF; + + -webkit-box-shadow: 2px 2px 6px rgba(0, 0, 0, 0.50); + -moz-box-shadow: 2px 2px 6px rgba(0, 0, 0, 0.50); + box-shadow: 2px 2px 6px rgba(0, 0, 0, 0.50); +} +.elgg-menu-hover > li { + border-bottom: 1px solid #ddd; +} +.elgg-menu-hover > li:last-child { + border-bottom: none; +} +.elgg-menu-hover .elgg-heading-basic { + display: block; +} +.elgg-menu-hover a { + display: block; + padding: 2px 8px; + font-size: 92%; +} +.elgg-menu-hover a:hover { + background: #ccc; + text-decoration: none; +} +.elgg-menu-hover-admin a { + color: red; +} +.elgg-menu-hover-admin a:hover { + color: white; + background-color: red; +} + +/* *************************************** + ENTITY MENU +*************************************** */ +<?php // height depends on line height/font size ?> +.elgg-menu-entity, elgg-menu-annotation { + float: right; + margin-left: 15px; + font-size: 90%; + color: #666; + line-height: 16px; + height: 16px; +} +.elgg-menu-entity > li, .elgg-menu-annotation > li { + margin-left: 15px; +} +.elgg-menu-entity > li > a, .elgg-menu-annotation > li > a { + color: #aaa; +} +<?php // need to override .elgg-menu-hz ?> +.elgg-menu-entity > li > a, .elgg-menu-annotation > li > a { + display: block; +} +.elgg-menu-entity > li > span, .elgg-menu-annotation > li > span { + vertical-align: baseline; +} + +/* *************************************** + WIDGET MENU +*************************************** */ +.elgg-menu-widget > li { + position: absolute; + top: 4px; + display: inline-block; + width: 18px; + height: 18px; + padding: 2px 2px 0 0; +} +.elgg-menu-widget > .elgg-menu-item-collapse { + left: 5px; +} +.elgg-menu-widget > .elgg-menu-item-delete { + right: 5px; +} +.elgg-menu-widget > .elgg-menu-item-settings { + right: 25px; +} + +/* *************************************** + MORE MENUS +*************************************** */ +/* Horizontal menus w/ separator support */ +.elgg-menu-hz > li, +.elgg-menu-hz > li:after, +.elgg-menu-hz > li > a { + display: inline-block; + vertical-align: middle; +} +/* Allow inline image blocks in horizontal menus */ +.elgg-menu-hz .elgg-body:after { + content: '.'; +} +.elgg-menu > li:last-child::after { + display: none; +} +.elgg-menu-admin-footer a { + color: #eee; +} +.elgg-menu-admin-footer > li { + padding-right: 25px; +} +.elgg-menu-longtext { + float: right; +} +.elgg-menu-metadata { + list-style-type: none; + float: right; + margin-left: 15px; + font-size: 90%; +} +.elgg-menu-metadata > li { + float: left; + margin-left: 15px; +} +.elgg-menu-metadata, .elgg-menu-metadata a { + color: #aaa; +} + +/* *************************************** + WIDGETS +*************************************** */ +.elgg-widgets { + float: right; + min-height: 30px; +} +.elgg-widget-add-control { + text-align: right; + margin: 5px 5px 15px; +} +.elgg-widgets-add-panel { + padding: 10px; + margin: 0 5px 15px; + background: #eee; + border: 1px solid #ccc; +} +.elgg-widgets-add-panel ul { + padding: 0; + margin: 0; +} +.elgg-widgets-add-panel li { + float: left; + margin: 2px 10px; + list-style: none; + width: 200px; + padding: 4px; + background-color: #eee; + border: 1px solid #ccc; + font-weight: bold; +} +.elgg-widgets-add-panel li a { + display: block; +} +.elgg-widget-single.elgg-state-available { + color: #333; + cursor: pointer; +} +.elgg-widget-single.elgg-state-available:hover { + border-color: #aaa; +} +.elgg-widget-single.elgg-state-unavailable { + color: #888; +} + +.elgg-module-widget { + background-color: #dedede; + padding: 1px; + margin: 0 5px 15px; + position: relative; +} +.elgg-module-widget:hover { + background-color: #ccc; +} +.elgg-module-widget > .elgg-head { + background-color: #f5f5f5; + height: 26px; + overflow: hidden; +} +.elgg-module-widget.elgg-state-draggable .elgg-widget-handle { + cursor: move; +} +.elgg-module-widget > .elgg-head h3 { + float: left; + padding: 4px 45px 0 20px; + color: #333; +} + +.elgg-widget-collapse-button { + color: #c5c5c5; + text-decoration: none; +} +a.elgg-widget-collapse-button:hover, +a.elgg-widget-collapsed:hover { + color: #9d9d9d; + text-decoration: none; +} +a.elgg-widget-collapse-button:before { + content: "\25BC"; +} +a.elgg-widget-collapsed:before { + content: "\25BA"; +} +.elgg-module-widget > .elgg-body { + border-top: 1px solid #dedede; + background-color: white; + width: 100%; + overflow: hidden; +} +.elgg-widget-edit { + display: none; + width: 96%; + padding: 2%; + border-bottom: 1px solid #dedede; +} +.elgg-widget-content { + padding: 10px; +} +.elgg-widget-placeholder { + border: 2px dashed #dedede; + margin-bottom: 15px; +} + +/* *************************************** + GRID +*************************************** */ +.elgg-grid {} +.elgg-col { + float: left; +} +.elgg-col-1of1 { + float: none; +} +.elgg-col-1of2 { + width: 50%; +} +.elgg-col-1of3 { + width: 33.33%; +} +.elgg-col-2of3 { + width: 66.66%; +} +.elgg-col-1of4 { + width: 25%; +} +.elgg-col-3of4 { + width: 75%; +} +.elgg-col-1of5 { + width: 20%; +} +.elgg-col-2of5 { + width: 40%; +} +.elgg-col-3of5 { + width: 60%; +} +.elgg-col-4of5 { + width: 80%; +} +.elgg-col-1of6 { + width: 16.66%; +} +.elgg-col-5of6 { + width: 83.33%; +} + +/* *************************************** + ICONS +*************************************** */ +.elgg-icon { + background: transparent url(<?php echo elgg_get_site_url(); ?>_graphics/admin_sprites.png) no-repeat left; + width: 16px; + height: 16px; + display: inline-block; + margin: 0 2px; + vertical-align: text-bottom; +} +.elgg-module .elgg-head .elgg-icon { + vertical-align: baseline; +} +.elgg-icon-delete:hover, +.elgg-icon-delete-alt:hover { + background-position: 0 -0px; +} +.elgg-icon-delete, +.elgg-icon-delete-alt { + background-position: 0 -18px; +} +.elgg-icon-drag-arrow:hover { + background-position: 0 -36px; +} +.elgg-icon-drag-arrow { + background-position: 0 -54px; +} +.elgg-icon-hover-menu:hover { + background-position: 0 -72px; +} +.elgg-icon-hover-menu { + background-position: 0 -90px; +} +.elgg-icon-settings-alt:hover { + background-position: 0 -108px; +} +.elgg-icon-settings-alt { + background-position: 0 -126px; +} + +.elgg-ajax-loader { + background: white url(<?php echo elgg_get_site_url(); ?>_graphics/ajax_loader_bw.gif) no-repeat center center; + min-height: 33px; + min-width: 33px; +} + +/* *************************************** + AVATAR ICONS +*************************************** */ +.elgg-avatar { + position: relative; + display: inline-block; +} +.elgg-avatar > a > img { + display: block; +} +.elgg-avatar-tiny > a > img { + width: 25px; + height: 25px; + + /* remove the border-radius if you don't want rounded avatars in supported browsers */ + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + + -moz-background-clip: border; + background-clip: border; + + -webkit-background-size: 25px; + -khtml-background-size: 25px; + -moz-background-size: 25px; + -o-background-size: 25px; + background-size: 25px; +} +.elgg-avatar-small > a > img { + width: 40px; + height: 40px; + + /* remove the border-radius if you don't want rounded avatars in supported browsers */ + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + + -moz-background-clip: border; + background-clip: border; + + -webkit-background-size: 40px; + -khtml-background-size: 40px; + -moz-background-size: 40px; + -o-background-size: 40px; + background-size: 40px; +} +.elgg-avatar-medium > a > img { + width: 100px; + height: 100px; +} +.elgg-avatar-large > a > img { + width: 200px; + height: 200px; +} +.elgg-avatar > .elgg-icon-hover-menu { + display: none; + position: absolute; + right: 0; + bottom: 0; + margin: 0; + cursor: pointer; +} +.elgg-avatar { + position: relative; +} +.elgg-avatar > a > img { + display: block; +} +.elgg-avatar-tiny > a > img { + width: 25px; + height: 25px; + + /* remove the border-radius if you don't want rounded avatars in supported browsers */ + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + + -moz-background-clip: border; + background-clip: border; + + -webkit-background-size: 25px; + -khtml-background-size: 25px; + -moz-background-size: 25px; + -o-background-size: 25px; + background-size: 25px; +} +.elgg-avatar-small > a > img { + width: 40px; + height: 40px; + + /* remove the border-radius if you don't want rounded avatars in supported browsers */ + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + + -moz-background-clip: border; + background-clip: border; + + -webkit-background-size: 40px; + -khtml-background-size: 40px; + -moz-background-size: 40px; + -o-background-size: 40px; + background-size: 40px; +} +.elgg-avatar-medium > a > img { + width: 100px; + height: 100px; +} +.elgg-avatar-large > a > img { + width: 200px; + height: 200px; +} + +/* *************************************** + PLUGINS +**************************************** */ +.elgg-plugin { + border: 1px solid #999; + margin: 0 0 5px; + padding: 0 7px 4px 10px; + + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; +} +.elgg-plugin.elgg-state-draggable > .elgg-image-block .elgg-head { + cursor: move; +} +.elgg-plugin p { + margin: 0; +} +.elgg-plugin h3 { + color: black; + padding-bottom: 10px; +} +.elgg-plugin-settings { + font-weight: normal; + font-size: 0.9em; +} +.elgg-plugin-screenshot { + display: inline; +} +.elgg-plugin-screenshot img { + border: 1px solid #999; +} +.elgg-plugin-screenshot-lightbox { + display: block; + position: absolute; + width: 99%; + text-align: center; + background-color: white; + border: 1px solid #999; + + -webkit-border-radius: 8px; + -moz-border-radius: 8px; + border-radius: 8px; +} +.elgg-plugin-screenshot-lightbox h2 { + color: black; +} +.elgg-plugin.elgg-state-active { + background: white; +} +.elgg-plugin.elgg-state-inactive { + background: #dedede; +} +.elgg-plugin .elgg-state-error { + background: #fbe3e4; + color: #8a1f11; + border-color: #fbc2c4; + font-weight: bold; +} +.elgg-plugin .elgg-state-warning { + background: #fbedb5; + color: #000000; + border-color: #fbe58b; + font-weight: bold; +} +.elgg-plugin-more { + background-color: #eee; + + -webkit-border-radius: 8px; + -moz-border-radius: 8px; + border-radius: 8px; + + padding: 5px 10px; + margin: 4px 0; +} +ul.elgg-plugin-categories, ul.elgg-plugin-categories > li, +ul.elgg-plugin-resources, ul.elgg-plugin-resources > li { + display: inline; +} +.elgg-plugin-category-bundled { + border-width: 2px; + border-color: #0054A7; +} + +/**************************************** + MARKDOWN +****************************************/ +.elgg-markdown { + margin: 15px; +} +.elgg-markdown h1, +.elgg-markdown h2, +.elgg-markdown h3, +.elgg-markdown h4, +.elgg-markdown h5, +.elgg-markdown h6 { + margin: 1em 0 1em -15px; + color: #333; +} +.elgg-markdown ol { + list-style: decimal; + padding-left: 2em; +} +.elgg-markdown ul { + list-style: disc; + padding-left: 2em; +} +.elgg-markdown p { + margin: 15px 0; +} + +/* *************************************** + MISC +*************************************** */ +.elgg-content-thin { + max-width: 600px; +} + +.elgg-subtext { + color: #666; + font-size: 85%; + line-height: 1.2em; + font-style: italic; + margin-bottom: 5px; +} + +.elgg-text-help { + display: block; + font-size: 85%; + font-style: italic; +} + +.elgg-longtext-control { + margin-left: 14px; + font-size: 80%; + cursor: pointer; +} + +table.mceLayout { + width:100% !important; +} + +.elgg-output dt { + font-weight: bold; +} +.elgg-output dd { + margin: 0 0 1em 2em; +} + +/* *************************************** + HELPERS +*************************************** */ +.hidden { + display: none; +} +.centered { + margin: 0 auto; +} +.center { + text-align: center; +} +.float { + float: left; +} +.float-alt { + float: right; +} +.elgg-toggle { + cursor: pointer; +} +.elgg-discover .elgg-discoverable { + display: none; +} +.elgg-discover:hover .elgg-discoverable { + display: block; +} +.elgg-transition:hover { + opacity: .7; +} + +/* *************************************** + BORDERS AND SEPARATORS +*************************************** */ +.elgg-border-plain { + border: 1px solid #eeeeee; +} +.elgg-border-transition { + border: 1px solid #eeeeee; +} +.elgg-divide-top { + border-top: 1px solid #CCCCCC; +} +.elgg-divide-bottom { + border-bottom: 1px solid #CCCCCC; +} +.elgg-divide-left { + border-left: 1px solid #CCCCCC; +} +.elgg-divide-right { + border-right: 1px solid #CCCCCC; +} + +/* *************************************** + SPACING (from OOCSS) +*************************************** */ +.pan{padding:0} +.pas{padding:5px} +.pam{padding:10px} +.pal{padding:20px} +.ptn{padding-top:0} +.pts{padding-top:5px} +.ptm{padding-top:10px} +.ptl{padding-top:20px} +.prn{padding-right:0} +.prs{padding-right:5px} +.prm{padding-right:10px} +.prl{padding-right:20px} +.pbn{padding-bottom:0} +.pbs{padding-bottom:5px} +.pbm{padding-bottom:10px} +.pbl{padding-bottom:20px} +.pln{padding-left:0} +.pls{padding-left:5px} +.plm{padding-left:10px} +.pll{padding-left:20px} +.phn{padding-left:0;padding-right:0} +.phs{padding-left:5px;padding-right:5px} +.phm{padding-left:10px;padding-right:10px} +.phl{padding-left:20px;padding-right:20px} +.pvn{padding-top:0;padding-bottom:0} +.pvs{padding-top:5px;padding-bottom:5px} +.pvm{padding-top:10px;padding-bottom:10px} +.pvl{padding-top:20px;padding-bottom:20px} +.man{margin:0} +.mas{margin:5px} +.mam{margin:10px} +.mal{margin:20px} +.mtn{margin-top:0} +.mts{margin-top:5px} +.mtm{margin-top:10px} +.mtl{margin-top:20px} +.mrn{margin-right:0} +.mrs{margin-right:5px} +.mrm{margin-right:10px} +.mrl{margin-right:20px} +.mbn{margin-bottom:0} +.mbs{margin-bottom:5px} +.mbm{margin-bottom:10px} +.mbl{margin-bottom:20px} +.mln{margin-left:0} +.mls{margin-left:5px} +.mlm{margin-left:10px} +.mll{margin-left:20px} +.mhn{margin-left:0;margin-right:0} +.mhs{margin-left:5px;margin-right:5px} +.mhm{margin-left:10px;margin-right:10px} +.mhl{margin-left:20px;margin-right:20px} +.mvn{margin-top:0;margin-bottom:0} +.mvs{margin-top:5px;margin-bottom:5px} +.mvm{margin-top:10px;margin-bottom:10px} +.mvl{margin-top:20px;margin-bottom:20px} diff --git a/views/default/css/elements/OOCSS_LICENSE b/views/default/css/elements/OOCSS_LICENSE new file mode 100644 index 000000000..c09c45873 --- /dev/null +++ b/views/default/css/elements/OOCSS_LICENSE @@ -0,0 +1,30 @@ +Software License Agreement (BSD License) + +Copyright (c) 2009, Nicole Sullivan. +All rights reserved. + +Redistribution and use of this software in source and binary forms, with or without modification, are +permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above + copyright notice, this list of conditions and the + following disclaimer. + +* 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. + +* Neither the name of Nicole Sullivan nor the names of its + contributors may be used to endorse or promote products + derived from this software without specific prior + written permission of Nicole Sullivan. + +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 THE COPYRIGHT OWNER 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.
\ No newline at end of file diff --git a/views/default/css/elements/buttons.php b/views/default/css/elements/buttons.php new file mode 100644 index 000000000..e9c99cf96 --- /dev/null +++ b/views/default/css/elements/buttons.php @@ -0,0 +1,156 @@ +<?php +/** + * CSS buttons + * + * @package Elgg.Core + * @subpackage UI + */ +?> +/* ************************** + BUTTONS +************************** */ + +/* Base */ +.elgg-button { + font-size: 14px; + font-weight: bold; + + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + + width: auto; + padding: 2px 4px; + cursor: pointer; + outline: none; + + -webkit-box-shadow: 0px 1px 0px rgba(0, 0, 0, 0.40); + -moz-box-shadow: 0px 1px 0px rgba(0, 0, 0, 0.40); + box-shadow: 0px 1px 0px rgba(0, 0, 0, 0.40); +} +a.elgg-button { + padding: 3px 6px; +} + +/* Submit: This button should convey, "you're about to take some definitive action" */ +.elgg-button-submit { + color: white; + text-shadow: 1px 1px 0px black; + text-decoration: none; + border: 1px solid #4690d6; + background: #4690d6 url(<?php echo elgg_get_site_url(); ?>_graphics/button_graduation.png) repeat-x left 10px; +} + +.elgg-button-submit:hover { + border-color: #0054a7; + text-decoration: none; + color: white; + background: #0054a7 url(<?php echo elgg_get_site_url(); ?>_graphics/button_graduation.png) repeat-x left 10px; +} + +.elgg-button-submit.elgg-state-disabled { + background: #999; + border-color: #999; + cursor: default; +} + +/* Cancel: This button should convey a negative but easily reversible action (e.g., turning off a plugin) */ +.elgg-button-cancel { + color: #333; + background: #ddd url(<?php echo elgg_get_site_url(); ?>_graphics/button_graduation.png) repeat-x left 10px; + border: 1px solid #999; +} +.elgg-button-cancel:hover { + color: #444; + background-color: #999; + background-position: left 10px; + text-decoration: none; +} + +/* Action: This button should convey a normal, inconsequential action, such as clicking a link */ +.elgg-button-action { + background: #ccc url(<?php echo elgg_get_site_url(); ?>_graphics/button_background.gif) repeat-x 0 0; + border:1px solid #999; + color: #333; + padding: 2px 15px; + text-align: center; + font-weight: bold; + text-decoration: none; + text-shadow: 0 1px 0 white; + cursor: pointer; + + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} + +.elgg-button-action:hover, +.elgg-button-action:focus { + background: #ccc url(<?php echo elgg_get_site_url(); ?>_graphics/button_background.gif) repeat-x 0 -15px; + color: #111; + text-decoration: none; + border: 1px solid #999; +} + +/* Delete: This button should convey "be careful before you click me" */ +.elgg-button-delete { + color: #bbb; + text-decoration: none; + border: 1px solid #333; + background: #555 url(<?php echo elgg_get_site_url(); ?>_graphics/button_graduation.png) repeat-x left 10px; + text-shadow: 1px 1px 0px black; +} +.elgg-button-delete:hover { + color: #999; + background-color: #333; + background-position: left 10px; + text-decoration: none; +} + +.elgg-button-dropdown { + padding:3px 6px; + text-decoration:none; + display:block; + font-weight:bold; + position:relative; + margin-left:0; + color: white; + border:1px solid #71B9F7; + + -webkit-border-radius:4px; + -moz-border-radius:4px; + border-radius:4px; + + -webkit-box-shadow: 0 0 0; + -moz-box-shadow: 0 0 0; + box-shadow: 0 0 0; + + /*background-image:url(<?php echo elgg_get_site_url(); ?>_graphics/elgg_sprites.png); + background-position:-150px -51px; + background-repeat:no-repeat;*/ +} + +.elgg-button-dropdown:after { + content: " \25BC "; + font-size:smaller; +} + +.elgg-button-dropdown:hover { + background-color:#71B9F7; + text-decoration:none; +} + +.elgg-button-dropdown.elgg-state-active { + background: #ccc; + outline: none; + color: #333; + border:1px solid #ccc; + + -webkit-border-radius:4px 4px 0 0; + -moz-border-radius:4px 4px 0 0; + border-radius:4px 4px 0 0; +} diff --git a/views/default/css/elements/components.php b/views/default/css/elements/components.php new file mode 100644 index 000000000..7fe535d57 --- /dev/null +++ b/views/default/css/elements/components.php @@ -0,0 +1,286 @@ +<?php +/** + * Layout Object CSS + * + * Image blocks, lists, tables, gallery, messages + * + * @package Elgg.Core + * @subpackage UI + */ +?> + +/* *************************************** + Image Block +*************************************** */ +.elgg-image-block { + padding: 3px 0; +} +.elgg-image-block .elgg-image { + float: left; + margin-right: 5px; +} +.elgg-image-block .elgg-image-alt { + float: right; + margin-left: 5px; +} + +/* *************************************** + List +*************************************** */ +.elgg-list { + border-top: 1px dotted #CCCCCC; + margin: 5px 0; + clear: both; +} +.elgg-list > li { + border-bottom: 1px dotted #CCCCCC; +} + +.elgg-item .elgg-subtext { + margin-bottom: 5px; +} +.elgg-item .elgg-content { + margin: 10px 5px; +} + +/* *************************************** + Gallery +*************************************** */ +.elgg-gallery { + border: none; + margin-right: auto; + margin-left: auto; +} +.elgg-gallery td { + padding: 5px; +} +.elgg-gallery-fluid > li { + float: left; +} +.elgg-gallery-users > li { + margin: 0 2px; +} + +/* *************************************** + Tables +*************************************** */ +.elgg-table { + width: 100%; + border-top: 1px solid #ccc; +} +.elgg-table td, .elgg-table th { + padding: 4px 8px; + border: 1px solid #ccc; +} +.elgg-table th { + background-color: #ddd; +} +.elgg-table tr:nth-child(odd), .elgg-table tr.odd { + background-color: #fff; +} +.elgg-table tr:nth-child(even), .elgg-table tr.even { + background-color: #f0f0f0; +} +.elgg-table-alt { + width: 100%; + border-top: 1px solid #ccc; +} +.elgg-table-alt th { + background-color: #eee; + font-weight: bold; +} +.elgg-table-alt td, .elgg-table-alt th { + padding: 2px 4px 2px 4px; + border-bottom: 1px solid #ccc; +} +.elgg-table-alt td:first-child { + width: 200px; +} +.elgg-table-alt tr:hover { + background: #E4E4E4; +} + +/* *************************************** + Owner Block +*************************************** */ +.elgg-owner-block { + margin-bottom: 20px; +} + +/* *************************************** + Messages +*************************************** */ +.elgg-message { + color: white; + font-weight: bold; + display: block; + padding: 3px 10px; + cursor: pointer; + opacity: 0.9; + + -webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.45); + -moz-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.45); + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.45); + + -webkit-border-radius: 8px; + -moz-border-radius: 8px; + border-radius: 8px; +} +.elgg-state-success { + background-color: black; +} +.elgg-state-error { + background-color: red; +} +.elgg-state-notice { + background-color: #4690D6; +} + +/* *************************************** + River +*************************************** */ +.elgg-list-river { + border-top: 1px solid #CCC; +} +.elgg-list-river > li { + border-bottom: 1px solid #CCC; +} +.elgg-river-item { + padding: 7px 0; +} +.elgg-river-item .elgg-pict { + margin-right: 20px; +} +.elgg-river-timestamp { + color: #666; + font-size: 85%; + font-style: italic; + line-height: 1.2em; +} + +.elgg-river-attachments, +.elgg-river-message, +.elgg-river-content { + border-left: 1px solid #CCC; + font-size: 85%; + line-height: 1.5em; + margin: 8px 0 5px 0; + padding-left: 5px; +} +.elgg-river-attachments .elgg-avatar, +.elgg-river-attachments .elgg-icon { + float: left; +} +.elgg-river-layout .elgg-input-dropdown { + float: right; + margin: 10px 0; +} + +.elgg-river-comments-tab { + display: block; + background-color: #EEE; + color: #4690D6; + margin-top: 5px; + width: auto; + float: right; + font-size: 85%; + padding: 1px 7px; + + -webkit-border-radius: 5px 5px 0 0; + -moz-border-radius: 5px 5px 0 0; + border-radius: 5px 5px 0 0; +} + +<?php //@todo components.php ?> +.elgg-river-comments { + margin: 0; + border-top: none; +} +.elgg-river-comments li:first-child { + -webkit-border-radius: 5px 0 0; + -moz-border-radius: 5px 0 0; + border-radius: 5px 0 0; +} +.elgg-river-comments li:last-child { + -webkit-border-radius: 0 0 5px 5px; + -moz-border-radius-bottomleft: 0 0 5px 5px; + border-radius-bottomleft: 0 0 5px 5px; +} +.elgg-river-comments li { + background-color: #EEE; + border-bottom: none; + padding: 4px; + margin-bottom: 2px; +} +.elgg-river-comments .elgg-media { + padding: 0; +} +.elgg-river-more { + background-color: #EEE; + + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + + padding: 2px 4px; + font-size: 85%; + margin-bottom: 2px; +} + +<?php //@todo location-dependent styles ?> +.elgg-river-item form { + background-color: #EEE; + padding: 4px; + + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; + + height: 30px; +} +.elgg-river-item input[type=text] { + width: 80%; +} +.elgg-river-item input[type=submit] { + margin: 0 0 0 10px; +} + + +/* ************************************** + Comments (from elgg_view_comments) +************************************** */ +.elgg-comments { + margin-top: 25px; +} +.elgg-comments > form { + margin-top: 15px; +} + +/* *************************************** + Image-related +*************************************** */ +.elgg-photo { + border: 1px solid #ccc; + padding: 3px; + background-color: white; +} + +/* *************************************** + Tags +*************************************** */ +.elgg-tags { + font-size: 85%; +} +.elgg-tags > li { + float:left; + margin-right: 5px; +} +.elgg-tags li.elgg-tag:after { + content: ","; +} +.elgg-tags li.elgg-tag:last-child:after { + content: ""; +} +.elgg-tagcloud { + text-align: justify; +} diff --git a/views/default/css/elements/core.php b/views/default/css/elements/core.php new file mode 100644 index 000000000..74f21ee59 --- /dev/null +++ b/views/default/css/elements/core.php @@ -0,0 +1,117 @@ +<?php +/** + * Core CSS + * + * This file holds all the complicated/hacky stuff that you really + * shouldn't touch or override unless you're sure you know what you're doing. + * + * Provides classes that implement cross-browser support for the following features: + * * clearfix + * * fluid-width content area that doesn't wrap around floats + * * menu's with separators + * * inline-block + * * horizontal menus + * * fluid gallery without using tables + */ +?> + +/* Clearfix */ +.clearfix:after, +.elgg-grid:after, +.elgg-layout:after, +.elgg-inner:after, +.elgg-page-header:after, +.elgg-page-footer:after, +.elgg-head:after, +.elgg-foot:after, +.elgg-col:after, +.elgg-image-block:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* Fluid width container that does not wrap floats */ +.elgg-body, +.elgg-col-last { + display: block; + width: auto; + word-wrap: break-word; + overflow: hidden; + + /* IE 6, 7 */ + zoom:1; + *overflow:visible; +} + +<?php +/** + * elgg-body fills the space available to it. + * It uses hidden text to expand itself. The combination of auto width, overflow + * hidden, and the hidden text creates this effect. + * + * This allows us to float fixed width divs to either side of an .elgg-body div + * without having to specify the body div's width. + * + * @todo check what happens with long <pre> tags or large images + * @todo Move this to its own file -- it is very complicated and should not have to be overridden. + */ + +//@todo isn't this only needed if we use display:table-cell? +?> +.elgg-body:after, +.elgg-col-last:after { + display: block; + visibility: hidden; + height: 0 !important; + line-height: 0; + overflow: hidden; + + /* Stretch to fill up available space */ + font-size: xx-large; + content: " x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x "; +} + +/* *************************************** + * MENUS + * + * To add separators to a menu: + * .elgg-menu-$menu > li:after {content: '|'; background: ...;} + *************************************** */ +/* Enabled nesting of dropdown/flyout menus */ +.elgg-menu > li { position: relative; } + +.elgg-menu > li:last-child::after { + display: none; +} + +/* Maximize click target */ +.elgg-menu > li > a { display: block } + +/* Horizontal menus w/ separator support */ +.elgg-menu-hz > li, +.elgg-menu-hz > li:after, +.elgg-menu-hz > li > a, +.elgg-menu-hz > li > span { + vertical-align: middle; +} + +/* Allow inline image blocks in horizontal menus */ +.elgg-menu-hz .elgg-body:after { content: '.'; } + +<?php //@todo This isn't going to work as-is. Needs testing ?> +/* Inline block */ +.elgg-gallery > li, +.elgg-button, +.elgg-icon, +.elgg-menu-hz > li, +.elgg-menu-hz > li:after, +.elgg-menu-hz > li > a, +.elgg-menu-hz > li > span { + /* Google says do this, but why? */ + position: relative; + + display: inline-block; +} diff --git a/views/default/css/elements/forms.php b/views/default/css/elements/forms.php new file mode 100644 index 000000000..2fc156447 --- /dev/null +++ b/views/default/css/elements/forms.php @@ -0,0 +1,370 @@ +<?php +/** + * CSS form/input elements + * + * @package Elgg.Core + * @subpackage UI + */ +?> + +/* *************************************** + Form Elements +*************************************** */ +fieldset > div { + margin-bottom: 15px; +} +fieldset > div:last-child { + margin-bottom: 0; +} +.elgg-form-alt > fieldset > .elgg-foot { + border-top: 1px solid #CCC; + padding: 10px 0; +} + +label { + font-weight: bold; + color: #333; + font-size: 110%; +} + +input, textarea { + border: 1px solid #ccc; + color: #666; + font: 120% Arial, Helvetica, sans-serif; + padding: 5px; + width: 100%; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +input[type=text]:focus, textarea:focus { + border: solid 1px #4690d6; + background: #e4ecf5; + color:#333; +} + +textarea { + height: 200px; +} + + +.elgg-longtext-control { + float: right; + margin-left: 14px; + font-size: 80%; + cursor: pointer; +} + + +.elgg-input-access { + margin:5px 0 0 0; +} + +input[type="checkbox"], +input[type="radio"] { + margin:0 3px 0 0; + padding:0; + border:none; + width:auto; +} +.elgg-input-checkboxes.elgg-horizontal li, +.elgg-input-radios.elgg-horizontal li { + display: inline; + padding-right: 10px; +} + +.elgg-form-login, .elgg-form-account { + max-width: 450px; +} + +/* *************************************** + FRIENDS PICKER +*************************************** */ +.friends-picker-main-wrapper { + margin-bottom: 15px; +} +.friends-picker-container h3 { + font-size:4em !important; + text-align: left; + margin:10px 0 20px !important; + color:#999 !important; + background: none !important; + padding:0 !important; +} +.friends-picker .friends-picker-container .panel ul { + text-align: left; + margin: 0; + padding:0; +} +.friends-picker-wrapper { + margin: 0; + padding:0; + position: relative; + width: 730px; +} +.friends-picker { + position: relative; + overflow: hidden; + margin: 0; + padding:0; + width: 730px; + height: auto; + background-color: #dedede; + + -webkit-border-radius: 8px; + -moz-border-radius: 8px; + border-radius: 8px; +} +.friendspicker-savebuttons { + background: white; + + -webkit-border-radius: 8px; + -moz-border-radius: 8px; + border-radius: 8px; + + margin:0 10px 10px; +} +.friends-picker .friends-picker-container { /* long container used to house end-to-end panels. Width is calculated in JS */ + position: relative; + left: 0; + top: 0; + width: 100%; + list-style-type: none; +} +.friends-picker .friends-picker-container .panel { + float:left; + height: 100%; + position: relative; + width: 730px; + margin: 0; + padding:0; +} +.friends-picker .friends-picker-container .panel .wrapper { + margin: 0; + padding:4px 10px 10px 10px; + min-height: 230px; +} +.friends-picker-navigation { + margin: 0 0 10px; + padding:0 0 10px; + border-bottom:1px solid #ccc; +} +.friends-picker-navigation ul { + list-style: none; + padding-left: 0; +} +.friends-picker-navigation ul li { + float: left; + margin:0; + background:white; +} +.friends-picker-navigation a { + font-weight: bold; + text-align: center; + background: white; + color: #999; + text-decoration: none; + display: block; + padding: 0; + width:20px; + + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.tabHasContent { + background: white; + color:#333 !important; +} +.friends-picker-navigation li a:hover { + background: #333; + color:white !important; +} +.friends-picker-navigation li a.current { + background: #4690D6; + color:white !important; +} +.friends-picker-navigation-l, .friends-picker-navigation-r { + position: absolute; + top: 46px; + text-indent: -9000em; +} +.friends-picker-navigation-l a, .friends-picker-navigation-r a { + display: block; + height: 40px; + width: 40px; +} +.friends-picker-navigation-l { + right: 48px; + z-index:1; +} +.friends-picker-navigation-r { + right: 0; + z-index:1; +} +.friends-picker-navigation-l { + background: url("<?php echo elgg_get_site_url(); ?>_graphics/friendspicker.png") no-repeat left top; +} +.friends-picker-navigation-r { + background: url("<?php echo elgg_get_site_url(); ?>_graphics/friendspicker.png") no-repeat -60px top; +} +.friends-picker-navigation-l:hover { + background: url("<?php echo elgg_get_site_url(); ?>_graphics/friendspicker.png") no-repeat left -44px; +} +.friends-picker-navigation-r:hover { + background: url("<?php echo elgg_get_site_url(); ?>_graphics/friendspicker.png") no-repeat -60px -44px; +} +.friendspicker-savebuttons .elgg-button-submit, +.friendspicker-savebuttons .elgg-button-cancel { + margin:5px 20px 5px 5px; +} +.friendspicker-members-table { + background: #dedede; + + -webkit-border-radius: 8px; + -moz-border-radius: 8px; + border-radius: 8px; + + margin:10px 0 0; + padding:10px 10px 0; +} + +/* *************************************** + AUTOCOMPLETE +*************************************** */ +<?php //autocomplete will expand to fullscreen without max-width ?> +.ui-autocomplete { + position: absolute; + cursor: default; +} +.elgg-autocomplete-item .elgg-body { + max-width: 600px; +} +.ui-autocomplete { + background-color: white; + border: 1px solid #ccc; + overflow: hidden; + + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; +} +.ui-autocomplete .ui-menu-item { + padding: 0px 4px; + + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; +} +.ui-autocomplete .ui-menu-item:hover { + background-color: #eee; +} +.ui-autocomplete a:hover { + text-decoration: none; + color: #4690D6; +} + +/* *************************************** + USER PICKER +*************************************** */ +.elgg-user-picker-list li:first-child { + border-top: 1px dotted #ccc; + margin-top: 5px; +} +.elgg-user-picker-list > li { + border-bottom: 1px dotted #ccc; +} + +/* *************************************** + DATE PICKER +**************************************** */ +.ui-datepicker { + display: none; + + margin-top: 3px; + width: 208px; + background-color: white; + border: 1px solid #0054A7; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + overflow: hidden; + + -webkit-box-shadow: 4px 4px 4px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 4px 4px 4px rgba(0, 0, 0, 0.5); + box-shadow: 4px 4px 4px rgba(0, 0, 0, 0.5); +} +.ui-datepicker-inline { + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} + +.ui-datepicker-header { + position: relative; + background: #4690D6; + color: white; + padding: 2px 0; + border-bottom: 1px solid #0054A7; +} +.ui-datepicker-header a { + color: white; +} +.ui-datepicker-prev, .ui-datepicker-next { + position: absolute; + top: 5px; + cursor: pointer; +} +.ui-datepicker-prev { + left: 6px; +} +.ui-datepicker-next { + right: 6px; +} +.ui-datepicker-title { + line-height: 1.8em; + margin: 0 30px; + text-align: center; + font-weight: bold; +} +.ui-datepicker-calendar { + margin: 4px; +} +.ui-datepicker th { + color: #0054A7; + border: none; + font-weight: bold; + padding: 5px 6px; + text-align: center; +} +.ui-datepicker td { + padding: 1px; +} +.ui-datepicker td span, .ui-datepicker td a { + display: block; + padding: 2px; + line-height: 1.2em; + text-align: right; + text-decoration: none; +} +.ui-datepicker-calendar .ui-state-default { + border: 1px solid #ccc; + color: #4690D6;; + background: #fafafa; +} +.ui-datepicker-calendar .ui-state-hover { + border: 1px solid #aaa; + color: #0054A7; + background: #eee; +} +.ui-datepicker-calendar .ui-state-active, +.ui-datepicker-calendar .ui-state-active.ui-state-hover { + font-weight: bold; + border: 1px solid #0054A7; + color: #0054A7; + background: #E4ECF5; +} diff --git a/views/default/css/elements/grid.php b/views/default/css/elements/grid.php new file mode 100644 index 000000000..fdbaf4aca --- /dev/null +++ b/views/default/css/elements/grid.php @@ -0,0 +1,54 @@ +<?php +/** + * CSS grid + * + * @package Elgg.Core + * @subpackage UI + * + * To work around subpixel rounding discrepancies, apply .elgg-col-last to + * the last column (@todo we need broswer-specific test cases for this). + */ +?> + +/* *************************************** + GRID +*************************************** */ +.elgg-col { + float: left; +} +.elgg-col-1of1 { + float: none; +} +.elgg-col-1of2 { + width: 50%; +} +.elgg-col-1of3 { + width: 33.33%; +} +.elgg-col-2of3 { + width: 66.66%; +} +.elgg-col-1of4 { + width: 25%; +} +.elgg-col-3of4 { + width: 75%; +} +.elgg-col-1of5 { + width: 20%; +} +.elgg-col-2of5 { + width: 40%; +} +.elgg-col-3of5 { + width: 60%; +} +.elgg-col-4of5 { + width: 80%; +} +.elgg-col-1of6 { + width: 16.66%; +} +.elgg-col-5of6 { + width: 83.33%; +} diff --git a/views/default/css/elements/helpers.php b/views/default/css/elements/helpers.php new file mode 100644 index 000000000..e9a9e0a30 --- /dev/null +++ b/views/default/css/elements/helpers.php @@ -0,0 +1,144 @@ +<?php +/** + * Helpers CSS + * + * Contains generic elements that can be used throughout the site. + * + * @package Elgg.Core + * @subpackage UI + */ +?> + +.clearfloat { + clear: both; +} + +.hidden { + display: none; +} + +.centered { + margin: 0 auto; +} + +.center { + text-align: center; +} + +.float { + float: left; +} + +.float-alt { + float: right; +} + +.link { + cursor: pointer; +} + +.elgg-discover .elgg-discoverable { + display: none; +} + +.elgg-discover:hover .elgg-discoverable { + display: block; +} + +.elgg-transition:hover { + opacity: .7; +} + +/* *************************************** + BORDERS AND SEPARATORS +*************************************** */ +.elgg-border-plain { + border: 1px solid #eeeeee; +} +.elgg-border-transition { + border: 1px solid #eeeeee; +} +.elgg-divide-top { + border-top: 1px solid #CCCCCC; +} +.elgg-divide-bottom { + border-bottom: 1px solid #CCCCCC; +} +.elgg-divide-left { + border-left: 1px solid #CCCCCC; +} +.elgg-divide-right { + border-right: 1px solid #CCCCCC; +} + +/* *************************************** + Spacing (from OOCSS) +*************************************** */ +<?php +/** + * Spacing classes + * Should be used to modify the default spacing between objects (not between nodes of the same object) + * Please use judiciously. You want to be using defaults most of the time, these are exceptions! + * <type><location><size> + * <type>: m = margin, p = padding + * <location>: a = all, t = top, r = right, b = bottom, l = left, h = horizontal, v = vertical + * <size>: n = none, s = small, m = medium, l = large + */ + +$none = '0'; +$small = '5px'; +$medium = '10px'; +$large = '20px'; + +echo <<<CSS +/* Padding */ +.pan{padding:$none} +.prn, .phn{padding-right:$none} +.pln, .phn{padding-left:$none} +.ptn, .pvn{padding-top:$none} +.pbn, .pvn{padding-bottom:$none} + +.pas{padding:$small} +.prs, .phs{padding-right:$small} +.pls, .phs{padding-left:$small} +.pts, .pvs{padding-top:$small} +.pbs, .pvs{padding-bottom:$small} + +.pam{padding:$medium} +.prm, .phm{padding-right:$medium} +.plm, .phm{padding-left:$medium} +.ptm, .pvm{padding-top:$medium} +.pbm, .pvm{padding-bottom:$medium} + +.pal{padding:$large} +.prl, .phl{padding-right:$large} +.pll, .phl{padding-left:$large} +.ptl, .pvl{padding-top:$large} +.pbl, .pvl{padding-bottom:$large} + +/* Margin */ +.man{margin:$none} +.mrn, .mhn{margin-right:$none} +.mln, .mhn{margin-left:$none} +.mtn, .mvn{margin-top:$none} +.mbn, .mvn{margin-bottom:$none} + +.mas{margin:$small} +.mrs, .mhs{margin-right:$small} +.mls, .mhs{margin-left:$small} +.mts, .mvs{margin-top:$small} +.mbs, .mvs{margin-bottom:$small} + +.mam{margin:$medium} +.mrm, .mhm{margin-right:$medium} +.mlm, .mhm{margin-left:$medium} +.mtm, .mvm{margin-top:$medium} +.mbm, .mvm{margin-bottom:$medium} + +.mal{margin:$large} +.mrl, .mhl{margin-right:$large} +.mll, .mhl{margin-left:$large} +.mtl, .mvl{margin-top:$large} +.mbl, .mvl{margin-bottom:$large} +CSS; +?>
\ No newline at end of file diff --git a/views/default/css/elements/icons.php b/views/default/css/elements/icons.php new file mode 100644 index 000000000..9b12e0a57 --- /dev/null +++ b/views/default/css/elements/icons.php @@ -0,0 +1,348 @@ +<?php +/** + * Elgg icons + * + * @package Elgg.Core + * @subpackage UI + */ + +?> + +/* *************************************** + ICONS +*************************************** */ + +.elgg-icon { + background: transparent url(<?php echo elgg_get_site_url(); ?>_graphics/elgg_sprites.png) no-repeat left; + width: 16px; + height: 16px; + margin: 0 2px; +} +.elgg-icon-arrow-left { + background-position: 0 -0px; +} +.elgg-icon-arrow-right { + background-position: 0 -18px; +} +.elgg-icon-arrow-two-head { + background-position: 0 -36px; +} +.elgg-icon-attention:hover { + background-position: 0 -54px; +} +.elgg-icon-attention { + background-position: 0 -72px; +} +.elgg-icon-calendar { + background-position: 0 -90px; +} +.elgg-icon-cell-phone { + background-position: 0 -108px; +} +.elgg-icon-checkmark:hover { + background-position: 0 -126px; +} +.elgg-icon-checkmark { + background-position: 0 -144px; +} +.elgg-icon-clip:hover { + background-position: 0 -162px; +} +.elgg-icon-clip { + background-position: 0 -180px; +} +.elgg-icon-cursor-drag-arrow { + background-position: 0 -198px; +} +.elgg-icon-delete-alt:hover { + background-position: 0 -216px; +} +.elgg-icon-delete-alt { + background-position: 0 -234px; +} +.elgg-icon-delete:hover { + background-position: 0 -252px; +} +.elgg-icon-delete { + background-position: 0 -270px; +} +.elgg-icon-download:hover { + background-position: 0 -288px; +} +.elgg-icon-download { + background-position: 0 -306px; +} +.elgg-icon-eye { + background-position: 0 -324px; +} +.elgg-icon-facebook { + background-position: 0 -342px; +} +.elgg-icon-grid:hover { + background-position: 0 -360px; +} +.elgg-icon-grid { + background-position: 0 -378px; +} +.elgg-icon-home:hover { + background-position: 0 -396px; +} +.elgg-icon-home { + background-position: 0 -414px; +} +.elgg-icon-hover-menu:hover { + background-position: 0 -432px; +} +.elgg-icon-hover-menu { + background-position: 0 -450px; +} +.elgg-icon-info:hover { + background-position: 0 -468px; +} +.elgg-icon-info { + background-position: 0 -486px; +} +.elgg-icon-link:hover { + background-position: 0 -504px; +} +.elgg-icon-link { + background-position: 0 -522px; +} +.elgg-icon-list { + background-position: 0 -540px; +} +.elgg-icon-lock-closed { + background-position: 0 -558px; +} +.elgg-icon-lock-open { + background-position: 0 -576px; +} +.elgg-icon-mail-alt:hover { + background-position: 0 -594px; +} +.elgg-icon-mail-alt { + background-position: 0 -612px; +} +.elgg-icon-mail:hover { + background-position: 0 -630px; +} +.elgg-icon-mail { + background-position: 0 -648px; +} +.elgg-icon-photo { + background-position: 0 -666px; +} +.elgg-icon-print-alt { + background-position: 0 -684px; +} +.elgg-icon-print { + background-position: 0 -702px; +} +.elgg-icon-push-pin-alt { + background-position: 0 -720px; +} +.elgg-icon-push-pin { + background-position: 0 -738px; +} +.elgg-icon-redo { + background-position: 0 -756px; +} +.elgg-icon-refresh:hover { + background-position: 0 -774px; +} +.elgg-icon-refresh { + background-position: 0 -792px; +} +.elgg-icon-round-arrow-left { + background-position: 0 -810px; +} +.elgg-icon-round-arrow-right { + background-position: 0 -828px; +} +.elgg-icon-round-checkmark { + background-position: 0 -846px; +} +.elgg-icon-round-minus { + background-position: 0 -864px; +} +.elgg-icon-round-plus { + background-position: 0 -882px; +} +.elgg-icon-rss { + background-position: 0 -900px; +} +.elgg-icon-search-focus { + background-position: 0 -918px; +} +.elgg-icon-search { + background-position: 0 -936px; +} +.elgg-icon-settings-alt:hover { + background-position: 0 -954px; +} +.elgg-icon-settings-alt { + background-position: 0 -972px; +} +.elgg-icon-settings { + background-position: 0 -990px; +} +.elgg-icon-share:hover { + background-position: 0 -1008px; +} +.elgg-icon-share { + background-position: 0 -1026px; +} +.elgg-icon-shop-cart:hover { + background-position: 0 -1044px; +} +.elgg-icon-shop-cart { + background-position: 0 -1062px; +} +.elgg-icon-speech-bubble-alt:hover { + background-position: 0 -1080px; +} +.elgg-icon-speech-bubble-alt { + background-position: 0 -1098px; +} +.elgg-icon-speech-bubble:hover { + background-position: 0 -1116px; +} +.elgg-icon-speech-bubble { + background-position: 0 -1134px; +} +.elgg-icon-star-alt { + background-position: 0 -1152px; +} +.elgg-icon-star-empty:hover { + background-position: 0 -1170px; +} +.elgg-icon-star-empty { + background-position: 0 -1188px; +} +.elgg-icon-star:hover { + background-position: 0 -1206px; +} +.elgg-icon-star { + background-position: 0 -1224px; +} +.elgg-icon-tag:hover { + background-position: 0 -1242px; +} +.elgg-icon-tag { + background-position: 0 -1260px; +} +.elgg-icon-thumbs-down-alt:hover { + background-position: 0 -1278px; +} +.elgg-icon-thumbs-down:hover, +.elgg-icon-thumbs-down-alt { + background-position: 0 -1296px; +} +.elgg-icon-thumbs-down { + background-position: 0 -1314px; +} +.elgg-icon-thumbs-up-alt:hover { + background-position: 0 -1332px; +} +.elgg-icon-thumbs-up:hover, +.elgg-icon-thumbs-up-alt { + background-position: 0 -1350px; +} +.elgg-icon-thumbs-up { + background-position: 0 -1368px; +} +.elgg-icon-trash { + background-position: 0 -1386px; +} +.elgg-icon-twitter { + background-position: 0 -1404px; +} +.elgg-icon-undo { + background-position: 0 -1422px; +} +.elgg-icon-user:hover { + background-position: 0 -1440px; +} +.elgg-icon-user { + background-position: 0 -1458px; +} +.elgg-icon-users:hover { + background-position: 0 -1476px; +} +.elgg-icon-users { + background-position: 0 -1494px; +} +.elgg-icon-video { + background-position: 0 -1512px; +} + + +.elgg-avatar > .elgg-icon-hover-menu { + display: none; + position: absolute; + right: 0; + bottom: 0; + margin: 0; + cursor: pointer; +} + +.elgg-ajax-loader { + background: white url(<?php echo elgg_get_site_url(); ?>_graphics/ajax_loader_bw.gif) no-repeat center center; + min-height: 31px; + min-width: 31px; +} + +/* *************************************** + AVATAR ICONS +*************************************** */ +.elgg-avatar { + position: relative; + display: inline-block; +} +.elgg-avatar > a > img { + display: block; +} +.elgg-avatar-tiny > a > img { + width: 25px; + height: 25px; + + /* remove the border-radius if you don't want rounded avatars in supported browsers */ + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + + -moz-background-clip: border; + background-clip: border; + + -webkit-background-size: 25px; + -khtml-background-size: 25px; + -moz-background-size: 25px; + -o-background-size: 25px; + background-size: 25px; +} +.elgg-avatar-small > a > img { + width: 40px; + height: 40px; + + /* remove the border-radius if you don't want rounded avatars in supported browsers */ + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + + -moz-background-clip: border; + background-clip: border; + + -webkit-background-size: 40px; + -khtml-background-size: 40px; + -moz-background-size: 40px; + -o-background-size: 40px; + background-size: 40px; +} +.elgg-avatar-medium > a > img { + width: 100px; + height: 100px; +} +.elgg-avatar-large > a > img { + width: 200px; + height: 200px; +} diff --git a/views/default/css/elements/layout.php b/views/default/css/elements/layout.php new file mode 100644 index 000000000..9d92752b4 --- /dev/null +++ b/views/default/css/elements/layout.php @@ -0,0 +1,121 @@ +<?php +/** + * Page Layout + * + * Contains CSS for the page shell and page layout + * + * Default layout: 990px wide, centered. Used in default page shell + * + * @package Elgg.Core + * @subpackage UI + */ +?> + +/* *************************************** + PAGE LAYOUT +*************************************** */ +/***** DEFAULT LAYOUT ******/ +<?php // the width is on the page rather than topbar to handle small viewports ?> +.elgg-page-default { + min-width: 998px; +} +.elgg-page-default .elgg-page-header > .elgg-inner { + width: 990px; + margin: 0 auto; + height: 90px; +} +.elgg-page-default .elgg-page-body > .elgg-inner { + width: 990px; + margin: 0 auto; +} +.elgg-page-default .elgg-page-footer > .elgg-inner { + width: 990px; + margin: 0 auto; + padding: 5px 0; + border-top: 1px solid #DEDEDE; +} + +/***** TOPBAR ******/ +.elgg-page-topbar { + background: #333333 url(<?php echo elgg_get_site_url(); ?>_graphics/toptoolbar_background.gif) repeat-x top left; + border-bottom: 1px solid #000000; + position: relative; + height: 24px; + z-index: 9000; +} +.elgg-page-topbar > .elgg-inner { + padding: 0 10px; +} + +/***** PAGE MESSAGES ******/ +.elgg-system-messages { + position: fixed; + top: 24px; + right: 20px; + max-width: 500px; + z-index: 2000; +} +.elgg-system-messages li { + margin-top: 10px; +} +.elgg-system-messages li p { + margin: 0; +} + +/***** PAGE HEADER ******/ +.elgg-page-header { + position: relative; + background: #4690D6 url(<?php echo elgg_get_site_url(); ?>_graphics/header_shadow.png) repeat-x bottom left; +} +.elgg-page-header > .elgg-inner { + position: relative; +} + +/***** PAGE BODY LAYOUT ******/ +.elgg-layout { + min-height: 360px; +} +.elgg-layout-one-sidebar { + background: transparent url(<?php echo elgg_get_site_url(); ?>_graphics/sidebar_background.gif) repeat-y right top; +} +.elgg-layout-two-sidebar { + background: transparent url(<?php echo elgg_get_site_url(); ?>_graphics/two_sidebar_background.gif) repeat-y right top; +} +.elgg-layout-error { + margin-top: 20px; +} +.elgg-sidebar { + position: relative; + padding: 20px 10px; + float: right; + width: 210px; + margin: 0 0 0 10px; +} +.elgg-sidebar-alt { + position: relative; + padding: 20px 10px; + float: left; + width: 160px; + margin: 0 10px 0 0; +} +.elgg-main { + position: relative; + min-height: 360px; + padding: 10px; +} +.elgg-main > .elgg-head { + padding-bottom: 3px; + border-bottom: 1px solid #CCCCCC; + margin-bottom: 10px; +} + +/***** PAGE FOOTER ******/ +.elgg-page-footer { + position: relative; +} +.elgg-page-footer { + color: #999; +} +.elgg-page-footer a:hover { + color: #666; +} diff --git a/views/default/css/elements/misc.php b/views/default/css/elements/misc.php new file mode 100644 index 000000000..d9622d34a --- /dev/null +++ b/views/default/css/elements/misc.php @@ -0,0 +1,62 @@ +/* *************************************** + MISC +*************************************** */ +#login-dropdown { + position: absolute; + top:10px; + right:0; + z-index: 100; +} + +/* *************************************** + AVATAR UPLOADING & CROPPING +*************************************** */ + +#current-user-avatar { + border-right:1px solid #ccc; +} +#avatar-croppingtool { + border-top: 1px solid #ccc; +} +#user-avatar-cropper { + float: left; +} +#user-avatar-preview { + float: left; + position: relative; + overflow: hidden; + width: 100px; + height: 100px; +} + +/* *************************************** + FRIENDS COLLECTIONS +*************************************** */ + +#friends_collections_accordian li { + color: #666; +} +#friends_collections_accordian li h2 { + -webkit-border-radius: 8px; + -moz-border-radius: 8px; + border-radius: 8px; + + background: none repeat scroll 0 0 #4690D6; + color: white; + cursor: pointer; + font-size: 1.2em; + margin: 10px 0; + padding: 4px 2px 4px 6px; +} +#friends_collections_accordian li h2:hover { + background-color: #333; +} +#friends_collections_accordian .friends_collections_controls { + float: right; + font-size: 70%; +} +#friends_collections_accordian .friends-picker-main-wrapper { + background: none repeat scroll 0 0 white; + display: none; + padding: 0; +} diff --git a/views/default/css/elements/modules.php b/views/default/css/elements/modules.php new file mode 100644 index 000000000..a37ae094b --- /dev/null +++ b/views/default/css/elements/modules.php @@ -0,0 +1,194 @@ +/* *************************************** + Modules +*************************************** */ +.elgg-module { + overflow: hidden; + margin-bottom: 20px; +} + +/* Aside */ +.elgg-module-aside .elgg-head { + border-bottom: 1px solid #CCC; + + margin-bottom: 5px; + padding-bottom: 5px; +} + +/* Info */ +.elgg-module-info > .elgg-head { + background: #e4e4e4; + padding: 5px; + margin-bottom: 10px; + + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} +.elgg-module-info > .elgg-head * { + color: #333; +} + +/* Popup */ +.elgg-module-popup { + background-color: white; + border: 1px solid #ccc; + + z-index: 9999; + margin-bottom: 0; + padding: 5px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + + -webkit-box-shadow: 4px 4px 4px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 4px 4px 4px rgba(0, 0, 0, 0.5); + box-shadow: 4px 4px 4px rgba(0, 0, 0, 0.5); +} +.elgg-module-popup > .elgg-head { + margin-bottom: 5px; +} +.elgg-module-popup > .elgg-head * { + color: #0054A7; +} + +/* Dropdown */ +.elgg-module-dropdown { + background-color:white; + border:5px solid #CCC; + + -webkit-border-radius: 5px 0 5px 5px; + -moz-border-radius: 5px 0 5px 5px; + border-radius: 5px 0 5px 5px; + + display:none; + + width: 210px; + padding: 12px; + margin-right: 0px; + z-index:100; + + -webkit-box-shadow: 0 3px 3px rgba(0, 0, 0, 0.45); + -moz-box-shadow: 0 3px 3px rgba(0, 0, 0, 0.45); + box-shadow: 0 3px 3px rgba(0, 0, 0, 0.45); + + position:absolute; + right: 0px; + top: 100%; +} + +/* Featured */ +.elgg-module-featured { + border: 1px solid #4690D6; + + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} +.elgg-module-featured > .elgg-head { + padding: 5px; + background-color: #4690D6; +} +.elgg-module-featured > .elgg-head * { + color: white; +} +.elgg-module-featured > .elgg-body { + padding: 10px; +} + +/* *************************************** + Widgets +*************************************** */ +.elgg-widgets { + float: right; + min-height: 30px; +} +.elgg-widget-add-control { + text-align: right; + margin: 5px 5px 15px; +} +.elgg-widgets-add-panel { + padding: 10px; + margin: 0 5px 15px; + background: #dedede; + border: 2px solid #ccc; +} +<?php //@todo location-dependent style: make an extension of elgg-gallery ?> +.elgg-widgets-add-panel li { + float: left; + margin: 2px 10px; + width: 200px; + padding: 4px; + background-color: #ccc; + border: 2px solid #b0b0b0; + font-weight: bold; +} +.elgg-widgets-add-panel li a { + display: block; +} +.elgg-widgets-add-panel .elgg-state-available { + color: #333; + cursor: pointer; +} +.elgg-widgets-add-panel .elgg-state-available:hover { + background-color: #bcbcbc; +} +.elgg-widgets-add-panel .elgg-state-unavailable { + color: #888; +} + +.elgg-module-widget { + background-color: #dedede; + padding: 2px; + margin: 0 5px 15px; + position: relative; +} +.elgg-module-widget:hover { + background-color: #ccc; +} +.elgg-module-widget > .elgg-head { + background-color: #eeeeee; + height: 26px; + overflow: hidden; +} +.elgg-module-widget > .elgg-head h3 { + float: left; + padding: 4px 45px 0 20px; + color: #666; +} +.elgg-module-widget.elgg-state-draggable .elgg-widget-handle { + cursor: move; +} +a.elgg-widget-collapse-button { + color: #c5c5c5; +} +a.elgg-widget-collapse-button:hover, +a.elgg-widget-collapsed:hover { + color: #9d9d9d; + text-decoration: none; +} +a.elgg-widget-collapse-button:before { + content: "\25BC"; +} +a.elgg-widget-collapsed:before { + content: "\25BA"; +} +.elgg-module-widget > .elgg-body { + background-color: white; + width: 100%; + overflow: hidden; + border-top: 2px solid #dedede; +} +.elgg-widget-edit { + display: none; + width: 96%; + padding: 2%; + border-bottom: 2px solid #dedede; + background-color: #f9f9f9; +} +.elgg-widget-content { + padding: 10px; +} +.elgg-widget-placeholder { + border: 2px dashed #dedede; + margin-bottom: 15px; +} diff --git a/views/default/css/elements/navigation.php b/views/default/css/elements/navigation.php new file mode 100644 index 000000000..62f370069 --- /dev/null +++ b/views/default/css/elements/navigation.php @@ -0,0 +1,559 @@ +<?php +/** + * Navigation + * + * @package Elgg.Core + * @subpackage UI + */ +?> + +/* *************************************** + PAGINATION +*************************************** */ +.elgg-pagination { + margin: 10px 0; + display: block; + text-align: center; +} +.elgg-pagination li { + display: inline; + margin: 0 6px 0 0; + text-align: center; +} +.elgg-pagination a, .elgg-pagination span { + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + + padding: 2px 6px; + color: #4690d6; + border: 1px solid #4690d6; + font-size: 12px; +} +.elgg-pagination a:hover { + background: #4690d6; + color: white; + text-decoration: none; +} +.elgg-pagination .elgg-state-disabled span { + color: #CCCCCC; + border-color: #CCCCCC; +} +.elgg-pagination .elgg-state-selected span { + color: #555555; + border-color: #555555; +} + +/* *************************************** + TABS +*************************************** */ +.elgg-tabs { + margin-bottom: 5px; + border-bottom: 2px solid #cccccc; + display: table; + width: 100%; +} +.elgg-tabs li { + float: left; + border: 2px solid #ccc; + border-bottom: 0; + background: #eee; + margin: 0 0 0 10px; + + -webkit-border-radius: 5px 5px 0 0; + -moz-border-radius: 5px 5px 0 0; + border-radius: 5px 5px 0 0; +} +.elgg-tabs a { + text-decoration: none; + display: block; + padding: 3px 10px 0 10px; + text-align: center; + height: 21px; + color: #999; +} +.elgg-tabs a:hover { + background: #dedede; + color: #4690D6; +} +.elgg-tabs .elgg-state-selected { + border-color: #ccc; + background: white; +} +.elgg-tabs .elgg-state-selected a { + position: relative; + top: 2px; + background: white; +} + +/* *************************************** + BREADCRUMBS +*************************************** */ +.elgg-breadcrumbs { + font-size: 80%; + font-weight: bold; + line-height: 1.2em; + color: #bababa; +} +.elgg-breadcrumbs > li { + display: inline-block; +} +.elgg-breadcrumbs > li:after { + content: "\003E"; + padding: 0 4px; + font-weight: normal; +} +.elgg-breadcrumbs > li > a { + display: inline-block; + color: #999; +} +.elgg-breadcrumbs > li > a:hover { + color: #0054a7; + text-decoration: underline; +} + +.elgg-main .elgg-breadcrumbs { + position: relative; + top: -6px; + left: 0; +} + +/* *************************************** + TOPBAR MENU +*************************************** */ +.elgg-menu-topbar { + float: left; +} + +.elgg-menu-topbar > li { + float: left; +} + +.elgg-menu-topbar > li > a { + padding-top: 2px; + color: #eee; + margin: 1px 15px 0; +} + +.elgg-menu-topbar > li > a:hover { + color: #4690D6; + text-decoration: none; +} + +.elgg-menu-topbar-alt { + float: right; +} + +.elgg-menu-topbar .elgg-icon { + vertical-align: middle; + margin-top: -1px; +} + +.elgg-menu-topbar > li > a.elgg-topbar-logo { + margin-top: 0; + padding-left: 5px; + width: 38px; + height: 20px; +} + +.elgg-menu-topbar > li > a.elgg-topbar-avatar { + width: 18px; + height: 18px; +} + +/* *************************************** + SITE MENU +*************************************** */ +.elgg-menu-site { + z-index: 1; +} + +.elgg-menu-site > li > a { + font-weight: bold; + padding: 3px 13px 0px 13px; + height: 20px; +} + +.elgg-menu-site > li > a:hover { + text-decoration: none; +} + +.elgg-menu-site-default { + position: absolute; + bottom: 0; + left: 0; + height: 23px; +} + +.elgg-menu-site-default > li { + float: left; + margin-right: 1px; +} + +.elgg-menu-site-default > li > a { + color: white; +} + +.elgg-menu-site > li > ul { + display: none; + background-color: white; +} + +.elgg-menu-site > li:hover > ul { + display: block; +} + +.elgg-menu-site-default > .elgg-state-selected > a, +.elgg-menu-site-default > li:hover > a { + background: white; + color: #555; + + -webkit-box-shadow: 2px -1px 1px rgba(0, 0, 0, 0.25); + -moz-box-shadow: 2px -1px 1px rgba(0, 0, 0, 0.25); + box-shadow: 2px -1px 1px rgba(0, 0, 0, 0.25); + + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; +} + +.elgg-menu-site-more { + position: relative; + left: -1px; + width: 100%; + min-width: 150px; + border: 1px solid #999; + border-top: 0; + + -webkit-border-radius: 0 0 4px 4px; + -moz-border-radius: 0 0 4px 4px; + border-radius: 0 0 4px 4px; + + -webkit-box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.25); + -moz-box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.25); + box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.25); +} + +.elgg-menu-site-more > li > a { + background-color: white; + color: #555; + + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} + +.elgg-menu-site-more > li > a:hover { + background: #4690D6; + color: white; +} + +.elgg-menu-site-more > li:last-child > a, +.elgg-menu-site-more > li:last-child > a:hover { + -webkit-border-radius: 0 0 4px 4px; + -moz-border-radius: 0 0 4px 4px; + border-radius: 0 0 4px 4px; +} + +.elgg-more > a:before { + content: "\25BC"; + font-size: smaller; + margin-right: 4px; +} + +/* *************************************** + TITLE +*************************************** */ +.elgg-menu-title { + float: right; +} + +.elgg-menu-title > li { + display: inline-block; + margin-left: 4px; +} + +/* *************************************** + FILTER MENU +*************************************** */ +.elgg-menu-filter { + margin-bottom: 5px; + border-bottom: 2px solid #ccc; + display: table; + width: 100%; +} +.elgg-menu-filter > li { + float: left; + border: 2px solid #ccc; + border-bottom: 0; + background: #eee; + margin: 0 0 0 10px; + + -webkit-border-radius: 5px 5px 0 0; + -moz-border-radius: 5px 5px 0 0; + border-radius: 5px 5px 0 0; +} +.elgg-menu-filter > li:hover { + background: #dedede; +} +.elgg-menu-filter > li > a { + text-decoration: none; + display: block; + padding: 3px 10px 0; + text-align: center; + height: 21px; + color: #999; +} +.elgg-menu-filter > li > a:hover { + background: #dedede; + color: #4690D6; +} +.elgg-menu-filter > .elgg-state-selected { + border-color: #ccc; + background: white; +} +.elgg-menu-filter > .elgg-state-selected > a { + position: relative; + top: 2px; + background: white; +} + +/* *************************************** + PAGE MENU +*************************************** */ +.elgg-menu-page { + margin-bottom: 15px; +} + +.elgg-menu-page a { + display: block; + + -webkit-border-radius: 8px; + -moz-border-radius: 8px; + border-radius: 8px; + + background-color: white; + margin: 0 0 3px; + padding: 2px 4px 2px 8px; +} +.elgg-menu-page a:hover { + background-color: #0054A7; + color: white; + text-decoration: none; +} +.elgg-menu-page li.elgg-state-selected > a { + background-color: #4690D6; + color: white; +} +.elgg-menu-page .elgg-child-menu { + display: none; + margin-left: 15px; +} +.elgg-menu-page .elgg-menu-closed:before, .elgg-menu-opened:before { + display: inline-block; + padding-right: 4px; +} +.elgg-menu-page .elgg-menu-closed:before { + content: "\002B"; +} +.elgg-menu-page .elgg-menu-opened:before { + content: "\002D"; +} + +/* *************************************** + HOVER MENU +*************************************** */ +.elgg-menu-hover { + display: none; + position: absolute; + z-index: 10000; + + overflow: hidden; + + min-width: 165px; + max-width: 250px; + border: solid 1px; + border-color: #E5E5E5 #999 #999 #E5E5E5; + background-color: #FFF; + + -webkit-box-shadow: 2px 2px 6px rgba(0, 0, 0, 0.50); + -moz-box-shadow: 2px 2px 6px rgba(0, 0, 0, 0.50); + box-shadow: 2px 2px 6px rgba(0, 0, 0, 0.50); +} +.elgg-menu-hover > li { + border-bottom: 1px solid #ddd; +} +.elgg-menu-hover > li:last-child { + border-bottom: none; +} +.elgg-menu-hover .elgg-heading-basic { + display: block; +} +.elgg-menu-hover a { + padding: 2px 8px; + font-size: 92%; +} +.elgg-menu-hover a:hover { + background: #ccc; + text-decoration: none; +} +.elgg-menu-hover-admin a { + color: red; +} +.elgg-menu-hover-admin a:hover { + color: white; + background-color: red; +} + +/* *************************************** + SITE FOOTER +*************************************** */ +.elgg-menu-footer > li, +.elgg-menu-footer > li > a { + display: inline-block; + color: #999; +} + +.elgg-menu-footer > li:after { + content: "\007C"; + padding: 0 4px; +} + +.elgg-menu-footer-default { + float: right; +} + +.elgg-menu-footer-alt { + float: left; +} + +/* *************************************** + GENERAL MENU +*************************************** */ +.elgg-menu-general > li, +.elgg-menu-general > li > a { + display: inline-block; + color: #999; +} + +.elgg-menu-general > li:after { + content: "\007C"; + padding: 0 4px; +} + +/* *************************************** + ENTITY AND ANNOTATION +*************************************** */ +<?php // height depends on line height/font size ?> +.elgg-menu-entity, elgg-menu-annotation { + float: right; + margin-left: 15px; + font-size: 90%; + color: #aaa; + line-height: 16px; + height: 16px; +} +.elgg-menu-entity > li, .elgg-menu-annotation > li { + margin-left: 15px; +} +.elgg-menu-entity > li > a, .elgg-menu-annotation > li > a { + color: #aaa; +} +<?php // need to override .elgg-menu-hz ?> +.elgg-menu-entity > li > a, .elgg-menu-annotation > li > a { + display: block; +} +.elgg-menu-entity > li > span, .elgg-menu-annotation > li > span { + vertical-align: baseline; +} + +/* *************************************** + OWNER BLOCK +*************************************** */ +.elgg-menu-owner-block li a { + display: block; + + -webkit-border-radius: 8px; + -moz-border-radius: 8px; + border-radius: 8px; + + background-color: white; + margin: 3px 0 5px 0; + padding: 2px 4px 2px 8px; +} +.elgg-menu-owner-block li a:hover { + background-color: #0054A7; + color: white; + text-decoration: none; +} +.elgg-menu-owner-block li.elgg-state-selected > a { + background-color: #4690D6; + color: white; +} + +/* *************************************** + LONGTEXT +*************************************** */ +.elgg-menu-longtext { + float: right; +} + +/* *************************************** + RIVER +*************************************** */ +.elgg-menu-river { + float: right; + margin-left: 15px; + font-size: 90%; + color: #aaa; + line-height: 16px; + height: 16px; +} +.elgg-menu-river > li { + display: inline-block; + margin-left: 5px; +} +.elgg-menu-river > li > a { + color: #aaa; + height: 16px; +} +<?php // need to override .elgg-menu-hz ?> +.elgg-menu-river > li > a { + display: block; +} +.elgg-menu-river > li > span { + vertical-align: baseline; +} + +/* *************************************** + SIDEBAR EXTRAS (rss, bookmark, etc) +*************************************** */ +.elgg-menu-extras { + margin-bottom: 15px; +} + +/* *************************************** + WIDGET MENU +*************************************** */ +.elgg-menu-widget > li { + position: absolute; + top: 4px; + display: inline-block; + width: 18px; + height: 18px; + padding: 2px 2px 0 0; +} + +.elgg-menu-widget > .elgg-menu-item-collapse { + left: 5px; +} +.elgg-menu-widget > .elgg-menu-item-delete { + right: 5px; +} +.elgg-menu-widget > .elgg-menu-item-settings { + right: 25px; +} diff --git a/views/default/css/elements/reset.php b/views/default/css/elements/reset.php new file mode 100644 index 000000000..44bf2fac9 --- /dev/null +++ b/views/default/css/elements/reset.php @@ -0,0 +1,79 @@ +<?php +/** + * CSS reset + * + * @package Elgg.Core + * @subpackage UI + */ +?> + +/* *************************************** + RESET CSS +*************************************** */ +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, font, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-weight: inherit; + font-style: inherit; + font-size: 100%; + font-family: inherit; + vertical-align: baseline; +} +body { + background-color: white; +} +<?php // force vertical scroll bar ?> +html, body { + height: 100%; + margin-bottom: 1px; +} +img { + border-width:0; + border-color:transparent; +} +:focus { + outline: 0 none; +} +ol, ul { + list-style: none; +} +em, i { + font-style:italic; +} +ins { + text-decoration:none; +} +del { + text-decoration:line-through; +} +strong, b { + font-weight:bold; +} +table { + border-collapse: collapse; + border-spacing: 0; +} +caption, th, td { + text-align: left; + font-weight: normal; + vertical-align: top; +} +blockquote:before, blockquote:after, +q:before, q:after { + content: ""; +} +blockquote, q { + quotes: "" ""; +} +a { + text-decoration: none; +} diff --git a/views/default/css/elements/typography.php b/views/default/css/elements/typography.php new file mode 100644 index 000000000..c044cb1cc --- /dev/null +++ b/views/default/css/elements/typography.php @@ -0,0 +1,162 @@ +<?php +/** + * CSS typography + * + * @package Elgg.Core + * @subpackage UI + */ +?> + +/* *************************************** + Typography +*************************************** */ +body { + font-size: 80%; + line-height: 1.4em; + font-family: "Lucida Grande", Arial, Tahoma, Verdana, sans-serif; +} + +a { + color: #4690D6; +} + +a:hover, +a.selected { <?php //@todo remove .selected ?> + color: #555555; + text-decoration: underline; +} + +p { + margin-bottom: 15px; +} + +p:last-child { + margin-bottom: 0; +} + +pre, code { + font-family: Monaco, "Courier New", Courier, monospace; + font-size: 12px; + + background:#EBF5FF; + color:#000000; + overflow:auto; + + overflow-x: auto; /* Use horizontal scroller if needed; for Firefox 2, not needed in Firefox 3 */ + + white-space: pre-wrap; + word-wrap: break-word; /* IE 5.5-7 */ + +} + +pre { + padding:3px 15px; + margin:0px 0 15px 0; + line-height:1.3em; +} + +code { + padding:2px 3px; +} + +.elgg-monospace { + font-family: Monaco, "Courier New", Courier, monospace; +} + +blockquote { + line-height: 1.3em; + padding:3px 15px; + margin:0px 0 15px 0; + background:#EBF5FF; + border:none; + + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +h1, h2, h3, h4, h5, h6 { + font-weight: bold; + color: #0054A7; +} + +h1 { font-size: 1.8em; } +h2 { font-size: 1.5em; line-height: 1.1em; padding-bottom:5px} +h3 { font-size: 1.2em; } +h4 { font-size: 1.0em; } +h5 { font-size: 0.9em; } +h6 { font-size: 0.8em; } + +.elgg-heading-site, .elgg-heading-site:hover { + font-size: 2em; + line-height: 1.4em; + color: white; + font-style: italic; + font-family: Georgia, times, serif; + text-shadow: 1px 2px 4px #333333; + text-decoration: none; +} + +.elgg-heading-main { + float: left; + max-width: 530px; + margin-right: 10px; +} +.elgg-heading-basic { + color: #0054A7; + font-size: 1.2em; + font-weight: bold; +} + +.elgg-subtext { + color: #666666; + font-size: 85%; + line-height: 1.2em; + font-style: italic; +} + +.elgg-text-help { + display: block; + font-size: 85%; + font-style: italic; +} + +.elgg-quiet { + color: #666; +} + +.elgg-loud { + color: #0054A7; +} + +/* *************************************** + USER INPUT DISPLAY RESET +*************************************** */ +.elgg-output { + margin-top: 10px; +} + +.elgg-output dt { font-weight: bold } +.elgg-output dd { margin: 0 0 1em 1em } + +.elgg-output ul, .elgg-output ol { + margin: 0 1.5em 1.5em 0; + padding-left: 1.5em; +} +.elgg-output ul { + list-style-type: disc; +} +.elgg-output ol { + list-style-type: decimal; +} +.elgg-output table { + border: 1px solid #ccc; +} +.elgg-output table td { + border: 1px solid #ccc; + padding: 3px 5px; +} +.elgg-output img { + max-width: 100%; + height: auto; +} diff --git a/views/default/css/elgg.php b/views/default/css/elgg.php new file mode 100644 index 000000000..4960e6ade --- /dev/null +++ b/views/default/css/elgg.php @@ -0,0 +1,68 @@ +<?php +/** + * Elgg primary CSS view + * + * @package Elgg.Core + * @subpackage UI + */ + +/* + * Colors: + * #4690D6 - elgg light blue + * #0054A7 - elgg dark blue + * #e4ecf5 - elgg very light blue + */ + +// check if there is a theme overriding the old css view and use it, if it exists +$old_css_view = elgg_get_view_location('css'); +if ($old_css_view != elgg_get_config('viewpath')) { + echo elgg_view('css', $vars); + return true; +} + + +/******************************************************************************* + +Base CSS + * CSS reset + * core + * helpers (moved to end to have a higher priority) + * grid + +*******************************************************************************/ +echo elgg_view('css/elements/reset', $vars); +echo elgg_view('css/elements/core', $vars); +echo elgg_view('css/elements/grid', $vars); + + +/******************************************************************************* + +Skin CSS + * typography - fonts, line spacing + * forms - forms, inputs + * buttons - action, cancel, delete, submit, dropdown, special + * navigation - menus, breadcrumbs, pagination + * icons - icons, sprites, graphics + * modules - modules, widgets + * layout_objects - lists, content blocks, notifications, avatars + * layout - page layout + * misc - to be removed/redone + +*******************************************************************************/ +echo elgg_view('css/elements/typography', $vars); +echo elgg_view('css/elements/forms', $vars); +echo elgg_view('css/elements/buttons', $vars); +echo elgg_view('css/elements/icons', $vars); +echo elgg_view('css/elements/navigation', $vars); +echo elgg_view('css/elements/modules', $vars); +echo elgg_view('css/elements/components', $vars); +echo elgg_view('css/elements/layout', $vars); +echo elgg_view('css/elements/misc', $vars); + + +// included last to have higher priority +echo elgg_view('css/elements/helpers', $vars); + + +// in case plugins are still extending the old 'css' view, display it +echo elgg_view('css', $vars); diff --git a/views/default/css/ie.php b/views/default/css/ie.php new file mode 100644 index 000000000..4bddd4d55 --- /dev/null +++ b/views/default/css/ie.php @@ -0,0 +1,8 @@ +/** + * CSS for IE8 and above + */ + +/* ie8 does not like shrink wrapping this div with inline-block */ +.elgg-avatar { + display: block; +} diff --git a/views/default/css/ie6.php b/views/default/css/ie6.php new file mode 100644 index 000000000..cf49d33f2 --- /dev/null +++ b/views/default/css/ie6.php @@ -0,0 +1,12 @@ +/** + * CSS for IE6 + */ + +* {zoom: 1;} /* trigger hasLayout in IE */ + +/* main nav drop-down */ +#elgg-header {z-index:1;} + +/* @todo check this one */ +.elgg-button-delete a { background-position-y: 2px; } +.elgg-button-delete a:hover { background-position-y: -14px; }
\ No newline at end of file diff --git a/views/default/css/ie7.php b/views/default/css/ie7.php new file mode 100644 index 000000000..db0125b4b --- /dev/null +++ b/views/default/css/ie7.php @@ -0,0 +1,65 @@ +/** + * CSS for IE7 + */ + +/* trigger hasLayout in IE */ +* { + zoom: 1; +} + +/* site menu drop-down z-index fix for IE7 */ +.elgg-page-header { + z-index: 1; +} + +/* inline-block fixes */ +.elgg-gallery > li, +.elgg-button, +.elgg-icon, +.elgg-menu-hz > li, +.elgg-menu-hz > li:after, +.elgg-menu-hz > li > a, +.elgg-menu-hz > li > span, +.elgg-breadcrumbs > li, +.elgg-menu-footer > li > a, +.elgg-menu-footer li, +.elgg-menu-general > li > a, +.elgg-menu-general li { + display: inline; +} + +/* IE7 does not support :after */ +.elgg-breadcrumbs > li > a { + display: inline; + padding-right: 4px; + margin-right: 4px; + border-right: 1px solid #bababa; +} +.elgg-menu-footer li, +.elgg-menu-user li, +.elgg-menu-general li { + padding-left: 4px; + padding-right: 4px; +} + +/* longtext menu would not display horizontally without this */ +.elgg-menu-longtext { + width: 100%; +} +.elgg-menu-longtext li { + width: 100px; + float: right; +} + +.elgg-avatar { + display: inline; +} + +.elgg-body-walledgarden .elgg-col-1of2 { + width: 255px; +} + +.elgg-module-walledgarden > .elgg-head, +.elgg-module-walledgarden > .elgg-foot { + width: 530px; +}
\ No newline at end of file diff --git a/views/default/css/lightbox.php b/views/default/css/lightbox.php new file mode 100644 index 000000000..7d5917cc3 --- /dev/null +++ b/views/default/css/lightbox.php @@ -0,0 +1,371 @@ +<?php +/** + * Fancybox lightbox CSS. + * + * Used as a view because we need to pass a full URL to AlphaImageLoader. + * + * @package Elgg.Core + * @subpackage UI + */ + +$jquery_path = elgg_get_site_url() . 'vendors/jquery/'; +?> + +/* + * FancyBox - jQuery Plugin + * Simple and fancy lightbox alternative + * + * Examples and documentation at: http://fancybox.net + * + * Copyright (c) 2008 - 2010 Janis Skarnelis + * That said, it is hardly a one-person project. Many people have submitted bugs, code, and offered their advice freely. Their support is greatly appreciated. + * + * Version: 1.3.4 (11/11/2010) + * Requires: jQuery v1.3+ + * + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + */ + +#fancybox-loading { + position: fixed; + top: 50%; + left: 50%; + width: 40px; + height: 40px; + margin-top: -20px; + margin-left: -20px; + cursor: pointer; + overflow: hidden; + z-index: 1104; + display: none; +} + +#fancybox-loading div { + position: absolute; + top: 0; + left: 0; + width: 40px; + height: 480px; + background-image: url('<?php echo $jquery_path; ?>fancybox/fancybox.png'); +} + +#fancybox-overlay { + position: absolute; + top: 0; + left: 0; + width: 100%; + z-index: 1100; + display: none; +} + +#fancybox-tmp { + padding: 0; + margin: 0; + border: 0; + overflow: auto; + display: none; +} + +#fancybox-wrap { + position: absolute; + top: 0; + left: 0; + padding: 20px; + z-index: 1101; + outline: none; + display: none; +} + +#fancybox-outer { + position: relative; + width: 100%; + height: 100%; + background: #fff; +} + +#fancybox-content { + width: 0; + height: 0; + padding: 0; + outline: none; + position: relative; + overflow: hidden; + z-index: 1102; + border: 0px solid #fff; +} + +#fancybox-hide-sel-frame { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: transparent; + z-index: 1101; +} + +#fancybox-close { + position: absolute; + top: -15px; + right: -15px; + width: 30px; + height: 30px; + background: transparent url('<?php echo $jquery_path; ?>fancybox/fancybox.png') -40px 0px; + cursor: pointer; + z-index: 1103; + display: none; +} + +#fancybox-error { + color: #444; + font: normal 12px/20px Arial; + padding: 14px; + margin: 0; +} + +#fancybox-img { + width: 100%; + height: 100%; + padding: 0; + margin: 0; + border: none; + outline: none; + line-height: 0; + vertical-align: top; +} + +#fancybox-frame { + width: 100%; + height: 100%; + border: none; + display: block; +} + +#fancybox-left, #fancybox-right { + position: absolute; + bottom: 0px; + height: 100%; + width: 35%; + cursor: pointer; + outline: none; + background: transparent url('<?php echo $jquery_path; ?>fancybox/blank.gif'); + z-index: 1102; + display: none; +} + +#fancybox-left { + left: 0px; +} + +#fancybox-right { + right: 0px; +} + +#fancybox-left-ico, #fancybox-right-ico { + position: absolute; + top: 50%; + left: -9999px; + width: 30px; + height: 30px; + margin-top: -15px; + cursor: pointer; + z-index: 1102; + display: block; +} + +#fancybox-left-ico { + background-image: url('<?php echo $jquery_path; ?>fancybox/fancybox.png'); + background-position: -40px -30px; +} + +#fancybox-right-ico { + background-image: url('<?php echo $jquery_path; ?>fancybox/fancybox.png'); + background-position: -40px -60px; +} + +#fancybox-left:hover, #fancybox-right:hover { + visibility: visible; /* IE6 */ +} + +#fancybox-left:hover span { + left: 20px; +} + +#fancybox-right:hover span { + left: auto; + right: 20px; +} + +.fancybox-bg { + position: absolute; + padding: 0; + margin: 0; + border: 0; + width: 20px; + height: 20px; + z-index: 1001; +} + +#fancybox-bg-n { + top: -20px; + left: 0; + width: 100%; + background-image: url('<?php echo $jquery_path; ?>fancybox/fancybox-x.png'); +} + +#fancybox-bg-ne { + top: -20px; + right: -20px; + background-image: url('<?php echo $jquery_path; ?>fancybox/fancybox.png'); + background-position: -40px -162px; +} + +#fancybox-bg-e { + top: 0; + right: -20px; + height: 100%; + background-image: url('<?php echo $jquery_path; ?>fancybox/fancybox-y.png'); + background-position: -20px 0px; +} + +#fancybox-bg-se { + bottom: -20px; + right: -20px; + background-image: url('<?php echo $jquery_path; ?>fancybox/fancybox.png'); + background-position: -40px -182px; +} + +#fancybox-bg-s { + bottom: -20px; + left: 0; + width: 100%; + background-image: url('<?php echo $jquery_path; ?>fancybox/fancybox-x.png'); + background-position: 0px -20px; +} + +#fancybox-bg-sw { + bottom: -20px; + left: -20px; + background-image: url('<?php echo $jquery_path; ?>fancybox/fancybox.png'); + background-position: -40px -142px; +} + +#fancybox-bg-w { + top: 0; + left: -20px; + height: 100%; + background-image: url('<?php echo $jquery_path; ?>fancybox/fancybox-y.png'); +} + +#fancybox-bg-nw { + top: -20px; + left: -20px; + background-image: url('<?php echo $jquery_path; ?>fancybox/fancybox.png'); + background-position: -40px -122px; +} + +#fancybox-title { + font-family: Helvetica; + font-size: 12px; + z-index: 1102; +} + +.fancybox-title-inside { + padding-bottom: 10px; + text-align: center; + color: #333; + background: #fff; + position: relative; +} + +.fancybox-title-outside { + padding-top: 10px; + color: #fff; +} + +.fancybox-title-over { + position: absolute; + bottom: 0; + left: 0; + color: #FFF; + text-align: left; +} + +#fancybox-title-over { + padding: 10px; + background-image: url('<?php echo $jquery_path; ?>fancybox/fancy_title_over.png'); + display: block; +} + +.fancybox-title-float { + position: absolute; + left: 0; + bottom: -20px; + height: 32px; +} + +#fancybox-title-float-wrap { + border: none; + border-collapse: collapse; + width: auto; +} + +#fancybox-title-float-wrap td { + border: none; + white-space: nowrap; +} + +#fancybox-title-float-left { + padding: 0 0 0 15px; + background: url('<?php echo $jquery_path; ?>fancybox/fancybox.png') -40px -90px no-repeat; +} + +#fancybox-title-float-main { + color: #FFF; + line-height: 29px; + font-weight: bold; + padding: 0 0 3px 0; + background: url('<?php echo $jquery_path; ?>fancybox/fancybox-x.png') 0px -40px; +} + +#fancybox-title-float-right { + padding: 0 0 0 15px; + background: url('<?php echo $jquery_path; ?>fancybox/fancybox.png') -55px -90px no-repeat; +} + +/* IE6 */ + +.fancybox-ie6 #fancybox-close { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='<?php echo $jquery_path; ?>fancybox/fancy_close.png', sizingMethod='scale'); } + +.fancybox-ie6 #fancybox-left-ico { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='<?php echo $jquery_path; ?>fancybox/fancy_nav_left.png', sizingMethod='scale'); } +.fancybox-ie6 #fancybox-right-ico { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='<?php echo $jquery_path; ?>fancybox/fancy_nav_right.png', sizingMethod='scale'); } + +.fancybox-ie6 #fancybox-title-over { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='<?php echo $jquery_path; ?>fancybox/fancy_title_over.png', sizingMethod='scale'); zoom: 1; } +.fancybox-ie6 #fancybox-title-float-left { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='<?php echo $jquery_path; ?>fancybox/fancy_title_left.png', sizingMethod='scale'); } +.fancybox-ie6 #fancybox-title-float-main { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='<?php echo $jquery_path; ?>fancybox/fancy_title_main.png', sizingMethod='scale'); } +.fancybox-ie6 #fancybox-title-float-right { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='<?php echo $jquery_path; ?>fancybox/fancy_title_right.png', sizingMethod='scale'); } + +.fancybox-ie6 #fancybox-bg-w, .fancybox-ie6 #fancybox-bg-e, .fancybox-ie6 #fancybox-left, .fancybox-ie6 #fancybox-right, #fancybox-hide-sel-frame { + height: expression(this.parentNode.clientHeight + "px"); +} + +#fancybox-loading.fancybox-ie6 { + position: absolute; margin-top: 0; + top: expression( (-20 + (document.documentElement.clientHeight ? document.documentElement.clientHeight/2 : document.body.clientHeight/2 ) + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop )) + 'px'); +} + +#fancybox-loading.fancybox-ie6 div { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='<?php echo $jquery_path; ?>fancybox/fancy_loading.png', sizingMethod='scale'); } + +/* IE6, IE7, IE8 */ +.fancybox-ie .fancybox-bg { background: transparent !important; } + +.fancybox-ie #fancybox-bg-n { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='<?php echo $jquery_path; ?>fancybox/fancy_shadow_n.png', sizingMethod='scale'); } +.fancybox-ie #fancybox-bg-ne { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='<?php echo $jquery_path; ?>fancybox/fancy_shadow_ne.png', sizingMethod='scale'); } +.fancybox-ie #fancybox-bg-e { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='<?php echo $jquery_path; ?>fancybox/fancy_shadow_e.png', sizingMethod='scale'); } +.fancybox-ie #fancybox-bg-se { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='<?php echo $jquery_path; ?>fancybox/fancy_shadow_se.png', sizingMethod='scale'); } +.fancybox-ie #fancybox-bg-s { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='<?php echo $jquery_path; ?>fancybox/fancy_shadow_s.png', sizingMethod='scale'); } +.fancybox-ie #fancybox-bg-sw { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='<?php echo $jquery_path; ?>fancybox/fancy_shadow_sw.png', sizingMethod='scale'); } +.fancybox-ie #fancybox-bg-w { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='<?php echo $jquery_path; ?>fancybox/fancy_shadow_w.png', sizingMethod='scale'); } +.fancybox-ie #fancybox-bg-nw { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='<?php echo $jquery_path; ?>fancybox/fancy_shadow_nw.png', sizingMethod='scale'); }
\ No newline at end of file diff --git a/views/default/css/walled_garden.php b/views/default/css/walled_garden.php new file mode 100644 index 000000000..f6f7f97dc --- /dev/null +++ b/views/default/css/walled_garden.php @@ -0,0 +1,81 @@ +<?php +/** + * Walled garden CSS + */ + +$url = elgg_get_site_url(); + +?> +.elgg-body-walledgarden { + margin: 100px auto 0 auto; + position: relative; + width: 530px; +} +.elgg-module-walledgarden { + position: absolute; + top: 0; + left: 0; +} +.elgg-module-walledgarden > .elgg-head { + height: 17px; +} +.elgg-module-walledgarden > .elgg-body { + padding: 0 10px; +} +.elgg-module-walledgarden > .elgg-foot { + height: 17px; +} +.elgg-walledgarden-double > .elgg-head { + background: url(<?php echo $url; ?>_graphics/walled_garden/two_column_top.png) no-repeat left top; +} +.elgg-walledgarden-double > .elgg-body { + background: url(<?php echo $url; ?>_graphics/walled_garden/two_column_middle.png) repeat-y left top; +} +.elgg-walledgarden-double > .elgg-foot { + background: url(<?php echo $url; ?>_graphics/walled_garden/two_column_bottom.png) no-repeat left top; +} +.elgg-walledgarden-single > .elgg-head { + background: url(<?php echo $url; ?>_graphics/walled_garden/one_column_top.png) no-repeat left top; +} +.elgg-walledgarden-single > .elgg-body { + background: url(<?php echo $url; ?>_graphics/walled_garden/one_column_middle.png) repeat-y left top; +} +.elgg-walledgarden-single > .elgg-foot { + background: url(<?php echo $url; ?>_graphics/walled_garden/one_column_bottom.png) no-repeat left top; +} + +.elgg-col > .elgg-inner { + margin: 0 0 0 5px; +} +.elgg-col:first-child > .elgg-inner { + margin: 0 5px 0 0; +} +.elgg-col > .elgg-inner { + padding: 0 8px; +} + +.elgg-walledgarden-single > .elgg-body { + padding: 0 18px; +} + +.elgg-module-walledgarden-login { + margin: 0; +} +.elgg-body-walledgarden h3 { + font-size: 1.5em; + line-height: 1.1em; + padding-bottom: 5px; +} + +.elgg-heading-walledgarden { + margin-top: 60px; + line-height: 1.1em; +} + +h1, h2, h3, h4, h5, h6 { + color: #666; +} + +a { + color: #999; +}
\ No newline at end of file diff --git a/views/default/errors/404.php b/views/default/errors/404.php new file mode 100644 index 000000000..8bc35acdd --- /dev/null +++ b/views/default/errors/404.php @@ -0,0 +1,8 @@ +<?php +/** + * Page not found error + */ + +$message = elgg_echo('error:404'); + +echo "<h2>$message</h2>"; diff --git a/views/default/errors/default.php b/views/default/errors/default.php new file mode 100644 index 000000000..a0582eba2 --- /dev/null +++ b/views/default/errors/default.php @@ -0,0 +1,8 @@ +<?php +/** + * General error + */ + +$message = elgg_echo('error:default'); + +echo "<h2>$message</h2>"; diff --git a/views/default/export/entity.php b/views/default/export/entity.php new file mode 100644 index 000000000..3064f1288 --- /dev/null +++ b/views/default/export/entity.php @@ -0,0 +1,79 @@ +<?php +/** + * Elgg Entity export. + * Displays an entity using the current view. + * + * @package Elgg + * @subpackage Core + */ + +$entity = $vars['entity']; +if (!$entity) { + throw new InvalidParameterException(elgg_echo('InvalidParameterException:NoEntityFound')); +} +$options = array( + 'guid' => $entity->guid, + 'limit' => 0 +); +$metadata = elgg_get_metadata($options); +$annotations = elgg_get_annotations($options); +$relationships = get_entity_relationships($entity->guid); + +$exportable_values = $entity->getExportableValues(); +?> +<div> +<h2><?php echo elgg_echo('Entity'); ?></h2> + <?php + foreach ($entity as $k => $v) { + if ((in_array($k, $exportable_values)) || (elgg_is_admin_logged_in())) { +?> + <p class="margin-none"><b><?php echo $k; ?>: </b><?php echo strip_tags($v); ?></p> +<?php + } + } + ?> +</div> + +<?php if ($metadata) { ?> +<div id="metadata" class="mtm"> +<h2><?php echo elgg_echo('metadata'); ?></h2> + <?php + foreach ($metadata as $m) { +?> + <p class="margin-none"><b><?php echo $m->name; ?>: </b><?php echo $m->value; ?></p> +<?php + } + ?> + +</div> +<?php } ?> + +<?php if ($annotations) { ?> +<div id="annotations" class="mtm"> +<h2><?php echo elgg_echo('annotations'); ?></h2> + <?php + foreach ($annotations as $a) { +?> + <table> + <p class="margin-none"><b><?php echo $a->name; ?>: </b><?php echo $a->value; ?></p> + </table> +<?php + } + ?> +</div> +<?php } ?> + +<?php if ($relationships) { ?> +<div id="relationship" class="mtm"> +<h2><?php echo elgg_echo('relationships'); ?></h2> + <?php + foreach ($relationships as $r) { +?> + <table> + <p class="margin-none"><b><?php echo $r->relationship; ?>: </b><?php echo $r->guid_two; ?></p> + </table> +<?php + } + ?> +</div> +<?php } ?> diff --git a/views/default/export/metadata.php b/views/default/export/metadata.php new file mode 100644 index 000000000..1dd7f2054 --- /dev/null +++ b/views/default/export/metadata.php @@ -0,0 +1,14 @@ +<?php +/** + * Elgg metadata export. + * Displays a metadata item using the current view. + * + * @package Elgg + * @subpackage Core + */ + +$m = $vars['metadata']; +$e = get_entity($m->entity_guid); +?> +<p class="margin-none"><?php if ($e) echo "<a href=\"" . $e->getURL() . "\">GUID:{$m->entity_guid}</a>"; else echo "GUID:".$m->entity_guid; +?>: <b><?php echo $m->name; ?></b> <?php echo $m->value; ?></p>
\ No newline at end of file diff --git a/views/default/export/relationship.php b/views/default/export/relationship.php new file mode 100644 index 000000000..d8cb3e4f4 --- /dev/null +++ b/views/default/export/relationship.php @@ -0,0 +1,21 @@ +<?php +/** + * Elgg relationship export. + * Displays a relationship using the current view. + * + * @package Elgg + * @subpackage Core + */ + +$r = $vars['relationship']; + +$e1 = get_entity($r->guid_one); +$e2 = get_entity($r->guid_two); +?> +<p class="margin-none"><?php + if ($e1) echo "<a href=\"" . $e1->getURL() . "\">GUID:" . $r->guid_one . "</a>"; else echo "GUID:".$r->guid_one; +?> +<b><?php echo $r->relationship; ?></b> +<?php + if ($e2) echo "<a href=\"" . $e2->getURL() . "\">GUID:" . $r->guid_two . "</a>"; else echo "GUID:".$r->guid_two; +?></p> diff --git a/views/default/forms/account/settings.php b/views/default/forms/account/settings.php new file mode 100644 index 000000000..3967207ce --- /dev/null +++ b/views/default/forms/account/settings.php @@ -0,0 +1,10 @@ +<?php +/** + * Account settings form used for user settings + * + * This form is extended by Elgg with the views in core/settings/account. + * Plugins can additionally extend it and then register for the + * 'usersettings:save', 'user' plugin hook. + * + * This view is included by "forms/usersettings/save" + */ diff --git a/views/default/forms/admin/menu/save.php b/views/default/forms/admin/menu/save.php new file mode 100644 index 000000000..1a67ffcc4 --- /dev/null +++ b/views/default/forms/admin/menu/save.php @@ -0,0 +1,102 @@ +<?php +/** + * Form body for setting up site menu + */ + +// @todo Could probably make this number configurable +$num_featured_items = 6; + +// get site menu items +$menu = elgg_get_config('menus'); +$menu = $menu['site']; +$builder = new ElggMenuBuilder($menu); +$menu = $builder->getMenu('name'); +$menu_items = $menu['default']; + +$featured_menu_names = elgg_get_config('site_featured_menu_names'); + +$dropdown_values = array(); +foreach ($menu_items as $item) { + $dropdown_values[$item->getName()] = $item->getText(); +} +$dropdown_values[' '] = elgg_echo('none'); + +?> +<div class="elgg-module elgg-module-inline"> + <div class="elgg-head"> + <h3><?php echo elgg_echo('admin:menu_items:configure'); ?></h3> + </div> + <div class="elgg-body"> +<?php +echo elgg_view('output/longtext', array( + 'value' => elgg_echo("admin:menu_items:description") +)); + +for ($i=0; $i<$num_featured_items; $i++) { + if ($featured_menu_names && array_key_exists($i, $featured_menu_names)) { + $current_value = $featured_menu_names[$i]; + } else { + $current_value = ' '; + } + + echo elgg_view('input/dropdown', array( + 'options_values' => $dropdown_values, + 'name' => 'featured_menu_names[]', + 'value' => $current_value + )); +} +?> + </div> +</div> + +<div class="elgg-module elgg-module-inline"> + <div class="elgg-head"> + <h3><?php echo elgg_echo('admin:add_menu_item'); ?></h3> + </div> + <div class="elgg-body"> +<?php +echo elgg_view('output/longtext', array( + 'value' => elgg_echo("admin:add_menu_item:description") +)); + +$custom_items = elgg_get_config('site_custom_menu_items'); + +$name_str = elgg_echo('name'); +$url_str = elgg_echo('admin:plugins:label:website'); + +echo '<ul class="elgg-list elgg-list-simple">'; + +if (is_array($custom_items)) { + foreach ($custom_items as $title => $url) { + $name_input = elgg_view('input/text', array( + 'name' => 'custom_menu_titles[]', + 'value' => $title + )); + + $url_input = elgg_view('input/text', array( + 'name' => 'custom_menu_urls[]', + 'value' => $url + )); + + echo "<li>$name_str: $name_input $url_str: $url_input $delete</li>"; + } +} + +$new = elgg_echo('new'); +$name_input = elgg_view('input/text', array( + 'name' => 'custom_menu_titles[]', +)); + +$url_input = elgg_view('input/text', array( + 'name' => 'custom_menu_urls[]', +)); + +echo "<li class='custom_menuitem'>$name_str: $name_input $url_str: $url_input</li> +</ul>"; + +?> + </div> +</div> +<?php + +echo elgg_view('input/submit', array('value' => elgg_echo('save'))); diff --git a/views/default/forms/admin/plugins/change_state.php b/views/default/forms/admin/plugins/change_state.php new file mode 100644 index 000000000..730c8ff32 --- /dev/null +++ b/views/default/forms/admin/plugins/change_state.php @@ -0,0 +1,22 @@ +<?php +/** + * Activate/deactive all plugins specified by guids array + * + * @uses $vars['guids'] Array of GUIDs + * @uses $vars['action'] 'activate' or 'deactivate' + */ + +$guids = elgg_extract('guids', $vars, array()); +$guids = implode(',', $guids); + +echo '<div>'; +echo elgg_view('input/hidden', array( + 'name' => 'guids', + 'value' => $guids, +)); + +echo elgg_view('input/submit', array( + 'value' => elgg_echo("admin:plugins:{$vars['action']}_all"), + 'class' => 'elgg-button elgg-button-action mrm' +)); +echo '</div>'; diff --git a/views/default/forms/admin/plugins/filter.php b/views/default/forms/admin/plugins/filter.php new file mode 100644 index 000000000..fd1b618bc --- /dev/null +++ b/views/default/forms/admin/plugins/filter.php @@ -0,0 +1,26 @@ +<?php +/** + * Category filter for plugins + * + * @uses $vars['category'] + * @uses $vars['category_options'] + * @uses $vvars['sort'] + */ + +echo '<div>'; +echo elgg_view('input/dropdown', array( + 'name' => 'category', + 'options_values' => $vars['category_options'], + 'value' => $vars['category'], +)); + +echo elgg_view('input/hidden', array( + 'name' => 'sort', + 'value' => $vars['sort'], +)); + +echo elgg_view('input/submit', array( + 'value' => elgg_echo('filter'), + 'class' => 'elgg-button elgg-button-action', +)); +echo '</div>'; diff --git a/views/default/forms/admin/plugins/sort.php b/views/default/forms/admin/plugins/sort.php new file mode 100644 index 000000000..7f2246bad --- /dev/null +++ b/views/default/forms/admin/plugins/sort.php @@ -0,0 +1,26 @@ +<?php +/** + * Sort plugins form body + * + * @uses $vars['sort'] + * @uses $vars['sort_options'] + * @uses $vars['category'] + */ + +echo '<div class="mtm">'; +echo elgg_view('input/dropdown', array( + 'name' => 'sort', + 'options_values' => $vars['sort_options'], + 'value' => $vars['sort'], +)); + +echo elgg_view('input/hidden', array( + 'name' => 'category', + 'value' => $vars['category'], +)); + +echo elgg_view('input/submit', array( + 'value' => elgg_echo('sort'), + 'class' => 'elgg-button elgg-button-action' +)); +echo '</div>'; diff --git a/views/default/forms/admin/site/update_advanced.php b/views/default/forms/admin/site/update_advanced.php new file mode 100644 index 000000000..14b74e4f9 --- /dev/null +++ b/views/default/forms/admin/site/update_advanced.php @@ -0,0 +1,101 @@ +<?php +/** + * @todo cleanup + */ +$form_body = ""; + +foreach (array('wwwroot', 'path', 'dataroot') as $field) { + $form_body .= "<div>"; + $form_body .= elgg_echo('installation:' . $field) . "<br />"; + $warning = elgg_echo('installation:warning:' . $field); + if ($warning != 'installation:warning:' . $field) { + echo "<b>" . $warning . "</b><br />"; + } + $value = elgg_get_config($field); + $form_body .= elgg_view("input/text",array('name' => $field, 'value' => $value)); + $form_body .= "</div>"; +} + +$form_body .= "<div>" . elgg_echo('admin:site:access:warning') . "<br />"; +$form_body .= "<label>" . elgg_echo('installation:sitepermissions') . "</label>"; +$form_body .= elgg_view('input/access', array( + 'options_values' => array( + ACCESS_PRIVATE => elgg_echo("PRIVATE"), + ACCESS_FRIENDS => elgg_echo("access:friends:label"), + ACCESS_LOGGED_IN => elgg_echo("LOGGED_IN"), + ACCESS_PUBLIC => elgg_echo("PUBLIC") + ), + 'name' => 'default_access', + 'value' => elgg_get_config('default_access'), +)) . "</div>"; +$form_body .= "<div>" . elgg_echo('installation:allow_user_default_access:description') . "<br />"; +$form_body .= elgg_view("input/checkboxes", array( + 'options' => array(elgg_echo('installation:allow_user_default_access:label') => 1), + 'name' => 'allow_user_default_access', + 'value' => (elgg_get_config('allow_user_default_access') ? 1 : 0), +)) . "</div>"; +$form_body .= "<div>" . elgg_echo('installation:simplecache:description') . "<br />"; +$form_body .= elgg_view("input/checkboxes", array( + 'options' => array(elgg_echo('installation:simplecache:label') => 1), + 'name' => 'simplecache_enabled', + 'value' => (elgg_get_config('simplecache_enabled') ? 1 : 0), +)) . "</div>"; +$form_body .= "<div>" . elgg_echo('installation:systemcache:description') . "<br />"; +$form_body .= elgg_view("input/checkboxes", array( + 'options' => array(elgg_echo('installation:systemcache:label') => 1), + 'name' => 'system_cache_enabled', + 'value' => (elgg_get_config('system_cache_enabled') ? 1 : 0), +)) . "</div>"; + +$debug_options = array('0' => elgg_echo('installation:debug:none'), 'ERROR' => elgg_echo('installation:debug:error'), 'WARNING' => elgg_echo('installation:debug:warning'), 'NOTICE' => elgg_echo('installation:debug:notice')); +$form_body .= "<div>" . elgg_echo('installation:debug'); +$form_body .= elgg_view('input/dropdown', array( + 'options_values' => $debug_options, + 'name' => 'debug', + 'value' => elgg_get_config('debug'), +)); +$form_body .= '</div>'; + +// control new user registration +$options = array( + 'options' => array(elgg_echo('installation:registration:label') => 1), + 'name' => 'allow_registration', + 'value' => elgg_get_config('allow_registration') ? 1 : 0, +); +$form_body .= '<div>' . elgg_echo('installation:registration:description'); +$form_body .= '<br />' .elgg_view('input/checkboxes', $options) . '</div>'; + +// control walled garden +$walled_garden = elgg_get_config(walled_garden); +$options = array( + 'options' => array(elgg_echo('installation:walled_garden:label') => 1), + 'name' => 'walled_garden', + 'value' => $walled_garden ? 1 : 0, +); +$form_body .= '<div>' . elgg_echo('installation:walled_garden:description'); +$form_body .= '<br />' . elgg_view('input/checkboxes', $options) . '</div>'; + +$form_body .= "<div>" . elgg_echo('installation:httpslogin') . "<br />"; +$form_body .= elgg_view("input/checkboxes", array( + 'options' => array(elgg_echo('installation:httpslogin:label') => 1), + 'name' => 'https_login', + 'value' => (elgg_get_config('https_login') ? 1 : 0) +)) . "</div>"; + +$form_body .= "<div>" . elgg_echo('installation:disableapi') . "<br />"; +$disable_api = elgg_get_config('disable_api'); +$on = $disable_api ? 0 : 1; +$form_body .= elgg_view("input/checkboxes", array( + 'options' => array(elgg_echo('installation:disableapi:label') => 1), + 'name' => 'api', + 'value' => $on, +)); +$form_body .= "</div>"; + +$form_body .= elgg_view('input/hidden', array('name' => 'settings', 'value' => 'go')); + +$form_body .= '<div class="elgg-foot">'; +$form_body .= elgg_view('input/submit', array('value' => elgg_echo("save"))); +$form_body .= '</div>'; + +echo $form_body; diff --git a/views/default/forms/admin/site/update_basic.php b/views/default/forms/admin/site/update_basic.php new file mode 100644 index 000000000..88870bc60 --- /dev/null +++ b/views/default/forms/admin/site/update_basic.php @@ -0,0 +1,31 @@ +<?php +/** + * @todo cleanup + */ +$form_body = ""; + +foreach (array('sitename','sitedescription', 'siteemail') as $field) { + $form_body .= "<div>"; + $form_body .= elgg_echo('installation:' . $field) . "<br />"; + $warning = elgg_echo('installation:warning:' . $field); + if ($warning != 'installation:warning:' . $field) { + echo "<b>" . $warning . "</b><br />"; + } + $value = elgg_get_config($field); + $form_body .= elgg_view("input/text",array('name' => $field, 'value' => $value)); + $form_body .= "</div>"; +} + +$languages = get_installed_translations(); +$form_body .= "<div>" . elgg_echo('installation:language'); +$form_body .= elgg_view("input/dropdown", array( + 'name' => 'language', + 'value' => elgg_get_config('language'), + 'options_values' => $languages, +)) . "</div>"; + +$form_body .= '<div class="elgg-foot">'; +$form_body .= elgg_view('input/submit', array('value' => elgg_echo("save"))); +$form_body .= '</div>'; + +echo $form_body;
\ No newline at end of file diff --git a/views/default/forms/avatar/crop.php b/views/default/forms/avatar/crop.php new file mode 100644 index 000000000..3e798cb27 --- /dev/null +++ b/views/default/forms/avatar/crop.php @@ -0,0 +1,42 @@ +<?php +/** + * Avatar crop form + * + * @uses $vars['entity'] + */ + +elgg_load_js('jquery.imgareaselect'); +elgg_load_js('elgg.avatar_cropper'); +elgg_load_css('jquery.imgareaselect'); + +$master_img = elgg_view('output/img', array( + 'src' => $vars['entity']->getIconUrl('master'), + 'alt' => elgg_echo('avatar'), + 'class' => 'mrl', + 'id' => 'user-avatar-cropper', +)); + +$preview_img = elgg_view('output/img', array( + 'src' => $vars['entity']->getIconUrl('master'), + 'alt' => elgg_echo('avatar'), +)); + +?> +<div class="clearfix"> + <?php echo $master_img; ?> + <div id="user-avatar-preview-title"><label><?php echo elgg_echo('avatar:preview'); ?></label></div> + <div id="user-avatar-preview"><?php echo $preview_img; ?></div> +</div> +<div class="elgg-foot"> +<?php +$coords = array('x1', 'x2', 'y1', 'y2'); +foreach ($coords as $coord) { + echo elgg_view('input/hidden', array('name' => $coord, 'value' => $vars['entity']->$coord)); +} + +echo elgg_view('input/hidden', array('name' => 'guid', 'value' => $vars['entity']->guid)); + +echo elgg_view('input/submit', array('value' => elgg_echo('avatar:create'))); + +?> +</div> diff --git a/views/default/forms/avatar/upload.php b/views/default/forms/avatar/upload.php new file mode 100644 index 000000000..d91e8575e --- /dev/null +++ b/views/default/forms/avatar/upload.php @@ -0,0 +1,16 @@ +<?php +/** + * Avatar upload form + * + * @uses $vars['entity'] + */ + +?> +<div> + <label><?php echo elgg_echo("avatar:upload"); ?></label><br /> + <?php echo elgg_view("input/file",array('name' => 'avatar')); ?> +</div> +<div class="elgg-foot"> + <?php echo elgg_view('input/hidden', array('name' => 'guid', 'value' => $vars['entity']->guid)); ?> + <?php echo elgg_view('input/submit', array('value' => elgg_echo('upload'))); ?> +</div> diff --git a/views/default/forms/comments/add.php b/views/default/forms/comments/add.php new file mode 100644 index 000000000..9acabf3ea --- /dev/null +++ b/views/default/forms/comments/add.php @@ -0,0 +1,37 @@ +<?php +/** + * Elgg comments add form + * + * @package Elgg + * + * @uses ElggEntity $vars['entity'] The entity to comment on + * @uses bool $vars['inline'] Show a single line version of the form? + */ + + +if (isset($vars['entity']) && elgg_is_logged_in()) { + + $inline = elgg_extract('inline', $vars, false); + + if ($inline) { + echo elgg_view('input/text', array('name' => 'generic_comment')); + echo elgg_view('input/submit', array('value' => elgg_echo('comment'))); + } else { +?> + <div> + <label><?php echo elgg_echo("generic_comments:add"); ?></label> + <?php echo elgg_view('input/longtext', array('name' => 'generic_comment')); ?> + </div> + <div class="elgg-foot"> +<?php + echo elgg_view('input/submit', array('value' => elgg_echo("generic_comments:post"))); +?> + </div> +<?php + } + + echo elgg_view('input/hidden', array( + 'name' => 'entity_guid', + 'value' => $vars['entity']->getGUID() + )); +} diff --git a/views/default/forms/friends/collections/add.php b/views/default/forms/friends/collections/add.php new file mode 100644 index 000000000..04c87346b --- /dev/null +++ b/views/default/forms/friends/collections/add.php @@ -0,0 +1,53 @@ +<?php +/** + * Form body for editing or adding a friend collection + * + * @package Elgg + * @subpackage Core + * + * @uses $vars['collection'] Optionally, the collection to edit + */ + +// Set title, form destination +if (isset($vars['collection'])) { + $title = $vars['collection']->name; + $highlight = 'default'; +} else { + $title = ""; + $highlight = 'all'; +} + +echo "<div class=\"mtm\"><label>" . elgg_echo("friends:collectionname") . "<br/>"; +echo elgg_view("input/text", array( + "name" => "collection_name", + "value" => $title, + )); +echo "</label></div>"; + +echo "<div>"; +if ($vars['collection_members']) { + echo elgg_echo("friends:collectionfriends") . "<br />"; + foreach ($vars['collection_members'] as $mem) { + echo elgg_view_entity_icon($mem, 'tiny'); + echo $mem->name; + } +} +echo "</div>"; + +echo "<div><label>" . elgg_echo("friends:addfriends") . "</label>"; +echo elgg_view('input/friendspicker', array( + 'entities' => $vars['friends'], + 'name' => 'friends_collection', + 'highlight' => $highlight, +)); +echo "</div>"; + +echo '<div class="elgg-foot">'; +if (isset($vars['collection'])) { + echo elgg_view('input/hidden', array( + 'name' => 'collection_id', + 'value' => $vars['collection']->id, + )); +} +echo elgg_view('input/submit', array('name' => 'submit', 'value' => elgg_echo('save'))); +echo '</div>'; diff --git a/views/default/forms/login.php b/views/default/forms/login.php new file mode 100644 index 000000000..d2c6e6221 --- /dev/null +++ b/views/default/forms/login.php @@ -0,0 +1,49 @@ +<?php +/** + * Elgg login form + * + * @package Elgg + * @subpackage Core + */ +?> + +<div> + <label><?php echo elgg_echo('loginusername'); ?></label> + <?php echo elgg_view('input/text', array( + 'name' => 'username', + 'class' => 'elgg-autofocus', + )); + ?> +</div> +<div> + <label><?php echo elgg_echo('password'); ?></label> + <?php echo elgg_view('input/password', array('name' => 'password')); ?> +</div> + +<?php echo elgg_view('login/extend', $vars); ?> + +<div class="elgg-foot"> + <label class="mtm float-alt"> + <input type="checkbox" name="persistent" value="true" /> + <?php echo elgg_echo('user:persistent'); ?> + </label> + + <?php echo elgg_view('input/submit', array('value' => elgg_echo('login'))); ?> + + <?php + if (isset($vars['returntoreferer'])) { + echo elgg_view('input/hidden', array('name' => 'returntoreferer', 'value' => 'true')); + } + ?> + + <ul class="elgg-menu elgg-menu-general mtm"> + <?php + if (elgg_get_config('allow_registration')) { + echo '<li><a class="registration_link" href="' . elgg_get_site_url() . 'register">' . elgg_echo('register') . '</a></li>'; + } + ?> + <li><a class="forgot_link" href="<?php echo elgg_get_site_url(); ?>forgotpassword"> + <?php echo elgg_echo('user:password:lost'); ?> + </a></li> + </ul> +</div> diff --git a/views/default/forms/members/name_search.php b/views/default/forms/members/name_search.php new file mode 100644 index 000000000..5f6b9a4b6 --- /dev/null +++ b/views/default/forms/members/name_search.php @@ -0,0 +1,9 @@ +<?php + +$params = array( + 'name' => 'name', + 'class' => 'mbm', +); +echo elgg_view('input/text', $params); + +echo elgg_view('input/submit', array('value' => elgg_echo('search'))); diff --git a/views/default/forms/members/tag_search.php b/views/default/forms/members/tag_search.php new file mode 100644 index 000000000..4fe9bb32a --- /dev/null +++ b/views/default/forms/members/tag_search.php @@ -0,0 +1,12 @@ +<?php +/** + * Simple members search by tag form + */ + +$params = array( + 'name' => 'tag', + 'class' => 'mbm', +); +echo elgg_view('input/text', $params); + +echo elgg_view('input/submit', array('value' => elgg_echo('search'))); diff --git a/views/default/forms/plugins/settings/save.php b/views/default/forms/plugins/settings/save.php new file mode 100644 index 000000000..dc7b2fef7 --- /dev/null +++ b/views/default/forms/plugins/settings/save.php @@ -0,0 +1,31 @@ +<?php +/** + * Used to show plugin settings for both users and admins. + * + * @package Elgg.Core + * @subpackage Plugins + */ + +$plugin = $vars['entity']; +$plugin_id = $plugin->getID(); +$user_guid = elgg_extract('user_guid', $vars, elgg_get_logged_in_user_guid()); + +// Do we want to show admin settings or user settings +$type = elgg_extract('type', $vars, ''); + +if ($type != 'user') { + $type = ''; +} + +if (elgg_view_exists("{$type}settings/$plugin_id/edit")) { + elgg_deprecated_notice("{$type}settings/$plugin_id/edit was deprecated in favor of plugins/$plugin_id/{$type}settings", 1.8); + echo elgg_view("{$type}settings/$plugin_id/edit", $vars); +} else { + echo elgg_view("plugins/$plugin_id/{$type}settings", $vars); +} + +echo '<div class="elgg-foot">'; +echo elgg_view('input/hidden', array('name' => 'plugin_id', 'value' => $plugin_id)); +echo elgg_view('input/hidden', array('name' => 'user_guid', 'value' => $user_guid)); +echo elgg_view('input/submit', array('value' => elgg_echo('save'))); +echo '</div>'; diff --git a/views/default/forms/plugins/usersettings/save.php b/views/default/forms/plugins/usersettings/save.php new file mode 100644 index 000000000..ced88f818 --- /dev/null +++ b/views/default/forms/plugins/usersettings/save.php @@ -0,0 +1,14 @@ +<?php +/** + * Plugin user settings + * + * Calls the plugin admin settings form body with type set to 'user' + * + * @package Elgg.Core + * @subpackage Plugins + */ + +$vars['type'] = 'user'; + +// Can't use elgg_view_form() because it overrides the $vars['action'] parameter +echo elgg_view('forms/plugins/settings/save', $vars);
\ No newline at end of file diff --git a/views/default/forms/profile/edit.php b/views/default/forms/profile/edit.php new file mode 100644 index 000000000..9538b779e --- /dev/null +++ b/views/default/forms/profile/edit.php @@ -0,0 +1,68 @@ +<?php +/** + * Edit profile form + * + * @uses vars['entity'] + */ + +?> + +<div> + <label><?php echo elgg_echo('user:name:label'); ?></label> + <?php echo elgg_view('input/text', array('name' => 'name', 'value' => $vars['entity']->name)); ?> +</div> +<?php + +$profile_fields = elgg_get_config('profile_fields'); +if (is_array($profile_fields) && count($profile_fields) > 0) { + foreach ($profile_fields as $shortname => $valtype) { + $metadata = elgg_get_metadata(array( + 'guid' => $vars['entity']->guid, + 'metadata_name' => $shortname, + 'limit' => false + )); + if ($metadata) { + if (is_array($metadata)) { + $value = ''; + foreach ($metadata as $md) { + if (!empty($value)) { + $value .= ', '; + } + $value .= $md->value; + $access_id = $md->access_id; + } + } else { + $value = $metadata->value; + $access_id = $metadata->access_id; + } + } else { + $value = ''; + $access_id = ACCESS_DEFAULT; + } + +?> +<div> + <label><?php echo elgg_echo("profile:{$shortname}") ?></label> + <?php + $params = array( + 'name' => $shortname, + 'value' => $value, + ); + echo elgg_view("input/{$valtype}", $params); + $params = array( + 'name' => "accesslevel[$shortname]", + 'value' => $access_id, + ); + echo elgg_view('input/access', $params); + ?> +</div> +<?php + } +} +?> +<div class="elgg-foot"> +<?php + echo elgg_view('input/hidden', array('name' => 'guid', 'value' => $vars['entity']->guid)); + echo elgg_view('input/submit', array('value' => elgg_echo('save'))); +?> +</div> diff --git a/views/default/forms/profile/fields/add.php b/views/default/forms/profile/fields/add.php new file mode 100644 index 000000000..2087ec299 --- /dev/null +++ b/views/default/forms/profile/fields/add.php @@ -0,0 +1,29 @@ +<?php +/** + * Add a new field to the set of custom profile fields + */ + +$label_text = elgg_echo('profile:label'); +$type_text = elgg_echo('profile:type'); + +$label_control = elgg_view('input/text', array('name' => 'label')); +$type_control = elgg_view('input/dropdown', array('name' => 'type', 'options_values' => array( + 'text' => elgg_echo('profile:field:text'), + 'longtext' => elgg_echo('profile:field:longtext'), + 'tags' => elgg_echo('profile:field:tags'), + 'url' => elgg_echo('profile:field:url'), + 'email' => elgg_echo('profile:field:email'), + 'location' => elgg_echo('profile:field:location'), + 'date' => elgg_echo('profile:field:date'), +))); + +$submit_control = elgg_view('input/submit', array('name' => elgg_echo('add'), 'value' => elgg_echo('add'))); + +$formbody = <<< END + <div>$label_text: $label_control</div> + <div class="elgg-foot">$type_text: $type_control + $submit_control</div> +END; + +echo elgg_autop(elgg_echo('profile:explainchangefields')); +echo $formbody; diff --git a/views/default/forms/register.php b/views/default/forms/register.php new file mode 100644 index 000000000..c0ee66f76 --- /dev/null +++ b/views/default/forms/register.php @@ -0,0 +1,80 @@ +<?php +/** + * Elgg register form + * + * @package Elgg + * @subpackage Core + */ + +elgg_load_js('elgg.register'); + +$password = $password2 = ''; +$username = get_input('u'); +$email = get_input('e'); +$name = get_input('n'); + +if (elgg_is_sticky_form('register')) { + extract(elgg_get_sticky_values('register')); + elgg_clear_sticky_form('register'); +} + +?> +<div class="mtm"> + <label><?php echo elgg_echo('name'); ?></label><br /> + <?php + echo elgg_view('input/text', array( + 'name' => 'name', + 'value' => $name, + 'class' => 'elgg-autofocus', + )); + ?> +</div> +<div> + <label><?php echo elgg_echo('email'); ?></label><br /> + <?php + echo elgg_view('input/text', array( + 'name' => 'email', + 'value' => $email, + )); + ?> +</div> +<div> + <label><?php echo elgg_echo('username'); ?></label><br /> + <?php + echo elgg_view('input/text', array( + 'name' => 'username', + 'value' => $username, + )); + ?> +</div> +<div> + <label><?php echo elgg_echo('password'); ?></label><br /> + <?php + echo elgg_view('input/password', array( + 'name' => 'password', + 'value' => $password, + )); + ?> +</div> +<div> + <label><?php echo elgg_echo('passwordagain'); ?></label><br /> + <?php + echo elgg_view('input/password', array( + 'name' => 'password2', + 'value' => $password2, + )); + ?> +</div> + +<?php +// view to extend to add more fields to the registration form +echo elgg_view('register/extend', $vars); + +// Add captcha hook +echo elgg_view('input/captcha', $vars); + +echo '<div class="elgg-foot">'; +echo elgg_view('input/hidden', array('name' => 'friend_guid', 'value' => $vars['friend_guid'])); +echo elgg_view('input/hidden', array('name' => 'invitecode', 'value' => $vars['invitecode'])); +echo elgg_view('input/submit', array('name' => 'submit', 'value' => elgg_echo('register'))); +echo '</div>'; diff --git a/views/default/forms/user/passwordreset.php b/views/default/forms/user/passwordreset.php new file mode 100644 index 000000000..5946fa7c0 --- /dev/null +++ b/views/default/forms/user/passwordreset.php @@ -0,0 +1,20 @@ +<?php +/** + * Reset user password form + */ + +echo elgg_autop(elgg_echo('user:resetpassword:reset_password_confirm')); + +echo elgg_view('input/hidden', array( + 'name' => 'u', + 'value' => $vars['guid'], +)); + +echo elgg_view('input/hidden', array( + 'name' => 'c', + 'value' => $vars['code'], +)); + +echo elgg_view('input/submit', array( + 'value' => elgg_echo('resetpassword') +)); diff --git a/views/default/forms/user/requestnewpassword.php b/views/default/forms/user/requestnewpassword.php new file mode 100644 index 000000000..c90971eaf --- /dev/null +++ b/views/default/forms/user/requestnewpassword.php @@ -0,0 +1,24 @@ +<?php +/** + * Elgg forgotten password. + * + * @package Elgg + * @subpackage Core + */ +?> + +<div class="mtm"> + <?php echo elgg_echo('user:password:text'); ?> +</div> +<div> + <label><?php echo elgg_echo('loginusername'); ?></label><br /> + <?php echo elgg_view('input/text', array( + 'name' => 'username', + 'class' => 'elgg-autofocus', + )); + ?> +</div> +<?php echo elgg_view('input/captcha'); ?> +<div class="elgg-foot"> + <?php echo elgg_view('input/submit', array('value' => elgg_echo('request'))); ?> +</div> diff --git a/views/default/forms/useradd.php b/views/default/forms/useradd.php new file mode 100644 index 000000000..4f337e4e4 --- /dev/null +++ b/views/default/forms/useradd.php @@ -0,0 +1,78 @@ +<?php +/** + * Elgg add user form. + * + * @package Elgg + * @subpackage Core + * + */ + +$name = $username = $email = $password = $password2 = $admin = ''; + +if (elgg_is_sticky_form('useradd')) { + extract(elgg_get_sticky_values('useradd')); + elgg_clear_sticky_form('useradd'); + if (is_array($admin)) { + $admin = $admin[0]; + } +} + +?> +<div> + <label><?php echo elgg_echo('name');?></label><br /> + <?php + echo elgg_view('input/text', array( + 'name' => 'name', + 'value' => $name, + )); + ?> +</div> +<div> + <label><?php echo elgg_echo('username'); ?></label><br /> + <?php + echo elgg_view('input/text', array( + 'name' => 'username', + 'value' => $username, + )); + ?> +</div> +<div> + <label><?php echo elgg_echo('email'); ?></label><br /> + <?php + echo elgg_view('input/text', array( + 'name' => 'email', + 'value' => $email, + )); + ?> +</div> +<div> + <label><?php echo elgg_echo('password'); ?></label><br /> + <?php + echo elgg_view('input/password', array( + 'name' => 'password', + 'value' => $password, + )); + ?> +</div> +<div> + <label><?php echo elgg_echo('passwordagain'); ?></label><br /> + <?php + echo elgg_view('input/password', array( + 'name' => 'password2', + 'value' => $password2, + )); + ?> +</div> +<div> +<?php + echo elgg_view('input/checkboxes', array( + 'name' => "admin", + 'options' => array(elgg_echo('admin_option') => 1), + 'value' => $admin, + )); +?> +</div> + +<div class="elgg-foot"> + <?php echo elgg_view('input/submit', array('value' => elgg_echo('register'))); ?> +</div>
\ No newline at end of file diff --git a/views/default/forms/usersettings/save.php b/views/default/forms/usersettings/save.php new file mode 100644 index 000000000..71323083f --- /dev/null +++ b/views/default/forms/usersettings/save.php @@ -0,0 +1,14 @@ +<?php +/** + * User account settings. + * + * Plugins should extend "forms/account/settings" to add to the settings. + */ + +$form_body = elgg_view("forms/account/settings", $vars); + +$form_body .= '<div class="elgg-foot">'; +$form_body .= elgg_view('input/submit', array('value' => elgg_echo('save'))); +$form_body .= '</div>'; + +echo $form_body;
\ No newline at end of file diff --git a/views/default/forms/widgets/save.php b/views/default/forms/widgets/save.php new file mode 100644 index 000000000..6959b2a82 --- /dev/null +++ b/views/default/forms/widgets/save.php @@ -0,0 +1,41 @@ +<?php +/** + * Elgg widget edit settings + * + * @uses $vars['widget'] + * @uses $vars['show_access'] + */ + +$widget = $vars['widget']; +$show_access = elgg_extract('show_access', $vars, true); + +$edit_view = "widgets/$widget->handler/edit"; +$custom_form_section = elgg_view($edit_view, array('entity' => $widget)); + +$access = ''; +if ($show_access) { + $access = elgg_echo('access') . ': ' . elgg_view('input/access', array( + 'name' => 'params[access_id]', + 'value' => $widget->access_id, + )); +} + +if (!$custom_form_section && !$access) { + return true; +} + +$hidden = elgg_view('input/hidden', array('name' => 'guid', 'value' => $widget->guid)); +$submit = elgg_view('input/submit', array('value' => elgg_echo('save'))); + +$body = <<<___END + $custom_form_section + <div> + $access + </div> + <div class="elgg-foot"> + $hidden + $submit + </div> +___END; + +echo $body; diff --git a/views/default/graphics/ajax_loader.php b/views/default/graphics/ajax_loader.php new file mode 100644 index 000000000..d5ce87ea9 --- /dev/null +++ b/views/default/graphics/ajax_loader.php @@ -0,0 +1,32 @@ +<?php +/** + * Elgg AJAX loader + * + * @package Elgg + * @subpackage Core + * + * @uses $vars['id'] CSS id + * @uses $vars['class'] Optional additional CSS class + * @uses $vars['hidden'] Begin hidden? (true) + */ + +if (isset($vars['id'])) { + $id = "id=\"{$vars['id']}\""; +} + +$class = 'elgg-ajax-loader'; +if (isset($vars['class'])) { + $class = "$class {$vars['class']}"; +} + +if (elgg_extract('hidden', $vars, true)) { + $class = "$class hidden"; +} + +$loader = <<< END + +<div class="$class" $id></div> + +END; + +echo $loader;
\ No newline at end of file diff --git a/views/default/group/default.php b/views/default/group/default.php new file mode 100644 index 000000000..383a25c49 --- /dev/null +++ b/views/default/group/default.php @@ -0,0 +1,9 @@ +<?php +/** + * ElggGroup default view. + * + * @package Elgg + * @subpackage Core + */ + +echo elgg_view('object/default', $vars); diff --git a/views/default/group/elements/summary.php b/views/default/group/elements/summary.php new file mode 100644 index 000000000..395ed5292 --- /dev/null +++ b/views/default/group/elements/summary.php @@ -0,0 +1,13 @@ +<?php +/** + * Group summary + * + * @uses $vars['entity'] ElggEntity + * @uses $vars['title'] Title link (optional) false = no title, '' = default + * @uses $vars['metadata'] HTML for entity metadata and actions (optional) + * @uses $vars['subtitle'] HTML for the subtitle (optional) + * @uses $vars['tags'] HTML for the tags (optional) + * @uses $vars['content'] HTML for the entity content (optional) + */ + +echo elgg_view('object/elements/summary', $vars); diff --git a/views/default/group/search/finishblurb.php b/views/default/group/search/finishblurb.php new file mode 100644 index 000000000..ceaeb0ff0 --- /dev/null +++ b/views/default/group/search/finishblurb.php @@ -0,0 +1,18 @@ +<?php +/** + * @package Elgg + * @subpackage Core + * @deprecated 1.7 + */ +elgg_deprecated_notice('view groups/search/finishblurb was deprecated.', 1.7); + +if ($vars['count'] > $vars['threshold']) { + +?> +<div class="contentWrapper"><a href="<?php echo elgg_get_site_url(); ?>search/groups?tag=<?php echo urlencode($vars['tag']); ?>"> + <?php + echo elgg_echo("group:search:finishblurb"); + ?></a> +</div> +<?php +} diff --git a/views/default/group/search/startblurb.php b/views/default/group/search/startblurb.php new file mode 100644 index 000000000..92256d1db --- /dev/null +++ b/views/default/group/search/startblurb.php @@ -0,0 +1,14 @@ +<?php +/** + * @package Elgg + * @subpackage Core + * @deprecated 1.7 + */ +elgg_deprecated_notice('view groups/search/startblurb was deprecated.', 1.7); +?> + +<div class="contentWrapper"> + <?php + echo elgg_echo("group:search:startblurb", array($vars['tag'])); + ?> +</div> diff --git a/views/default/icon/default.php b/views/default/icon/default.php new file mode 100644 index 000000000..087c7eae9 --- /dev/null +++ b/views/default/icon/default.php @@ -0,0 +1,62 @@ +<?php +/** + * Generic icon view. + * + * @package Elgg + * @subpackage Core + * + * @uses $vars['entity'] The entity the icon represents - uses getIconURL() method + * @uses $vars['size'] topbar, tiny, small, medium (default), large, master + * @uses $vars['href'] Optional override for link + * @uses $vars['img_class'] Optional CSS class added to img + * @uses $vars['link_class'] Optional CSS class for the link + */ + +$entity = $vars['entity']; + +$sizes = array('small', 'medium', 'large', 'tiny', 'master', 'topbar'); +// Get size +if (!in_array($vars['size'], $sizes)) { + $vars['size'] = "medium"; +} + +$class = elgg_extract('img_class', $vars, ''); + +if (isset($entity->name)) { + $title = $entity->name; +} else { + $title = $entity->title; +} +$title = htmlspecialchars($title, ENT_QUOTES, 'UTF-8', false); + +$url = $entity->getURL(); +if (isset($vars['href'])) { + $url = $vars['href']; +} + +$icon_sizes = elgg_get_config('icon_sizes'); +$size = $vars['size']; + +$img = elgg_view('output/img', array( + 'src' => $entity->getIconURL($vars['size']), + 'alt' => $title, + 'class' => $class, + 'width' => $size != 'master' ? $icon_sizes[$size]['w'] : NULL, + 'height' => $size != 'master' ? $icon_sizes[$size]['h'] : NULL, +)); + +if ($url) { + $params = array( + 'href' => $url, + 'text' => $img, + 'is_trusted' => true, + ); + $class = elgg_extract('link_class', $vars, ''); + if ($class) { + $params['class'] = $class; + } + + echo elgg_view('output/url', $params); +} else { + echo $img; +} diff --git a/views/default/icon/user/default.php b/views/default/icon/user/default.php new file mode 100644 index 000000000..c0b0e7483 --- /dev/null +++ b/views/default/icon/user/default.php @@ -0,0 +1,103 @@ +<?php +/** + * Elgg user icon + * + * Rounded avatar corners - CSS3 method + * uses avatar as background image so we can clip it with border-radius in supported browsers + * + * @uses $vars['entity'] The user entity. If none specified, the current user is assumed. + * @uses $vars['size'] The size - tiny, small, medium or large. (medium) + * @uses $vars['use_hover'] Display the hover menu? (true) + * @uses $vars['use_link'] Wrap a link around image? (true) + * @uses $vars['class'] Optional class added to the .elgg-avatar div + * @uses $vars['img_class'] Optional CSS class added to img + * @uses $vars['link_class'] Optional CSS class for the link + * @uses $vars['href'] Optional override of the link href + */ + +$user = elgg_extract('entity', $vars, elgg_get_logged_in_user_entity()); +$size = elgg_extract('size', $vars, 'medium'); +if (!in_array($size, array('topbar', 'tiny', 'small', 'medium', 'large', 'master'))) { + $size = 'medium'; +} + +$class = "elgg-avatar elgg-avatar-$size"; +if (isset($vars['class'])) { + $class = "$class {$vars['class']}"; +} + +$use_link = elgg_extract('use_link', $vars, true); + +if (!($user instanceof ElggUser)) { + return true; +} + +$name = htmlspecialchars($user->name, ENT_QUOTES, 'UTF-8', false); +$username = $user->username; + +$icontime = $user->icontime; +if (!$icontime) { + $icontime = "default"; +} + +$js = elgg_extract('js', $vars, ''); +if ($js) { + elgg_deprecated_notice("Passing 'js' to icon views is deprecated.", 1.8, 5); +} + +$img_class = ''; +if (isset($vars['img_class'])) { + $img_class = $vars['img_class']; +} + +$use_hover = elgg_extract('use_hover', $vars, true); +if (isset($vars['override'])) { + elgg_deprecated_notice("Use 'use_hover' rather than 'override' with user avatars", 1.8, 5); + $use_hover = false; +} +if (isset($vars['hover'])) { + // only 1.8.0 was released with 'hover' as the key + $use_hover = $vars['hover']; +} + +$spacer_url = elgg_get_site_url() . '_graphics/spacer.gif'; + +$icon_url = elgg_format_url($user->getIconURL($size)); +$icon = elgg_view('output/img', array( + 'src' => $spacer_url, + 'alt' => $name, + 'title' => $name, + 'class' => $img_class, + 'style' => "background: url($icon_url) no-repeat;", +)); + +$show_menu = $use_hover && (elgg_is_admin_logged_in() || !$user->isBanned()); + +?> +<div class="<?php echo $class; ?>"> +<?php + +if ($show_menu) { + $params = array( + 'entity' => $user, + 'username' => $username, + 'name' => $name, + ); + echo elgg_view_icon('hover-menu'); + echo elgg_view_menu('user_hover', $params); +} + +if ($use_link) { + $class = elgg_extract('link_class', $vars, ''); + $url = elgg_extract('href', $vars, $user->getURL()); + echo elgg_view('output/url', array( + 'href' => $url, + 'text' => $icon, + 'is_trusted' => true, + 'class' => $class, + )); +} else { + echo "<a>$icon</a>"; +} +?> +</div> diff --git a/views/default/input/access.php b/views/default/input/access.php new file mode 100644 index 000000000..137eea288 --- /dev/null +++ b/views/default/input/access.php @@ -0,0 +1,38 @@ +<?php +/** + * Elgg access level input + * Displays a dropdown input field + * + * @uses $vars['value'] The current value, if any + * @uses $vars['options_values'] Array of value => label pairs (overrides default) + * @uses $vars['name'] The name of the input field + * @uses $vars['entity'] Optional. The entity for this access control (uses access_id) + * @uses $vars['class'] Additional CSS class + */ + +if (isset($vars['class'])) { + $vars['class'] = "elgg-input-access {$vars['class']}"; +} else { + $vars['class'] = "elgg-input-access"; +} + +$defaults = array( + 'disabled' => false, + 'value' => get_default_access(), + 'options_values' => get_write_access_array(), +); + +if (isset($vars['entity'])) { + $defaults['value'] = $vars['entity']->access_id; + unset($vars['entity']); +} + +$vars = array_merge($defaults, $vars); + +if ($vars['value'] == ACCESS_DEFAULT) { + $vars['value'] = get_default_access(); +} + +if (is_array($vars['options_values']) && sizeof($vars['options_values']) > 0) { + echo elgg_view('input/dropdown', $vars); +} diff --git a/views/default/input/autocomplete.php b/views/default/input/autocomplete.php new file mode 100644 index 000000000..e58eb1ae8 --- /dev/null +++ b/views/default/input/autocomplete.php @@ -0,0 +1,49 @@ +<?php +/** + * Displays an autocomplete text input. + * + * @package Elgg + * @subpackage Core + * + * @todo This currently only works for ONE AUTOCOMPLETE TEXT FIELD on a page. + * + * @uses $vars['value'] Current value for the text input + * @uses $vars['match_on'] Array | str What to match on. all|array(groups|users|friends) + * @uses $vars['match_owner'] Bool. Match only entities that are owned by logged in user. + * @uses $vars['class'] Additional CSS class + */ + +if (isset($vars['class'])) { + $vars['class'] = "elgg-input-autocomplete {$vars['class']}"; +} else { + $vars['class'] = "elgg-input-autocomplete"; +} + +$defaults = array( + 'value' => '', + 'disabled' => false, +); + +$vars = array_merge($defaults, $vars); + +$params = array(); +if (isset($vars['match_on'])) { + $params['match_on'] = $vars['match_on']; + unset($vars['match_on']); +} +if (isset($vars['match_owner'])) { + $params['match_owner'] = $vars['match_owner']; + unset($vars['match_owner']); +} +$ac_url_params = http_build_query($params); + +elgg_load_js('elgg.autocomplete'); +elgg_load_js('jquery.ui.autocomplete.html'); + +?> + +<script type="text/javascript"> +elgg.provide('elgg.autocomplete'); +elgg.autocomplete.url = "<?php echo elgg_get_site_url() . 'livesearch?' . $ac_url_params; ?>"; +</script> +<input type="text" <?php echo elgg_format_attributes($vars); ?> /> diff --git a/views/default/input/button.php b/views/default/input/button.php new file mode 100644 index 000000000..9957fdc54 --- /dev/null +++ b/views/default/input/button.php @@ -0,0 +1,40 @@ +<?php +/** + * Create a input button + * + * @package Elgg + * @subpackage Core + * + * @uses $vars['src'] Src of an image + * @uses $vars['class'] Additional CSS class + */ + +if (isset($vars['class'])) { + $vars['class'] = "elgg-button {$vars['class']}"; +} else { + $vars['class'] = "elgg-button"; +} + +$defaults = array( + 'type' => 'button', +); + +$vars = array_merge($defaults, $vars); + +switch ($vars['type']) { + case 'button': + case 'reset': + case 'submit': + case 'image': + break; + default: + $vars['type'] = 'button'; + break; +} + +// blank src if trying to access an offsite image. @todo why? +if (isset($vars['src']) && strpos($vars['src'], elgg_get_site_url()) === false) { + $vars['src'] = ""; +} +?> +<input <?php echo elgg_format_attributes($vars); ?> /> diff --git a/views/default/input/calendar.php b/views/default/input/calendar.php new file mode 100644 index 000000000..52c84ff82 --- /dev/null +++ b/views/default/input/calendar.php @@ -0,0 +1,6 @@ +<?php +// @deprecated Use input/date instead. + +elgg_deprecated_notice('view: input/calendar is deprecated by input/date', 1.8); + +echo elgg_view('input/datepicker', $vars);
\ No newline at end of file diff --git a/views/default/input/captcha.php b/views/default/input/captcha.php new file mode 100644 index 000000000..1c2e22aaa --- /dev/null +++ b/views/default/input/captcha.php @@ -0,0 +1,8 @@ +<?php +/** + * This view provides a hook for third parties to provide a CAPTCHA. + * + * @package Elgg + * @subpackage Core + */ +?>
\ No newline at end of file diff --git a/views/default/input/checkbox.php b/views/default/input/checkbox.php new file mode 100644 index 000000000..3dc75c6c3 --- /dev/null +++ b/views/default/input/checkbox.php @@ -0,0 +1,39 @@ +<?php +/** + * Elgg checkbox input + * Displays a checkbox input tag + * + * @package Elgg + * @subpackage Core + * + * + * Pass input tag attributes as key value pairs. For a list of allowable + * attributes, see http://www.w3schools.com/tags/tag_input.asp + * + * @uses $vars['default'] The default value to submit if not checked. + * Optional, defaults to 0. Set to false for no default. + * @uses $vars['class'] Additional CSS class + */ + +if (isset($vars['class'])) { + $vars['class'] = "elgg-input-checkbox {$vars['class']}"; +} else { + $vars['class'] = "elgg-input-checkbox"; +} + +$defaults = array( + 'default' => 0, + 'disabled' => false, +); + +$vars = array_merge($defaults, $vars); + +$default = $vars['default']; +unset($vars['default']); + +if (isset($vars['name']) && $default !== false) { + echo "<input type=\"hidden\" name=\"{$vars['name']}\" value=\"$default\"/>"; +} + +?> +<input type="checkbox" <?php echo elgg_format_attributes($vars); ?> /> diff --git a/views/default/input/checkboxes.php b/views/default/input/checkboxes.php new file mode 100644 index 000000000..db4b06949 --- /dev/null +++ b/views/default/input/checkboxes.php @@ -0,0 +1,90 @@ +<?php +/** + * Elgg checkbox input + * Displays a checkbox input field + * + * @note This also includes a hidden input with the same name as the checkboxes + * to make sure something is sent to the server. The default value is 0. + * If using JS, be specific to avoid selecting the hidden default value: + * $('input[type=checkbox][name=name]') + * + * @warning Passing integers as labels does not currently work due to a + * deprecated hack that will be removed in Elgg 1.9. To use integer labels, + * the labels must be character codes: 1 would be 1 + * + * @package Elgg + * @subpackage Core + * + * @uses string $vars['name'] The name of the input fields + * (Forced to an array by appending []) + * @uses array $vars['options'] An array of strings representing the + * label => option for the each checkbox field + * @uses string $vars['default'] The default value to send if nothing is checked. + * Optional, defaults to 0. Set to FALSE for no default. + * @uses bool $vars['disabled'] Make all input elements disabled. Optional. + * @uses string $vars['value'] The current value. Single value or array. Optional. + * @uses string $vars['class'] Additional class of the list. Optional. + * @uses string $vars['align'] 'horizontal' or 'vertical' Default: 'vertical' + * + */ + +$defaults = array( + 'align' => 'vertical', + 'value' => array(), + 'default' => 0, + 'disabled' => false, + 'options' => array(), + 'name' => '', +); + +$vars = array_merge($defaults, $vars); + +$class = "elgg-input-checkboxes elgg-{$vars['align']}"; +if (isset($vars['class'])) { + $class .= " {$vars['class']}"; + unset($vars['class']); +} + +$id = ''; +if (isset($vars['id'])) { + $id = "id=\"{$vars['id']}\""; + unset($vars['id']); +} + +if (is_array($vars['value'])) { + $values = array_map('elgg_strtolower', $vars['value']); +} else { + $values = array(elgg_strtolower($vars['value'])); +} + +$input_vars = $vars; +$input_vars['default'] = false; +if ($vars['name']) { + $input_vars['name'] = "{$vars['name']}[]"; +} +unset($input_vars['align']); +unset($input_vars['options']); + +if (count($vars['options']) > 0) { + // include a default value so if nothing is checked 0 will be passed. + if ($vars['name'] && $vars['default'] !== false) { + echo "<input type=\"hidden\" name=\"{$vars['name']}\" value=\"{$vars['default']}\" />"; + } + + echo "<ul class=\"$class\" $id>"; + foreach ($vars['options'] as $label => $value) { + // @deprecated 1.8 Remove in 1.9 + if (is_integer($label)) { + elgg_deprecated_notice('$vars[\'options\'] must be an associative array in input/checkboxes', 1.8); + $label = $value; + } + + $input_vars['checked'] = in_array(elgg_strtolower($value), $values); + $input_vars['value'] = $value; + + $input = elgg_view('input/checkbox', $input_vars); + + echo "<li><label>$input$label</label></li>"; + } + echo '</ul>'; +} diff --git a/views/default/input/date.php b/views/default/input/date.php new file mode 100644 index 000000000..828ce5520 --- /dev/null +++ b/views/default/input/date.php @@ -0,0 +1,56 @@ +<?php +/** + * Elgg date input + * Displays a text field with a popup date picker. + * + * The elgg.ui JavaScript library initializes the jQueryUI datepicker based + * on the CSS class .elgg-input-date. It uses the ISO 8601 standard for date + * representation: yyyy-mm-dd. + * + * Unix timestamps are supported by setting the 'timestamp' parameter to true. + * The date is still displayed to the user in a text format but is submitted as + * a unix timestamp in seconds. + * + * @uses $vars['value'] The current value, if any (as a unix timestamp) + * @uses $vars['class'] Additional CSS class + * @uses $vars['timestamp'] Store as a Unix timestamp in seconds. Default = false + * Note: you cannot use an id with the timestamp option. + */ + +//@todo popup_calendar deprecated in 1.8. Remove in 2.0 +if (isset($vars['class'])) { + $vars['class'] = "elgg-input-date popup_calendar {$vars['class']}"; +} else { + $vars['class'] = "elgg-input-date popup_calendar"; +} + +$defaults = array( + 'value' => '', + 'disabled' => false, + 'timestamp' => false, +); + +$vars = array_merge($defaults, $vars); + +$timestamp = $vars['timestamp']; +unset($vars['timestamp']); + +if ($timestamp) { + echo elgg_view('input/hidden', array( + 'name' => $vars['name'], + 'value' => $vars['value'], + )); + + $vars['class'] = "{$vars['class']} elgg-input-timestamp"; + $vars['id'] = $vars['name']; + unset($vars['name']); + unset($vars['internalname']); +} + +// convert timestamps to text for display +if (is_numeric($vars['value'])) { + $vars['value'] = gmdate('Y-m-d', $vars['value']); +} + +$attributes = elgg_format_attributes($vars); +echo "<input type=\"text\" $attributes />"; diff --git a/views/default/input/datepicker.php b/views/default/input/datepicker.php new file mode 100644 index 000000000..8955e6e53 --- /dev/null +++ b/views/default/input/datepicker.php @@ -0,0 +1,6 @@ +<?php +/** + * @deprecated use input/date instead + */ +elgg_deprecated_notice('input/datepicker was deprecated in favor of input/date', 1.8); +echo elgg_view('input/date', $vars);
\ No newline at end of file diff --git a/views/default/input/dropdown.php b/views/default/input/dropdown.php new file mode 100644 index 000000000..9f07874f1 --- /dev/null +++ b/views/default/input/dropdown.php @@ -0,0 +1,71 @@ +<?php +/** + * Elgg dropdown input + * Displays a dropdown (select) input field + * + * @warning Default values of FALSE or NULL will match '' (empty string) but not 0. + * + * @package Elgg + * @subpackage Core + * + * @uses $vars['value'] The current value, if any + * @uses $vars['options'] An array of strings representing the options for the dropdown field + * @uses $vars['options_values'] An associative array of "value" => "option" + * where "value" is the name and "option" is + * the value displayed on the button. Replaces + * $vars['options'] when defined. + * @uses $vars['class'] Additional CSS class + */ + +if (isset($vars['class'])) { + $vars['class'] = "elgg-input-dropdown {$vars['class']}"; +} else { + $vars['class'] = "elgg-input-dropdown"; +} + +$defaults = array( + 'disabled' => false, + 'value' => '', + 'options_values' => array(), + 'options' => array(), +); + +$vars = array_merge($defaults, $vars); + +$options_values = $vars['options_values']; +unset($vars['options_values']); + +$options = $vars['options']; +unset($vars['options']); + +$value = $vars['value']; +unset($vars['value']); + +?> +<select <?php echo elgg_format_attributes($vars); ?>> +<?php + +if ($options_values) { + foreach ($options_values as $opt_value => $option) { + + $option_attrs = elgg_format_attributes(array( + 'value' => $opt_value, + 'selected' => (string)$opt_value == (string)$value, + )); + + echo "<option $option_attrs>$option</option>"; + } +} else { + if (is_array($options)) { + foreach ($options as $option) { + + $option_attrs = elgg_format_attributes(array( + 'selected' => (string)$option == (string)$value + )); + + echo "<option $option_attrs>$option</option>"; + } + } +} +?> +</select> diff --git a/views/default/input/email.php b/views/default/input/email.php new file mode 100644 index 000000000..190fb88c6 --- /dev/null +++ b/views/default/input/email.php @@ -0,0 +1,26 @@ +<?php +/** + * Elgg email input + * Displays an email input field + * + * @package Elgg + * @subpackage Core + * + * @uses $vars['class'] Additional CSS class + */ + +if (isset($vars['class'])) { + $vars['class'] = "elgg-input-email {$vars['class']}"; +} else { + $vars['class'] = "elgg-input-email"; +} + +$defaults = array( + 'disabled' => false, +); + +$vars = array_merge($defaults, $vars); + +?> + +<input type="text" <?php echo elgg_format_attributes($vars); ?> />
\ No newline at end of file diff --git a/views/default/input/file.php b/views/default/input/file.php new file mode 100644 index 000000000..452fe72b9 --- /dev/null +++ b/views/default/input/file.php @@ -0,0 +1,31 @@ +<?php +/** + * Elgg file input + * Displays a file input field + * + * @package Elgg + * @subpackage Core + * + * @uses $vars['value'] The current value if any + * @uses $vars['class'] Additional CSS class + */ + +if (!empty($vars['value'])) { + echo elgg_echo('fileexists') . "<br />"; +} + +if (isset($vars['class'])) { + $vars['class'] = "elgg-input-file {$vars['class']}"; +} else { + $vars['class'] = "elgg-input-file"; +} + +$defaults = array( + 'disabled' => false, + 'size' => 30, +); + +$attrs = array_merge($defaults, $vars); + +?> +<input type="file" <?php echo elgg_format_attributes($attrs); ?> /> diff --git a/views/default/input/form.php b/views/default/input/form.php new file mode 100644 index 000000000..df30133b3 --- /dev/null +++ b/views/default/input/form.php @@ -0,0 +1,44 @@ +<?php +/** + * Create a form for data submission. + * Use this view for forms as it provides protection against CSRF attacks. + * + * @package Elgg + * @subpackage Core + * + * @uses $vars['body'] The body of the form (made up of other input/xxx views and html + * @uses $vars['action'] The action URL of the form + * @uses $vars['method'] The submit method: post (default) or get + * @uses $vars['enctype'] Set to 'multipart/form-data' if uploading a file + * @uses $vars['disable_security'] turn off CSRF security by setting to true + * @uses $vars['class'] Additional class for the form + */ + +$defaults = array( + 'method' => "post", + 'disable_security' => FALSE, +); + +$vars = array_merge($defaults, $vars); + +if (isset($vars['class'])) { + $vars['class'] = "elgg-form {$vars['class']}"; +} else { + $vars['class'] = 'elgg-form'; +} + +$vars['action'] = elgg_normalize_url($vars['action']); +$vars['method'] = strtolower($vars['method']); + +$body = $vars['body']; +unset($vars['body']); + +// Generate a security header +if (!$vars['disable_security']) { + $body = elgg_view('input/securitytoken') . $body; +} +unset($vars['disable_security']); + +$attributes = elgg_format_attributes($vars); + +echo "<form $attributes><fieldset>$body</fieldset></form>"; diff --git a/views/default/input/friendspicker.php b/views/default/input/friendspicker.php new file mode 100644 index 000000000..40708c890 --- /dev/null +++ b/views/default/input/friendspicker.php @@ -0,0 +1,319 @@ +<?php +/** + * Elgg friends picker + * Lists the friends picker + * + * @warning Below is the ugliest code in Elgg. It needs to be rewritten or removed + * + * @package Elgg + * @subpackage Core + * + * @uses $vars['entities'] The array of ElggUser objects + * @uses $vars['name'] + * @uses $vars['value'] + * @uses $vars['highlight'] + * @uses $vars['callback'] + */ + +elgg_load_js('elgg.friendspicker'); +elgg_load_js('jquery.easing'); + + +$chararray = elgg_echo('friendspicker:chararray'); + +// Initialise name +if (!isset($vars['name'])) { + $name = "friend"; +} else { + $name = $vars['name']; +} + +// Are we highlighting default or all? +if (empty($vars['highlight'])) { + $vars['highlight'] = 'default'; +} +if ($vars['highlight'] != 'all') { + $vars['highlight'] = 'default'; +} + +// Initialise values +if (!isset($vars['value'])) { + $vars['value'] = array(); +} else { + if (!is_array($vars['value'])) { + $vars['value'] = (int) $vars['value']; + $vars['value'] = array($vars['value']); + } +} + +// Initialise whether we're calling back or not +if (isset($vars['callback'])) { + $callback = $vars['callback']; +} else { + $callback = false; +} + +// We need to count the number of friends pickers on the page. +if (!isset($vars['friendspicker'])) { + global $friendspicker; + if (!isset($friendspicker)) { + $friendspicker = 0; + } + $friendspicker++; +} else { + $friendspicker = $vars['friendspicker']; +} + +$users = array(); +$activeletters = array(); + +// Are we displaying form tags and submit buttons? +// (If we've been given a target, then yes! Otherwise, no.) +if (isset($vars['formtarget'])) { + $formtarget = $vars['formtarget']; +} else { + $formtarget = false; +} + +// Sort users by letter +if (is_array($vars['entities']) && sizeof($vars['entities'])) { + foreach($vars['entities'] as $user) { + $letter = elgg_strtoupper(elgg_substr($user->name, 0, 1)); + + if (!elgg_substr_count($chararray, $letter)) { + $letter = "*"; + } + if (!isset($users[$letter])) { + $users[$letter] = array(); + } + $users[$letter][$user->guid] = $user; + } +} + +// sort users in letters alphabetically +foreach ($users as $letter => $letter_users) { + usort($letter_users, create_function('$a, $b', ' + return strcasecmp($a->name, $b->name); + ')); + $users[$letter] = $letter_users; +} + +if (!$callback) { + ?> + + <div class="friends-picker-main-wrapper"> + + <?php + + if (isset($vars['content'])) { + echo $vars['content']; + } + ?> + + <div id="friends-picker_placeholder<?php echo $friendspicker; ?>"> + + <?php +} + +if (!isset($vars['replacement'])) { + if ($formtarget) { +?> +<?php //@todo JS 1.8: no ?> +<script language="text/javascript"> + $(function() { // onload...do + $('#collectionMembersForm<?php echo $friendspicker; ?>').submit(function() { + var inputs = []; + $(':input', this).each(function() { + if (this.type != 'checkbox' || (this.type == 'checkbox' && this.checked != false)) { + inputs.push(this.name + '=' + escape(this.value)); + } + }); + jQuery.ajax({ + type: "POST", + data: inputs.join('&'), + url: this.action, + success: function(){ + $('a.collectionmembers<?php echo $friendspicker; ?>').click(); + } + + }); + return false; + }) + }) + + </script> + +<!-- Collection members form --> +<form id="collectionMembersForm<?php echo $friendspicker; ?>" action="<?php echo $formtarget; ?>" method="post"> <!-- action="" method=""> --> + +<?php + echo elgg_view('input/securitytoken'); + echo elgg_view('input/hidden', array( + 'name' => 'collection_id', + 'value' => $vars['collection_id'], + )); + } +?> + +<div class="friends-picker-wrapper"> +<div id="friends-picker<?php echo $friendspicker; ?>"> + <div class="friends-picker-container"> +<?php + +// Initialise letters + $chararray .= "*"; + $letter = elgg_substr($chararray, 0, 1); + $letpos = 0; + while (1 == 1) { + ?> + <div class="panel" title="<?php echo $letter; ?>"> + <div class="wrapper"> + <h3><?php echo $letter; ?></h3> + <?php + + if (isset($users[$letter])) { + ksort($users[$letter]); + + echo "<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">"; + $col = 0; + + foreach($users[$letter] as $friend) { + if ($col == 0) { + echo "<tr>"; + } + + //echo "<p>" . $user->name . "</p>"; + $label = elgg_view_entity_icon($friend, 'tiny', array('use_hover' => false)); + $options[$label] = $friend->getGUID(); + + if ($vars['highlight'] == 'all' && !in_array($letter,$activeletters)) { + $activeletters[] = $letter; + } + + + if (in_array($friend->getGUID(),$vars['value'])) { + $checked = "checked = \"checked\""; + if (!in_array($letter,$activeletters) && $vars['highlight'] == 'default') { + $activeletters[] = $letter; + } + } else { + $checked = ""; + } + ?> + + <td> + + <input type="checkbox" <?php echo $checked; ?> name="<?php echo $name; ?>[]" value="<?php echo $options[$label]; ?>" /> + + </td> + + <td> + + <div style="width: 25px; margin-bottom: 15px;"> + <?php + echo $label; + ?> + </div> + </td> + <td style="width: 200px; padding: 5px;"> + <?php echo $friend->name; ?> + </td> + <?php + $col++; + if ($col == 3){ + echo "</tr>"; + $col = 0; + } + } + if ($col < 3) { + echo "</tr>"; + } + + echo "</table>"; + } + +?> + + </div> + </div> +<?php + + $substr = elgg_substr($chararray, elgg_strlen($chararray) - 1, 1); + if ($letter == $substr) { + break; + } + //$letter++; + $letpos++; + $letter = elgg_substr($chararray, $letpos, 1); + } + +?> + </div> + +<?php + +if ($formtarget) { + + if (isset($vars['formcontents'])) + echo $vars['formcontents']; + +?> + <div class="clearfix"></div> + <div class="friendspicker-savebuttons"> + <input type="submit" class="elgg-button elgg-button-submit" value="<?php echo elgg_echo('save'); ?>" /> + <input type="button" class="elgg-button elgg-button-cancel" value="<?php echo elgg_echo('cancel'); ?>" onclick="$('a.collectionmembers<?php echo $friendspicker; ?>').click();" /> + <br /></div> + </form> + +<?php + +} + +?> + +</div> +</div> + +<?php +} else { + echo $vars['replacement']; +} +if (!$callback) { + +?> + +</div> +</div> + + +<?php + +} + +if (!isset($vars['replacement'])) { +?> +<?php //@todo JS 1.8: no ?> +<script type="text/javascript"> + // initialise picker + $("div#friends-picker<?php echo $friendspicker; ?>").friendsPicker(<?php echo $friendspicker; ?>); +</script> +<script type="text/javascript"> +$(document).ready(function () { +// manually add class to corresponding tab for panels that have content +<?php +if (sizeof($activeletters) > 0) + //$chararray = elgg_echo('friendspicker:chararray'); + foreach($activeletters as $letter) { + $tab = elgg_strpos($chararray, $letter) + 1; +?> +$("div#friends-picker-navigation<?php echo $friendspicker; ?> li.tab<?php echo $tab; ?> a").addClass("tabHasContent"); +<?php + } + +?> +}); +</script> + +<?php + +}
\ No newline at end of file diff --git a/views/default/input/hidden.php b/views/default/input/hidden.php new file mode 100644 index 000000000..9c2fc6c08 --- /dev/null +++ b/views/default/input/hidden.php @@ -0,0 +1,12 @@ +<?php +/** + * Create a hidden data field + * + * @package Elgg + * @subpackage Core + * + * @uses $vars['value'] The current value, if any + */ + +?> +<input type="hidden" <?php echo elgg_format_attributes($vars); ?> />
\ No newline at end of file diff --git a/views/default/input/location.php b/views/default/input/location.php new file mode 100644 index 000000000..4cf05c72a --- /dev/null +++ b/views/default/input/location.php @@ -0,0 +1,27 @@ +<?php +/** + * Location input field + * + * @uses $vars['entity'] The ElggEntity that has a location + * @uses $vars['value'] The default value for the location + * @uses $vars['class'] Additional CSS class + */ + +if (isset($vars['class'])) { + $vars['class'] = "elgg-input-location {$vars['class']}"; +} else { + $vars['class'] = "elgg-input-location"; +} + +$defaults = array( + 'disabled' => false, +); + +if (isset($vars['entity'])) { + $defaults['value'] = $vars['entity']->location; + unset($vars['entity']); +} + +$vars = array_merge($defaults, $vars); + +echo elgg_view('input/tag', $vars); diff --git a/views/default/input/longtext.php b/views/default/input/longtext.php new file mode 100644 index 000000000..61dc7ca19 --- /dev/null +++ b/views/default/input/longtext.php @@ -0,0 +1,42 @@ +<?php +/** + * Elgg long text input + * Displays a long text input field that can use WYSIWYG editor + * + * @package Elgg + * @subpackage Core + * + * @uses $vars['value'] The current value, if any - will be html encoded + * @uses $vars['disabled'] Is the input field disabled? + * @uses $vars['class'] Additional CSS class + */ + +if (isset($vars['class'])) { + $vars['class'] = "elgg-input-longtext {$vars['class']}"; +} else { + $vars['class'] = "elgg-input-longtext"; +} + +$defaults = array( + 'value' => '', + 'rows' => '10', + 'cols' => '50', + 'id' => 'elgg-input-' . rand(), //@todo make this more robust +); + +$vars = array_merge($defaults, $vars); + +$value = $vars['value']; +unset($vars['value']); + +echo elgg_view_menu('longtext', array( + 'sort_by' => 'priority', + 'class' => 'elgg-menu-hz', + 'id' => $vars['id'], +)); + +?> + +<textarea <?php echo elgg_format_attributes($vars); ?>> +<?php echo htmlspecialchars($value, ENT_QUOTES, 'UTF-8', false); ?> +</textarea> diff --git a/views/default/input/password.php b/views/default/input/password.php new file mode 100644 index 000000000..45f2b20a6 --- /dev/null +++ b/views/default/input/password.php @@ -0,0 +1,28 @@ +<?php +/** + * Elgg password input + * Displays a password input field + * + * @package Elgg + * @subpackage Core + * + * @uses $vars['value'] The current value, if any + * @uses $vars['name'] The name of the input field + * @uses $vars['class'] Additional CSS class + */ + +if (isset($vars['class'])) { + $vars['class'] = "elgg-input-password {$vars['class']}"; +} else { + $vars['class'] = "elgg-input-password"; +} + +$defaults = array( + 'disabled' => false, + 'value' => '', +); + +$attrs = array_merge($defaults, $vars); +?> + +<input type="password" <?php echo elgg_format_attributes($attrs); ?> /> diff --git a/views/default/input/plaintext.php b/views/default/input/plaintext.php new file mode 100644 index 000000000..e92c61ced --- /dev/null +++ b/views/default/input/plaintext.php @@ -0,0 +1,37 @@ +<?php +/** + * Elgg long text input (plaintext) + * Displays a long text input field that should not be overridden by wysiwyg editors. + * + * @package Elgg + * @subpackage Core + * + * @uses $vars['value'] The current value, if any + * @uses $vars['name'] The name of the input field + * @uses $vars['class'] Additional CSS class + * @uses $vars['disabled'] + */ + +if (isset($vars['class'])) { + $vars['class'] = "elgg-input-plaintext {$vars['class']}"; +} else { + $vars['class'] = "elgg-input-plaintext"; +} + +$defaults = array( + 'value' => '', + 'rows' => '10', + 'cols' => '50', + 'disabled' => false, +); + +$vars = array_merge($defaults, $vars); + +$value = $vars['value']; +unset($vars['value']); + +?> + +<textarea <?php echo elgg_format_attributes($vars); ?>> +<?php echo htmlspecialchars($value, ENT_QUOTES, 'UTF-8', false); ?> +</textarea> diff --git a/views/default/input/pulldown.php b/views/default/input/pulldown.php new file mode 100644 index 000000000..705329691 --- /dev/null +++ b/views/default/input/pulldown.php @@ -0,0 +1,9 @@ +<?php +/** + * Deprecated pulldown input view - use 'input/dropdown' instead. + * + * @deprecated 1.8 + */ + +elgg_deprecated_notice("input/pulldown was deprecated by input/dropdown", 1.8); +echo elgg_view('input/dropdown', $vars); diff --git a/views/default/input/radio.php b/views/default/input/radio.php new file mode 100644 index 000000000..ef860a773 --- /dev/null +++ b/views/default/input/radio.php @@ -0,0 +1,76 @@ +<?php +/** + * Elgg radio input + * Displays a radio input field + * + * @warning Passing integers as labels does not currently work due to a + * deprecated hack that will be removed in Elgg 1.9. To use integer labels, + * the labels must be character codes: 1 would be 1 + * + * @package Elgg + * @subpackage Core + * + * @uses $vars['value'] The current value, if any + * @uses $vars['name'] The name of the input field + * @uses $vars['options'] An array of strings representing the options for the + * radio field as "label" => option + * @uses $vars['class'] Additional class of the list. Optional. + * @uses $vars['align'] 'horizontal' or 'vertical' Default: 'vertical' + */ + +$defaults = array( + 'align' => 'vertical', + 'value' => array(), + 'disabled' => false, + 'options' => array(), + 'name' => '', +); + +$vars = array_merge($defaults, $vars); + +$id = ''; +if (isset($vars['id'])) { + $id = "id=\"{$vars['id']}\""; + unset($vars['id']); +} + +$class = "elgg-input-radios elgg-{$vars['align']}"; +if (isset($vars['class'])) { + $class .= " {$vars['class']}"; + unset($vars['class']); +} +unset($vars['align']); +$vars['class'] = 'elgg-input-radio'; + +if (is_array($vars['value'])) { + $vars['value'] = array_map('elgg_strtolower', $vars['value']); +} else { + $vars['value'] = array(elgg_strtolower($vars['value'])); +} + +$options = $vars['options']; +unset($vars['options']); + +$value = $vars['value']; +unset($vars['value']); + +if ($options && count($options) > 0) { + echo "<ul class=\"$class\" $id>"; + foreach ($options as $label => $option) { + + $vars['checked'] = in_array(elgg_strtolower($option), $value); + $vars['value'] = $option; + + $attributes = elgg_format_attributes($vars); + + // handle indexed array where label is not specified + // @deprecated 1.8 Remove in 1.9 + if (is_integer($label)) { + elgg_deprecated_notice('$vars[\'options\'] must be an associative array in input/radio', 1.8); + $label = $option; + } + + echo "<li><label><input type=\"radio\" $attributes />$label</label></li>"; + } + echo '</ul>'; +} diff --git a/views/default/input/reset.php b/views/default/input/reset.php new file mode 100644 index 000000000..082da8669 --- /dev/null +++ b/views/default/input/reset.php @@ -0,0 +1,14 @@ +<?php +/** + * Create a reset input button + * + * @package Elgg + * @subpackage Core + * + * @uses $vars['class'] CSS class that replaces elgg-button-cancel + */ + +$vars['type'] = 'reset'; +$vars['class'] = elgg_extract('class', $vars, 'elgg-button-cancel'); + +echo elgg_view('input/button', $vars);
\ No newline at end of file diff --git a/views/default/input/securitytoken.php b/views/default/input/securitytoken.php new file mode 100644 index 000000000..75410848a --- /dev/null +++ b/views/default/input/securitytoken.php @@ -0,0 +1,15 @@ +<?php +/** + * CSRF security token view for use with secure forms. + * + * It is still recommended that you use input/form. + * + * @package Elgg + * @subpackage Core + */ + +$ts = time(); +$token = generate_action_token($ts); + +echo elgg_view('input/hidden', array('name' => '__elgg_token', 'value' => $token)); +echo elgg_view('input/hidden', array('name' => '__elgg_ts', 'value' => $ts)); diff --git a/views/default/input/submit.php b/views/default/input/submit.php new file mode 100644 index 000000000..df369b3b4 --- /dev/null +++ b/views/default/input/submit.php @@ -0,0 +1,14 @@ +<?php +/** + * Create a submit input button + * + * @package Elgg + * @subpackage Core + * + * @uses $vars['class'] CSS class that replaces elgg-button-submit + */ + +$vars['type'] = 'submit'; +$vars['class'] = elgg_extract('class', $vars, 'elgg-button-submit'); + +echo elgg_view('input/button', $vars);
\ No newline at end of file diff --git a/views/default/input/tag.php b/views/default/input/tag.php new file mode 100644 index 000000000..8893a18ff --- /dev/null +++ b/views/default/input/tag.php @@ -0,0 +1,25 @@ +<?php +/** + * Elgg tag input + * + * Accepts a single tag value + * + * @uses $vars['value'] The default value for the tag + * @uses $vars['class'] Additional CSS class + */ + +if (isset($vars['class'])) { + $vars['class'] = "elgg-input-tag {$vars['class']}"; +} else { + $vars['class'] = "elgg-input-tag"; +} + +$defaults = array( + 'value' => '', + 'disabled' => false, +); + +$vars = array_merge($defaults, $vars); +?> + +<input type="text" <?php echo elgg_format_attributes($vars); ?> />
\ No newline at end of file diff --git a/views/default/input/tags.php b/views/default/input/tags.php new file mode 100644 index 000000000..261cf9f97 --- /dev/null +++ b/views/default/input/tags.php @@ -0,0 +1,45 @@ +<?php +/** + * Elgg tag input + * Displays a tag input field + * + * @uses $vars['disabled'] + * @uses $vars['class'] Additional CSS class + * @uses $vars['value'] Array of tags or a string + * @uses $vars['entity'] Optional. Entity whose tags are being displayed (metadata ->tags) + */ + +if (isset($vars['class'])) { + $vars['class'] = "elgg-input-tags {$vars['class']}"; +} else { + $vars['class'] = "elgg-input-tags"; +} + +$defaults = array( + 'value' => '', + 'disabled' => false, +); + +if (isset($vars['entity'])) { + $defaults['value'] = $vars['entity']->tags; + unset($vars['entity']); +} + +$vars = array_merge($defaults, $vars); + +if (is_array($vars['value'])) { + $tags = array(); + + foreach ($vars['value'] as $tag) { + if (is_string($tag)) { + $tags[] = $tag; + } else { + $tags[] = $tag->value; + } + } + + $vars['value'] = implode(", ", $tags); +} + +?> +<input type="text" <?php echo elgg_format_attributes($vars); ?> />
\ No newline at end of file diff --git a/views/default/input/text.php b/views/default/input/text.php new file mode 100644 index 000000000..07ce5c710 --- /dev/null +++ b/views/default/input/text.php @@ -0,0 +1,26 @@ +<?php +/** + * Elgg text input + * Displays a text input field + * + * @package Elgg + * @subpackage Core + * + * @uses $vars['class'] Additional CSS class + */ + +if (isset($vars['class'])) { + $vars['class'] = "elgg-input-text {$vars['class']}"; +} else { + $vars['class'] = "elgg-input-text"; +} + +$defaults = array( + 'value' => '', + 'disabled' => false, +); + +$vars = array_merge($defaults, $vars); + +?> +<input type="text" <?php echo elgg_format_attributes($vars); ?> />
\ No newline at end of file diff --git a/views/default/input/url.php b/views/default/input/url.php new file mode 100644 index 000000000..e97a316d8 --- /dev/null +++ b/views/default/input/url.php @@ -0,0 +1,27 @@ +<?php +/** + * Elgg URL input + * Displays a URL input field + * + * @package Elgg + * @subpackage Core + * + * @uses $vars['class'] Additional CSS class + */ + +if (isset($vars['class'])) { + $vars['class'] = "elgg-input-url {$vars['class']}"; +} else { + $vars['class'] = "elgg-input-url"; +} + +$defaults = array( + 'value' => '', + 'disabled' => false, +); + +$vars = array_merge($defaults, $vars); + +?> + +<input type="text" <?php echo elgg_format_attributes($vars); ?> /> diff --git a/views/default/input/urlshortener.php b/views/default/input/urlshortener.php new file mode 100644 index 000000000..ecfb02efa --- /dev/null +++ b/views/default/input/urlshortener.php @@ -0,0 +1,8 @@ +<?php +/** + * This view provides a hook for third parties to provide a URL shortener. + * + * @package Elgg + * @subpackage Core + */ +?>
\ No newline at end of file diff --git a/views/default/input/userpicker.php b/views/default/input/userpicker.php new file mode 100644 index 000000000..91a397e37 --- /dev/null +++ b/views/default/input/userpicker.php @@ -0,0 +1,73 @@ +<?php +/** + * User Picker. Sends an array of user guids. + * + * @package Elgg + * @subpackage Core + * + * @uses $vars['value'] Array of user guids for already selected users or null + * + * The name of the hidden fields is members[] + * + * @warning Only a single input/userpicker is supported per web page. + * + * Defaults to lazy load user lists in alphabetical order. User needs + * to type two characters before seeing the user popup list. + * + * As users are selected they move down to a "users" box. + * When this happens, a hidden input is created with the + * name of members[] and a value of the GUID. + */ + +elgg_load_js('elgg.userpicker'); +elgg_load_js('jquery.ui.autocomplete.html'); + +function user_picker_add_user($user_id) { + $user = get_entity($user_id); + if (!$user || !($user instanceof ElggUser)) { + return false; + } + + $icon = elgg_view_entity_icon($user, 'tiny', array('use_hover' => false)); + + // this html must be synced with the userpicker.js library + $code = '<li><div class="elgg-image-block">'; + $code .= "<div class='elgg-image'>$icon</div>"; + $code .= "<div class='elgg-image-alt'><a href='#' class='elgg-userpicker-remove'>X</a></div>"; + $code .= "<div class='elgg-body'>" . $user->name . "</div>"; + $code .= "</div>"; + $code .= "<input type=\"hidden\" name=\"members[]\" value=\"$user_id\">"; + $code .= '</li>'; + + return $code; +} + +// loop over all values and prepare them so that "in" will work in javascript +$values = array(); +if (!is_array($vars['value'])) { + $vars['value'] = array($vars['value']); +} +foreach ($vars['value'] as $value) { + $values[$value] = TRUE; +} + +// convert the values to a json-encoded list +$json_values = json_encode($values); + +// create an HTML list of users +$user_list = ''; +foreach ($vars['value'] as $user_id) { + $user_list .= user_picker_add_user($user_id); +} + +?> +<div class="elgg-user-picker"> + <input type="text" class="elgg-input-user-picker" size="30"/> + <input type="checkbox" name="match_on" value="true" /> + <label><?php echo elgg_echo('userpicker:only_friends'); ?></label> + <ul class="elgg-user-picker-list"><?php echo $user_list; ?></ul> +</div> +<script type="text/javascript"> + // @todo grab the values in the init function rather than using inline JS + elgg.userpicker.userList = <?php echo $json_values ?>; +</script>
\ No newline at end of file diff --git a/views/default/js/admin.php b/views/default/js/admin.php new file mode 100644 index 000000000..e8aa0d2ed --- /dev/null +++ b/views/default/js/admin.php @@ -0,0 +1,126 @@ +<?php +/** + * Admin-area specific javascript functions. + * + * @since 1.8 + */ + +if (0) { ?><script><?php } +?> +elgg.provide('elgg.admin'); + +elgg.admin.init = function () { + + // system messages do not fade in admin area, instead slide up when clicked + $('.elgg-system-messages li').stop(true); + $('.elgg-system-messages li').die('click'); + $('.elgg-system-messages li').live('click', function() { + $(this).stop().slideUp('medium'); + }); + + // draggable plugin reordering + $('#elgg-plugin-list > ul').sortable({ + items: 'li:has(> .elgg-state-draggable)', + handle: '.elgg-head', + forcePlaceholderSize: true, + placeholder: 'elgg-widget-placeholder', + opacity: 0.8, + revert: 500, + stop: elgg.admin.movePlugin + }); + + // in-line editing for custom profile fields. + // @note this requires jquery.jeditable plugin + $(".elgg-state-editable").editable(elgg.admin.editProfileField, { + type: 'text', + onblur: 'submit', + width: '300px', + height: 'none', + style: 'display:inline;' + }); + + // draggable profile field reordering. + $('#elgg-profile-fields').sortable({ + items: 'li', + handle: 'span.elgg-state-draggable', + stop: elgg.admin.moveProfileField + }); + + // admin notices delete ajax + $('a.elgg-admin-notice').click(elgg.admin.deleteNotice); +}; + +/** + * Save the plugin order after a move event. + * + * @param {Object} e Event object. + * @param {Object} ui jQueryUI object + * @return void + */ +elgg.admin.movePlugin = function(e, ui) { + // get guid from id like elgg-object-<guid> + var pluginGuid = ui.item.attr('id'); + pluginGuid = pluginGuid.replace('elgg-object-', ''); + + elgg.action('admin/plugins/set_priority', { + data: { + plugin_guid: pluginGuid, + // we start at priority 1 + priority: ui.item.index() + 1 + } + }); +}; + +/** + * In-line editing for custom profile fields + * + * @param string value The new value + * @param {Object} settings The settings used for editable + * @return void + */ +elgg.admin.editProfileField = function(value, settings) { + var id = $(this).attr('id'); + id = id.replace('elgg-profile-field-', ''); + + var data = { + id: id, + label: value + }; + + elgg.action('profile/fields/edit', data); + return value; +}; + +/** + * Save the plugin profile order after a move event. + * + * @param {Object} e Event object. + * @param {Object} ui jQueryUI object + * @return void + */ +elgg.admin.moveProfileField = function(e, ui) { + var orderArr = $('#elgg-profile-fields').sortable('toArray'); + var orderStr = orderArr.join(','); + + elgg.action('profile/fields/reorder', { + fieldorder: orderStr + }); +}; + +/** + * Fires the ajax action to delete the admin notice then hides the notice. + * + * @return void + */ +elgg.admin.deleteNotice = function(e) { + e.preventDefault(); + var $container = $(this).closest('p'); + + elgg.action($(this).attr('href'), { + success: function(json) { + $container.slideUp('medium'); + } + }); +}; + +elgg.register_hook_handler('init', 'system', elgg.admin.init, 1000);
\ No newline at end of file diff --git a/views/default/js/b64.js.php b/views/default/js/b64.js.php deleted file mode 100644 index 201bdbd7c..000000000 --- a/views/default/js/b64.js.php +++ /dev/null @@ -1,74 +0,0 @@ -// This code was written by Tyler Akins and has been placed in the -// public domain. It would be nice if you left this header intact. -// Base64 code from Tyler Akins -- http://rumkin.com - -var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; - -/** - * Encodes a string in base64 - * @param {String} input The string to encode in base64. - */ -function encode64(input) { - var output = ""; - var chr1, chr2, chr3; - var enc1, enc2, enc3, enc4; - var i = 0; - - do { - chr1 = input.charCodeAt(i++); - chr2 = input.charCodeAt(i++); - chr3 = input.charCodeAt(i++); - - enc1 = chr1 >> 2; - enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); - enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); - enc4 = chr3 & 63; - - if (isNaN(chr2)) { - enc3 = enc4 = 64; - } else if (isNaN(chr3)) { - enc4 = 64; - } - - output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) + - keyStr.charAt(enc3) + keyStr.charAt(enc4); - } while (i < input.length); - - return output; -} - -/** - * Decodes a base64 string. - * @param {String} input The string to decode. - */ -function decode64(input) { - var output = ""; - var chr1, chr2, chr3; - var enc1, enc2, enc3, enc4; - var i = 0; - - // remove all characters that are not A-Z, a-z, 0-9, +, /, or = - input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); - - do { - enc1 = keyStr.indexOf(input.charAt(i++)); - enc2 = keyStr.indexOf(input.charAt(i++)); - enc3 = keyStr.indexOf(input.charAt(i++)); - enc4 = keyStr.indexOf(input.charAt(i++)); - - chr1 = (enc1 << 2) | (enc2 >> 4); - chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); - chr3 = ((enc3 & 3) << 6) | enc4; - - output = output + String.fromCharCode(chr1); - - if (enc3 != 64) { - output = output + String.fromCharCode(chr2); - } - if (enc4 != 64) { - output = output + String.fromCharCode(chr3); - } - } while (i < input.length); - - return output; -} diff --git a/views/default/js/elgg.php b/views/default/js/elgg.php new file mode 100644 index 000000000..6fe03484d --- /dev/null +++ b/views/default/js/elgg.php @@ -0,0 +1,77 @@ +<?php +/** + * Core Elgg javascript loader + */ +global $CONFIG; + +$prereq_files = array( + "vendors/sprintf.js", + "js/lib/elgglib.js", +); + +foreach ($prereq_files as $file) { + include("{$CONFIG->path}$file"); +} + +//No such thing as autoloading classes in javascript +$model_files = array( + 'ElggEntity', + 'ElggUser', + 'ElggPriorityList', +); + +foreach ($model_files as $file) { + include("{$CONFIG->path}js/classes/$file.js"); +} + +//Include library files +$libs = array( + //libraries + 'prototypes', + 'hooks', + 'security', + 'languages', + 'ajax', + 'session', + 'pageowner', + 'configuration', + + //ui + 'ui', + 'ui.widgets', +); + +foreach ($libs as $file) { + include("{$CONFIG->path}js/lib/$file.js"); + // putting a new line between the files to address http://trac.elgg.org/ticket/3081 + echo "\n"; +} + +/** + * Set some values that are cacheable + */ +if (0) { ?><script><?php } +?> + +elgg.version = '<?php echo get_version(); ?>'; +elgg.release = '<?php echo get_version(true); ?>'; +elgg.config.wwwroot = '<?php echo elgg_get_site_url(); ?>'; +<?php //@todo make this configurable ?> +elgg.security.interval = 5 * 60 * 1000; +elgg.config.domReady = false; +elgg.config.language = '<?php echo isset($CONFIG->language) ? $CONFIG->language : 'en'; ?>'; +elgg.config.languageReady = false; + +//After the DOM is ready +$(function() { + elgg.config.domReady = true; + elgg.initWhenReady(); +}); + +<?php + +$previous_content = elgg_view('js/initialise_elgg'); +if ($previous_content) { + elgg_deprecated_notice("The view 'js/initialise_elgg' has been deprecated for js/elgg", 1.8); + echo $previous_content; +} diff --git a/views/default/js/initialise_elgg.php b/views/default/js/initialise_elgg.php new file mode 100644 index 000000000..3d617953a --- /dev/null +++ b/views/default/js/initialise_elgg.php @@ -0,0 +1,4 @@ +<?php +/** + * This has been deprecated in 1.8 - see elgg.php in this directory. + */
\ No newline at end of file diff --git a/views/default/js/initialize_elgg.php b/views/default/js/initialize_elgg.php new file mode 100644 index 000000000..b45c33463 --- /dev/null +++ b/views/default/js/initialize_elgg.php @@ -0,0 +1,52 @@ +<?php +/** + * Initialize Elgg's js lib with the uncacheable data + */ + +if (0) { ?><script><?php } +?> +/** + * Don't want to cache these -- they could change for every request + */ +elgg.config.lastcache = <?php echo (int)elgg_get_config('lastcache'); ?>; +elgg.config.viewtype = '<?php echo elgg_get_viewtype(); ?>'; +elgg.config.simplecache_enabled = <?php echo (int)elgg_is_simplecache_enabled(); ?>; + +elgg.security.token.__elgg_ts = <?php echo $ts = time(); ?>; +elgg.security.token.__elgg_token = '<?php echo generate_action_token($ts); ?>'; + +<?php +// @todo json export should be smoother than this... +// @todo Might also be nice to make url exportable. $entity->url? yes please! +$page_owner = elgg_get_page_owner_entity(); + +if ($page_owner instanceof ElggEntity) { + $page_owner_json = array(); + foreach ($page_owner->getExportableValues() as $v) { + $page_owner_json[$v] = $page_owner->$v; + } + + $page_owner_json['subtype'] = $page_owner->getSubtype(); + $page_owner_json['url'] = $page_owner->getURL(); + + echo 'elgg.page_owner = ' . json_encode($page_owner_json) . ';'; +} + +$user = elgg_get_logged_in_user_entity(); + +if ($user instanceof ElggUser) { + $user_json = array(); + foreach ($user->getExportableValues() as $v) { + $user_json[$v] = $user->$v; + } + + $user_json['subtype'] = $user->getSubtype(); + $user_json['url'] = $user->getURL(); + $user_json['admin'] = $user->isAdmin(); + + echo 'elgg.session.user = new elgg.ElggUser(' . json_encode($user_json) . ');'; +} +?> + +//Before the DOM is ready, but elgg's js framework is fully initalized +elgg.trigger_hook('boot', 'system');
\ No newline at end of file diff --git a/views/default/js/jquery.cookie.min.js.php b/views/default/js/jquery.cookie.min.js.php deleted file mode 100644 index cb09af984..000000000 --- a/views/default/js/jquery.cookie.min.js.php +++ /dev/null @@ -1,10 +0,0 @@ -/** - * Cookie plugin - * - * Copyright (c) 2006 Klaus Hartl (stilbuero.de) - * Dual licensed under the MIT and GPL licenses: - * http://www.opensource.org/licenses/mit-license.php - * http://www.gnu.org/licenses/gpl.html - * - */ -jQuery.cookie=function(name,value,options){if(typeof value!='undefined'){options=options||{};if(value===null){value='';options=$.extend({},options);options.expires=-1;}var expires='';if(options.expires&&(typeof options.expires=='number'||options.expires.toUTCString)){var date;if(typeof options.expires=='number'){date=new Date();date.setTime(date.getTime()+(options.expires*24*60*60*1000));}else{date=options.expires;}expires='; expires='+date.toUTCString();}var path=options.path?'; path='+(options.path):'';var domain=options.domain?'; domain='+(options.domain):'';var secure=options.secure?'; secure':'';document.cookie=[name,'=',encodeURIComponent(value),expires,path,domain,secure].join('');}else{var cookieValue=null;if(document.cookie&&document.cookie!=''){var cookies=document.cookie.split(';');for(var i=0;i<cookies.length;i++){var cookie=jQuery.trim(cookies[i]);if(cookie.substring(0,name.length+1)==(name+'=')){cookieValue=decodeURIComponent(cookie.substring(name.length+1));break;}}}return cookieValue;}};
\ No newline at end of file diff --git a/views/default/js/jquery.localscroll-1.2.7-min.js.php b/views/default/js/jquery.localscroll-1.2.7-min.js.php deleted file mode 100644 index fa583a451..000000000 --- a/views/default/js/jquery.localscroll-1.2.7-min.js.php +++ /dev/null @@ -1,9 +0,0 @@ -/** - * jQuery.LocalScroll - Animated scrolling navigation, using anchors. - * Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com - * Dual licensed under MIT and GPL. - * Date: 3/11/2009 - * @author Ariel Flesler - * @version 1.2.7 - **/ -;(function($){var l=location.href.replace(/#.*/,'');var g=$.localScroll=function(a){$('body').localScroll(a)};g.defaults={duration:1e3,axis:'y',event:'click',stop:true,target:window,reset:true};g.hash=function(a){if(location.hash){a=$.extend({},g.defaults,a);a.hash=false;if(a.reset){var e=a.duration;delete a.duration;$(a.target).scrollTo(0,a);a.duration=e}i(0,location,a)}};$.fn.localScroll=function(b){b=$.extend({},g.defaults,b);return b.lazy?this.bind(b.event,function(a){var e=$([a.target,a.target.parentNode]).filter(d)[0];if(e)i(a,e,b)}):this.find('a,area').filter(d).bind(b.event,function(a){i(a,this,b)}).end().end();function d(){return!!this.href&&!!this.hash&&this.href.replace(this.hash,'')==l&&(!b.filter||$(this).is(b.filter))}};function i(a,e,b){var d=e.hash.slice(1),f=document.getElementById(d)||document.getElementsByName(d)[0];if(!f)return;if(a)a.preventDefault();var h=$(b.target);if(b.lock&&h.is(':animated')||b.onBefore&&b.onBefore.call(b,a,f,h)===false)return;if(b.stop)h.stop(true);if(b.hash){var j=f.id==d?'id':'name',k=$('<a> </a>').attr(j,d).css({position:'absolute',top:$(window).scrollTop(),left:$(window).scrollLeft()});f[j]='';$('body').prepend(k);location=e.hash;k.remove();f[j]=d}h.scrollTo(f,b).trigger('notify.serialScroll',[f])}})(jQuery);
\ No newline at end of file diff --git a/views/default/js/jquery.scrollTo-min.js.php b/views/default/js/jquery.scrollTo-min.js.php deleted file mode 100755 index 5e7877810..000000000 --- a/views/default/js/jquery.scrollTo-min.js.php +++ /dev/null @@ -1,11 +0,0 @@ -/** - * jQuery.ScrollTo - Easy element scrolling using jQuery. - * Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com - * Dual licensed under MIT and GPL. - * Date: 5/25/2009 - * @author Ariel Flesler - * @version 1.4.2 - * - * http://flesler.blogspot.com/2007/10/jqueryscrollto.html - */ -;(function(d){var k=d.scrollTo=function(a,i,e){d(window).scrollTo(a,i,e)};k.defaults={axis:'xy',duration:parseFloat(d.fn.jquery)>=1.3?0:1};k.window=function(a){return d(window)._scrollable()};d.fn._scrollable=function(){return this.map(function(){var a=this,i=!a.nodeName||d.inArray(a.nodeName.toLowerCase(),['iframe','#document','html','body'])!=-1;if(!i)return a;var e=(a.contentWindow||a).document||a.ownerDocument||a;return d.browser.safari||e.compatMode=='BackCompat'?e.body:e.documentElement})};d.fn.scrollTo=function(n,j,b){if(typeof j=='object'){b=j;j=0}if(typeof b=='function')b={onAfter:b};if(n=='max')n=9e9;b=d.extend({},k.defaults,b);j=j||b.speed||b.duration;b.queue=b.queue&&b.axis.length>1;if(b.queue)j/=2;b.offset=p(b.offset);b.over=p(b.over);return this._scrollable().each(function(){var q=this,r=d(q),f=n,s,g={},u=r.is('html,body');switch(typeof f){case'number':case'string':if(/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(f)){f=p(f);break}f=d(f,this);case'object':if(f.is||f.style)s=(f=d(f)).offset()}d.each(b.axis.split(''),function(a,i){var e=i=='x'?'Left':'Top',h=e.toLowerCase(),c='scroll'+e,l=q[c],m=k.max(q,i);if(s){g[c]=s[h]+(u?0:l-r.offset()[h]);if(b.margin){g[c]-=parseInt(f.css('margin'+e))||0;g[c]-=parseInt(f.css('border'+e+'Width'))||0}g[c]+=b.offset[h]||0;if(b.over[h])g[c]+=f[i=='x'?'width':'height']()*b.over[h]}else{var o=f[h];g[c]=o.slice&&o.slice(-1)=='%'?parseFloat(o)/100*m:o}if(/^\d+$/.test(g[c]))g[c]=g[c]<=0?0:Math.min(g[c],m);if(!a&&b.queue){if(l!=g[c])t(b.onAfterFirst);delete g[c]}});t(b.onAfter);function t(a){r.animate(g,j,b.easing,a&&function(){a.call(this,n,b)})}}).end()};k.max=function(a,i){var e=i=='x'?'Width':'Height',h='scroll'+e;if(!d(a).is('html,body'))return a[h]-d(a)[e.toLowerCase()]();var c='client'+e,l=a.ownerDocument.documentElement,m=a.ownerDocument.body;return Math.max(l[h],m[h])-Math.min(l[c],m[c])};function p(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery);
\ No newline at end of file diff --git a/views/default/js/jquery.serialScroll-min.js.php b/views/default/js/jquery.serialScroll-min.js.php deleted file mode 100755 index d716124f9..000000000 --- a/views/default/js/jquery.serialScroll-min.js.php +++ /dev/null @@ -1,10 +0,0 @@ -/* - * jQuery.SerialScroll - Animated scrolling of series - * Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com - * Dual licensed under MIT and GPL. - * Date: 06/14/2009 - * @author Ariel Flesler - * @version 1.2.2 - * http://flesler.blogspot.com/2008/02/jqueryserialscroll.html - */ -;(function(a){var b=a.serialScroll=function(c){return a(window).serialScroll(c)};b.defaults={duration:1e3,axis:"x",event:"click",start:0,step:1,lock:!0,cycle:!0,constant:!0};a.fn.serialScroll=function(c){return this.each(function(){var t=a.extend({},b.defaults,c),s=t.event,i=t.step,r=t.lazy,e=t.target?this:document,u=a(t.target||this,e),p=u[0],m=t.items,h=t.start,g=t.interval,k=t.navigation,l;if(!r){m=d()}if(t.force){f({},h)}a(t.prev||[],e).bind(s,-i,q);a(t.next||[],e).bind(s,i,q);if(!p.ssbound){u.bind("prev.serialScroll",-i,q).bind("next.serialScroll",i,q).bind("goto.serialScroll",f)}if(g){u.bind("start.serialScroll",function(v){if(!g){o();g=!0;n()}}).bind("stop.serialScroll",function(){o();g=!1})}u.bind("notify.serialScroll",function(x,w){var v=j(w);if(v>-1){h=v}});p.ssbound=!0;if(t.jump){(r?u:d()).bind(s,function(v){f(v,j(v.target))})}if(k){k=a(k,e).bind(s,function(v){v.data=Math.round(d().length/k.length)*k.index(this);f(v,this)})}function q(v){v.data+=h;f(v,this)}function f(B,z){if(!isNaN(z)){B.data=z;z=p}var C=B.data,v,D=B.type,A=t.exclude?d().slice(0,-t.exclude):d(),y=A.length,w=A[C],x=t.duration;if(D){B.preventDefault()}if(g){o();l=setTimeout(n,t.interval)}if(!w){v=C<0?0:y-1;if(h!=v){C=v}else{if(!t.cycle){return}else{C=y-v-1}}w=A[C]}if(!w||t.lock&&u.is(":animated")||D&&t.onBefore&&t.onBefore(B,w,u,d(),C)===!1){return}if(t.stop){u.queue("fx",[]).stop()}if(t.constant){x=Math.abs(x/i*(h-C))}u.scrollTo(w,x,t).trigger("notify.serialScroll",[C])}function n(){u.trigger("next.serialScroll")}function o(){clearTimeout(l)}function d(){return a(m,p)}function j(w){if(!isNaN(w)){return w}var x=d(),v;while((v=x.index(w))==-1&&w!=p){w=w.parentNode}return v}})}})(jQuery);
\ No newline at end of file diff --git a/views/default/js/jquery.tools.min.js.php b/views/default/js/jquery.tools.min.js.php deleted file mode 100644 index 1574af45b..000000000 --- a/views/default/js/jquery.tools.min.js.php +++ /dev/null @@ -1,49 +0,0 @@ -/* - * jQuery Tools 1.2.2 - The missing UI library for the Web - * - * [tabs, tabs.slideshow, tooltip, tooltip.slide, tooltip.dynamic, scrollable, scrollable.autoscroll, scrollable.navigator, overlay] - * - * NO COPYRIGHTS OR LICENSES. DO WHAT YOU LIKE. - * - * http://flowplayer.org/tools/ - * - * File generated: Mon Jun 07 08:32:38 GMT 2010 - */ -(function(c){function p(d,a,b){var e=this,l=d.add(this),h=d.find(b.tabs),j=a.jquery?a:d.children(a),i;h.length||(h=d.children());j.length||(j=d.parent().find(a));j.length||(j=c(a));c.extend(this,{click:function(f,g){var k=h.eq(f);if(typeof f=="string"&&f.replace("#","")){k=h.filter("[href*="+f.replace("#","")+"]");f=Math.max(h.index(k),0)}if(b.rotate){var n=h.length-1;if(f<0)return e.click(n,g);if(f>n)return e.click(0,g)}if(!k.length){if(i>=0)return e;f=b.initialIndex;k=h.eq(f)}if(f===i)return e; -g=g||c.Event();g.type="onBeforeClick";l.trigger(g,[f]);if(!g.isDefaultPrevented()){o[b.effect].call(e,f,function(){g.type="onClick";l.trigger(g,[f])});i=f;h.removeClass(b.current);k.addClass(b.current);return e}},getConf:function(){return b},getTabs:function(){return h},getPanes:function(){return j},getCurrentPane:function(){return j.eq(i)},getCurrentTab:function(){return h.eq(i)},getIndex:function(){return i},next:function(){return e.click(i+1)},prev:function(){return e.click(i-1)}});c.each("onBeforeClick,onClick".split(","), -function(f,g){c.isFunction(b[g])&&c(e).bind(g,b[g]);e[g]=function(k){c(e).bind(g,k);return e}});if(b.history&&c.fn.history){c.tools.history.init(h);b.event="history"}h.each(function(f){c(this).bind(b.event,function(g){e.click(f,g);return g.preventDefault()})});j.find("a[href^=#]").click(function(f){e.click(c(this).attr("href"),f)});if(location.hash)e.click(location.hash);else if(b.initialIndex===0||b.initialIndex>0)e.click(b.initialIndex)}c.tools=c.tools||{version:"1.2.2"};c.tools.tabs={conf:{tabs:"a", -current:"current",onBeforeClick:null,onClick:null,effect:"default",initialIndex:0,event:"click",rotate:false,history:false},addEffect:function(d,a){o[d]=a}};var o={"default":function(d,a){this.getPanes().hide().eq(d).show();a.call()},fade:function(d,a){var b=this.getConf(),e=b.fadeOutSpeed,l=this.getPanes();e?l.fadeOut(e):l.hide();l.eq(d).fadeIn(b.fadeInSpeed,a)},slide:function(d,a){this.getPanes().slideUp(200);this.getPanes().eq(d).slideDown(400,a)},ajax:function(d,a){this.getPanes().eq(0).load(this.getTabs().eq(d).attr("href"), -a)}},m;c.tools.tabs.addEffect("horizontal",function(d,a){m||(m=this.getPanes().eq(0).width());this.getCurrentPane().animate({width:0},function(){c(this).hide()});this.getPanes().eq(d).animate({width:m},function(){c(this).show();a.call()})});c.fn.tabs=function(d,a){var b=this.data("tabs");if(b)return b;if(c.isFunction(a))a={onBeforeClick:a};a=c.extend({},c.tools.tabs.conf,a);this.each(function(){b=new p(c(this),d,a);c(this).data("tabs",b)});return a.api?b:this}})(jQuery); -(function(d){function r(g,a){function p(f){var e=d(f);return e.length<2?e:g.parent().find(f)}var c=this,j=g.add(this),b=g.data("tabs"),h,l,m,n=false,o=p(a.next).click(function(){b.next()}),k=p(a.prev).click(function(){b.prev()});d.extend(c,{getTabs:function(){return b},getConf:function(){return a},play:function(){if(!h){var f=d.Event("onBeforePlay");j.trigger(f);if(f.isDefaultPrevented())return c;n=false;h=setInterval(b.next,a.interval);j.trigger("onPlay");b.next()}},pause:function(){if(!h)return c; -var f=d.Event("onBeforePause");j.trigger(f);if(f.isDefaultPrevented())return c;h=clearInterval(h);m=clearInterval(m);j.trigger("onPause")},stop:function(){c.pause();n=true}});d.each("onBeforePlay,onPlay,onBeforePause,onPause".split(","),function(f,e){d.isFunction(a[e])&&c.bind(e,a[e]);c[e]=function(s){return c.bind(e,s)}});if(a.autopause){var t=b.getTabs().add(o).add(k).add(b.getPanes());t.hover(function(){c.pause();l=clearInterval(l)},function(){n||(l=setTimeout(c.play,a.interval))})}if(a.autoplay)m= -setTimeout(c.play,a.interval);else c.stop();a.clickable&&b.getPanes().click(function(){b.next()});if(!b.getConf().rotate){var i=a.disabledClass;b.getIndex()||k.addClass(i);b.onBeforeClick(function(f,e){if(e){k.removeClass(i);e==b.getTabs().length-1?o.addClass(i):o.removeClass(i)}else k.addClass(i)})}}var q;q=d.tools.tabs.slideshow={conf:{next:".forward",prev:".backward",disabledClass:"disabled",autoplay:false,autopause:true,interval:3E3,clickable:true,api:false}};d.fn.slideshow=function(g){var a= -this.data("slideshow");if(a)return a;g=d.extend({},q.conf,g);this.each(function(){a=new r(d(this),g);d(this).data("slideshow",a)});return g.api?a:this}})(jQuery); -(function(f){function p(a,b,c){var h=c.relative?a.position().top:a.offset().top,e=c.relative?a.position().left:a.offset().left,i=c.position[0];h-=b.outerHeight()-c.offset[0];e+=a.outerWidth()+c.offset[1];var j=b.outerHeight()+a.outerHeight();if(i=="center")h+=j/2;if(i=="bottom")h+=j;i=c.position[1];a=b.outerWidth()+a.outerWidth();if(i=="center")e-=a/2;if(i=="left")e-=a;return{top:h,left:e}}function t(a,b){var c=this,h=a.add(c),e,i=0,j=0,m=a.attr("title"),q=n[b.effect],k,r=a.is(":input"),u=r&&a.is(":checkbox, :radio, select, :button"), -s=a.attr("type"),l=b.events[s]||b.events[r?u?"widget":"input":"def"];if(!q)throw'Nonexistent effect "'+b.effect+'"';l=l.split(/,\s*/);if(l.length!=2)throw"Tooltip: bad events configuration for "+s;a.bind(l[0],function(d){if(b.predelay){clearTimeout(i);j=setTimeout(function(){c.show(d)},b.predelay)}else c.show(d)}).bind(l[1],function(d){if(b.delay){clearTimeout(j);i=setTimeout(function(){c.hide(d)},b.delay)}else c.hide(d)});if(m&&b.cancelDefault){a.removeAttr("title");a.data("title",m)}f.extend(c, -{show:function(d){if(!e){if(m)e=f(b.layout).addClass(b.tipClass).appendTo(document.body).hide().append(m);else if(b.tip)e=f(b.tip).eq(0);else{e=a.next();e.length||(e=a.parent().next())}if(!e.length)throw"Cannot find tooltip for "+a;}if(c.isShown())return c;e.stop(true,true);var g=p(a,e,b);d=d||f.Event();d.type="onBeforeShow";h.trigger(d,[g]);if(d.isDefaultPrevented())return c;g=p(a,e,b);e.css({position:"absolute",top:g.top,left:g.left});k=true;q[0].call(c,function(){d.type="onShow";k="full";h.trigger(d)}); -g=b.events.tooltip.split(/,\s*/);e.bind(g[0],function(){clearTimeout(i);clearTimeout(j)});g[1]&&!a.is("input:not(:checkbox, :radio), textarea")&&e.bind(g[1],function(o){o.relatedTarget!=a[0]&&a.trigger(l[1].split(" ")[0])});return c},hide:function(d){if(!e||!c.isShown())return c;d=d||f.Event();d.type="onBeforeHide";h.trigger(d);if(!d.isDefaultPrevented()){k=false;n[b.effect][1].call(c,function(){d.type="onHide";k=false;h.trigger(d)});return c}},isShown:function(d){return d?k=="full":k},getConf:function(){return b}, -getTip:function(){return e},getTrigger:function(){return a}});f.each("onHide,onBeforeShow,onShow,onBeforeHide".split(","),function(d,g){f.isFunction(b[g])&&f(c).bind(g,b[g]);c[g]=function(o){f(c).bind(g,o);return c}})}f.tools=f.tools||{version:"1.2.2"};f.tools.tooltip={conf:{effect:"toggle",fadeOutSpeed:"fast",predelay:0,delay:30,opacity:1,tip:0,position:["top","center"],offset:[0,0],relative:false,cancelDefault:true,events:{def:"mouseenter,mouseleave",input:"focus,blur",widget:"focus mouseenter,blur mouseleave", -tooltip:"mouseenter,mouseleave"},layout:"<div/>",tipClass:"tooltip"},addEffect:function(a,b,c){n[a]=[b,c]}};var n={toggle:[function(a){var b=this.getConf(),c=this.getTip();b=b.opacity;b<1&&c.css({opacity:b});c.show();a.call()},function(a){this.getTip().hide();a.call()}],fade:[function(a){var b=this.getConf();this.getTip().fadeTo(b.fadeInSpeed,b.opacity,a)},function(a){this.getTip().fadeOut(this.getConf().fadeOutSpeed,a)}]};f.fn.tooltip=function(a){var b=this.data("tooltip");if(b)return b;a=f.extend(true, -{},f.tools.tooltip.conf,a);if(typeof a.position=="string")a.position=a.position.split(/,?\s/);this.each(function(){b=new t(f(this),a);f(this).data("tooltip",b)});return a.api?b:this}})(jQuery); -(function(d){var i=d.tools.tooltip;d.extend(i.conf,{direction:"up",bounce:false,slideOffset:10,slideInSpeed:200,slideOutSpeed:200,slideFade:!d.browser.msie});var e={up:["-","top"],down:["+","top"],left:["-","left"],right:["+","left"]};i.addEffect("slide",function(g){var a=this.getConf(),f=this.getTip(),b=a.slideFade?{opacity:a.opacity}:{},c=e[a.direction]||e.up;b[c[1]]=c[0]+"="+a.slideOffset;a.slideFade&&f.css({opacity:0});f.show().animate(b,a.slideInSpeed,g)},function(g){var a=this.getConf(),f=a.slideOffset, -b=a.slideFade?{opacity:0}:{},c=e[a.direction]||e.up,h=""+c[0];if(a.bounce)h=h=="+"?"-":"+";b[c[1]]=h+"="+f;this.getTip().animate(b,a.slideOutSpeed,function(){d(this).hide();g.call()})})})(jQuery); -(function(g){function j(a){var c=g(window),d=c.width()+c.scrollLeft(),h=c.height()+c.scrollTop();return[a.offset().top<=c.scrollTop(),d<=a.offset().left+a.width(),h<=a.offset().top+a.height(),c.scrollLeft()>=a.offset().left]}function k(a){for(var c=a.length;c--;)if(a[c])return false;return true}var i=g.tools.tooltip;i.dynamic={conf:{classNames:"top right bottom left"}};g.fn.dynamic=function(a){if(typeof a=="number")a={speed:a};a=g.extend({},i.dynamic.conf,a);var c=a.classNames.split(/\s/),d;this.each(function(){var h= -g(this).tooltip().onBeforeShow(function(e,f){e=this.getTip();var b=this.getConf();d||(d=[b.position[0],b.position[1],b.offset[0],b.offset[1],g.extend({},b)]);g.extend(b,d[4]);b.position=[d[0],d[1]];b.offset=[d[2],d[3]];e.css({visibility:"hidden",position:"absolute",top:f.top,left:f.left}).show();f=j(e);if(!k(f)){if(f[2]){g.extend(b,a.top);b.position[0]="top";e.addClass(c[0])}if(f[3]){g.extend(b,a.right);b.position[1]="right";e.addClass(c[1])}if(f[0]){g.extend(b,a.bottom);b.position[0]="bottom";e.addClass(c[2])}if(f[1]){g.extend(b, -a.left);b.position[1]="left";e.addClass(c[3])}if(f[0]||f[2])b.offset[0]*=-1;if(f[1]||f[3])b.offset[1]*=-1}e.css({visibility:"visible"}).hide()});h.onBeforeShow(function(){var e=this.getConf();this.getTip();setTimeout(function(){e.position=[d[0],d[1]];e.offset=[d[2],d[3]]},0)});h.onHide(function(){var e=this.getTip();e.removeClass(a.classNames)});ret=h});return a.api?ret:this}})(jQuery); -(function(e){function n(f,c){var a=e(c);return a.length<2?a:f.parent().find(c)}function t(f,c){var a=this,l=f.add(a),g=f.children(),k=0,m=c.vertical;j||(j=a);if(g.length>1)g=e(c.items,f);e.extend(a,{getConf:function(){return c},getIndex:function(){return k},getSize:function(){return a.getItems().size()},getNaviButtons:function(){return o.add(p)},getRoot:function(){return f},getItemWrap:function(){return g},getItems:function(){return g.children(c.item).not("."+c.clonedClass)},move:function(b,d){return a.seekTo(k+ -b,d)},next:function(b){return a.move(1,b)},prev:function(b){return a.move(-1,b)},begin:function(b){return a.seekTo(0,b)},end:function(b){return a.seekTo(a.getSize()-1,b)},focus:function(){return j=a},addItem:function(b){b=e(b);if(c.circular){e(".cloned:last").before(b);e(".cloned:first").replaceWith(b.clone().addClass(c.clonedClass))}else g.append(b);l.trigger("onAddItem",[b]);return a},seekTo:function(b,d,h){if(c.circular&&b===0&&k==-1&&d!==0)return a;if(!c.circular&&b<0||b>a.getSize()||b<-1)return a; -var i=b;if(b.jquery)b=a.getItems().index(b);else i=a.getItems().eq(b);var q=e.Event("onBeforeSeek");if(!h){l.trigger(q,[b,d]);if(q.isDefaultPrevented()||!i.length)return a}i=m?{top:-i.position().top}:{left:-i.position().left};k=b;j=a;if(d===undefined)d=c.speed;g.animate(i,d,c.easing,h||function(){l.trigger("onSeek",[b])});return a}});e.each(["onBeforeSeek","onSeek","onAddItem"],function(b,d){e.isFunction(c[d])&&e(a).bind(d,c[d]);a[d]=function(h){e(a).bind(d,h);return a}});if(c.circular){var r=a.getItems().slice(-1).clone().prependTo(g), -s=a.getItems().eq(1).clone().appendTo(g);r.add(s).addClass(c.clonedClass);a.onBeforeSeek(function(b,d,h){if(!b.isDefaultPrevented())if(d==-1){a.seekTo(r,h,function(){a.end(0)});return b.preventDefault()}else d==a.getSize()&&a.seekTo(s,h,function(){a.begin(0)})});a.seekTo(0,0)}var o=n(f,c.prev).click(function(){a.prev()}),p=n(f,c.next).click(function(){a.next()});!c.circular&&a.getSize()>1&&a.onBeforeSeek(function(b,d){o.toggleClass(c.disabledClass,d<=0);p.toggleClass(c.disabledClass,d>=a.getSize()- -1)});c.mousewheel&&e.fn.mousewheel&&f.mousewheel(function(b,d){if(c.mousewheel){a.move(d<0?1:-1,c.wheelSpeed||50);return false}});c.keyboard&&e(document).bind("keydown.scrollable",function(b){if(!(!c.keyboard||b.altKey||b.ctrlKey||e(b.target).is(":input")))if(!(c.keyboard!="static"&&j!=a)){var d=b.keyCode;if(m&&(d==38||d==40)){a.move(d==38?-1:1);return b.preventDefault()}if(!m&&(d==37||d==39)){a.move(d==37?-1:1);return b.preventDefault()}}});e(a).trigger("onBeforeSeek",[c.initialIndex])}e.tools=e.tools|| -{version:"1.2.2"};e.tools.scrollable={conf:{activeClass:"active",circular:false,clonedClass:"cloned",disabledClass:"disabled",easing:"swing",initialIndex:0,item:null,items:".items",keyboard:true,mousewheel:false,next:".next",prev:".prev",speed:400,vertical:false,wheelSpeed:0}};var j;e.fn.scrollable=function(f){var c=this.data("scrollable");if(c)return c;f=e.extend({},e.tools.scrollable.conf,f);this.each(function(){c=new t(e(this),f);e(this).data("scrollable",c)});return f.api?c:this}})(jQuery); -(function(c){var g=c.tools.scrollable;g.autoscroll={conf:{autoplay:true,interval:3E3,autopause:true}};c.fn.autoscroll=function(d){if(typeof d=="number")d={interval:d};var b=c.extend({},g.autoscroll.conf,d),h;this.each(function(){var a=c(this).data("scrollable");if(a)h=a;var e,i,f=true;a.play=function(){if(!e){f=false;e=setInterval(function(){a.next()},b.interval);a.next()}};a.pause=function(){e=clearInterval(e)};a.stop=function(){a.pause();f=true};b.autopause&&a.getRoot().add(a.getNaviButtons()).hover(function(){a.pause(); -clearInterval(i)},function(){f||(i=setTimeout(a.play,b.interval))});b.autoplay&&setTimeout(a.play,b.interval)});return b.api?h:this}})(jQuery); -(function(d){function p(c,g){var h=d(g);return h.length<2?h:c.parent().find(g)}var m=d.tools.scrollable;m.navigator={conf:{navi:".navi",naviItem:null,activeClass:"active",indexed:false,idPrefix:null,history:false}};d.fn.navigator=function(c){if(typeof c=="string")c={navi:c};c=d.extend({},m.navigator.conf,c);var g;this.each(function(){function h(a,b,i){e.seekTo(b);if(j){if(location.hash)location.hash=a.attr("href").replace("#","")}else return i.preventDefault()}function f(){return k.find(c.naviItem|| -"> *")}function n(a){var b=d("<"+(c.naviItem||"a")+"/>").click(function(i){h(d(this),a,i)}).attr("href","#"+a);a===0&&b.addClass(l);c.indexed&&b.text(a+1);c.idPrefix&&b.attr("id",c.idPrefix+a);return b.appendTo(k)}function o(a,b){a=f().eq(b.replace("#",""));a.length||(a=f().filter("[href="+b+"]"));a.click()}var e=d(this).data("scrollable"),k=p(e.getRoot(),c.navi),q=e.getNaviButtons(),l=c.activeClass,j=c.history&&d.fn.history;if(e)g=e;e.getNaviButtons=function(){return q.add(k)};f().length?f().each(function(a){d(this).click(function(b){h(d(this), -a,b)})}):d.each(e.getItems(),function(a){n(a)});e.onBeforeSeek(function(a,b){var i=f().eq(b);!a.isDefaultPrevented()&&i.length&&f().removeClass(l).eq(b).addClass(l)});e.onAddItem(function(a,b){b=n(e.getItems().index(b));j&&b.history(o)});j&&f().history(o)});return c.api?g:this}})(jQuery); -(function(a){function t(d,b){var c=this,i=d.add(c),o=a(window),k,f,m,g=a.tools.expose&&(b.mask||b.expose),n=Math.random().toString().slice(10);if(g){if(typeof g=="string")g={color:g};g.closeOnClick=g.closeOnEsc=false}var p=b.target||d.attr("rel");f=p?a(p):d;if(!f.length)throw"Could not find Overlay: "+p;d&&d.index(f)==-1&&d.click(function(e){c.load(e);return e.preventDefault()});a.extend(c,{load:function(e){if(c.isOpened())return c;var h=q[b.effect];if(!h)throw'Overlay: cannot find effect : "'+b.effect+ -'"';b.oneInstance&&a.each(s,function(){this.close(e)});e=e||a.Event();e.type="onBeforeLoad";i.trigger(e);if(e.isDefaultPrevented())return c;m=true;g&&a(f).expose(g);var j=b.top,r=b.left,u=f.outerWidth({margin:true}),v=f.outerHeight({margin:true});if(typeof j=="string")j=j=="center"?Math.max((o.height()-v)/2,0):parseInt(j,10)/100*o.height();if(r=="center")r=Math.max((o.width()-u)/2,0);h[0].call(c,{top:j,left:r},function(){if(m){e.type="onLoad";i.trigger(e)}});g&&b.closeOnClick&&a.mask.getMask().one("click", -c.close);b.closeOnClick&&a(document).bind("click."+n,function(l){a(l.target).parents(f).length||c.close(l)});b.closeOnEsc&&a(document).bind("keydown."+n,function(l){l.keyCode==27&&c.close(l)});return c},close:function(e){if(!c.isOpened())return c;e=e||a.Event();e.type="onBeforeClose";i.trigger(e);if(!e.isDefaultPrevented()){m=false;q[b.effect][1].call(c,function(){e.type="onClose";i.trigger(e)});a(document).unbind("click."+n).unbind("keydown."+n);g&&a.mask.close();return c}},getOverlay:function(){return f}, -getTrigger:function(){return d},getClosers:function(){return k},isOpened:function(){return m},getConf:function(){return b}});a.each("onBeforeLoad,onStart,onLoad,onBeforeClose,onClose".split(","),function(e,h){a.isFunction(b[h])&&a(c).bind(h,b[h]);c[h]=function(j){a(c).bind(h,j);return c}});k=f.find(b.close||".close");if(!k.length&&!b.close){k=a('<div class="close"></div>');f.prepend(k)}k.click(function(e){c.close(e)});b.load&&c.load()}a.tools=a.tools||{version:"1.2.2"};a.tools.overlay={addEffect:function(d, -b,c){q[d]=[b,c]},conf:{close:null,closeOnClick:true,closeOnEsc:true,closeSpeed:"fast",effect:"default",fixed:!a.browser.msie||a.browser.version>6,left:"center",load:false,mask:null,oneInstance:true,speed:"normal",target:null,top:"10%"}};var s=[],q={};a.tools.overlay.addEffect("default",function(d,b){var c=this.getConf(),i=a(window);if(!c.fixed){d.top+=i.scrollTop();d.left+=i.scrollLeft()}d.position=c.fixed?"fixed":"absolute";this.getOverlay().css(d).fadeIn(c.speed,b)},function(d){this.getOverlay().fadeOut(this.getConf().closeSpeed, -d)});a.fn.overlay=function(d){var b=this.data("overlay");if(b)return b;if(a.isFunction(d))d={onBeforeLoad:d};d=a.extend(true,{},a.tools.overlay.conf,d);this.each(function(){b=new t(a(this),d);s.push(b);a(this).data("overlay",b)});return d.api?b:this}})(jQuery); diff --git a/views/default/js/json2.js.php b/views/default/js/json2.js.php deleted file mode 100644 index 7ae503202..000000000 --- a/views/default/js/json2.js.php +++ /dev/null @@ -1,476 +0,0 @@ -/* - http://www.JSON.org/json2.js - 2009-06-29 - - Public Domain. - - NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. - - See http://www.JSON.org/js.html - - This file creates a global JSON object containing two methods: stringify - and parse. - - JSON.stringify(value, replacer, space) - value any JavaScript value, usually an object or array. - - replacer an optional parameter that determines how object - values are stringified for objects. It can be a - function or an array of strings. - - space an optional parameter that specifies the indentation - of nested structures. If it is omitted, the text will - be packed without extra whitespace. If it is a number, - it will specify the number of spaces to indent at each - level. If it is a string (such as '\t' or ' '), - it contains the characters used to indent at each level. - - This method produces a JSON text from a JavaScript value. - - When an object value is found, if the object contains a toJSON - method, its toJSON method will be called and the result will be - stringified. A toJSON method does not serialize: it returns the - value represented by the name/value pair that should be serialized, - or undefined if nothing should be serialized. The toJSON method - will be passed the key associated with the value, and this will be - bound to the object holding the key. - - For example, this would serialize Dates as ISO strings. - - Date.prototype.toJSON = function (key) { - function f(n) { - // Format integers to have at least two digits. - return n < 10 ? '0' + n : n; - } - - return this.getUTCFullYear() + '-' + - f(this.getUTCMonth() + 1) + '-' + - f(this.getUTCDate()) + 'T' + - f(this.getUTCHours()) + ':' + - f(this.getUTCMinutes()) + ':' + - f(this.getUTCSeconds()) + 'Z'; - }; - - You can provide an optional replacer method. It will be passed the - key and value of each member, with this bound to the containing - object. The value that is returned from your method will be - serialized. If your method returns undefined, then the member will - be excluded from the serialization. - - If the replacer parameter is an array of strings, then it will be - used to select the members to be serialized. It filters the results - such that only members with keys listed in the replacer array are - stringified. - - Values that do not have JSON representations, such as undefined or - functions, will not be serialized. Such values in objects will be - dropped; in arrays they will be replaced with null. You can use - a replacer function to replace those with JSON values. - JSON.stringify(undefined) returns undefined. - - The optional space parameter produces a stringification of the - value that is filled with line breaks and indentation to make it - easier to read. - - If the space parameter is a non-empty string, then that string will - be used for indentation. If the space parameter is a number, then - the indentation will be that many spaces. - - Example: - - text = JSON.stringify(['e', {pluribus: 'unum'}]); - // text is '["e",{"pluribus":"unum"}]' - - - text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t'); - // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]' - - text = JSON.stringify([new Date()], function (key, value) { - return this[key] instanceof Date ? - 'Date(' + this[key] + ')' : value; - }); - // text is '["Date(---current time---)"]' - - - JSON.parse(text, reviver) - This method parses a JSON text to produce an object or array. - It can throw a SyntaxError exception. - - The optional reviver parameter is a function that can filter and - transform the results. It receives each of the keys and values, - and its return value is used instead of the original value. - If it returns what it received, then the structure is not modified. - If it returns undefined then the member is deleted. - - Example: - - // Parse the text. Values that look like ISO date strings will - // be converted to Date objects. - - myData = JSON.parse(text, function (key, value) { - var a; - if (typeof value === 'string') { - a = -/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value); - if (a) { - return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], - +a[5], +a[6])); - } - } - return value; - }); - - myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) { - var d; - if (typeof value === 'string' && - value.slice(0, 5) === 'Date(' && - value.slice(-1) === ')') { - d = new Date(value.slice(5, -1)); - if (d) { - return d; - } - } - return value; - }); - - - This is a reference implementation. You are free to copy, modify, or - redistribute. - - This code should be minified before deployment. - See http://javascript.crockford.com/jsmin.html - - USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO - NOT CONTROL. -*/ - -/*jslint evil: true */ - -/*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply, - call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours, - getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join, - lastIndex, length, parse, prototype, push, replace, slice, stringify, - test, toJSON, toString, valueOf -*/ - -// Create a JSON object only if one does not already exist. We create the -// methods in a closure to avoid creating global variables. - -var JSON = JSON || {}; - -(function () { - - function f(n) { - // Format integers to have at least two digits. - return n < 10 ? '0' + n : n; - } - - if (typeof Date.prototype.toJSON !== 'function') { - - Date.prototype.toJSON = function (key) { - - return isFinite(this.valueOf()) ? - this.getUTCFullYear() + '-' + - f(this.getUTCMonth() + 1) + '-' + - f(this.getUTCDate()) + 'T' + - f(this.getUTCHours()) + ':' + - f(this.getUTCMinutes()) + ':' + - f(this.getUTCSeconds()) + 'Z' : null; - }; - - String.prototype.toJSON = - Number.prototype.toJSON = - Boolean.prototype.toJSON = function (key) { - return this.valueOf(); - }; - } - - var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, - escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, - gap, - indent, - meta = { // table of character substitutions - '\b': '\\b', - '\t': '\\t', - '\n': '\\n', - '\f': '\\f', - '\r': '\\r', - '"' : '\\"', - '\\': '\\\\' - }, - rep; - - - function quote(string) { - -// If the string contains no control characters, no quote characters, and no -// backslash characters, then we can safely slap some quotes around it. -// Otherwise we must also replace the offending characters with safe escape -// sequences. - - escapable.lastIndex = 0; - return escapable.test(string) ? - '"' + string.replace(escapable, function (a) { - var c = meta[a]; - return typeof c === 'string' ? c : - '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); - }) + '"' : - '"' + string + '"'; - } - - - function str(key, holder) { - -// Produce a string from holder[key]. - - var i, // The loop counter. - k, // The member key. - v, // The member value. - length, - mind = gap, - partial, - value = holder[key]; - -// If the value has a toJSON method, call it to obtain a replacement value. - - if (value && typeof value === 'object' && - typeof value.toJSON === 'function') { - value = value.toJSON(key); - } - -// If we were called with a replacer function, then call the replacer to -// obtain a replacement value. - - if (typeof rep === 'function') { - value = rep.call(holder, key, value); - } - -// What happens next depends on the value's type. - - switch (typeof value) { - case 'string': - return quote(value); - - case 'number': - -// JSON numbers must be finite. Encode non-finite numbers as null. - - return isFinite(value) ? String(value) : 'null'; - - case 'boolean': - case 'null': - -// If the value is a boolean or null, convert it to a string. Note: -// typeof null does not produce 'null'. The case is included here in -// the remote chance that this gets fixed someday. - - return String(value); - -// If the type is 'object', we might be dealing with an object or an array or -// null. - - case 'object': - -// Due to a specification blunder in ECMAScript, typeof null is 'object', -// so watch out for that case. - - if (!value) { - return 'null'; - } - -// Make an array to hold the partial results of stringifying this object value. - - gap += indent; - partial = []; - -// Is the value an array? - - if (Object.prototype.toString.apply(value) === '[object Array]') { - -// The value is an array. Stringify every element. Use null as a placeholder -// for non-JSON values. - - length = value.length; - for (i = 0; i < length; i += 1) { - partial[i] = str(i, value) || 'null'; - } - -// Join all of the elements together, separated with commas, and wrap them in -// brackets. - - v = partial.length === 0 ? '[]' : - gap ? '[\n' + gap + - partial.join(',\n' + gap) + '\n' + - mind + ']' : - '[' + partial.join(',') + ']'; - gap = mind; - return v; - } - -// If the replacer is an array, use it to select the members to be stringified. - - if (rep && typeof rep === 'object') { - length = rep.length; - for (i = 0; i < length; i += 1) { - k = rep[i]; - if (typeof k === 'string') { - v = str(k, value); - if (v) { - partial.push(quote(k) + (gap ? ': ' : ':') + v); - } - } - } - } else { - -// Otherwise, iterate through all of the keys in the object. - - for (k in value) { - if (Object.hasOwnProperty.call(value, k)) { - v = str(k, value); - if (v) { - partial.push(quote(k) + (gap ? ': ' : ':') + v); - } - } - } - } - -// Join all of the member texts together, separated with commas, -// and wrap them in braces. - - v = partial.length === 0 ? '{}' : - gap ? '{\n' + gap + partial.join(',\n' + gap) + '\n' + - mind + '}' : '{' + partial.join(',') + '}'; - gap = mind; - return v; - } - } - -// If the JSON object does not yet have a stringify method, give it one. - - if (typeof JSON.stringify !== 'function') { - JSON.stringify = function (value, replacer, space) { - -// The stringify method takes a value and an optional replacer, and an optional -// space parameter, and returns a JSON text. The replacer can be a function -// that can replace values, or an array of strings that will select the keys. -// A default replacer method can be provided. Use of the space parameter can -// produce text that is more easily readable. - - var i; - gap = ''; - indent = ''; - -// If the space parameter is a number, make an indent string containing that -// many spaces. - - if (typeof space === 'number') { - for (i = 0; i < space; i += 1) { - indent += ' '; - } - -// If the space parameter is a string, it will be used as the indent string. - - } else if (typeof space === 'string') { - indent = space; - } - -// If there is a replacer, it must be a function or an array. -// Otherwise, throw an error. - - rep = replacer; - if (replacer && typeof replacer !== 'function' && - (typeof replacer !== 'object' || - typeof replacer.length !== 'number')) { - throw new Error('JSON.stringify'); - } - -// Make a fake root object containing our value under the key of ''. -// Return the result of stringifying the value. - - return str('', {'': value}); - }; - } - - -// If the JSON object does not yet have a parse method, give it one. - - if (typeof JSON.parse !== 'function') { - JSON.parse = function (text, reviver) { - -// The parse method takes a text and an optional reviver function, and returns -// a JavaScript value if the text is a valid JSON text. - - var j; - - function walk(holder, key) { - -// The walk method is used to recursively walk the resulting structure so -// that modifications can be made. - - var k, v, value = holder[key]; - if (value && typeof value === 'object') { - for (k in value) { - if (Object.hasOwnProperty.call(value, k)) { - v = walk(value, k); - if (v !== undefined) { - value[k] = v; - } else { - delete value[k]; - } - } - } - } - return reviver.call(holder, key, value); - } - - -// Parsing happens in four stages. In the first stage, we replace certain -// Unicode characters with escape sequences. JavaScript handles many characters -// incorrectly, either silently deleting them, or treating them as line endings. - - cx.lastIndex = 0; - if (cx.test(text)) { - text = text.replace(cx, function (a) { - return '\\u' + - ('0000' + a.charCodeAt(0).toString(16)).slice(-4); - }); - } - -// In the second stage, we run the text against regular expressions that look -// for non-JSON patterns. We are especially concerned with '()' and 'new' -// because they can cause invocation, and '=' because it can cause mutation. -// But just to be safe, we want to reject all unexpected forms. - -// We split the second stage into 4 regexp operations in order to work around -// crippling inefficiencies in IE's and Safari's regexp engines. First we -// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we -// replace all simple value tokens with ']' characters. Third, we delete all -// open brackets that follow a colon or comma or that begin the text. Finally, -// we look to see that the remaining characters are only whitespace or ']' or -// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval. - - if (/^[\],:{}\s]*$/. -test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@'). -replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']'). -replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) { - -// In the third stage we use the eval function to compile the text into a -// JavaScript structure. The '{' operator is subject to a syntactic ambiguity -// in JavaScript: it can begin a block or an object literal. We wrap the text -// in parens to eliminate the ambiguity. - - j = eval('(' + text + ')'); - -// In the optional fourth stage, we recursively walk the new structure, passing -// each name/value pair to a reviver function for possible transformation. - - return typeof reviver === 'function' ? - walk({'': j}, '') : j; - } - -// If the text is not JSON parseable, then a SyntaxError is thrown. - - throw new SyntaxError('JSON.parse'); - }; - } -}()); diff --git a/views/default/js/languages.php b/views/default/js/languages.php new file mode 100644 index 000000000..c51d7bcb2 --- /dev/null +++ b/views/default/js/languages.php @@ -0,0 +1,15 @@ +<?php +/** + * @uses $vars['language'] + */ +global $CONFIG; + +$language = $vars['language']; + +$translations = $CONFIG->translations['en']; + +if ($language != 'en') { + $translations = array_merge($translations, $CONFIG->translations[$language]); +} + +echo json_encode($translations);
\ No newline at end of file diff --git a/views/default/js/languages/en.php b/views/default/js/languages/en.php new file mode 100644 index 000000000..8a604cc12 --- /dev/null +++ b/views/default/js/languages/en.php @@ -0,0 +1,2 @@ +<?php +echo elgg_view('js/languages', array('language' => 'en'));
\ No newline at end of file diff --git a/views/default/js/lightbox.php b/views/default/js/lightbox.php new file mode 100644 index 000000000..a1f018eea --- /dev/null +++ b/views/default/js/lightbox.php @@ -0,0 +1,36 @@ +<?php +/** + * Elgg lightbox + * + * Usage + * Call elgg_load_js('lightbox') and elgg_load_css('lightbox') then + * apply the class elgg-lightbox to links. + * + * Advanced Usage + * Elgg is distributed with the Fancybox jQuery library. Please go to + * http://fancybox.net for more information on the options of this lightbox. + * + * Overriding + * In a plugin, override this view and override the registration for the + * lightbox JavaScript and CSS (@see elgg_views_boot()). + * + * @todo add support for passing options: $('#myplugin-lightbox').elgg.ui.lightbox(options); + */ + +if (0) { ?><script><?php } +?> + +/** + * Lightbox initialization + */ +elgg.ui.lightbox_init = function() { + $(".elgg-lightbox").fancybox(); +} + +elgg.register_hook_handler('init', 'system', elgg.ui.lightbox_init); + +<?php + +$js_path = elgg_get_config('path'); +$js_path = "{$js_path}vendors/jquery/fancybox/jquery.fancybox-1.3.4.pack.js"; +include $js_path; diff --git a/views/default/js/md5.js.php b/views/default/js/md5.js.php deleted file mode 100644 index 4284f62bb..000000000 --- a/views/default/js/md5.js.php +++ /dev/null @@ -1,261 +0,0 @@ -/* - * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message - * Digest Algorithm, as defined in RFC 1321. - * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002. - * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet - * Distributed under the BSD License - * See http://pajhome.org.uk/crypt/md5 for more info. - */ - -/* - * Configurable variables. You may need to tweak these to be compatible with - * the server-side, but the defaults work in most cases. - */ -var hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase */ -var b64pad = ""; /* base-64 pad character. "=" for strict RFC compliance */ -var chrsz = 8; /* bits per input character. 8 - ASCII; 16 - Unicode */ - -/* - * These are the functions you'll usually want to call - * They take string arguments and return either hex or base-64 encoded strings - */ -function hex_md5(s){ return binl2hex(core_md5(str2binl(s), s.length * chrsz));} -function b64_md5(s){ return binl2b64(core_md5(str2binl(s), s.length * chrsz));} -function str_md5(s){ return binl2str(core_md5(str2binl(s), s.length * chrsz));} -function hex_hmac_md5(key, data) { return binl2hex(core_hmac_md5(key, data)); } -function b64_hmac_md5(key, data) { return binl2b64(core_hmac_md5(key, data)); } -function str_hmac_md5(key, data) { return binl2str(core_hmac_md5(key, data)); } - -/* - * Perform a simple self-test to see if the VM is working - */ -function md5_vm_test() -{ - return hex_md5("abc") == "900150983cd24fb0d6963f7d28e17f72"; -} - -/* - * Calculate the MD5 of an array of little-endian words, and a bit length - */ -function core_md5(x, len) -{ - /* append padding */ - x[len >> 5] |= 0x80 << ((len) % 32); - x[(((len + 64) >>> 9) << 4) + 14] = len; - - var a = 1732584193; - var b = -271733879; - var c = -1732584194; - var d = 271733878; - - var olda, oldb, oldc, oldd; - for(var i = 0; i < x.length; i += 16) - { - olda = a; - oldb = b; - oldc = c; - oldd = d; - - a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936); - d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586); - c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819); - b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330); - a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897); - d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426); - c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341); - b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983); - a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416); - d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417); - c = md5_ff(c, d, a, b, x[i+10], 17, -42063); - b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162); - a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682); - d = md5_ff(d, a, b, c, x[i+13], 12, -40341101); - c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290); - b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329); - - a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510); - d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632); - c = md5_gg(c, d, a, b, x[i+11], 14, 643717713); - b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302); - a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691); - d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083); - c = md5_gg(c, d, a, b, x[i+15], 14, -660478335); - b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848); - a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438); - d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690); - c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961); - b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501); - a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467); - d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784); - c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473); - b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734); - - a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558); - d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463); - c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562); - b = md5_hh(b, c, d, a, x[i+14], 23, -35309556); - a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060); - d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353); - c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632); - b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640); - a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174); - d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222); - c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979); - b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189); - a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487); - d = md5_hh(d, a, b, c, x[i+12], 11, -421815835); - c = md5_hh(c, d, a, b, x[i+15], 16, 530742520); - b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651); - - a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844); - d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415); - c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905); - b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055); - a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571); - d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606); - c = md5_ii(c, d, a, b, x[i+10], 15, -1051523); - b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799); - a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359); - d = md5_ii(d, a, b, c, x[i+15], 10, -30611744); - c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380); - b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649); - a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070); - d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379); - c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259); - b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551); - - a = safe_add(a, olda); - b = safe_add(b, oldb); - c = safe_add(c, oldc); - d = safe_add(d, oldd); - } - return [a, b, c, d]; -} - -/* - * These functions implement the four basic operations the algorithm uses. - */ -function md5_cmn(q, a, b, x, s, t) -{ - return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b); -} -function md5_ff(a, b, c, d, x, s, t) -{ - return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t); -} -function md5_gg(a, b, c, d, x, s, t) -{ - return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t); -} -function md5_hh(a, b, c, d, x, s, t) -{ - return md5_cmn(b ^ c ^ d, a, b, x, s, t); -} -function md5_ii(a, b, c, d, x, s, t) -{ - return md5_cmn(c ^ (b | (~d)), a, b, x, s, t); -} - -/* - * Calculate the HMAC-MD5, of a key and some data - */ -function core_hmac_md5(key, data) -{ - var bkey = str2binl(key); - if(bkey.length > 16) { bkey = core_md5(bkey, key.length * chrsz); } - - var ipad = new Array(16), opad = new Array(16); - for(var i = 0; i < 16; i++) - { - ipad[i] = bkey[i] ^ 0x36363636; - opad[i] = bkey[i] ^ 0x5C5C5C5C; - } - - var hash = core_md5(ipad.concat(str2binl(data)), 512 + data.length * chrsz); - return core_md5(opad.concat(hash), 512 + 128); -} - -/* - * Add integers, wrapping at 2^32. This uses 16-bit operations internally - * to work around bugs in some JS interpreters. - */ -function safe_add(x, y) -{ - var lsw = (x & 0xFFFF) + (y & 0xFFFF); - var msw = (x >> 16) + (y >> 16) + (lsw >> 16); - return (msw << 16) | (lsw & 0xFFFF); -} - -/* - * Bitwise rotate a 32-bit number to the left. - */ -function bit_rol(num, cnt) -{ - return (num << cnt) | (num >>> (32 - cnt)); -} - -/* - * Convert a string to an array of little-endian words - * If chrsz is ASCII, characters >255 have their hi-byte silently ignored. - */ -function str2binl(str) -{ - var bin = []; - var mask = (1 << chrsz) - 1; - for(var i = 0; i < str.length * chrsz; i += chrsz) - { - bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (i%32); - } - return bin; -} - -/* - * Convert an array of little-endian words to a string - */ -function binl2str(bin) -{ - var str = ""; - var mask = (1 << chrsz) - 1; - for(var i = 0; i < bin.length * 32; i += chrsz) - { - str += String.fromCharCode((bin[i>>5] >>> (i % 32)) & mask); - } - return str; -} - -/* - * Convert an array of little-endian words to a hex string. - */ -function binl2hex(binarray) -{ - var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef"; - var str = ""; - for(var i = 0; i < binarray.length * 4; i++) - { - str += hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) + - hex_tab.charAt((binarray[i>>2] >> ((i%4)*8 )) & 0xF); - } - return str; -} - -/* - * Convert an array of little-endian words to a base-64 string - */ -function binl2b64(binarray) -{ - var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; - var str = ""; - var triplet, j; - for(var i = 0; i < binarray.length * 4; i += 3) - { - triplet = (((binarray[i >> 2] >> 8 * ( i %4)) & 0xFF) << 16) | - (((binarray[i+1 >> 2] >> 8 * ((i+1)%4)) & 0xFF) << 8 ) | - ((binarray[i+2 >> 2] >> 8 * ((i+2)%4)) & 0xFF); - for(j = 0; j < 4; j++) - { - if(i * 8 + j * 6 > binarray.length * 32) { str += b64pad; } - else { str += tab.charAt((triplet >> 6*(3-j)) & 0x3F); } - } - } - return str; -} diff --git a/views/default/js/sha1.js.php b/views/default/js/sha1.js.php deleted file mode 100644 index db3bf0544..000000000 --- a/views/default/js/sha1.js.php +++ /dev/null @@ -1,207 +0,0 @@ -/* - * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined - * in FIPS PUB 180-1 - * Version 2.1a Copyright Paul Johnston 2000 - 2002. - * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet - * Distributed under the BSD License - * See http://pajhome.org.uk/crypt/md5 for details. - */ - -/* - * Configurable variables. You may need to tweak these to be compatible with - * the server-side, but the defaults work in most cases. - */ -var hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase */ -var b64pad = ""; /* base-64 pad character. "=" for strict RFC compliance */ -var chrsz = 8; /* bits per input character. 8 - ASCII; 16 - Unicode */ - -/* - * These are the functions you'll usually want to call - * They take string arguments and return either hex or base-64 encoded strings - */ -function hex_sha1(s){return binb2hex(core_sha1(str2binb(s),s.length * chrsz));} -function b64_sha1(s){return binb2b64(core_sha1(str2binb(s),s.length * chrsz));} -function str_sha1(s){return binb2str(core_sha1(str2binb(s),s.length * chrsz));} -function hex_hmac_sha1(key, data){ return binb2hex(core_hmac_sha1(key, data));} -function b64_hmac_sha1(key, data){ return binb2b64(core_hmac_sha1(key, data));} -function str_hmac_sha1(key, data){ return binb2str(core_hmac_sha1(key, data));} - -/* - * Perform a simple self-test to see if the VM is working - */ -function sha1_vm_test() -{ - return hex_sha1("abc") == "a9993e364706816aba3e25717850c26c9cd0d89d"; -} - -/* - * Calculate the SHA-1 of an array of big-endian words, and a bit length - */ -function core_sha1(x, len) -{ - /* append padding */ - x[len >> 5] |= 0x80 << (24 - len % 32); - x[((len + 64 >> 9) << 4) + 15] = len; - - var w = new Array(80); - var a = 1732584193; - var b = -271733879; - var c = -1732584194; - var d = 271733878; - var e = -1009589776; - - var i, j, t, olda, oldb, oldc, oldd, olde; - for (i = 0; i < x.length; i += 16) - { - olda = a; - oldb = b; - oldc = c; - oldd = d; - olde = e; - - for (j = 0; j < 80; j++) - { - if (j < 16) { w[j] = x[i + j]; } - else { w[j] = rol(w[j-3] ^ w[j-8] ^ w[j-14] ^ w[j-16], 1); } - t = safe_add(safe_add(rol(a, 5), sha1_ft(j, b, c, d)), - safe_add(safe_add(e, w[j]), sha1_kt(j))); - e = d; - d = c; - c = rol(b, 30); - b = a; - a = t; - } - - a = safe_add(a, olda); - b = safe_add(b, oldb); - c = safe_add(c, oldc); - d = safe_add(d, oldd); - e = safe_add(e, olde); - } - return [a, b, c, d, e]; -} - -/* - * Perform the appropriate triplet combination function for the current - * iteration - */ -function sha1_ft(t, b, c, d) -{ - if (t < 20) { return (b & c) | ((~b) & d); } - if (t < 40) { return b ^ c ^ d; } - if (t < 60) { return (b & c) | (b & d) | (c & d); } - return b ^ c ^ d; -} - -/* - * Determine the appropriate additive constant for the current iteration - */ -function sha1_kt(t) -{ - return (t < 20) ? 1518500249 : (t < 40) ? 1859775393 : - (t < 60) ? -1894007588 : -899497514; -} - -/* - * Calculate the HMAC-SHA1 of a key and some data - */ -function core_hmac_sha1(key, data) -{ - var bkey = str2binb(key); - if (bkey.length > 16) { bkey = core_sha1(bkey, key.length * chrsz); } - - var ipad = new Array(16), opad = new Array(16); - for (var i = 0; i < 16; i++) - { - ipad[i] = bkey[i] ^ 0x36363636; - opad[i] = bkey[i] ^ 0x5C5C5C5C; - } - - var hash = core_sha1(ipad.concat(str2binb(data)), 512 + data.length * chrsz); - return core_sha1(opad.concat(hash), 512 + 160); -} - -/* - * Add integers, wrapping at 2^32. This uses 16-bit operations internally - * to work around bugs in some JS interpreters. - */ -function safe_add(x, y) -{ - var lsw = (x & 0xFFFF) + (y & 0xFFFF); - var msw = (x >> 16) + (y >> 16) + (lsw >> 16); - return (msw << 16) | (lsw & 0xFFFF); -} - -/* - * Bitwise rotate a 32-bit number to the left. - */ -function rol(num, cnt) -{ - return (num << cnt) | (num >>> (32 - cnt)); -} - -/* - * Convert an 8-bit or 16-bit string to an array of big-endian words - * In 8-bit function, characters >255 have their hi-byte silently ignored. - */ -function str2binb(str) -{ - var bin = []; - var mask = (1 << chrsz) - 1; - for (var i = 0; i < str.length * chrsz; i += chrsz) - { - bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (32 - chrsz - i%32); - } - return bin; -} - -/* - * Convert an array of big-endian words to a string - */ -function binb2str(bin) -{ - var str = ""; - var mask = (1 << chrsz) - 1; - for (var i = 0; i < bin.length * 32; i += chrsz) - { - str += String.fromCharCode((bin[i>>5] >>> (32 - chrsz - i%32)) & mask); - } - return str; -} - -/* - * Convert an array of big-endian words to a hex string. - */ -function binb2hex(binarray) -{ - var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef"; - var str = ""; - for (var i = 0; i < binarray.length * 4; i++) - { - str += hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8+4)) & 0xF) + - hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8 )) & 0xF); - } - return str; -} - -/* - * Convert an array of big-endian words to a base-64 string - */ -function binb2b64(binarray) -{ - var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; - var str = ""; - var triplet, j; - for (var i = 0; i < binarray.length * 4; i += 3) - { - triplet = (((binarray[i >> 2] >> 8 * (3 - i %4)) & 0xFF) << 16) | - (((binarray[i+1 >> 2] >> 8 * (3 - (i+1)%4)) & 0xFF) << 8 ) | - ((binarray[i+2 >> 2] >> 8 * (3 - (i+2)%4)) & 0xFF); - for (j = 0; j < 4; j++) - { - if (i * 8 + j * 6 > binarray.length * 32) { str += b64pad; } - else { str += tab.charAt((triplet >> 6*(3-j)) & 0x3F); } - } - } - return str; -} diff --git a/views/default/js/strophe.min.js.php b/views/default/js/strophe.min.js.php deleted file mode 100644 index f0eb17906..000000000 --- a/views/default/js/strophe.min.js.php +++ /dev/null @@ -1 +0,0 @@ -var Base64=(function(){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var obj={encode:function(input){var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;do{chr1=input.charCodeAt(i++);chr2=input.charCodeAt(i++);chr3=input.charCodeAt(i++);enc1=chr1>>2;enc2=((chr1&3)<<4)|(chr2>>4);enc3=((chr2&15)<<2)|(chr3>>6);enc4=chr3&63;if(isNaN(chr2)){enc3=enc4=64}else{if(isNaN(chr3)){enc4=64}}output=output+keyStr.charAt(enc1)+keyStr.charAt(enc2)+keyStr.charAt(enc3)+keyStr.charAt(enc4)}while(i<input.length);return output},decode:function(input){var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=(enc1<<2)|(enc2>>4);chr2=((enc2&15)<<4)|(enc3>>2);chr3=((enc3&3)<<6)|enc4;output=output+String.fromCharCode(chr1);if(enc3!=64){output=output+String.fromCharCode(chr2)}if(enc4!=64){output=output+String.fromCharCode(chr3)}}while(i<input.length);return output}};return obj})();var MD5=(function(){var hexcase=0;var b64pad="";var chrsz=8;var safe_add=function(x,y){var lsw=(x&65535)+(y&65535);var msw=(x>>16)+(y>>16)+(lsw>>16);return(msw<<16)|(lsw&65535)};var bit_rol=function(num,cnt){return(num<<cnt)|(num>>>(32-cnt))};var str2binl=function(str){var bin=[];var mask=(1<<chrsz)-1;for(var i=0;i<str.length*chrsz;i+=chrsz){bin[i>>5]|=(str.charCodeAt(i/chrsz)&mask)<<(i%32)}return bin};var binl2str=function(bin){var str="";var mask=(1<<chrsz)-1;for(var i=0;i<bin.length*32;i+=chrsz){str+=String.fromCharCode((bin[i>>5]>>>(i%32))&mask)}return str};var binl2hex=function(binarray){var hex_tab=hexcase?"0123456789ABCDEF":"0123456789abcdef";var str="";for(var i=0;i<binarray.length*4;i++){str+=hex_tab.charAt((binarray[i>>2]>>((i%4)*8+4))&15)+hex_tab.charAt((binarray[i>>2]>>((i%4)*8))&15)}return str};var binl2b64=function(binarray){var tab="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var str="";var triplet,j;for(var i=0;i<binarray.length*4;i+=3){triplet=(((binarray[i>>2]>>8*(i%4))&255)<<16)|(((binarray[i+1>>2]>>8*((i+1)%4))&255)<<8)|((binarray[i+2>>2]>>8*((i+2)%4))&255);for(j=0;j<4;j++){if(i*8+j*6>binarray.length*32){str+=b64pad}else{str+=tab.charAt((triplet>>6*(3-j))&63)}}}return str};var md5_cmn=function(q,a,b,x,s,t){return safe_add(bit_rol(safe_add(safe_add(a,q),safe_add(x,t)),s),b)};var md5_ff=function(a,b,c,d,x,s,t){return md5_cmn((b&c)|((~b)&d),a,b,x,s,t)};var md5_gg=function(a,b,c,d,x,s,t){return md5_cmn((b&d)|(c&(~d)),a,b,x,s,t)};var md5_hh=function(a,b,c,d,x,s,t){return md5_cmn(b^c^d,a,b,x,s,t)};var md5_ii=function(a,b,c,d,x,s,t){return md5_cmn(c^(b|(~d)),a,b,x,s,t)};var core_md5=function(x,len){x[len>>5]|=128<<((len)%32);x[(((len+64)>>>9)<<4)+14]=len;var a=1732584193;var b=-271733879;var c=-1732584194;var d=271733878;var olda,oldb,oldc,oldd;for(var i=0;i<x.length;i+=16){olda=a;oldb=b;oldc=c;oldd=d;a=md5_ff(a,b,c,d,x[i+0],7,-680876936);d=md5_ff(d,a,b,c,x[i+1],12,-389564586);c=md5_ff(c,d,a,b,x[i+2],17,606105819);b=md5_ff(b,c,d,a,x[i+3],22,-1044525330);a=md5_ff(a,b,c,d,x[i+4],7,-176418897);d=md5_ff(d,a,b,c,x[i+5],12,1200080426);c=md5_ff(c,d,a,b,x[i+6],17,-1473231341);b=md5_ff(b,c,d,a,x[i+7],22,-45705983);a=md5_ff(a,b,c,d,x[i+8],7,1770035416);d=md5_ff(d,a,b,c,x[i+9],12,-1958414417);c=md5_ff(c,d,a,b,x[i+10],17,-42063);b=md5_ff(b,c,d,a,x[i+11],22,-1990404162);a=md5_ff(a,b,c,d,x[i+12],7,1804603682);d=md5_ff(d,a,b,c,x[i+13],12,-40341101);c=md5_ff(c,d,a,b,x[i+14],17,-1502002290);b=md5_ff(b,c,d,a,x[i+15],22,1236535329);a=md5_gg(a,b,c,d,x[i+1],5,-165796510);d=md5_gg(d,a,b,c,x[i+6],9,-1069501632);c=md5_gg(c,d,a,b,x[i+11],14,643717713);b=md5_gg(b,c,d,a,x[i+0],20,-373897302);a=md5_gg(a,b,c,d,x[i+5],5,-701558691);d=md5_gg(d,a,b,c,x[i+10],9,38016083);c=md5_gg(c,d,a,b,x[i+15],14,-660478335);b=md5_gg(b,c,d,a,x[i+4],20,-405537848);a=md5_gg(a,b,c,d,x[i+9],5,568446438);d=md5_gg(d,a,b,c,x[i+14],9,-1019803690);c=md5_gg(c,d,a,b,x[i+3],14,-187363961);b=md5_gg(b,c,d,a,x[i+8],20,1163531501);a=md5_gg(a,b,c,d,x[i+13],5,-1444681467);d=md5_gg(d,a,b,c,x[i+2],9,-51403784);c=md5_gg(c,d,a,b,x[i+7],14,1735328473);b=md5_gg(b,c,d,a,x[i+12],20,-1926607734);a=md5_hh(a,b,c,d,x[i+5],4,-378558);d=md5_hh(d,a,b,c,x[i+8],11,-2022574463);c=md5_hh(c,d,a,b,x[i+11],16,1839030562);b=md5_hh(b,c,d,a,x[i+14],23,-35309556);a=md5_hh(a,b,c,d,x[i+1],4,-1530992060);d=md5_hh(d,a,b,c,x[i+4],11,1272893353);c=md5_hh(c,d,a,b,x[i+7],16,-155497632);b=md5_hh(b,c,d,a,x[i+10],23,-1094730640);a=md5_hh(a,b,c,d,x[i+13],4,681279174);d=md5_hh(d,a,b,c,x[i+0],11,-358537222);c=md5_hh(c,d,a,b,x[i+3],16,-722521979);b=md5_hh(b,c,d,a,x[i+6],23,76029189);a=md5_hh(a,b,c,d,x[i+9],4,-640364487);d=md5_hh(d,a,b,c,x[i+12],11,-421815835);c=md5_hh(c,d,a,b,x[i+15],16,530742520);b=md5_hh(b,c,d,a,x[i+2],23,-995338651);a=md5_ii(a,b,c,d,x[i+0],6,-198630844);d=md5_ii(d,a,b,c,x[i+7],10,1126891415);c=md5_ii(c,d,a,b,x[i+14],15,-1416354905);b=md5_ii(b,c,d,a,x[i+5],21,-57434055);a=md5_ii(a,b,c,d,x[i+12],6,1700485571);d=md5_ii(d,a,b,c,x[i+3],10,-1894986606);c=md5_ii(c,d,a,b,x[i+10],15,-1051523);b=md5_ii(b,c,d,a,x[i+1],21,-2054922799);a=md5_ii(a,b,c,d,x[i+8],6,1873313359);d=md5_ii(d,a,b,c,x[i+15],10,-30611744);c=md5_ii(c,d,a,b,x[i+6],15,-1560198380);b=md5_ii(b,c,d,a,x[i+13],21,1309151649);a=md5_ii(a,b,c,d,x[i+4],6,-145523070);d=md5_ii(d,a,b,c,x[i+11],10,-1120210379);c=md5_ii(c,d,a,b,x[i+2],15,718787259);b=md5_ii(b,c,d,a,x[i+9],21,-343485551);a=safe_add(a,olda);b=safe_add(b,oldb);c=safe_add(c,oldc);d=safe_add(d,oldd)}return[a,b,c,d]};var core_hmac_md5=function(key,data){var bkey=str2binl(key);if(bkey.length>16){bkey=core_md5(bkey,key.length*chrsz)}var ipad=new Array(16),opad=new Array(16);for(var i=0;i<16;i++){ipad[i]=bkey[i]^909522486;opad[i]=bkey[i]^1549556828}var hash=core_md5(ipad.concat(str2binl(data)),512+data.length*chrsz);return core_md5(opad.concat(hash),512+128)};var obj={hexdigest:function(s){return binl2hex(core_md5(str2binl(s),s.length*chrsz))},b64digest:function(s){return binl2b64(core_md5(str2binl(s),s.length*chrsz))},hash:function(s){return binl2str(core_md5(str2binl(s),s.length*chrsz))},hmac_hexdigest:function(key,data){return binl2hex(core_hmac_md5(key,data))},hmac_b64digest:function(key,data){return binl2b64(core_hmac_md5(key,data))},hmac_hash:function(key,data){return binl2str(core_hmac_md5(key,data))},test:function(){return MD5.hexdigest("abc")==="900150983cd24fb0d6963f7d28e17f72"}};return obj})();if(!Function.prototype.bind){Function.prototype.bind=function(obj){var func=this;return function(){return func.apply(obj,arguments)}}}if(!Function.prototype.prependArg){Function.prototype.prependArg=function(arg){var func=this;return function(){var newargs=[arg];for(var i=0;i<arguments.length;i++){newargs.push(arguments[i])}return func.apply(this,newargs)}}}if(!Array.prototype.indexOf){Array.prototype.indexOf=function(elt){var len=this.length;var from=Number(arguments[1])||0;from=(from<0)?Math.ceil(from):Math.floor(from);if(from<0){from+=len}for(;from<len;from++){if(from in this&&this[from]===elt){return from}}return -1}}(function(callback){var Strophe;function $build(name,attrs){return new Strophe.Builder(name,attrs)}function $msg(attrs){return new Strophe.Builder("message",attrs)}function $iq(attrs){return new Strophe.Builder("iq",attrs)}function $pres(attrs){return new Strophe.Builder("presence",attrs)}Strophe={VERSION:"1.0.1",NS:{HTTPBIND:"http://jabber.org/protocol/httpbind",BOSH:"urn:xmpp:xbosh",CLIENT:"jabber:client",AUTH:"jabber:iq:auth",ROSTER:"jabber:iq:roster",PROFILE:"jabber:iq:profile",DISCO_INFO:"http://jabber.org/protocol/disco#info",DISCO_ITEMS:"http://jabber.org/protocol/disco#items",MUC:"http://jabber.org/protocol/muc",SASL:"urn:ietf:params:xml:ns:xmpp-sasl",STREAM:"http://etherx.jabber.org/streams",BIND:"urn:ietf:params:xml:ns:xmpp-bind",SESSION:"urn:ietf:params:xml:ns:xmpp-session",VERSION:"jabber:iq:version",STANZAS:"urn:ietf:params:xml:ns:xmpp-stanzas"},addNamespace:function(name,value){Strophe.NS[name]=value},Status:{ERROR:0,CONNECTING:1,CONNFAIL:2,AUTHENTICATING:3,AUTHFAIL:4,CONNECTED:5,DISCONNECTED:6,DISCONNECTING:7,ATTACHED:8},LogLevel:{DEBUG:0,INFO:1,WARN:2,ERROR:3,FATAL:4},ElementType:{NORMAL:1,TEXT:3},TIMEOUT:1.1,SECONDARY_TIMEOUT:0.1,forEachChild:function(elem,elemName,func){var i,childNode;for(i=0;i<elem.childNodes.length;i++){childNode=elem.childNodes[i];if(childNode.nodeType==Strophe.ElementType.NORMAL&&(!elemName||this.isTagEqual(childNode,elemName))){func(childNode)}}},isTagEqual:function(el,name){return el.tagName.toLowerCase()==name.toLowerCase()},_xmlGenerator:null,_makeGenerator:function(){var doc;if(window.ActiveXObject){doc=new ActiveXObject("Microsoft.XMLDOM");doc.appendChild(doc.createElement("strophe"))}else{doc=document.implementation.createDocument("jabber:client","strophe",null)}return doc},xmlElement:function(name){if(!name){return null}var node=null;if(!Strophe._xmlGenerator){Strophe._xmlGenerator=Strophe._makeGenerator()}node=Strophe._xmlGenerator.createElement(name);var a,i,k;for(a=1;a<arguments.length;a++){if(!arguments[a]){continue}if(typeof(arguments[a])=="string"||typeof(arguments[a])=="number"){node.appendChild(Strophe.xmlTextNode(arguments[a]))}else{if(typeof(arguments[a])=="object"&&typeof(arguments[a].sort)=="function"){for(i=0;i<arguments[a].length;i++){if(typeof(arguments[a][i])=="object"&&typeof(arguments[a][i].sort)=="function"){node.setAttribute(arguments[a][i][0],arguments[a][i][1])}}}else{if(typeof(arguments[a])=="object"){for(k in arguments[a]){if(arguments[a].hasOwnProperty(k)){node.setAttribute(k,arguments[a][k])}}}}}}return node},xmlescape:function(text){text=text.replace(/\&/g,"&");text=text.replace(/</g,"<");text=text.replace(/>/g,">");return text},xmlTextNode:function(text){text=Strophe.xmlescape(text);if(!Strophe._xmlGenerator){Strophe._xmlGenerator=Strophe._makeGenerator()}return Strophe._xmlGenerator.createTextNode(text)},getText:function(elem){if(!elem){return null}var str="";if(elem.childNodes.length===0&&elem.nodeType==Strophe.ElementType.TEXT){str+=elem.nodeValue}for(var i=0;i<elem.childNodes.length;i++){if(elem.childNodes[i].nodeType==Strophe.ElementType.TEXT){str+=elem.childNodes[i].nodeValue}}return str},copyElement:function(elem){var i,el;if(elem.nodeType==Strophe.ElementType.NORMAL){el=Strophe.xmlElement(elem.tagName);for(i=0;i<elem.attributes.length;i++){el.setAttribute(elem.attributes[i].nodeName.toLowerCase(),elem.attributes[i].value)}for(i=0;i<elem.childNodes.length;i++){el.appendChild(Strophe.copyElement(elem.childNodes[i]))}}else{if(elem.nodeType==Strophe.ElementType.TEXT){el=Strophe.xmlTextNode(elem.nodeValue)}}return el},escapeNode:function(node){return node.replace(/^\s+|\s+$/g,"").replace(/\\/g,"\\5c").replace(/ /g,"\\20").replace(/\"/g,"\\22").replace(/\&/g,"\\26").replace(/\'/g,"\\27").replace(/\//g,"\\2f").replace(/:/g,"\\3a").replace(/</g,"\\3c").replace(/>/g,"\\3e").replace(/@/g,"\\40")},unescapeNode:function(node){return node.replace(/\\20/g," ").replace(/\\22/g,'"').replace(/\\26/g,"&").replace(/\\27/g,"'").replace(/\\2f/g,"/").replace(/\\3a/g,":").replace(/\\3c/g,"<").replace(/\\3e/g,">").replace(/\\40/g,"@").replace(/\\5c/g,"\\")},getNodeFromJid:function(jid){if(jid.indexOf("@")<0){return null}return jid.split("@")[0]},getDomainFromJid:function(jid){var bare=Strophe.getBareJidFromJid(jid);if(bare.indexOf("@")<0){return bare}else{var parts=bare.split("@");parts.splice(0,1);return parts.join("@")}},getResourceFromJid:function(jid){var s=jid.split("/");if(s.length<2){return null}s.splice(0,1);return s.join("/")},getBareJidFromJid:function(jid){return jid.split("/")[0]},log:function(level,msg){return},debug:function(msg){this.log(this.LogLevel.DEBUG,msg)},info:function(msg){this.log(this.LogLevel.INFO,msg)},warn:function(msg){this.log(this.LogLevel.WARN,msg)},error:function(msg){this.log(this.LogLevel.ERROR,msg)},fatal:function(msg){this.log(this.LogLevel.FATAL,msg)},serialize:function(elem){var result;if(!elem){return null}if(typeof(elem.tree)==="function"){elem=elem.tree()}var nodeName=elem.nodeName;var i,child;if(elem.getAttribute("_realname")){nodeName=elem.getAttribute("_realname")}result="<"+nodeName;for(i=0;i<elem.attributes.length;i++){if(elem.attributes[i].nodeName!="_realname"){result+=" "+elem.attributes[i].nodeName.toLowerCase()+"='"+elem.attributes[i].value.replace("&","&").replace("'","'").replace("<","<")+"'"}}if(elem.childNodes.length>0){result+=">";for(i=0;i<elem.childNodes.length;i++){child=elem.childNodes[i];if(child.nodeType==Strophe.ElementType.NORMAL){result+=Strophe.serialize(child)}else{if(child.nodeType==Strophe.ElementType.TEXT){result+=child.nodeValue}}}result+="</"+nodeName+">"}else{result+="/>"}return result},_requestId:0,_connectionPlugins:{},addConnectionPlugin:function(name,ptype){Strophe._connectionPlugins[name]=ptype}};Strophe.Builder=function(name,attrs){if(name=="presence"||name=="message"||name=="iq"){if(attrs&&!attrs.xmlns){attrs.xmlns=Strophe.NS.CLIENT}else{if(!attrs){attrs={xmlns:Strophe.NS.CLIENT}}}}this.nodeTree=Strophe.xmlElement(name,attrs);this.node=this.nodeTree};Strophe.Builder.prototype={tree:function(){return this.nodeTree},toString:function(){return Strophe.serialize(this.nodeTree)},up:function(){this.node=this.node.parentNode;return this},attrs:function(moreattrs){for(var k in moreattrs){if(moreattrs.hasOwnProperty(k)){this.node.setAttribute(k,moreattrs[k])}}return this},c:function(name,attrs){var child=Strophe.xmlElement(name,attrs);this.node.appendChild(child);this.node=child;return this},cnode:function(elem){this.node.appendChild(elem);this.node=elem;return this},t:function(text){var child=Strophe.xmlTextNode(text);this.node.appendChild(child);return this}};Strophe.Handler=function(handler,ns,name,type,id,from,options){this.handler=handler;this.ns=ns;this.name=name;this.type=type;this.id=id;this.options=options||{matchbare:false};if(!this.options.matchBare){this.options.matchBare=false}if(this.options.matchBare){this.from=Strophe.getBareJidFromJid(from)}else{this.from=from}this.user=true};Strophe.Handler.prototype={isMatch:function(elem){var nsMatch;var from=null;if(this.options.matchBare){from=Strophe.getBareJidFromJid(elem.getAttribute("from"))}else{from=elem.getAttribute("from")}nsMatch=false;if(!this.ns){nsMatch=true}else{var self=this;Strophe.forEachChild(elem,null,function(elem){if(elem.getAttribute("xmlns")==self.ns){nsMatch=true}});nsMatch=nsMatch||elem.getAttribute("xmlns")==this.ns}if(nsMatch&&(!this.name||Strophe.isTagEqual(elem,this.name))&&(!this.type||elem.getAttribute("type")===this.type)&&(!this.id||elem.getAttribute("id")===this.id)&&(!this.from||from===this.from)){return true}return false},run:function(elem){var result=null;try{result=this.handler(elem)}catch(e){if(e.sourceURL){Strophe.fatal("error: "+this.handler+" "+e.sourceURL+":"+e.line+" - "+e.name+": "+e.message)}else{if(e.fileName){if(typeof(console)!="undefined"){console.trace();console.error(this.handler," - error - ",e,e.message)}Strophe.fatal("error: "+this.handler+" "+e.fileName+":"+e.lineNumber+" - "+e.name+": "+e.message)}else{Strophe.fatal("error: "+this.handler)}}throw e}return result},toString:function(){return"{Handler: "+this.handler+"("+this.name+","+this.id+","+this.ns+")}"}};Strophe.TimedHandler=function(period,handler){this.period=period;this.handler=handler;this.lastCalled=new Date().getTime();this.user=true};Strophe.TimedHandler.prototype={run:function(){this.lastCalled=new Date().getTime();return this.handler()},reset:function(){this.lastCalled=new Date().getTime()},toString:function(){return"{TimedHandler: "+this.handler+"("+this.period+")}"}};Strophe.Request=function(elem,func,rid,sends){this.id=++Strophe._requestId;this.xmlData=elem;this.data=Strophe.serialize(elem);this.origFunc=func;this.func=func;this.rid=rid;this.date=NaN;this.sends=sends||0;this.abort=false;this.dead=null;this.age=function(){if(!this.date){return 0}var now=new Date();return(now-this.date)/1000};this.timeDead=function(){if(!this.dead){return 0}var now=new Date();return(now-this.dead)/1000};this.xhr=this._newXHR()};Strophe.Request.prototype={getResponse:function(){var node=null;if(this.xhr.responseXML&&this.xhr.responseXML.documentElement){node=this.xhr.responseXML.documentElement;if(node.tagName=="parsererror"){Strophe.error("invalid response received");Strophe.error("responseText: "+this.xhr.responseText);Strophe.error("responseXML: "+Strophe.serialize(this.xhr.responseXML));throw"parsererror"}}else{if(this.xhr.responseText){Strophe.error("invalid response received");Strophe.error("responseText: "+this.xhr.responseText);Strophe.error("responseXML: "+Strophe.serialize(this.xhr.responseXML))}}return node},_newXHR:function(){var xhr=null;if(window.XMLHttpRequest){xhr=new XMLHttpRequest();if(xhr.overrideMimeType){xhr.overrideMimeType("text/xml")}}else{if(window.ActiveXObject){xhr=new ActiveXObject("Microsoft.XMLHTTP")}}xhr.onreadystatechange=this.func.prependArg(this);return xhr}};Strophe.Connection=function(service){this.service=service;this.jid="";this.rid=Math.floor(Math.random()*4294967295);this.sid=null;this.streamId=null;this.do_session=false;this.do_bind=false;this.timedHandlers=[];this.handlers=[];this.removeTimeds=[];this.removeHandlers=[];this.addTimeds=[];this.addHandlers=[];this._idleTimeout=null;this._disconnectTimeout=null;this.authenticated=false;this.disconnecting=false;this.connected=false;this.errors=0;this.paused=false;this.hold=1;this.wait=60;this.window=5;this._data=[];this._requests=[];this._uniqueId=Math.round(Math.random()*10000);this._sasl_success_handler=null;this._sasl_failure_handler=null;this._sasl_challenge_handler=null;this._idleTimeout=setTimeout(this._onIdle.bind(this),100);for(var k in Strophe._connectionPlugins){if(Strophe._connectionPlugins.hasOwnProperty(k)){var ptype=Strophe._connectionPlugins[k];var F=function(){};F.prototype=ptype;this[k]=new F();this[k].init(this)}}};Strophe.Connection.prototype={reset:function(){this.rid=Math.floor(Math.random()*4294967295);this.sid=null;this.streamId=null;this.do_session=false;this.do_bind=false;this.timedHandlers=[];this.handlers=[];this.removeTimeds=[];this.removeHandlers=[];this.addTimeds=[];this.addHandlers=[];this.authenticated=false;this.disconnecting=false;this.connected=false;this.errors=0;this._requests=[];this._uniqueId=Math.round(Math.random()*10000)},pause:function(){this.paused=true},resume:function(){this.paused=false},getUniqueId:function(suffix){if(typeof(suffix)=="string"||typeof(suffix)=="number"){return ++this._uniqueId+":"+suffix}else{return ++this._uniqueId+""}},connect:function(jid,pass,callback,wait,hold){this.jid=jid;this.pass=pass;this.connect_callback=callback;this.disconnecting=false;this.connected=false;this.authenticated=false;this.errors=0;this.wait=wait||this.wait;this.hold=hold||this.hold;this.domain=Strophe.getDomainFromJid(this.jid);var body=this._buildBody().attrs({to:this.domain,"xml:lang":"en",wait:this.wait,hold:this.hold,content:"text/xml; charset=utf-8",ver:"1.6","xmpp:version":"1.0","xmlns:xmpp":Strophe.NS.BOSH});this._changeConnectStatus(Strophe.Status.CONNECTING,null);this._requests.push(new Strophe.Request(body.tree(),this._onRequestStateChange.bind(this).prependArg(this._connect_cb.bind(this)),body.tree().getAttribute("rid")));this._throttledRequestHandler()},attach:function(jid,sid,rid,callback,wait,hold,wind){this.jid=jid;this.sid=sid;this.rid=rid;this.connect_callback=callback;this.domain=Strophe.getDomainFromJid(this.jid);this.authenticated=true;this.connected=true;this.wait=wait||this.wait;this.hold=hold||this.hold;this.window=wind||this.window;this._changeConnectStatus(Strophe.Status.ATTACHED,null)},xmlInput:function(elem){return},xmlOutput:function(elem){return},rawInput:function(data){return},rawOutput:function(data){return},send:function(elem){if(elem===null){return}if(typeof(elem.sort)==="function"){for(var i=0;i<elem.length;i++){this._queueData(elem[i])}}else{if(typeof(elem.tree)==="function"){this._queueData(elem.tree())}else{this._queueData(elem)}}this._throttledRequestHandler();clearTimeout(this._idleTimeout);this._idleTimeout=setTimeout(this._onIdle.bind(this),100)},flush:function(){clearTimeout(this._idleTimeout);this._onIdle()},sendIQ:function(elem,callback,errback,timeout){var timeoutHandler=null;var that=this;if(typeof(elem.tree)==="function"){elem=elem.tree()}var id=elem.getAttribute("id");if(!id){id=this.getUniqueId("sendIQ");elem.setAttribute("id",id)}var handler=this.addHandler(function(stanza){if(timeoutHandler){that.deleteTimedHandler(timeoutHandler)}var iqtype=stanza.getAttribute("type");if(iqtype==="result"){if(callback){callback(stanza)}}else{if(iqtype==="error"){if(errback){errback(stanza)}}else{throw {name:"StropheError",message:"Got bad IQ type of "+iqtype}}}},null,"iq",null,id);if(timeout){timeoutHandler=this.addTimedHandler(timeout,function(){that.deleteHandler(handler);if(errback){errback(null)}return false})}this.send(elem);return id},_queueData:function(element){if(element===null||!element.tagName||!element.childNodes){throw {name:"StropheError",message:"Cannot queue non-DOMElement."}}this._data.push(element)},_sendRestart:function(){this._data.push("restart");this._throttledRequestHandler();clearTimeout(this._idleTimeout);this._idleTimeout=setTimeout(this._onIdle.bind(this),100)},addTimedHandler:function(period,handler){var thand=new Strophe.TimedHandler(period,handler);this.addTimeds.push(thand);return thand},deleteTimedHandler:function(handRef){this.removeTimeds.push(handRef)},addHandler:function(handler,ns,name,type,id,from,options){var hand=new Strophe.Handler(handler,ns,name,type,id,from,options);this.addHandlers.push(hand);return hand},deleteHandler:function(handRef){this.removeHandlers.push(handRef)},disconnect:function(reason){this._changeConnectStatus(Strophe.Status.DISCONNECTING,reason);Strophe.info("Disconnect was called because: "+reason);if(this.connected){this._disconnectTimeout=this._addSysTimedHandler(3000,this._onDisconnectTimeout.bind(this));this._sendTerminate()}},_changeConnectStatus:function(status,condition){for(var k in Strophe._connectionPlugins){if(Strophe._connectionPlugins.hasOwnProperty(k)){var plugin=this[k];if(plugin.statusChanged){try{plugin.statusChanged(status,condition)}catch(err){Strophe.error(""+k+" plugin caused an exception changing status: "+err)}}}}if(this.connect_callback){try{this.connect_callback(status,condition)}catch(e){Strophe.error("User connection callback caused an exception: "+e)}}},_buildBody:function(){var bodyWrap=$build("body",{rid:this.rid++,xmlns:Strophe.NS.HTTPBIND});if(this.sid!==null){bodyWrap.attrs({sid:this.sid})}return bodyWrap},_removeRequest:function(req){Strophe.debug("removing request");var i;for(i=this._requests.length-1;i>=0;i--){if(req==this._requests[i]){this._requests.splice(i,1)}}req.xhr.onreadystatechange=function(){};this._throttledRequestHandler()},_restartRequest:function(i){var req=this._requests[i];if(req.dead===null){req.dead=new Date()}this._processRequest(i)},_processRequest:function(i){var req=this._requests[i];var reqStatus=-1;try{if(req.xhr.readyState==4){reqStatus=req.xhr.status}}catch(e){Strophe.error("caught an error in _requests["+i+"], reqStatus: "+reqStatus)}if(typeof(reqStatus)=="undefined"){reqStatus=-1}var time_elapsed=req.age();var primaryTimeout=(!isNaN(time_elapsed)&&time_elapsed>Math.floor(Strophe.TIMEOUT*this.wait));var secondaryTimeout=(req.dead!==null&&req.timeDead()>Math.floor(Strophe.SECONDARY_TIMEOUT*this.wait));var requestCompletedWithServerError=(req.xhr.readyState==4&&(reqStatus<1||reqStatus>=500));if(primaryTimeout||secondaryTimeout||requestCompletedWithServerError){if(secondaryTimeout){Strophe.error("Request "+this._requests[i].id+" timed out (secondary), restarting")}req.abort=true;req.xhr.abort();req.xhr.onreadystatechange=function(){};this._requests[i]=new Strophe.Request(req.xmlData,req.origFunc,req.rid,req.sends);req=this._requests[i]}if(req.xhr.readyState===0){Strophe.debug("request id "+req.id+"."+req.sends+" posting");req.date=new Date();try{req.xhr.open("POST",this.service,true)}catch(e2){Strophe.error("XHR open failed.");if(!this.connected){this._changeConnectStatus(Strophe.Status.CONNFAIL,"bad-service")}this.disconnect();return}var sendFunc=function(){req.xhr.send(req.data)};if(req.sends>1){var backoff=Math.pow(req.sends,3)*1000;setTimeout(sendFunc,backoff)}else{sendFunc()}req.sends++;this.xmlOutput(req.xmlData);this.rawOutput(req.data)}else{Strophe.debug("_processRequest: "+(i===0?"first":"second")+" request has readyState of "+req.xhr.readyState)}},_throttledRequestHandler:function(){if(!this._requests){Strophe.debug("_throttledRequestHandler called with undefined requests")}else{Strophe.debug("_throttledRequestHandler called with "+this._requests.length+" requests")}if(!this._requests||this._requests.length===0){return}if(this._requests.length>0){this._processRequest(0)}if(this._requests.length>1&&Math.abs(this._requests[0].rid-this._requests[1].rid)<this.window-1){this._processRequest(1)}},_onRequestStateChange:function(func,req){Strophe.debug("request id "+req.id+"."+req.sends+" state changed to "+req.xhr.readyState);if(req.abort){req.abort=false;return}var reqStatus;if(req.xhr.readyState==4){reqStatus=0;try{reqStatus=req.xhr.status}catch(e){}if(typeof(reqStatus)=="undefined"){reqStatus=0}if(this.disconnecting){if(reqStatus>=400){this._hitError(reqStatus);return}}var reqIs0=(this._requests[0]==req);var reqIs1=(this._requests[1]==req);if((reqStatus>0&&reqStatus<500)||req.sends>5){this._removeRequest(req);Strophe.debug("request id "+req.id+" should now be removed")}if(reqStatus==200){if(reqIs1||(reqIs0&&this._requests.length>0&&this._requests[0].age()>Math.floor(Strophe.SECONDARY_TIMEOUT*this.wait))){this._restartRequest(0)}Strophe.debug("request id "+req.id+"."+req.sends+" got 200");func(req);this.errors=0}else{Strophe.error("request id "+req.id+"."+req.sends+" error "+reqStatus+" happened");if(reqStatus===0||(reqStatus>=400&&reqStatus<600)||reqStatus>=12000){this._hitError(reqStatus);if(reqStatus>=400&&reqStatus<500){this._changeConnectStatus(Strophe.Status.DISCONNECTING,null);this._doDisconnect()}}}if(!((reqStatus>0&&reqStatus<10000)||req.sends>5)){this._throttledRequestHandler()}}},_hitError:function(reqStatus){this.errors++;Strophe.warn("request errored, status: "+reqStatus+", number of errors: "+this.errors);if(this.errors>4){this._onDisconnectTimeout()}},_doDisconnect:function(){Strophe.info("_doDisconnect was called");this.authenticated=false;this.disconnecting=false;this.sid=null;this.streamId=null;this.rid=Math.floor(Math.random()*4294967295);if(this.connected){this._changeConnectStatus(Strophe.Status.DISCONNECTED,null);this.connected=false}this.handlers=[];this.timedHandlers=[];this.removeTimeds=[];this.removeHandlers=[];this.addTimeds=[];this.addHandlers=[]},_dataRecv:function(req){try{var elem=req.getResponse()}catch(e){if(e!="parsererror"){throw e}this.disconnect("strophe-parsererror")}if(elem===null){return}this.xmlInput(elem);this.rawInput(Strophe.serialize(elem));var i,hand;while(this.removeHandlers.length>0){hand=this.removeHandlers.pop();i=this.handlers.indexOf(hand);if(i>=0){this.handlers.splice(i,1)}}while(this.addHandlers.length>0){this.handlers.push(this.addHandlers.pop())}if(this.disconnecting&&this._requests.length===0){this.deleteTimedHandler(this._disconnectTimeout);this._disconnectTimeout=null;this._doDisconnect();return}var typ=elem.getAttribute("type");var cond,conflict;if(typ!==null&&typ=="terminate"){cond=elem.getAttribute("condition");conflict=elem.getElementsByTagName("conflict");if(cond!==null){if(cond=="remote-stream-error"&&conflict.length>0){cond="conflict"}this._changeConnectStatus(Strophe.Status.CONNFAIL,cond)}else{this._changeConnectStatus(Strophe.Status.CONNFAIL,"unknown")}this.disconnect();return}var self=this;Strophe.forEachChild(elem,null,function(child){var i,newList;newList=self.handlers;self.handlers=[];for(i=0;i<newList.length;i++){var hand=newList[i];if(hand.isMatch(child)&&(self.authenticated||!hand.user)){if(hand.run(child)){self.handlers.push(hand)}}else{self.handlers.push(hand)}}})},_sendTerminate:function(){Strophe.info("_sendTerminate was called");var body=this._buildBody().attrs({type:"terminate"});if(this.authenticated){body.c("presence",{xmlns:Strophe.NS.CLIENT,type:"unavailable"})}this.disconnecting=true;var req=new Strophe.Request(body.tree(),this._onRequestStateChange.bind(this).prependArg(this._dataRecv.bind(this)),body.tree().getAttribute("rid"));this._requests.push(req);this._throttledRequestHandler()},_connect_cb:function(req){Strophe.info("_connect_cb was called");this.connected=true;var bodyWrap=req.getResponse();if(!bodyWrap){return}this.xmlInput(bodyWrap);this.rawInput(Strophe.serialize(bodyWrap));var typ=bodyWrap.getAttribute("type");var cond,conflict;if(typ!==null&&typ=="terminate"){cond=bodyWrap.getAttribute("condition");conflict=bodyWrap.getElementsByTagName("conflict");if(cond!==null){if(cond=="remote-stream-error"&&conflict.length>0){cond="conflict"}this._changeConnectStatus(Strophe.Status.CONNFAIL,cond)}else{this._changeConnectStatus(Strophe.Status.CONNFAIL,"unknown")}return}if(!this.sid){this.sid=bodyWrap.getAttribute("sid")}if(!this.stream_id){this.stream_id=bodyWrap.getAttribute("authid")}var wind=bodyWrap.getAttribute("requests");if(wind){this.window=parseInt(wind,10)}var hold=bodyWrap.getAttribute("hold");if(hold){this.hold=parseInt(hold,10)}var wait=bodyWrap.getAttribute("wait");if(wait){this.wait=parseInt(wait,10)}var do_sasl_plain=false;var do_sasl_digest_md5=false;var do_sasl_anonymous=false;var mechanisms=bodyWrap.getElementsByTagName("mechanism");var i,mech,auth_str,hashed_auth_str;if(mechanisms.length>0){for(i=0;i<mechanisms.length;i++){mech=Strophe.getText(mechanisms[i]);if(mech=="DIGEST-MD5"){do_sasl_digest_md5=true}else{if(mech=="PLAIN"){do_sasl_plain=true}else{if(mech=="ANONYMOUS"){do_sasl_anonymous=true}}}}}else{var body=this._buildBody();this._requests.push(new Strophe.Request(body.tree(),this._onRequestStateChange.bind(this).prependArg(this._connect_cb.bind(this)),body.tree().getAttribute("rid")));this._throttledRequestHandler();return}if(Strophe.getNodeFromJid(this.jid)===null&&do_sasl_anonymous){this._changeConnectStatus(Strophe.Status.AUTHENTICATING,null);this._sasl_success_handler=this._addSysHandler(this._sasl_success_cb.bind(this),null,"success",null,null);this._sasl_failure_handler=this._addSysHandler(this._sasl_failure_cb.bind(this),null,"failure",null,null);this.send($build("auth",{xmlns:Strophe.NS.SASL,mechanism:"ANONYMOUS"}).tree())}else{if(Strophe.getNodeFromJid(this.jid)===null){this._changeConnectStatus(Strophe.Status.CONNFAIL,"x-strophe-bad-non-anon-jid");this.disconnect()}else{if(do_sasl_digest_md5){this._changeConnectStatus(Strophe.Status.AUTHENTICATING,null);this._sasl_challenge_handler=this._addSysHandler(this._sasl_challenge1_cb.bind(this),null,"challenge",null,null);this._sasl_failure_handler=this._addSysHandler(this._sasl_failure_cb.bind(this),null,"failure",null,null);this.send($build("auth",{xmlns:Strophe.NS.SASL,mechanism:"DIGEST-MD5"}).tree())}else{if(do_sasl_plain){auth_str=Strophe.getBareJidFromJid(this.jid);auth_str=auth_str+"\u0000";auth_str=auth_str+Strophe.getNodeFromJid(this.jid);auth_str=auth_str+"\u0000";auth_str=auth_str+this.pass;this._changeConnectStatus(Strophe.Status.AUTHENTICATING,null);this._sasl_success_handler=this._addSysHandler(this._sasl_success_cb.bind(this),null,"success",null,null);this._sasl_failure_handler=this._addSysHandler(this._sasl_failure_cb.bind(this),null,"failure",null,null);hashed_auth_str=Base64.encode(auth_str);this.send($build("auth",{xmlns:Strophe.NS.SASL,mechanism:"PLAIN"}).t(hashed_auth_str).tree())}else{this._changeConnectStatus(Strophe.Status.AUTHENTICATING,null);this._addSysHandler(this._auth1_cb.bind(this),null,null,null,"_auth_1");this.send($iq({type:"get",to:this.domain,id:"_auth_1"}).c("query",{xmlns:Strophe.NS.AUTH}).c("username",{}).t(Strophe.getNodeFromJid(this.jid)).tree())}}}}},_sasl_challenge1_cb:function(elem){var attribMatch=/([a-z]+)=("[^"]+"|[^,"]+)(?:,|$)/;var challenge=Base64.decode(Strophe.getText(elem));var cnonce=MD5.hexdigest(Math.random()*1234567890);var realm="";var host=null;var nonce="";var qop="";var matches;this.deleteHandler(this._sasl_failure_handler);while(challenge.match(attribMatch)){matches=challenge.match(attribMatch);challenge=challenge.replace(matches[0],"");matches[2]=matches[2].replace(/^"(.+)"$/,"$1");switch(matches[1]){case"realm":realm=matches[2];break;case"nonce":nonce=matches[2];break;case"qop":qop=matches[2];break;case"host":host=matches[2];break}}var digest_uri="xmpp/"+this.domain;if(host!==null){digest_uri=digest_uri+"/"+host}var A1=MD5.hash(Strophe.getNodeFromJid(this.jid)+":"+realm+":"+this.pass)+":"+nonce+":"+cnonce;var A2="AUTHENTICATE:"+digest_uri;var responseText="";responseText+="username="+this._quote(Strophe.getNodeFromJid(this.jid))+",";responseText+="realm="+this._quote(realm)+",";responseText+="nonce="+this._quote(nonce)+",";responseText+="cnonce="+this._quote(cnonce)+",";responseText+='nc="00000001",';responseText+='qop="auth",';responseText+="digest-uri="+this._quote(digest_uri)+",";responseText+="response="+this._quote(MD5.hexdigest(MD5.hexdigest(A1)+":"+nonce+":00000001:"+cnonce+":auth:"+MD5.hexdigest(A2)))+",";responseText+='charset="utf-8"';this._sasl_challenge_handler=this._addSysHandler(this._sasl_challenge2_cb.bind(this),null,"challenge",null,null);this._sasl_success_handler=this._addSysHandler(this._sasl_success_cb.bind(this),null,"success",null,null);this._sasl_failure_handler=this._addSysHandler(this._sasl_failure_cb.bind(this),null,"failure",null,null);this.send($build("response",{xmlns:Strophe.NS.SASL}).t(Base64.encode(responseText)).tree());return false},_quote:function(str){return'"'+str.replace(/\\/g,"\\\\").replace(/"/g,'\\"')+'"'},_sasl_challenge2_cb:function(elem){this.deleteHandler(this._sasl_success_handler);this.deleteHandler(this._sasl_failure_handler);this._sasl_success_handler=this._addSysHandler(this._sasl_success_cb.bind(this),null,"success",null,null);this._sasl_failure_handler=this._addSysHandler(this._sasl_failure_cb.bind(this),null,"failure",null,null);this.send($build("response",{xmlns:Strophe.NS.SASL}).tree());return false},_auth1_cb:function(elem){var iq=$iq({type:"set",id:"_auth_2"}).c("query",{xmlns:Strophe.NS.AUTH}).c("username",{}).t(Strophe.getNodeFromJid(this.jid)).up().c("password").t(this.pass);if(!Strophe.getResourceFromJid(this.jid)){this.jid=Strophe.getBareJidFromJid(this.jid)+"/strophe"}iq.up().c("resource",{}).t(Strophe.getResourceFromJid(this.jid));this._addSysHandler(this._auth2_cb.bind(this),null,null,null,"_auth_2");this.send(iq.tree());return false},_sasl_success_cb:function(elem){Strophe.info("SASL authentication succeeded.");this.deleteHandler(this._sasl_failure_handler);this._sasl_failure_handler=null;if(this._sasl_challenge_handler){this.deleteHandler(this._sasl_challenge_handler);this._sasl_challenge_handler=null}this._addSysHandler(this._sasl_auth1_cb.bind(this),null,"stream:features",null,null);this._sendRestart();return false},_sasl_auth1_cb:function(elem){var i,child;for(i=0;i<elem.childNodes.length;i++){child=elem.childNodes[i];if(child.nodeName=="bind"){this.do_bind=true}if(child.nodeName=="session"){this.do_session=true}}if(!this.do_bind){this._changeConnectStatus(Strophe.Status.AUTHFAIL,null);return false}else{this._addSysHandler(this._sasl_bind_cb.bind(this),null,null,null,"_bind_auth_2");var resource=Strophe.getResourceFromJid(this.jid);if(resource){this.send($iq({type:"set",id:"_bind_auth_2"}).c("bind",{xmlns:Strophe.NS.BIND}).c("resource",{}).t(resource).tree())}else{this.send($iq({type:"set",id:"_bind_auth_2"}).c("bind",{xmlns:Strophe.NS.BIND}).tree())}}return false},_sasl_bind_cb:function(elem){if(elem.getAttribute("type")=="error"){Strophe.info("SASL binding failed.");this._changeConnectStatus(Strophe.Status.AUTHFAIL,null);return false}var bind=elem.getElementsByTagName("bind");var jidNode;if(bind.length>0){jidNode=bind[0].getElementsByTagName("jid");if(jidNode.length>0){this.jid=Strophe.getText(jidNode[0]);if(this.do_session){this._addSysHandler(this._sasl_session_cb.bind(this),null,null,null,"_session_auth_2");this.send($iq({type:"set",id:"_session_auth_2"}).c("session",{xmlns:Strophe.NS.SESSION}).tree())}else{this.authenticated=true;this._changeConnectStatus(Strophe.Status.CONNECTED,null)}}}else{Strophe.info("SASL binding failed.");this._changeConnectStatus(Strophe.Status.AUTHFAIL,null);return false}},_sasl_session_cb:function(elem){if(elem.getAttribute("type")=="result"){this.authenticated=true;this._changeConnectStatus(Strophe.Status.CONNECTED,null)}else{if(elem.getAttribute("type")=="error"){Strophe.info("Session creation failed.");this._changeConnectStatus(Strophe.Status.AUTHFAIL,null);return false}}return false},_sasl_failure_cb:function(elem){if(this._sasl_success_handler){this.deleteHandler(this._sasl_success_handler);this._sasl_success_handler=null}if(this._sasl_challenge_handler){this.deleteHandler(this._sasl_challenge_handler);this._sasl_challenge_handler=null}this._changeConnectStatus(Strophe.Status.AUTHFAIL,null);return false},_auth2_cb:function(elem){if(elem.getAttribute("type")=="result"){this.authenticated=true;this._changeConnectStatus(Strophe.Status.CONNECTED,null)}else{if(elem.getAttribute("type")=="error"){this._changeConnectStatus(Strophe.Status.AUTHFAIL,null);this.disconnect()}}return false},_addSysTimedHandler:function(period,handler){var thand=new Strophe.TimedHandler(period,handler);thand.user=false;this.addTimeds.push(thand);return thand},_addSysHandler:function(handler,ns,name,type,id){var hand=new Strophe.Handler(handler,ns,name,type,id);hand.user=false;this.addHandlers.push(hand);return hand},_onDisconnectTimeout:function(){Strophe.info("_onDisconnectTimeout was called");var req;while(this._requests.length>0){req=this._requests.pop();req.abort=true;req.xhr.abort();req.xhr.onreadystatechange=function(){}}this._doDisconnect();return false},_onIdle:function(){var i,thand,since,newList;while(this.removeTimeds.length>0){thand=this.removeTimeds.pop();i=this.timedHandlers.indexOf(thand);if(i>=0){this.timedHandlers.splice(i,1)}}while(this.addTimeds.length>0){this.timedHandlers.push(this.addTimeds.pop())}var now=new Date().getTime();newList=[];for(i=0;i<this.timedHandlers.length;i++){thand=this.timedHandlers[i];if(this.authenticated||!thand.user){since=thand.lastCalled+thand.period;if(since-now<=0){if(thand.run()){newList.push(thand)}}else{newList.push(thand)}}}this.timedHandlers=newList;var body,time_elapsed;if(this.authenticated&&this._requests.length===0&&this._data.length===0&&!this.disconnecting){Strophe.info("no requests during idle cycle, sending blank request");this._data.push(null)}if(this._requests.length<2&&this._data.length>0&&!this.paused){body=this._buildBody();for(i=0;i<this._data.length;i++){if(this._data[i]!==null){if(this._data[i]==="restart"){body.attrs({to:this.domain,"xml:lang":"en","xmpp:restart":"true","xmlns:xmpp":Strophe.NS.BOSH})}else{body.cnode(this._data[i]).up()}}}delete this._data;this._data=[];this._requests.push(new Strophe.Request(body.tree(),this._onRequestStateChange.bind(this).prependArg(this._dataRecv.bind(this)),body.tree().getAttribute("rid")));this._processRequest(this._requests.length-1)}if(this._requests.length>0){time_elapsed=this._requests[0].age();if(this._requests[0].dead!==null){if(this._requests[0].timeDead()>Math.floor(Strophe.SECONDARY_TIMEOUT*this.wait)){this._throttledRequestHandler()}}if(time_elapsed>Math.floor(Strophe.TIMEOUT*this.wait)){Strophe.warn("Request "+this._requests[0].id+" timed out, over "+Math.floor(Strophe.TIMEOUT*this.wait)+" seconds since last activity");this._throttledRequestHandler()}}clearTimeout(this._idleTimeout);this._idleTimeout=setTimeout(this._onIdle.bind(this),100)}};if(callback){callback(Strophe,$build,$msg,$iq,$pres)}})(function(){window.Strophe=arguments[0];window.$build=arguments[1];window.$msg=arguments[2];window.$iq=arguments[3];window.$pres=arguments[4]});
\ No newline at end of file diff --git a/views/default/js/strophe.muc.js b/views/default/js/strophe.muc.js deleted file mode 100644 index 954ca8730..000000000 --- a/views/default/js/strophe.muc.js +++ /dev/null @@ -1,300 +0,0 @@ -/* -Plugin to implement the MUC extension. http://xmpp.org/extensions/xep-0045.html -*/ -/* jslint configuration: */ -/* global document, window, setTimeout, clearTimeout, console, - XMLHttpRequest, ActiveXObject, - Base64, MD5, - Strophe, $build, $msg, $iq, $pres -*/ - -Strophe.addConnectionPlugin('muc', { - _connection: null, - // The plugin must have the init function - /***Function - Initialize the MUC plugin. Sets the correct connection object and - extends the namesace. - */ - init: function(conn) { - this._connection = conn; - /* extend name space - * NS.MUC - XMPP Multi-user chat namespace - * from XEP 45. - * - */ - Strophe.addNamespace('MUC_OWNER', Strophe.NS.MUC+"#owner"); - Strophe.addNamespace('MUC_ADMIN', Strophe.NS.MUC+"#admin"); - }, - /***Function - Join a multi-user chat room - Parameters: - (String) room - The multi-user chat room to join. - (String) nick - The nickname to use in the chat room. Optional - (Function) msg_handler_cb - The function call to handle messages from the - specified chat room. - (Function) pres_handler_cb - The function call back to handle presence - in the chat room. - (String) password - The optional password to use. (password protected - rooms only) - */ - join: function(room, nick, msg_handler_cb, pres_handler_cb, password) { - var room_nick = this.test_append_nick(room, nick); - var msg = $pres({from: this._connection.jid, - to: room_nick}) - .c("x",{xmlns: Strophe.NS.MUC}); - if (password) - { - var password_elem = Strophe.xmlElement("password", - [], - password); - msg.cnode(password_elem); - } - if (msg_handler_cb) - { - this._connection.addHandler(function(stanza) { - var from = stanza.getAttribute('from'); - var roomname = from.split("/"); - // filter on room name - if (roomname.length > 1 && roomname[0] == room) - { - return msg_handler_cb(stanza); - } - else - { - return true; - } - }, - null, - "message", - null, - null, - null); - } - if (pres_handler_cb) - { - this._connection.addHandler(function(stanza) { - var xquery = stanza.getElementsByTagName("x"); - if (xquery.length > 0) - { - //Handle only MUC user protocol - for (var i = 0; i < xquery.length; i++) - { - var xmlns = xquery[i].getAttribute("xmlns"); - - if (xmlns && xmlns.match(Strophe.NS.MUC)) - { - return pres_handler_cb(stanza); - } - } - } - return true; - }, - null, - "presence", - null, - null, - null); - } - this._connection.send(msg); - }, - /***Function - Leave a multi-user chat room - Parameters: - (String) room - The multi-user chat room to leave. - (String) nick - The nick name used in the room. - (Function) handler_cb - Optional function to handle the successful leave. - Returns: - iqid - The unique id for the room leave. - */ - leave: function(room, nick, handler_cb) { - var room_nick = this.test_append_nick(room, nick); - var presenceid = this._connection.getUniqueId(); - var presence = $pres({type: "unavailable", - id: presenceid, - from: this._connection.jid, - to: room_nick}) - .c("x",{xmlns: Strophe.NS.MUC}); - this._connection.addHandler(handler_cb, - null, - "presence", - null, - presenceid, - null); - this._connection.send(presence); - return presenceid; - }, - /***Function - Parameters: - (String) room - The multi-user chat room name. - (String) nick - The nick name used in the chat room. - (String) message - The message to send to the room. - Returns: - msgiq - the unique id used to send the message - */ - message: function(room, nick, message) { - var room_nick = this.test_append_nick(room, nick); - var msgid = this._connection.getUniqueId(); - var msg = $msg({to: room_nick, - from: this._connection.jid, - type: "groupchat", - id: msgid}).c("body", - {xmlns: Strophe.NS.CLIENT}).t(message); - msg.up().c("x", {xmlns: "jabber:x:event"}).c("composing"); - this._connection.send(msg); - return msgid; - }, - /***Function - Start a room configuration. - Parameters: - (String) room - The multi-user chat room name. - Returns: - id - the unique id used to send the configuration request - */ - configure: function(room) { - //send iq to start room configuration - var config = $iq({to:room, - type: "get"}).c("query", - {xmlns: Strophe.NS.MUC_OWNER}); - var stanza = config.tree(); - return this._connection.sendIQ(stanza, - function(){}, - function(){}); - }, - /***Function - Cancel the room configuration - Parameters: - (String) room - The multi-user chat room name. - Returns: - id - the unique id used to cancel the configuration. - */ - cancelConfigure: function(room) { - //send iq to start room configuration - var config = $iq({to: room, - type: "set"}) - .c("query", {xmlns: Strophe.NS.MUC_OWNER}) - .c("x", {xmlns: "jabber:x:data", type: "cancel"}); - var stanza = config.tree(); - return this._connection.sendIQ(stanza, - function(){}, - function(){}); - }, - /***Function - Save a room configuration. - Parameters: - (String) room - The multi-user chat room name. - (Array) configarray - an array of form elements used to configure the room. - Returns: - id - the unique id used to save the configuration. - */ - saveConfiguration: function(room, configarray) { - var config = $iq({to: room, - type: "set"}) - .c("query", {xmlns: Strophe.NS.MUC_OWNER}) - .c("x", {xmlns: "jabber:x:data", type: "submit"}); - for (var i = 0; i >= configarray.length; i++) { - config.cnode(configarray[i]); - } - var stanza = config.tree(); - return this._connection.sendIQ(stanza, - function(){}, - function(){}); - }, - /***Function - Parameters: - (String) room - The multi-user chat room name. - Returns: - id - the unique id used to create the chat room. - */ - createInstantRoom: function(room) { - var roomiq = $iq({to: room, - type: "set"}) - .c("query", {xmlns: Strophe.NS.MUC_OWNER}) - .c("x", {xmlns: "jabber:x:data", - type: "submit"}); - return this._connection.sendIQ(roomiq.tree(), - function() {}, - function() {}); - }, - /*** - Set the topic of the chat room. - Parameters: - (String) room - The multi-user chat room name. - (String) topic - Topic message. - */ - setTopic: function(room, topic) { - var msg = $msg({to: room, - from: this._connection.jid, - type: "groupchat"}) - .c("subject", {xmlns: "jabber:client"}).t(topic); - this._connection.send(msg.tree()); - }, - /***Function - Changes the role and affiliation of a member of a MUC room. - The modification can only be done by a room moderator. An error will be - returned if the user doesn't have permission. - Parameters: - (String) room - The multi-user chat room name. - (String) nick - The nick name of the user to modify. - (String) role - The new role of the user. - (String) affiliation - The new affiliation of the user. - (String) reason - The reason for the change. - Returns: - iq - the id of the mode change request. - */ - modifyUser: function(room, nick, role, affiliation, reason) { - var item_attrs = {nick: Strophe.escapeNode(nick)}; - if (role !== null) - { - item_attrs.role = role; - } - if (affiliation !== null) - { - item_attrs.affiliation = affiliation; - } - var item = $build("item", item_attrs); - if (reason !== null) - { - item.cnode(Strophe.xmlElement("reason", reason)); - } - var roomiq = $iq({to: room, - type: "set"}) - .c("query", {xmlns: Strophe.NS.MUC_OWNER}).cnode(item.tree()); - return this._connection.sendIQ(roomiq.tree(), - function() {}, - function() {}); - }, - /***Function - Change the current users nick name. - Parameters: - (String) room - The multi-user chat room name. - (String) user - The new nick name. - */ - changeNick: function(room, user) { - var room_nick = this.test_append_nick(room, user); - var presence = $pres({from: this._connection.jid, - to: room_nick}) - .c("x",{xmlns: Strophe.NS.MUC}); - this._connection.send(presence.tree()); - }, - /***Function - List all chat room available on a server. - Parameters: - (String) server - name of chat server. - (String) handle_cb - Function to call for room list return. - */ - listRooms: function(server, handle_cb) { - var iq = $iq({to: server, - from: this._connection.jid, - type: "get"}) - .c("query",{xmlns: Strophe.NS.DISCO_ITEMS}); - this._connection.sendIQ(iq, handle_cb, function(){}); - }, - test_append_nick: function(room, nick) { - var room_nick = room; - if (nick) - { - room_nick += "/" + Strophe.escapeNode(nick); - } - return room_nick; - } -});
\ No newline at end of file diff --git a/views/default/js/strophe.muc.js.php b/views/default/js/strophe.muc.js.php deleted file mode 100644 index e10750d02..000000000 --- a/views/default/js/strophe.muc.js.php +++ /dev/null @@ -1,300 +0,0 @@ -/* -Plugin to implement the MUC extension. http://xmpp.org/extensions/xep-0045.html -*/ -/* jslint configuration: */ -/* global document, window, setTimeout, clearTimeout, console, - XMLHttpRequest, ActiveXObject, - Base64, MD5, - Strophe, $build, $msg, $iq, $pres -*/ - -Strophe.addConnectionPlugin('muc', { - _connection: null, - // The plugin must have the init function - /***Function - Initialize the MUC plugin. Sets the correct connection object and - extends the namesace. - */ - init: function(conn) { - this._connection = conn; - /* extend name space - * NS.MUC - XMPP Multi-user chat namespace - * from XEP 45. - * - */ - Strophe.addNamespace('MUC_OWNER', Strophe.NS.MUC+"#owner"); - Strophe.addNamespace('MUC_ADMIN', Strophe.NS.MUC+"#admin"); - }, - /***Function - Join a multi-user chat room - Parameters: - (String) room - The multi-user chat room to join. - (String) nick - The nickname to use in the chat room. Optional - (Function) msg_handler_cb - The function call to handle messages from the - specified chat room. - (Function) pres_handler_cb - The function call back to handle presence - in the chat room. - (String) password - The optional password to use. (password protected - rooms only) - */ - join: function(room, nick, msg_handler_cb, pres_handler_cb, password) { - var room_nick = this.test_append_nick(room, nick); - var msg = $pres({from: this._connection.jid, - to: room_nick}) - .c("x",{xmlns: Strophe.NS.MUC}); - if (password) - { - var password_elem = Strophe.xmlElement("password", - [], - password); - msg.cnode(password_elem); - } - if (msg_handler_cb) - { - this._connection.addHandler(function(stanza) { - var from = stanza.getAttribute('from'); - var roomname = from.split("/"); - // filter on room name - if (roomname.length > 1 && roomname[0] == room) - { - return msg_handler_cb(stanza); - } - else - { - return true; - } - }, - null, - "message", - null, - null, - null); - } - if (pres_handler_cb) - { - this._connection.addHandler(function(stanza) { - var xquery = stanza.getElementsByTagName("x"); - if (xquery.length > 0) - { - //Handle only MUC user protocol - for (var i = 0; i < xquery.length; i++) - { - var xmlns = xquery[i].getAttribute("xmlns"); - - if (xmlns && xmlns.match(Strophe.NS.MUC)) - { - return pres_handler_cb(stanza); - } - } - } - return true; - }, - null, - "presence", - null, - null, - null); - } - this._connection.send(msg); - }, - /***Function - Leave a multi-user chat room - Parameters: - (String) room - The multi-user chat room to leave. - (String) nick - The nick name used in the room. - (Function) handler_cb - Optional function to handle the successful leave. - Returns: - iqid - The unique id for the room leave. - */ - leave: function(room, nick, handler_cb) { - var room_nick = this.test_append_nick(room, nick); - var presenceid = this._connection.getUniqueId(); - var presence = $pres({type: "unavailable", - id: presenceid, - from: this._connection.jid, - to: room_nick}) - .c("x",{xmlns: Strophe.NS.MUC}); - this._connection.addHandler(handler_cb, - null, - "presence", - null, - presenceid, - null); - this._connection.send(presence); - return presenceid; - }, - /***Function - Parameters: - (String) room - The multi-user chat room name. - (String) nick - The nick name used in the chat room. - (String) message - The message to send to the room. - Returns: - msgiq - the unique id used to send the message - */ - message: function(room, nick, message) { - var room_nick = this.test_append_nick(room, nick); - var msgid = this._connection.getUniqueId(); - var msg = $msg({to: room_nick, - from: this._connection.jid, - type: "groupchat", - id: msgid}).c("body", - {xmlns: Strophe.NS.CLIENT}).t(message); - msg.up().c("x", {xmlns: "jabber:x:event"}).c("composing"); - this._connection.send(msg); - return msgid; - }, - /***Function - Start a room configuration. - Parameters: - (String) room - The multi-user chat room name. - Returns: - id - the unique id used to send the configuration request - */ - configure: function(room) { - //send iq to start room configuration - var config = $iq({to:room, - type: "get"}).c("query", - {xmlns: Strophe.NS.MUC_OWNER}); - var stanza = config.tree(); - return this._connection.sendIQ(stanza, - function(){}, - function(){}); - }, - /***Function - Cancel the room configuration - Parameters: - (String) room - The multi-user chat room name. - Returns: - id - the unique id used to cancel the configuration. - */ - cancelConfigure: function(room) { - //send iq to start room configuration - var config = $iq({to: room, - type: "set"}) - .c("query", {xmlns: Strophe.NS.MUC_OWNER}) - .c("x", {xmlns: "jabber:x:data", type: "cancel"}); - var stanza = config.tree(); - return this._connection.sendIQ(stanza, - function(){}, - function(){}); - }, - /***Function - Save a room configuration. - Parameters: - (String) room - The multi-user chat room name. - (Array) configarray - an array of form elements used to configure the room. - Returns: - id - the unique id used to save the configuration. - */ - saveConfiguration: function(room, configarray) { - var config = $iq({to: room, - type: "set"}) - .c("query", {xmlns: Strophe.NS.MUC_OWNER}) - .c("x", {xmlns: "jabber:x:data", type: "submit"}); - for (var i = 0; i >= configarray.length; i++) { - config.cnode(configarray[i]); - } - var stanza = config.tree(); - return this._connection.sendIQ(stanza, - function(){}, - function(){}); - }, - /***Function - Parameters: - (String) room - The multi-user chat room name. - Returns: - id - the unique id used to create the chat room. - */ - createInstantRoom: function(room) { - var roomiq = $iq({to: room, - type: "set"}) - .c("query", {xmlns: Strophe.NS.MUC_OWNER}) - .c("x", {xmlns: "jabber:x:data", - type: "submit"}); - return this._connection.sendIQ(roomiq.tree(), - function() {}, - function() {}); - }, - /*** - Set the topic of the chat room. - Parameters: - (String) room - The multi-user chat room name. - (String) topic - Topic message. - */ - setTopic: function(room, topic) { - var msg = $msg({to: room, - from: this._connection.jid, - type: "groupchat"}) - .c("subject", {xmlns: "jabber:client"}).t(topic); - this._connection.send(msg.tree()); - }, - /***Function - Changes the role and affiliation of a member of a MUC room. - The modification can only be done by a room moderator. An error will be - returned if the user doesn't have permission. - Parameters: - (String) room - The multi-user chat room name. - (String) nick - The nick name of the user to modify. - (String) role - The new role of the user. - (String) affiliation - The new affiliation of the user. - (String) reason - The reason for the change. - Returns: - iq - the id of the mode change request. - */ - modifyUser: function(room, nick, role, affiliation, reason) { - var item_attrs = {nick: Strophe.escapeNode(nick)}; - if (role !== null) - { - item_attrs.role = role; - } - if (affiliation !== null) - { - item_attrs.affiliation = affiliation; - } - var item = $build("item", item_attrs); - if (reason !== null) - { - item.cnode(Strophe.xmlElement("reason", reason)); - } - var roomiq = $iq({to: room, - type: "set"}) - .c("query", {xmlns: Strophe.NS.MUC_OWNER}).cnode(item.tree()); - return this._connection.sendIQ(roomiq.tree(), - function() {}, - function() {}); - }, - /***Function - Change the current users nick name. - Parameters: - (String) room - The multi-user chat room name. - (String) user - The new nick name. - */ - changeNick: function(room, user) { - var room_nick = this.test_append_nick(room, user); - var presence = $pres({from: this._connection.jid, - to: room_nick}) - .c("x",{xmlns: Strophe.NS.MUC}); - this._connection.send(presence.tree()); - }, - /***Function - List all chat room available on a server. - Parameters: - (String) server - name of chat server. - (String) handle_cb - Function to call for room list return. - */ - listRooms: function(server, handle_cb) { - var iq = $iq({to: server, - from: this._connection.jid, - type: "get"}) - .c("query",{xmlns: Strophe.NS.DISCO_ITEMS}); - this._connection.sendIQ(iq, handle_cb, function(){}); - }, - test_append_nick: function(room, nick) { - var room_nick = room; - if (nick) - { - room_nick += "/" + Strophe.escapeNode(nick); - } - return room_nick; - } -}); diff --git a/views/default/js/walled_garden.php b/views/default/js/walled_garden.php new file mode 100644 index 000000000..7a482fe23 --- /dev/null +++ b/views/default/js/walled_garden.php @@ -0,0 +1,57 @@ +<?php +/** + * Walled garden JavaScript + * + * @since 1.8 + */ + +// note that this assumes the button view is not using single quotes +$cancel_button = elgg_view('input/button', array( + 'value' => elgg_echo('cancel'), + 'class' => 'elgg-button-cancel mlm', +)); +$cancel_button = trim($cancel_button); + +if (0) { ?><script><?php } +?> + +elgg.provide('elgg.walled_garden'); + +elgg.walled_garden.init = function () { + + $('.forgot_link').click(elgg.walled_garden.load('lost_password')); + $('.registration_link').click(elgg.walled_garden.load('register')); + + $('input.elgg-button-cancel').live('click', function(event) { + if ($('.elgg-walledgarden-single').is(':visible')) { + $('.elgg-walledgarden-double').fadeToggle(); + $('.elgg-walledgarden-single').fadeToggle(); + $('.elgg-walledgarden-single').remove(); + } + event.preventDefault(); + }); +}; + +/** + * Creates a closure for loading walled garden content through ajax + * + * @param {String} view Name of the walled garden view + * @return {Object} + */ +elgg.walled_garden.load = function(view) { + return function(event) { + var id = '#elgg-walledgarden-' + view; + id = id.replace('_', '-'); + elgg.get('walled_garden/' + view, { + 'success' : function(data) { + $('.elgg-body-walledgarden').append(data); + $(id).find('input.elgg-button-submit').after('<?php echo $cancel_button; ?>'); + $('#elgg-walledgarden-login').fadeToggle(); + $(id).fadeToggle(); + } + }); + event.preventDefault(); + }; +}; + +elgg.register_hook_handler('init', 'system', elgg.walled_garden.init);
\ No newline at end of file diff --git a/views/default/navigation/breadcrumbs.php b/views/default/navigation/breadcrumbs.php new file mode 100644 index 000000000..88577a8ff --- /dev/null +++ b/views/default/navigation/breadcrumbs.php @@ -0,0 +1,41 @@ +<?php +/** + * Displays breadcrumbs. + * + * @package Elgg + * @subpackage Core + * + * @uses $vars['breadcrumbs'] (Optional) Array of arrays with keys 'title' and 'link' + * @uses $vars['class'] + * + * @see elgg_push_breadcrumb + */ + +if (isset($vars['breadcrumbs'])) { + $breadcrumbs = $vars['breadcrumbs']; +} else { + $breadcrumbs = elgg_get_breadcrumbs(); +} + +$class = 'elgg-menu elgg-breadcrumbs'; +$additional_class = elgg_extract('class', $vars, ''); +if ($additional_class) { + $class = "$class $additional_class"; +} + +if (is_array($breadcrumbs) && count($breadcrumbs) > 0) { + echo "<ul class=\"$class\">"; + foreach ($breadcrumbs as $breadcrumb) { + if (!empty($breadcrumb['link'])) { + $crumb = elgg_view('output/url', array( + 'href' => $breadcrumb['link'], + 'text' => $breadcrumb['title'], + 'is_trusted' => true, + )); + } else { + $crumb = $breadcrumb['title']; + } + echo "<li>$crumb</li>"; + } + echo '</ul>'; +} diff --git a/views/default/navigation/menu/default.php b/views/default/navigation/menu/default.php new file mode 100644 index 000000000..006deb3ea --- /dev/null +++ b/views/default/navigation/menu/default.php @@ -0,0 +1,31 @@ +<?php +/** + * Default menu + * + * @uses $vars['name'] Name of the menu + * @uses $vars['menu'] Array of menu items + * @uses $vars['class'] Additional CSS class for the menu + * @uses $vars['item_class'] Additional CSS class for each menu item + * @uses $vars['show_section_headers'] Do we show headers for each section? + */ + +// we want css classes to use dashes +$vars['name'] = preg_replace('/[^a-z0-9\-]/i', '-', $vars['name']); +$headers = elgg_extract('show_section_headers', $vars, false); +$item_class = elgg_extract('item_class', $vars, ''); + +$class = "elgg-menu elgg-menu-{$vars['name']}"; +if (isset($vars['class'])) { + $class .= " {$vars['class']}"; +} + +foreach ($vars['menu'] as $section => $menu_items) { + echo elgg_view('navigation/menu/elements/section', array( + 'items' => $menu_items, + 'class' => "$class elgg-menu-{$vars['name']}-$section", + 'section' => $section, + 'name' => $vars['name'], + 'show_section_headers' => $headers, + 'item_class' => $item_class, + )); +} diff --git a/views/default/navigation/menu/elements/item.php b/views/default/navigation/menu/elements/item.php new file mode 100644 index 000000000..fd9738826 --- /dev/null +++ b/views/default/navigation/menu/elements/item.php @@ -0,0 +1,43 @@ +<?php +/** + * A single element of a menu. + * + * @package Elgg.Core + * @subpackage Navigation + * + * @uses $vars['item'] ElggMenuItem + * @uses $vars['item_class'] Additional CSS class for the menu item + */ + +$item = $vars['item']; + +$link_class = 'elgg-menu-closed'; +if ($item->getSelected()) { + // @todo switch to addItemClass when that is implemented + //$item->setItemClass('elgg-state-selected'); + $link_class = 'elgg-menu-opened'; +} + +$children = $item->getChildren(); +if ($children) { + $item->addLinkClass($link_class); + $item->addLinkClass('elgg-menu-parent'); +} + +$item_class = $item->getItemClass(); +if ($item->getSelected()) { + $item_class = "$item_class elgg-state-selected"; +} +if (isset($vars['item_class']) && $vars['item_class']) { + $item_class .= ' ' . $vars['item_class']; +} + +echo "<li class=\"$item_class\">"; +echo $item->getContent(); +if ($children) { + echo elgg_view('navigation/menu/elements/section', array( + 'items' => $children, + 'class' => 'elgg-menu elgg-child-menu', + )); +} +echo '</li>'; diff --git a/views/default/navigation/menu/elements/section.php b/views/default/navigation/menu/elements/section.php new file mode 100644 index 000000000..c0e9ba750 --- /dev/null +++ b/views/default/navigation/menu/elements/section.php @@ -0,0 +1,30 @@ +<?php +/** + * Menu group + * + * @uses $vars['items'] Array of menu items + * @uses $vars['class'] Additional CSS class for the section + * @uses $vars['name'] Name of the menu + * @uses $vars['section'] The section name + * @uses $vars['item_class'] Additional CSS class for each menu item + * @uses $vars['show_section_headers'] Do we show headers for each section + */ + +$headers = elgg_extract('show_section_headers', $vars, false); +$class = elgg_extract('class', $vars, ''); +$item_class = elgg_extract('item_class', $vars, ''); + +if ($headers) { + $name = elgg_extract('name', $vars); + $section = elgg_extract('section', $vars); + echo '<h2>' . elgg_echo("menu:$name:header:$section") . '</h2>'; +} + +echo "<ul class=\"$class\">"; +foreach ($vars['items'] as $menu_item) { + echo elgg_view('navigation/menu/elements/item', array( + 'item' => $menu_item, + 'item_class' => $item_class, + )); +} +echo '</ul>'; diff --git a/views/default/navigation/menu/page.php b/views/default/navigation/menu/page.php new file mode 100644 index 000000000..56a288234 --- /dev/null +++ b/views/default/navigation/menu/page.php @@ -0,0 +1,36 @@ +<?php +/** + * Page menu + * + * @uses $vars['menu'] + * @uses $vars['selected_item'] + * @uses $vars['class'] + * @uses $vars['name'] + * @uses $vars['show_section_headers'] + */ + +$headers = elgg_extract('show_section_headers', $vars, false); + +$class = 'elgg-menu elgg-menu-page'; +if (isset($vars['class'])) { + $class = "$class {$vars['class']}"; +} + +if (isset($vars['selected_item'])) { + $parent = $vars['selected_item']->getParent(); + + while ($parent) { + $parent->setSelected(); + $parent = $parent->getParent(); + } +} + +foreach ($vars['menu'] as $section => $menu_items) { + echo elgg_view('navigation/menu/elements/section', array( + 'items' => $menu_items, + 'class' => "$class elgg-menu-page-$section", + 'section' => $section, + 'name' => $vars['name'], + 'show_section_headers' => $headers + )); +} diff --git a/views/default/navigation/menu/site.php b/views/default/navigation/menu/site.php new file mode 100644 index 000000000..24c21dd57 --- /dev/null +++ b/views/default/navigation/menu/site.php @@ -0,0 +1,30 @@ +<?php +/** + * Site navigation menu + * + * @uses $vars['menu']['default'] + * @uses $vars['menu']['more'] + */ + +$default_items = elgg_extract('default', $vars['menu'], array()); +$more_items = elgg_extract('more', $vars['menu'], array()); + +echo '<ul class="elgg-menu elgg-menu-site elgg-menu-site-default clearfix">'; +foreach ($default_items as $menu_item) { + echo elgg_view('navigation/menu/elements/item', array('item' => $menu_item)); +} + +if ($more_items) { + echo '<li class="elgg-more">'; + + $more = elgg_echo('more'); + echo "<a href=\"#\">$more</a>"; + + echo elgg_view('navigation/menu/elements/section', array( + 'class' => 'elgg-menu elgg-menu-site elgg-menu-site-more', + 'items' => $more_items, + )); + + echo '</li>'; +} +echo '</ul>'; diff --git a/views/default/navigation/menu/user_hover.php b/views/default/navigation/menu/user_hover.php new file mode 100644 index 000000000..5c89e585c --- /dev/null +++ b/views/default/navigation/menu/user_hover.php @@ -0,0 +1,60 @@ +<?php +/** + * User hover menu + * + * Register for the 'register', 'menu:user_hover' plugin hook to add to the user + * hover menu. There are three sections: action, default, and admin. + * + * @uses $vars['menu'] Menu array provided by elgg_view_menu() + */ + +$user = $vars['entity']; +$actions = elgg_extract('action', $vars['menu'], null); +$main = elgg_extract('default', $vars['menu'], null); +$admin = elgg_extract('admin', $vars['menu'], null); + +echo '<ul class="elgg-menu elgg-menu-hover">'; + +// name and username +$name_link = elgg_view('output/url', array( + 'href' => $user->getURL(), + 'text' => "<span class=\"elgg-heading-basic\">$user->name</span>@$user->username", + 'is_trusted' => true, +)); +echo "<li>$name_link</li>"; + +// actions +if (elgg_is_logged_in() && $actions) { + echo '<li>'; + echo elgg_view('navigation/menu/elements/section', array( + 'class' => "elgg-menu elgg-menu-hover-actions", + 'items' => $actions, + )); + echo '</li>'; +} + +// main +if ($main) { + echo '<li>'; + + echo elgg_view('navigation/menu/elements/section', array( + 'class' => 'elgg-menu elgg-menu-hover-default', + 'items' => $main, + )); + + echo '</li>'; +} + +// admin +if (elgg_is_admin_logged_in() && $admin) { + echo '<li>'; + + echo elgg_view('navigation/menu/elements/section', array( + 'class' => 'elgg-menu elgg-menu-hover-admin', + 'items' => $admin, + )); + + echo '</li>'; +} + +echo '</ul>'; diff --git a/views/default/navigation/pagination.php b/views/default/navigation/pagination.php new file mode 100644 index 000000000..04044c51c --- /dev/null +++ b/views/default/navigation/pagination.php @@ -0,0 +1,132 @@ +<?php +/** + * Elgg pagination + * + * @package Elgg + * @subpackage Core + * + * @uses int $vars['offset'] The offset in the list + * @uses int $vars['limit'] Number of items per page + * @uses int $vars['count'] Number of items in list + * @uses string $vars['base_url'] Base URL to use in links + * @uses string $vars['offset_key'] The string to use for offet in the URL + */ + +if (elgg_in_context('widget')) { + // widgets do not show pagination + return true; +} + +$offset = abs((int) elgg_extract('offset', $vars, 0)); +// because you can say $vars['limit'] = 0 +if (!$limit = (int) elgg_extract('limit', $vars, 10)) { + $limit = 10; +} + +$count = (int) elgg_extract('count', $vars, 0); +$offset_key = elgg_extract('offset_key', $vars, 'offset'); +// some views pass an empty string for base_url +if (isset($vars['base_url']) && $vars['base_url']) { + $base_url = $vars['base_url']; +} else if (isset($vars['baseurl']) && $vars['baseurl']) { + elgg_deprecated_notice("Use 'base_url' instead of 'baseurl' for the navigation/pagination view", 1.8); + $base_url = $vars['baseurl']; +} else { + $base_url = current_page_url(); +} + +$num_pages = elgg_extract('num_pages', $vars, 10); +$delta = ceil($num_pages / 2); + +if ($count <= $limit && $offset == 0) { + // no need for pagination + return true; +} + +$total_pages = ceil($count / $limit); +$current_page = ceil($offset / $limit) + 1; + +$pages = new stdClass(); +$pages->prev = array( + 'text' => '« ' . elgg_echo('previous'), + 'href' => '', + 'is_trusted' => true, +); +$pages->next = array( + 'text' => elgg_echo('next') . ' »', + 'href' => '', + 'is_trusted' => true, +); +$pages->items = array(); + +// Add pages before the current page +if ($current_page > 1) { + $prev_offset = $offset - $limit; + if ($prev_offset < 0) { + $prev_offset = 0; + } + + $pages->prev['href'] = elgg_http_add_url_query_elements($base_url, array($offset_key => $prev_offset)); + + $first_page = $current_page - $delta; + if ($first_page < 1) { + $first_page = 1; + } + + $pages->items = range($first_page, $current_page - 1); +} + + +$pages->items[] = $current_page; + + +// add pages after the current one +if ($current_page < $total_pages) { + $next_offset = $offset + $limit; + if ($next_offset >= $count) { + $next_offset--; + } + + $pages->next['href'] = elgg_http_add_url_query_elements($base_url, array($offset_key => $next_offset)); + + $last_page = $current_page + $delta; + if ($last_page > $total_pages) { + $last_page = $total_pages; + } + + $pages->items = array_merge($pages->items, range($current_page + 1, $last_page)); +} + + +echo '<ul class="elgg-pagination">'; + +if ($pages->prev['href']) { + $link = elgg_view('output/url', $pages->prev); + echo "<li>$link</li>"; +} else { + echo "<li class=\"elgg-state-disabled\"><span>{$pages->prev['text']}</span></li>"; +} + +foreach ($pages->items as $page) { + if ($page == $current_page) { + echo "<li class=\"elgg-state-selected\"><span>$page</span></li>"; + } else { + $page_offset = (($page - 1) * $limit); + $url = elgg_http_add_url_query_elements($base_url, array($offset_key => $page_offset)); + $link = elgg_view('output/url', array( + 'href' => $url, + 'text' => $page, + 'is_trusted' => true, + )); + echo "<li>$link</li>"; + } +} + +if ($pages->next['href']) { + $link = elgg_view('output/url', $pages->next); + echo "<li>$link</li>"; +} else { + echo "<li class=\"elgg-state-disabled\"><span>{$pages->next['text']}</span></li>"; +} + +echo '</ul>'; diff --git a/views/default/navigation/tabs.php b/views/default/navigation/tabs.php new file mode 100644 index 000000000..95e3f2669 --- /dev/null +++ b/views/default/navigation/tabs.php @@ -0,0 +1,81 @@ +<?php +/** + * Tab navigation + * + * @uses string $vars['type'] horizontal || vertical - Defaults to horizontal + * @uses string $vars['class'] Additional class to add to ul + * @uses array $vars['tabs'] A multi-dimensional array of tab entries in the format array( + * 'text' => string, // The string between the <a></a> tags + * 'href' => string, // URL for the link + * 'class' => string // Class of the li element + * 'id' => string, // ID of the li element + * 'selected' => bool // if this tab is currently selected (applied to li element) + * 'link_class' => string, // Class to pass to the link + * 'link_id' => string, // ID to pass to the link + * ) + */ +$options = elgg_clean_vars($vars); + +$type = elgg_extract('type', $vars, 'horizontal'); + +if ($type == 'horizontal') { + $options['class'] = "elgg-tabs elgg-htabs"; +} else { + $options['class'] = "elgg-tabs elgg-vtabs"; +} +if (isset($vars['class'])) { + $options['class'] = "{$options['class']} {$vars['class']}"; +} + +unset($options['tabs']); +unset($options['type']); + +$attributes = elgg_format_attributes($options); + +if (isset($vars['tabs']) && is_array($vars['tabs']) && !empty($vars['tabs'])) { + ?> + <ul <?php echo $attributes; ?>> + <?php + foreach ($vars['tabs'] as $info) { + $class = elgg_extract('class', $info, ''); + $id = elgg_extract('id', $info, ''); + + $selected = elgg_extract('selected', $info, FALSE); + if ($selected) { + $class .= ' elgg-state-selected'; + } + + $class_str = ($class) ? "class=\"$class\"" : ''; + $id_str = ($id) ? "id=\"$id\"" : ''; + + $options = $info; + unset($options['class']); + unset($options['id']); + unset($options['selected']); + + if (!isset($info['href']) && isset($info['url'])) { + $options['href'] = $info['url']; + unset($options['url']); + } + if (!isset($info['text']) && isset($info['title'])) { + $options['text'] = $options['title']; + unset($options['title']); + } + if (isset($info['link_class'])) { + $options['class'] = $options['link_class']; + unset($options['link_class']); + } + + if (isset($info['link_id'])) { + $options['id'] = $options['link_id']; + unset($options['link_id']); + } + + $link = elgg_view('output/url', $options); + + echo "<li $id_str $class_str>$link</li>"; + } + ?> + </ul> + <?php +} diff --git a/views/default/navigation/topbar_tools.php b/views/default/navigation/topbar_tools.php new file mode 100644 index 000000000..307f03fc6 --- /dev/null +++ b/views/default/navigation/topbar_tools.php @@ -0,0 +1,9 @@ +<?php +/** + * Empty view for backward compatibility. + * + * @package Elgg + * @subpackage Core + * + * @deprecated 1.8 Extend the topbar menus or the page/elements/topbar view directly + */ diff --git a/views/default/navigation/viewtype.php b/views/default/navigation/viewtype.php new file mode 100644 index 000000000..6dfa4ebc7 --- /dev/null +++ b/views/default/navigation/viewtype.php @@ -0,0 +1,11 @@ +<?php +/** + * Elgg list view switcher + * + * @package Elgg + * @subpackage Core + * + * @deprecated 1.8 See how file plugin adds a toggle in function file_register_toggle() + */ + +elgg_deprecated_notice('navigation/viewtype was deprecated', 1.8); diff --git a/views/default/object/admin_notice.php b/views/default/object/admin_notice.php new file mode 100644 index 000000000..11524567e --- /dev/null +++ b/views/default/object/admin_notice.php @@ -0,0 +1,20 @@ +<?php +/** + * A persistent admin notice to be displayed on all admin pages until cleared. + */ + +if (isset($vars['entity']) && elgg_instanceof($vars['entity'], 'object', 'admin_notice')) { + $notice = $vars['entity']; + $message = $notice->description; + + $delete = elgg_view('output/url', array( + 'href' => "action/admin/delete_admin_notice?guid=$notice->guid", + 'text' => '<span class="elgg-icon elgg-icon-delete"></span>', + 'is_action' => true, + 'class' => 'elgg-admin-notice', + 'is_trusted' => true, + )); + + echo "<p>$delete$message</p>"; +} + diff --git a/views/default/object/default.php b/views/default/object/default.php new file mode 100644 index 000000000..110648304 --- /dev/null +++ b/views/default/object/default.php @@ -0,0 +1,49 @@ +<?php +/** + * ElggObject default view. + * + * @warning This view may be used for other ElggEntity objects + * + * @package Elgg + * @subpackage Core + */ + +$icon = elgg_view_entity_icon($vars['entity'], 'small'); + +$title = $vars['entity']->title; +if (!$title) { + $title = $vars['entity']->name; +} +if (!$title) { + $title = get_class($vars['entity']); +} + +if (elgg_instanceof($vars['entity'], 'object')) { + $metadata = elgg_view('navigation/menu/metadata', $vars); +} + +$owner_link = ''; +$owner = $vars['entity']->getOwnerEntity(); +if ($owner) { + $owner_link = elgg_view('output/url', array( + 'href' => $owner->getURL(), + 'text' => $owner->name, + 'is_trusted' => true, + )); +} + +$date = elgg_view_friendly_time($vars['entity']->time_created); + +$subtitle = "$owner_link $date"; + +$params = array( + 'entity' => $vars['entity'], + 'title' => $title, + 'metadata' => $metadata, + 'subtitle' => $subtitle, + 'tags' => $vars['entity']->tags, +); +$params = $params + $vars; +$body = elgg_view('object/elements/summary', $params); + +echo elgg_view_image_block($icon, $body, $vars); diff --git a/views/default/object/elements/full.php b/views/default/object/elements/full.php new file mode 100644 index 000000000..9b89f9706 --- /dev/null +++ b/views/default/object/elements/full.php @@ -0,0 +1,37 @@ +<?php +/** + * Object full rendering + * + * Sample output: + * <div class="elgg-content"> + * <div class="elgg-image-block"> + * </div> + * <div class="elgg-output"> + * </div> + * </div> + * + * @uses $vars['entity'] ElggEntity + * @uses $vars['icon'] HTML for the content icon + * @uses $vars['summary'] HTML for the content summary + * @uses $vars['body'] HTML for the content body + * @uses $vars['class'] Optional additional class for the content wrapper + */ + +$icon = elgg_extract('icon', $vars); +$summary = elgg_extract('summary', $vars); +$body = elgg_extract('body', $vars); +$class = elgg_extract('class', $vars); +if ($class) { + $class = "elgg-content $class"; +} else { + $class = "elgg-content"; +} + +$header = elgg_view_image_block($icon, $summary); + +echo <<<HTML +<div class="$class"> +$header +$body +</div> +HTML; diff --git a/views/default/object/elements/summary.php b/views/default/object/elements/summary.php new file mode 100644 index 000000000..c0f3ad340 --- /dev/null +++ b/views/default/object/elements/summary.php @@ -0,0 +1,59 @@ +<?php +/** + * Object summary + * + * Sample output + * <ul class="elgg-menu elgg-menu-entity"><li>Public</li><li>Like this</li></ul> + * <h3><a href="">Title</a></h3> + * <p class="elgg-subtext">Posted 3 hours ago by George</p> + * <p class="elgg-tags"><a href="">one</a>, <a href="">two</a></p> + * <div class="elgg-content">Excerpt text</div> + * + * @uses $vars['entity'] ElggEntity + * @uses $vars['title'] Title link (optional) false = no title, '' = default + * @uses $vars['metadata'] HTML for entity menu and metadata (optional) + * @uses $vars['subtitle'] HTML for the subtitle (optional) + * @uses $vars['tags'] HTML for the tags (default is tags on entity, pass false for no tags) + * @uses $vars['content'] HTML for the entity content (optional) + */ + +$entity = $vars['entity']; + +$title_link = elgg_extract('title', $vars, ''); +if ($title_link === '') { + if (isset($entity->title)) { + $text = $entity->title; + } else { + $text = $entity->name; + } + $params = array( + 'text' => $text, + 'href' => $entity->getURL(), + 'is_trusted' => true, + ); + $title_link = elgg_view('output/url', $params); +} + +$metadata = elgg_extract('metadata', $vars, ''); +$subtitle = elgg_extract('subtitle', $vars, ''); +$content = elgg_extract('content', $vars, ''); + +$tags = elgg_extract('tags', $vars, ''); +if ($tags === '') { + $tags = elgg_view('output/tags', array('tags' => $entity->tags)); +} + +if ($metadata) { + echo $metadata; +} +if ($title_link) { + echo "<h3>$title_link</h3>"; +} +echo "<div class=\"elgg-subtext\">$subtitle</div>"; +echo $tags; + +echo elgg_view('object/summary/extend', $vars); + +if ($content) { + echo "<div class=\"elgg-content\">$content</div>"; +} diff --git a/views/default/object/plugin.php b/views/default/object/plugin.php new file mode 100644 index 000000000..5c7138e96 --- /dev/null +++ b/views/default/object/plugin.php @@ -0,0 +1,20 @@ +<?php +/** + * Used to show plugin user settings. + * + * @package Elgg.Core + * @subpackage Plugins + * + */ + +if (!elgg_in_context('admin')) { + forward('/', 403); +} + +$plugin = $vars['entity']; + +if (!$plugin->isValid()) { + echo elgg_view('object/plugin/invalid', $vars); +} else { + echo elgg_view('object/plugin/full', $vars); +} diff --git a/views/default/object/plugin/elements/dependencies.php b/views/default/object/plugin/elements/dependencies.php new file mode 100644 index 000000000..d8daedd33 --- /dev/null +++ b/views/default/object/plugin/elements/dependencies.php @@ -0,0 +1,49 @@ +<?php +/** + * Shows a table of plugin dependecies for ElggPlugin in $vars['plugin']. + * + * This uses a table because it's a table of data. + * + * @package Elgg.Core + * @subpackage Admin.Plugins + */ + +$plugin = elgg_extract('plugin', $vars, false); +$deps = $plugin->getPackage()->checkDependencies(true); + +$columns = array('type', 'name', 'expected_value', 'local_value', 'comment'); + +echo '<table class="elgg-plugin-dependencies styled"><tr>'; + +foreach ($columns as $column) { + $column = elgg_echo("admin:plugins:dependencies:$column"); + echo "<th class=\"pas\">$column</th>"; +} + +echo '</tr>'; + +$row = 'odd'; +foreach ($deps as $dep) { + $fields = elgg_get_plugin_dependency_strings($dep); + $type = $dep['type']; + + if ($dep['status']) { + $class = "elgg-state-success elgg-dependency elgg-dependency-$type"; + } elseif ($dep['type'] == 'suggests') { + $class = "elgg-state-warning elgg-dependency elgg-dependency-$type"; + } else { + $class = "elgg-state-error elgg-dependency elgg-dependency-$type"; + } + + echo "<tr class=\"$row\">"; + + foreach ($columns as $column) { + echo "<td class=\"pas $class\">{$fields[$column]}</td>"; + } + + echo '</tr>'; + + $row = ($row == 'odd') ? 'even' : 'odd'; +} + +echo '</table>';
\ No newline at end of file diff --git a/views/default/object/plugin/full.php b/views/default/object/plugin/full.php new file mode 100644 index 000000000..2de65b555 --- /dev/null +++ b/views/default/object/plugin/full.php @@ -0,0 +1,308 @@ +<?php +/** + * Displays a plugin on the admin screen. + * + * This file renders a plugin for the admin screen, including active/deactive, + * manifest details & display plugin settings. + * + * @uses $vars['entity'] + * @uses $vars['display_reordering'] Do we display the priority reordering links? + * + * @package Elgg.Core + * @subpackage Plugins + */ + +$plugin = $vars['entity']; +$reordering = elgg_extract('display_reordering', $vars, false); +$priority = $plugin->getPriority(); +$active = $plugin->isActive(); + +$can_activate = $plugin->canActivate(); +$max_priority = elgg_get_max_plugin_priority(); +$actions_base = '/action/admin/plugins/'; +$css_id = preg_replace('/[^a-z0-9-]/i', '-', $plugin->getID()); + +// build reordering links +$links = ''; +$classes = array('elgg-plugin'); + +if ($reordering) { + $classes[] = 'elgg-state-draggable'; + + // top and up link only if not at top + if ($priority > 1) { + $top_url = elgg_http_add_url_query_elements($actions_base . 'set_priority', array( + 'plugin_guid' => $plugin->guid, + 'priority' => 'first', + 'is_action' => true + )); + + $links .= "<li>" . elgg_view('output/url', array( + 'href' => $top_url, + 'text' => elgg_echo('top'), + 'is_action' => true, + 'is_trusted' => true, + )) . "</li>"; + + $up_url = elgg_http_add_url_query_elements($actions_base . 'set_priority', array( + 'plugin_guid' => $plugin->guid, + 'priority' => '-1', + 'is_action' => true + )); + + $links .= "<li>" . elgg_view('output/url', array( + 'href' => $up_url, + 'text' => elgg_echo('up'), + 'is_action' => true, + 'is_trusted' => true, + )) . "</li>"; + } + + // down and bottom links only if not at bottom + if ($priority < $max_priority) { + $down_url = elgg_http_add_url_query_elements($actions_base . 'set_priority', array( + 'plugin_guid' => $plugin->guid, + 'priority' => '+1', + 'is_action' => true + )); + + $links .= "<li>" . elgg_view('output/url', array( + 'href' => $down_url, + 'text' => elgg_echo('down'), + 'is_action' => true, + 'is_trusted' => true, + )) . "</li>"; + + $bottom_url = elgg_http_add_url_query_elements($actions_base . 'set_priority', array( + 'plugin_guid' => $plugin->guid, + 'priority' => 'last', + 'is_action' => true + )); + + $links .= "<li>" . elgg_view('output/url', array( + 'href' => $bottom_url, + 'text' => elgg_echo('bottom'), + 'is_action' => true, + 'is_trusted' => true, + )) . "</li>"; + } +} else { + $classes[] = 'elgg-state-undraggable'; +} + + +// activate / deactivate links + +// always let them deactivate +$options = array( + 'is_action' => true, + 'is_trusted' => true, +); +if ($active) { + $classes[] = 'elgg-state-active'; + $action = 'deactivate'; + $options['text'] = elgg_echo('admin:plugins:deactivate'); + $options['class'] = "elgg-button elgg-button-cancel"; + + if (!$can_activate) { + $classes[] = 'elgg-state-active'; + $options['class'] = 'elgg-button elgg-state-warning'; + } +} else if ($can_activate) { + $classes[] = 'elgg-state-inactive'; + $action = 'activate'; + $options['text'] = elgg_echo('admin:plugins:activate'); + $options['class'] = "elgg-button elgg-button-submit"; +} else { + $classes[] = 'elgg-state-inactive'; + $action = ''; + $options['text'] = elgg_echo('admin:plugins:cannot_activate'); + $options['class'] = "elgg-button elgg-button-disabled"; + $options['disabled'] = 'disabled'; +} + +if ($action) { + $url = elgg_http_add_url_query_elements($actions_base . $action, array( + 'plugin_guids[]' => $plugin->guid + )); + + $options['href'] = $url; +} +$action_button = elgg_view('output/url', $options); + +// Display categories and make category classes +$categories = $plugin->getManifest()->getCategories(); +$categories_html = ''; +if ($categories) { + $base_url = elgg_get_site_url() . "admin/plugins?category="; + + foreach ($categories as $category) { + $css_class = preg_replace('/[^a-z0-9-]/i', '-', $category); + $classes[] = "elgg-plugin-category-$css_class"; + + $url = $base_url . urlencode($category); + $friendly_category = htmlspecialchars(ElggPluginManifest::getFriendlyCategory($category)); + $categories_html .= "<li class=\"elgg-plugin-category prm\"><a href=\"$url\">$friendly_category</a></li>"; + } +} + +$screenshots_html = ''; +$screenshots = $plugin->getManifest()->getScreenshots(); +if ($screenshots) { + $base_url = elgg_get_plugins_path() . $plugin->getID() . '/'; + foreach ($screenshots as $screenshot) { + $desc = elgg_echo($screenshot['description']); + $alt = htmlentities($desc, ENT_QUOTES, 'UTF-8'); + $screenshot_full = "{$vars['url']}admin_plugin_screenshot/{$plugin->getID()}/full/{$screenshot['path']}"; + $screenshot_src = "{$vars['url']}admin_plugin_screenshot/{$plugin->getID()}/thumbnail/{$screenshot['path']}"; + + $screenshots_html .= "<li class=\"elgg-plugin-screenshot prm ptm\"><a class=\"elgg-lightbox\" href=\"$screenshot_full\">" + . "<img src=\"$screenshot_src\" alt=\"$alt\"></a></li>"; + } +} + +// metadata +$description = elgg_view('output/longtext', array('value' => $plugin->getManifest()->getDescription())); +$author = '<span>' . elgg_echo('admin:plugins:label:author') . '</span>: ' + . elgg_view('output/text', array('value' => $plugin->getManifest()->getAuthor())); +$version = htmlspecialchars($plugin->getManifest()->getVersion()); +$website = elgg_view('output/url', array( + 'href' => $plugin->getManifest()->getWebsite(), + 'text' => $plugin->getManifest()->getWebsite(), + 'is_trusted' => true, +)); + +$resources = array( + 'repository' => $plugin->getManifest()->getRepositoryURL(), + 'bugtracker' => $plugin->getManifest()->getBugTrackerURL(), + 'donate' => $plugin->getManifest()->getDonationsPageURL(), +); + +$resources_html = "<ul class=\"elgg-plugin-resources\">"; +foreach ($resources as $id => $href) { + if ($href) { + $resources_html .= "<li class=\"prm\">"; + $resources_html .= elgg_view('output/url', array( + 'href' => $href, + 'text' => elgg_echo("admin:plugins:label:$id"), + 'is_trusted' => true, + )); + $resources_html .= "</li>"; + } +} +$resources_html .= "</ul>"; + +$copyright = elgg_view('output/text', array('value' => $plugin->getManifest()->getCopyright())); +$license = elgg_view('output/text', array('value' => $plugin->getManifest()->getLicense())); + +// show links to text files +$files = $plugin->getAvailableTextFiles(); + +$docs = ''; +if ($files) { + $docs = '<ul>'; + foreach ($files as $file => $path) { + $url = 'admin_plugin_text_file/' . $plugin->getID() . "/$file"; + $link = elgg_view('output/url', array( + 'text' => $file, + 'href' => $url, + 'is_trusted' => true, + )); + $docs .= "<li>$link</li>"; + + } + $docs .= '</ul>'; +} + +?> + +<div class="<?php echo implode(' ', $classes); ?>" id="<?php echo $css_id; ?>"> + <div class="elgg-image-block"> + <div class="elgg-image-alt"> + <?php if ($links) : ?> + <ul class="elgg-menu elgg-menu-metadata"> + <?php echo $links; ?> + </ul> + <?php endif; ?> + <div class="clearfloat float-alt mtm"> + <?php echo $action_button; ?> + </div> + </div> + <div class="elgg-body"> +<?php +$settings_view_old = 'settings/' . $plugin->getID() . '/edit'; +$settings_view_new = 'plugins/' . $plugin->getID() . '/settings'; +if (elgg_view_exists($settings_view_old) || elgg_view_exists($settings_view_new)) { + $link = elgg_get_site_url() . "admin/plugin_settings/" . $plugin->getID(); + $settings_link = "<a class='elgg-plugin-settings' href='$link'>[" . elgg_echo('settings') . "]</a>"; +} +?> + <div class="elgg-head"> + <h3><?php echo $plugin->getManifest()->getName() . " $version $settings_link"; ?></h3> + </div> + <?php + if ($plugin->getManifest()->getApiVersion() < 1.8) { + $reqs = $plugin->getManifest()->getRequires(); + if (!$reqs) { + $message = elgg_echo('admin:plugins:warning:elgg_version_unknown'); + echo "<p class=\"elgg-state-error\">$message</p>"; + } + } + + if (!$can_activate) { + if ($active) { + $message = elgg_echo('admin:plugins:warning:unmet_dependencies_active'); + echo "<p class=\"elgg-state-warning\">$message</p>"; + } else { + $message = elgg_echo('admin:plugins:warning:unmet_dependencies'); + echo "<p class=\"elgg-state-error\">$message</p>"; + } + } + ?> + + <div><?php echo $description; ?></div> + <p><?php echo $author . ' - ' . $website; ?></p> + + <?php + echo $resources_html; + echo $docs; + ?> + + <div class="pts"> + <?php + echo elgg_view('output/url', array( + 'href' => "#elgg-plugin-manifest-$css_id", + 'text' => elgg_echo("admin:plugins:label:moreinfo"), + 'rel' => 'toggle', + )); + ?> + </div> + </div> + </div> + <div class="elgg-plugin-more hidden" id="elgg-plugin-manifest-<?php echo $css_id; ?>"> + + <?php + if ($screenshots_html) { + ?> + <div><ul><?php echo $screenshots_html; ?></ul></div> + <?php + } + + if ($categories_html) { + ?> + <div><?php echo elgg_echo('admin:plugins:label:categories') . ": <ul class=\"elgg-plugin-categories\">$categories_html</ul>"; ?></div> + <?php + } + + ?> + <div><?php echo elgg_echo('admin:plugins:label:copyright') . ": " . $copyright; ?></div> + <div><?php echo elgg_echo('admin:plugins:label:licence') . ": " . $license; ?></div> + <div><?php echo elgg_echo('admin:plugins:label:location') . ": " . htmlspecialchars($plugin->getPath()) ?></div> + + <div><?php echo elgg_echo('admin:plugins:label:dependencies'); ?>: + <?php + echo elgg_view('object/plugin/elements/dependencies', array('plugin' => $plugin)); + ?> + </div> + </div> +</div> diff --git a/views/default/object/plugin/invalid.php b/views/default/object/plugin/invalid.php new file mode 100644 index 000000000..828bceaba --- /dev/null +++ b/views/default/object/plugin/invalid.php @@ -0,0 +1,42 @@ +<?php +/** + * Displays an invalid plugin on the admin screen. + * + * An invalid plugin is a plugin whose isValid() method returns false. + * This usually means there are required files missing, unreadable or in the + * wrong format. + * + * @package Elgg.Core + * @subpackage Plugins + */ + +$plugin = $vars['entity']; + +$id = $plugin->getID(); +$path = htmlspecialchars($plugin->getPath()); +$message = elgg_echo('admin:plugins:warning:invalid', array($plugin->getError())); +$css_id = preg_replace('/[^a-z0-9-]/i', '-', $plugin->getID()); + +?> + +<div class="elgg-state-draggable elgg-plugin elgg-state-inactive elgg-state-error" id="elgg-plugin-<?php echo $plugin->guid; ?>"> + <div class="elgg-head"><h3><?php echo $id; ?></h3></div> + <div class="elgg-body"> + <p class="elgg-state-error"><?php echo $message; ?></p> + <p><?php echo elgg_echo('admin:plugins:warning:invalid:check_docs'); ?></p> + + <div class="pts"> + <?php + echo elgg_view('output/url', array( + 'href' => "#elgg-plugin-manifest-$css_id", + 'text' => elgg_echo("admin:plugins:label:moreinfo"), + 'rel' => 'toggle', + )); + ?> + </div> + + <div class="hidden elgg-plugin-more" id="elgg-plugin-manifest-<?php echo $css_id; ?>"> + <p><?php echo elgg_echo('admin:plugins:label:location') . ": " . $path; ?></p> + </div> + </div> +</div>
\ No newline at end of file diff --git a/views/default/object/widget.php b/views/default/object/widget.php new file mode 100644 index 000000000..0c7994f2b --- /dev/null +++ b/views/default/object/widget.php @@ -0,0 +1,75 @@ +<?php +/** + * Widget object + * + * @uses $vars['entity'] ElggWidget + * @uses $vars['show_access'] Show the access control in edit area? (true) + */ + +$widget = $vars['entity']; +if (!elgg_instanceof($widget, 'object', 'widget')) { + return true; +} + +$show_access = elgg_extract('show_access', $vars, true); + +// @todo catch for disabled plugins +$widget_types = elgg_get_widget_types('all'); + +$handler = $widget->handler; + +$title = $widget->getTitle(); + +$edit_area = ''; +$can_edit = $widget->canEdit(); +if ($can_edit) { + $edit_area = elgg_view('object/widget/elements/settings', array( + 'widget' => $widget, + 'show_access' => $show_access, + )); +} +$controls = elgg_view('object/widget/elements/controls', array( + 'widget' => $widget, + 'show_edit' => $edit_area != '', +)); + +// don't show content for default widgets +if (elgg_in_context('default_widgets')) { + $content = ''; +} else { + if (elgg_view_exists("widgets/$handler/content")) { + $content = elgg_view("widgets/$handler/content", $vars); + } else { + elgg_deprecated_notice("widgets use content as the display view", 1.8); + $content = elgg_view("widgets/$handler/view", $vars); + } +} + +$widget_id = "elgg-widget-$widget->guid"; +$widget_instance = "elgg-widget-instance-$handler"; +$widget_class = "elgg-module elgg-module-widget"; +if ($can_edit) { + $widget_class .= " elgg-state-draggable $widget_instance"; +} else { + $widget_class .= " elgg-state-fixed $widget_instance"; +} + +$widget_header = <<<HEADER + <div class="elgg-widget-handle clearfix"><h3>$title</h3> + $controls + </div> +HEADER; + +$widget_body = <<<BODY + $edit_area + <div class="elgg-widget-content" id="elgg-widget-content-$widget->guid"> + $content + </div> +BODY; + +echo elgg_view('page/components/module', array( + 'class' => $widget_class, + 'id' => $widget_id, + 'body' => $widget_body, + 'header' => $widget_header, +)); diff --git a/views/default/object/widget/elements/controls.php b/views/default/object/widget/elements/controls.php new file mode 100644 index 000000000..57a935f62 --- /dev/null +++ b/views/default/object/widget/elements/controls.php @@ -0,0 +1,14 @@ +<?php +/** + * Elgg widget controls + * + * @uses $vars['widget'] + * @uses $vars['show_edit'] Whether to show the edit button (true) + */ + +echo elgg_view_menu('widget', array( + 'entity' => elgg_extract('widget', $vars), + 'show_edit' => elgg_extract('show_edit', $vars, true), + 'sort_by' => 'priority', + 'class' => 'elgg-menu-hz', +)); diff --git a/views/default/object/widget/elements/settings.php b/views/default/object/widget/elements/settings.php new file mode 100644 index 000000000..25cda58c9 --- /dev/null +++ b/views/default/object/widget/elements/settings.php @@ -0,0 +1,25 @@ +<?php +/** + * Elgg widget edit settings + * + * @uses $vars['widget'] + */ + +$widget = elgg_extract('widget', $vars); + +// not using elgg_view_form() so that we can detect if the form is empty +$form_body = elgg_view('forms/widgets/save', $vars); +if (!$form_body) { + return true; +} + +$form = elgg_view('input/form', array( + 'action' => 'action/widgets/save', + 'body' => $form_body, + 'class' => 'elgg-form-widgets-save', +)); +?> + +<div class="elgg-widget-edit" id="widget-edit-<?php echo $widget->guid; ?>"> + <?php echo $form; ?> +</div> diff --git a/views/default/output/access.php b/views/default/output/access.php new file mode 100644 index 000000000..91c5c721e --- /dev/null +++ b/views/default/output/access.php @@ -0,0 +1,42 @@ +<?php +/** + * Displays HTML for entity access levels. + * Requires an entity because some special logic for containers is used. + * + * @uses int $vars['entity'] - The entity whose access ID to display. + */ + +//sort out the access level for display +if (isset($vars['entity']) && elgg_instanceof($vars['entity'])) { + $access_id = $vars['entity']->access_id; + $access_class = 'elgg-access'; + $access_id_string = get_readable_access_level($access_id); + $access_id_string = htmlentities($access_id_string, ENT_QUOTES, 'UTF-8'); + + // if within a group or shared access collection display group name and open/closed membership status + // @todo have a better way to do this instead of checking against subtype / class. + $container = $vars['entity']->getContainerEntity(); + + if ($container && $container instanceof ElggGroup) { + // we decided to show that the item is in a group, rather than its actual access level + // not required. Group ACLs are prepended with "Group: " when written. + //$access_id_string = elgg_echo('groups:group') . $container->name; + $membership = $container->membership; + + if ($membership == ACCESS_PUBLIC) { + $access_class .= ' elgg-access-group-open'; + } else { + $access_class .= ' elgg-access-group-closed'; + } + + // @todo this is plugin specific code in core. Should be removed. + } elseif ($container && $container->getSubtype() == 'shared_access') { + $access_class .= ' shared_collection'; + } elseif ($access_id == ACCESS_PRIVATE) { + $access_class .= ' elgg-access-private'; + } + + $help_text = elgg_echo('access:help'); + + echo "<span title=\"$help_text\" class=\"$access_class\">$access_id_string</span>"; +} diff --git a/views/default/output/calendar.php b/views/default/output/calendar.php new file mode 100644 index 000000000..fa0bd0c04 --- /dev/null +++ b/views/default/output/calendar.php @@ -0,0 +1,13 @@ +<?php +/** + * Elgg calendar output + * Displays a calendar output field + * + * @package Elgg + * @subpackage Core + * + * @uses $vars['value'] The current value, if any + * + */ +elgg_deprecated_notice('output/calendar was deprecated in favor of output/date', 1.8); +echo elgg_view('output/date', $vars);
\ No newline at end of file diff --git a/views/default/output/checkboxes.php b/views/default/output/checkboxes.php new file mode 100644 index 000000000..56d2588ac --- /dev/null +++ b/views/default/output/checkboxes.php @@ -0,0 +1,13 @@ +<?php +/** + * Elgg text output + * Displays some text that was input using a standard text field + * + * @package Elgg + * @subpackage Core + * + * @uses $vars['text'] The text to display + * + */ + +echo elgg_view('output/tags',$vars);
\ No newline at end of file diff --git a/views/default/output/confirmlink.php b/views/default/output/confirmlink.php new file mode 100644 index 000000000..532790a38 --- /dev/null +++ b/views/default/output/confirmlink.php @@ -0,0 +1,47 @@ +<?php +/** + * Elgg confirmation link + * A link that displays a confirmation dialog before it executes + * + * @package Elgg + * @subpackage Core + * + * @uses $vars['text'] The text of the link + * @uses $vars['href'] The address + * @uses $vars['title'] The title text (defaults to confirm text) + * @uses $vars['confirm'] The dialog text + * @uses $vars['encode_text'] Run $vars['text'] through htmlspecialchars() (false) + */ + +$vars['rel'] = elgg_extract('confirm', $vars, elgg_echo('question:areyousure')); +$vars['rel'] = addslashes($vars['rel']); +$encode = elgg_extract('encode_text', $vars, false); + +// always generate missing action tokens +$vars['href'] = elgg_add_action_tokens_to_url(elgg_normalize_url($vars['href']), true); + +$text = elgg_extract('text', $vars, ''); +if ($encode) { + $text = htmlspecialchars($text, ENT_QUOTES, 'UTF-8', false); +} + +if (!isset($vars['title']) && isset($vars['confirm'])) { + $vars['title'] = $vars['rel']; +} + +if (isset($vars['class'])) { + if (!is_array($vars['class'])) { + $vars['class'] = array($vars['class']); + } + $vars['class'][] = 'elgg-requires-confirmation'; +} else { + $vars['class'] = 'elgg-requires-confirmation'; +} + +unset($vars['encode_text']); +unset($vars['text']); +unset($vars['confirm']); +unset($vars['is_trusted']); + +$attributes = elgg_format_attributes($vars); +echo "<a $attributes>$text</a>"; diff --git a/views/default/output/date.php b/views/default/output/date.php new file mode 100644 index 000000000..1644a3480 --- /dev/null +++ b/views/default/output/date.php @@ -0,0 +1,17 @@ +<?php +/** + * Date + * Displays a properly formatted date + * + * @package Elgg + * @subpackage Core + * + * @uses $vars['value'] Date as text or a Unix timestamp in seconds + */ + +// convert timestamps to text for display +if (is_numeric($vars['value'])) { + $vars['value'] = gmdate('Y-m-d', $vars['value']); +} + +echo $vars['value']; diff --git a/views/default/output/dropdown.php b/views/default/output/dropdown.php new file mode 100644 index 000000000..8d68508ca --- /dev/null +++ b/views/default/output/dropdown.php @@ -0,0 +1,13 @@ +<?php +/** + * Elgg dropdown display + * Displays a value that was entered into the system via a dropdown + * + * @package Elgg + * @subpackage Core + * + * @uses $vars['text'] The text to display + * + */ + +echo htmlspecialchars($vars['value'], ENT_QUOTES, 'UTF-8', false); diff --git a/views/default/output/email.php b/views/default/output/email.php new file mode 100644 index 000000000..f5a8bc4b8 --- /dev/null +++ b/views/default/output/email.php @@ -0,0 +1,17 @@ +<?php +/** + * Elgg email output + * Displays an email address that was entered using an email input field + * + * @package Elgg + * @subpackage Core + * + * @uses $vars['value'] The email address to display + * + */ + +$encoded_value = htmlspecialchars($vars['value'], ENT_QUOTES, 'UTF-8'); + +if (!empty($vars['value'])) { + echo "<a href=\"mailto:$encoded_value\">$encoded_value</a>"; +}
\ No newline at end of file diff --git a/views/default/output/friendlytime.php b/views/default/output/friendlytime.php new file mode 100644 index 000000000..22f60d517 --- /dev/null +++ b/views/default/output/friendlytime.php @@ -0,0 +1,12 @@ +<?php +/** + * Friendly time + * Translates an epoch time into a human-readable time. + * + * @uses string $vars['time'] Unix-style epoch timestamp + */ + +$friendly_time = elgg_get_friendly_time($vars['time']); +$timestamp = htmlspecialchars(date(elgg_echo('friendlytime:date_format'), $vars['time'])); + +echo "<acronym title=\"$timestamp\">$friendly_time</acronym>"; diff --git a/views/default/output/friendlytitle.php b/views/default/output/friendlytitle.php new file mode 100644 index 000000000..fbc4f39de --- /dev/null +++ b/views/default/output/friendlytitle.php @@ -0,0 +1,19 @@ +<?php +/** + * Friendly title + * Makes a URL-friendly title. + * + * @uses string $vars['title'] Title to create from. + */ + + +$title = $vars['title']; + +//$title = iconv('UTF-8', 'ASCII//TRANSLIT', $title); +$title = preg_replace("/[^\w ]/","",$title); +$title = str_replace(" ","-",$title); +$title = str_replace("--","-",$title); +$title = trim($title); +$title = strtolower($title); + +echo $title; diff --git a/views/default/output/iframe.php b/views/default/output/iframe.php new file mode 100644 index 000000000..7df9332f1 --- /dev/null +++ b/views/default/output/iframe.php @@ -0,0 +1,13 @@ +<?php +/** + * Display a page in an embedded window + * + * @package Elgg + * @subpackage Core + * + * @uses $vars['value'] Source of the page + * + */ +?> +<iframe src="<?php echo $vars['value']; ?>"> +</iframe>
\ No newline at end of file diff --git a/views/default/output/img.php b/views/default/output/img.php new file mode 100644 index 000000000..d3f596801 --- /dev/null +++ b/views/default/output/img.php @@ -0,0 +1,12 @@ +<?php +/** + * Elgg image view + * + * @uses string $vars['src'] The image src url. + */ + +$vars['src'] = elgg_normalize_url($vars['src']); +$vars['src'] = elgg_format_url($vars['src']); + +$attributes = elgg_format_attributes($vars); +echo "<img $attributes/>"; diff --git a/views/default/output/location.php b/views/default/output/location.php new file mode 100644 index 000000000..e1009f17d --- /dev/null +++ b/views/default/output/location.php @@ -0,0 +1,19 @@ +<?php +/** + * Display a location + * + * @uses $vars['entity'] The ElggEntity that has a location + * @uses $vars['value'] The location string if the entity is not passed + */ + +if (isset($vars['entity'])) { + $vars['value'] = $vars['entity']->location; + unset($vars['entity']); +} + +// Fixes #4566 we used to allow arrays of strings for location +if (is_array($vars['value'])) { + $vars['value'] = implode(', ', $vars['value']); +} + +echo elgg_view('output/tag', $vars); diff --git a/views/default/output/longtext.php b/views/default/output/longtext.php new file mode 100644 index 000000000..589100c4f --- /dev/null +++ b/views/default/output/longtext.php @@ -0,0 +1,38 @@ +<?php +/** + * Elgg display long text + * Displays a large amount of text, with new lines converted to line breaks + * + * @package Elgg + * @subpackage Core + * + * @uses $vars['value'] The text to display + * @uses $vars['parse_urls'] Whether to turn urls into links. Default is true. + * @uses $vars['class'] + */ + +$class = 'elgg-output'; +$additional_class = elgg_extract('class', $vars, ''); +if ($additional_class) { + $vars['class'] = "$class $additional_class"; +} else { + $vars['class'] = $class; +} + +$parse_urls = elgg_extract('parse_urls', $vars, true); +unset($vars['parse_urls']); + +$text = $vars['value']; +unset($vars['value']); + +if ($parse_urls) { + $text = parse_urls($text); +} + +$text = filter_tags($text); + +$text = elgg_autop($text); + +$attributes = elgg_format_attributes($vars); + +echo "<div $attributes>$text</div>"; diff --git a/views/default/output/pulldown.php b/views/default/output/pulldown.php new file mode 100644 index 000000000..7097a9a8d --- /dev/null +++ b/views/default/output/pulldown.php @@ -0,0 +1,14 @@ +<?php +/** + * Elgg pulldown display + * Displays a value that was entered into the system via a pulldown + * + * @package Elgg + * @subpackage Core + * + * @uses $vars['text'] The text to display + * + * @deprecated 1.8 Use output/dropdown + */ + +echo elgg_view('output/dropdown', $vars);
\ No newline at end of file diff --git a/views/default/output/radio.php b/views/default/output/radio.php new file mode 100644 index 000000000..0fae9977b --- /dev/null +++ b/views/default/output/radio.php @@ -0,0 +1,13 @@ +<?php +/** + * Elgg text output + * Displays some text that was input using a standard text field + * + * @package Elgg + * @subpackage Core + * + * @uses $vars['text'] The text to display + * + */ + +echo elgg_view('output/text', $vars);
\ No newline at end of file diff --git a/views/default/output/tag.php b/views/default/output/tag.php new file mode 100644 index 000000000..3c002a31b --- /dev/null +++ b/views/default/output/tag.php @@ -0,0 +1,34 @@ +<?php +/** + * Elgg single tag output + * + * @uses $vars['value'] String + * @uses $vars['type'] The entity type, optional + * @uses $vars['subtype'] The entity subtype, optional + * + */ + +if (!empty($vars['subtype'])) { + $subtype = "&subtype=" . urlencode($vars['subtype']); +} else { + $subtype = ""; +} +if (!empty($vars['object'])) { + $object = "&object=" . urlencode($vars['object']); +} else { + $object = ""; +} + +if (isset($vars['value'])) { + if (!empty($vars['type'])) { + $type = "&type={$vars['type']}"; + } else { + $type = ""; + } + $url = elgg_get_site_url() . 'search?q=' . urlencode($vars['value']) . "&search_type=tags{$type}{$subtype}{$object}"; + echo elgg_view('output/url', array( + 'href' => $url, + 'text' => $vars['value'], + 'rel' => 'tag', + )); +} diff --git a/views/default/output/tagcloud.php b/views/default/output/tagcloud.php new file mode 100644 index 000000000..a212becd8 --- /dev/null +++ b/views/default/output/tagcloud.php @@ -0,0 +1,64 @@ +<?php +/** + * Elgg tagcloud + * Displays a tagcloud + * + * @package Elgg + * @subpackage Core + * + * @uses $vars['tagcloud'] An array of stdClass objects with two elements: 'tag' (the text of the tag) and 'total' (the number of elements with this tag) + * @uses $vars['value'] Sames as tagcloud + * @uses $vars['type'] Entity type + * @uses $vars['subtype'] Entity subtype + */ + +if (!empty($vars['subtype'])) { + $subtype = "&entity_subtype=" . urlencode($vars['subtype']); +} else { + $subtype = ""; +} +if (!empty($vars['type'])) { + $type = "&entity_type=" . urlencode($vars['type']); +} else { + $type = ""; +} + +if (empty($vars['tagcloud']) && !empty($vars['value'])) { + $vars['tagcloud'] = $vars['value']; +} + +if (!empty($vars['tagcloud']) && is_array($vars['tagcloud'])) { + $counter = 0; + $max = 0; + + foreach ($vars['tagcloud'] as $tag) { + if ($tag->total > $max) { + $max = $tag->total; + } + } + + $cloud = ''; + foreach ($vars['tagcloud'] as $tag) { + if ($cloud != '') { + $cloud .= ', '; + } + // protecting against division by zero warnings + $size = round((log($tag->total) / log($max + .0001)) * 100) + 30; + if ($size < 100) { + $size = 100; + } + $url = "search?q=". urlencode($tag->tag) . "&search_type=tags$type$subtype"; + + $cloud .= elgg_view('output/url', array( + 'text' => $tag->tag, + 'href' => $url, + 'style' => "font-size: $size%;", + 'title' => "$tag->tag ($tag->total)", + 'rel' => 'tag' + )); + } + + $cloud .= elgg_view('tagcloud/extend'); + + echo "<div class=\"elgg-tagcloud\">$cloud</div>"; +} diff --git a/views/default/output/tags.php b/views/default/output/tags.php new file mode 100644 index 000000000..3082dd41e --- /dev/null +++ b/views/default/output/tags.php @@ -0,0 +1,81 @@ +<?php +/** + * Elgg tags + * Tags can be a single string (for one tag) or an array of strings + * + * @uses $vars['value'] Array of tags or a string + * @uses $vars['type'] The entity type, optional + * @uses $vars['subtype'] The entity subtype, optional + * @uses $vars['entity'] Optional. Entity whose tags are being displayed (metadata ->tags) + * @uses $vars['list_class'] Optional. Additional classes to be passed to <ul> element + * @uses $vars['item_class'] Optional. Additional classes to be passed to <li> elements + * @uses $vars['icon_class'] Optional. Additional classes to be passed to tags icon image + */ + +if (isset($vars['entity'])) { + $vars['tags'] = $vars['entity']->tags; + unset($vars['entity']); +} + +if (!empty($vars['subtype'])) { + $subtype = "&subtype=" . urlencode($vars['subtype']); +} else { + $subtype = ""; +} +if (!empty($vars['object'])) { + $object = "&object=" . urlencode($vars['object']); +} else { + $object = ""; +} + +if (empty($vars['tags']) && !empty($vars['value'])) { + $vars['tags'] = $vars['value']; +} + +if (empty($vars['tags']) && isset($vars['entity'])) { + $vars['tags'] = $vars['entity']->tags; +} + +if (!empty($vars['tags'])) { + if (!is_array($vars['tags'])) { + $vars['tags'] = array($vars['tags']); + } + + $list_class = "elgg-tags"; + if (isset($vars['list_class'])) { + $list_class = "$list_class {$vars['list_class']}"; + } + + $item_class = "elgg-tag"; + if (isset($vars['item_class'])) { + $item_class = "$item_class {$vars['item_class']}"; + } + + $icon_class = elgg_extract('icon_class', $vars); + $list_items = '<li>' . elgg_view_icon('tag', $icon_class) . '</li>'; + + foreach($vars['tags'] as $tag) { + if (!empty($vars['type'])) { + $type = "&type={$vars['type']}"; + } else { + $type = ""; + } + $url = elgg_get_site_url() . 'search?q=' . urlencode($tag) . "&search_type=tags{$type}{$subtype}{$object}"; + if (is_string($tag)) { + $list_items .= "<li class=\"$item_class\">"; + $list_items .= elgg_view('output/url', array('href' => $url, 'text' => $tag, 'rel' => 'tag')); + $list_items .= '</li>'; + } + } + + $list = <<<___HTML + <div class="clearfix"> + <ul class="$list_class"> + $list_items + </ul> + </div> +___HTML; + + echo $list; +} + diff --git a/views/default/output/text.php b/views/default/output/text.php new file mode 100644 index 000000000..5cbfc35b0 --- /dev/null +++ b/views/default/output/text.php @@ -0,0 +1,12 @@ +<?php +/** + * Elgg text output + * Displays some text that was input using a standard text field + * + * @package Elgg + * @subpackage Core + * + * @uses $vars['value'] The text to display + */ + +echo htmlspecialchars($vars['value'], ENT_QUOTES, 'UTF-8', false);
\ No newline at end of file diff --git a/views/default/output/url.php b/views/default/output/url.php new file mode 100644 index 000000000..81b02087d --- /dev/null +++ b/views/default/output/url.php @@ -0,0 +1,56 @@ +<?php +/** + * Elgg URL display + * Displays a URL as a link + * + * @package Elgg + * @subpackage Core + * + * @uses string $vars['text'] The string between the <a></a> tags. + * @uses string $vars['href'] The unencoded url string + * @uses bool $vars['encode_text'] Run $vars['text'] through htmlspecialchars() (false) + * @uses bool $vars['is_action'] Is this a link to an action (false) + * @uses bool $vars['is_trusted'] Is this link trusted (false) + */ + +$url = elgg_extract('href', $vars, null); +if (!$url and isset($vars['value'])) { + $url = trim($vars['value']); + unset($vars['value']); +} + +if (isset($vars['text'])) { + if (elgg_extract('encode_text', $vars, false)) { + $text = htmlspecialchars($vars['text'], ENT_QUOTES, 'UTF-8', false); + } else { + $text = $vars['text']; + } + unset($vars['text']); +} else { + $text = htmlspecialchars($url, ENT_QUOTES, 'UTF-8', false); +} + +unset($vars['encode_text']); + +if ($url) { + $url = elgg_normalize_url($url); + + if (elgg_extract('is_action', $vars, false)) { + $url = elgg_add_action_tokens_to_url($url, false); + } + + if (!elgg_extract('is_trusted', $vars, false)) { + if (!isset($vars['rel'])) { + $vars['rel'] = 'nofollow'; + $url = strip_tags($url); + } + } + + $vars['href'] = $url; +} + +unset($vars['is_action']); +unset($vars['is_trusted']); + +$attributes = elgg_format_attributes($vars); +echo "<a $attributes>$text</a>"; diff --git a/views/default/page/admin.php b/views/default/page/admin.php new file mode 100644 index 000000000..7045edd91 --- /dev/null +++ b/views/default/page/admin.php @@ -0,0 +1,66 @@ +<?php +/** + * Elgg pageshell for the admin area + * + * @package Elgg + * @subpackage Core + * + * @uses $vars['title'] The page title + * @uses $vars['body'] The main content of the page + * @uses $vars['sysmessages'] A 2d array of various message registers, passed from system_messages() + */ + +$notices_html = ''; +$notices = elgg_get_admin_notices(); +if ($notices) { + foreach ($notices as $notice) { + $notices_html .= elgg_view_entity($notice); + } + + $notices_html = "<div class=\"elgg-admin-notices\">$notices_html</div>"; +} + +// render content before head so that JavaScript and CSS can be loaded. See #4032 +$messages = elgg_view('page/elements/messages', array('object' => $vars['sysmessages'])); +$header = elgg_view('admin/header', $vars); +$body = $vars['body']; +$footer = elgg_view('admin/footer', $vars); + + +// Set the content type +header("Content-type: text/html; charset=UTF-8"); + +?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> +<?php echo elgg_view('page/elements/head', $vars); ?> +</head> +<body> + <div class="elgg-page elgg-page-admin"> + <div class="elgg-inner"> + <div class="elgg-page-header"> + <div class="elgg-inner clearfix"> + <?php echo $header; ?> + </div> + </div> + <div class="elgg-page-messages"> + <?php echo $messages; ?> + <?php echo $notices_html; ?> + </div> + <div class="elgg-page-body"> + <div class="elgg-inner"> + <?php echo $body; ?> + </div> + </div> + <div class="elgg-page-footer"> + <div class="elgg-inner"> + <?php echo $footer; ?> + </div> + </div> + </div> + </div> + <?php echo elgg_view('page/elements/foot'); ?> +</body> + +</html>
\ No newline at end of file diff --git a/views/default/page/components/gallery.php b/views/default/page/components/gallery.php new file mode 100644 index 000000000..e8b3f477e --- /dev/null +++ b/views/default/page/components/gallery.php @@ -0,0 +1,77 @@ +<?php +/** + * Gallery view + * + * Implemented as an unorder list + * + * @uses $vars['items'] Array of ElggEntity or ElggAnnotation objects + * @uses $vars['offset'] Index of the first list item in complete list + * @uses $vars['limit'] Number of items per page + * @uses $vars['count'] Number of items in the complete list + * @uses $vars['pagination'] Show pagination? (default: true) + * @uses $vars['position'] Position of the pagination: before, after, or both + * @uses $vars['full_view'] Show the full view of the items (default: false) + * @uses $vars['gallery_class'] Additional CSS class for the <ul> element + * @uses $vars['item_class'] Additional CSS class for the <li> elements + */ + +$items = $vars['items']; +if (!is_array($items) || sizeof($items) == 0) { + return true; +} + +elgg_push_context('gallery'); + +$offset = $vars['offset']; +$limit = $vars['limit']; +$count = $vars['count']; +$pagination = elgg_extract('pagination', $vars, true); +$offset_key = elgg_extract('offset_key', $vars, 'offset'); +$position = elgg_extract('position', $vars, 'after'); + +$gallery_class = 'elgg-gallery'; +if (isset($vars['gallery_class'])) { + $gallery_class = "$gallery_class {$vars['gallery_class']}"; +} + +$item_class = 'elgg-item'; +if (isset($vars['item_class'])) { + $item_class = "$item_class {$vars['item_class']}"; +} + +$nav = ''; +if ($pagination && $count) { + $nav .= elgg_view('navigation/pagination', array( + 'offset' => $offset, + 'count' => $count, + 'limit' => $limit, + 'offset_key' => $offset_key, + )); +} + +if ($position == 'before' || $position == 'both') { + echo $nav; +} + +?> +<ul class="<?php echo $gallery_class; ?>"> + <?php + foreach ($items as $item) { + if (elgg_instanceof($item)) { + $id = "elgg-{$item->getType()}-{$item->getGUID()}"; + } else { + $id = "item-{$item->getType()}-{$item->id}"; + } + echo "<li id=\"$id\" class=\"$item_class\">"; + echo elgg_view_list_item($item, $vars); + echo "</li>"; + } + ?> +</ul> + +<?php +if ($position == 'after' || $position == 'both') { + echo $nav; +} + +elgg_pop_context(); diff --git a/views/default/page/components/image_block.php b/views/default/page/components/image_block.php new file mode 100644 index 000000000..a7f480aef --- /dev/null +++ b/views/default/page/components/image_block.php @@ -0,0 +1,52 @@ +<?php +/** + * Elgg image block pattern + * + * Common pattern where there is an image, icon, media object to the left + * and a descriptive block of text to the right. + * + * --------------------------------------------------------------- + * | | | alt | + * | image | body | image | + * | block | block | block | + * | | | (optional)| + * --------------------------------------------------------------- + * + * @uses $vars['body'] HTML content of the body block + * @uses $vars['image'] HTML content of the image block + * @uses $vars['image_alt'] HTML content of the alternate image block + * @uses $vars['class'] Optional additional class for media element + * @uses $vars['id'] Optional id for the media element + */ + +$body = elgg_extract('body', $vars, ''); +$image = elgg_extract('image', $vars, ''); +$alt_image = elgg_extract('image_alt', $vars, ''); + +$class = 'elgg-image-block'; +$additional_class = elgg_extract('class', $vars, ''); +if ($additional_class) { + $class = "$class $additional_class"; +} + +$id = ''; +if (isset($vars['id'])) { + $id = "id=\"{$vars['id']}\""; +} + + +$body = "<div class=\"elgg-body\">$body</div>"; + +if ($image) { + $image = "<div class=\"elgg-image\">$image</div>"; +} + +if ($alt_image) { + $alt_image = "<div class=\"elgg-image-alt\">$alt_image</div>"; +} + +echo <<<HTML +<div class="$class clearfix" $id> + $image$alt_image$body +</div> +HTML; diff --git a/views/default/page/components/list.php b/views/default/page/components/list.php new file mode 100644 index 000000000..28ed58ddf --- /dev/null +++ b/views/default/page/components/list.php @@ -0,0 +1,75 @@ +<?php +/** + * View a list of items + * + * @package Elgg + * + * @uses $vars['items'] Array of ElggEntity or ElggAnnotation objects + * @uses $vars['offset'] Index of the first list item in complete list + * @uses $vars['limit'] Number of items per page. Only used as input to pagination. + * @uses $vars['count'] Number of items in the complete list + * @uses $vars['base_url'] Base URL of list (optional) + * @uses $vars['pagination'] Show pagination? (default: true) + * @uses $vars['position'] Position of the pagination: before, after, or both + * @uses $vars['full_view'] Show the full view of the items (default: false) + * @uses $vars['list_class'] Additional CSS class for the <ul> element + * @uses $vars['item_class'] Additional CSS class for the <li> elements + */ + +$items = $vars['items']; +$offset = elgg_extract('offset', $vars); +$limit = elgg_extract('limit', $vars); +$count = elgg_extract('count', $vars); +$base_url = elgg_extract('base_url', $vars, ''); +$pagination = elgg_extract('pagination', $vars, true); +$offset_key = elgg_extract('offset_key', $vars, 'offset'); +$position = elgg_extract('position', $vars, 'after'); + +$list_class = 'elgg-list'; +if (isset($vars['list_class'])) { + $list_class = "$list_class {$vars['list_class']}"; +} + +$item_class = 'elgg-item'; +if (isset($vars['item_class'])) { + $item_class = "$item_class {$vars['item_class']}"; +} + +$html = ""; +$nav = ""; + +if ($pagination && $count) { + $nav .= elgg_view('navigation/pagination', array( + 'base_url' => $base_url, + 'offset' => $offset, + 'count' => $count, + 'limit' => $limit, + 'offset_key' => $offset_key, + )); +} + +if (is_array($items) && count($items) > 0) { + $html .= "<ul class=\"$list_class\">"; + foreach ($items as $item) { + $li = elgg_view_list_item($item, $vars); + if ($li) { + if (elgg_instanceof($item)) { + $id = "elgg-{$item->getType()}-{$item->getGUID()}"; + } else { + $id = "item-{$item->getType()}-{$item->id}"; + } + $html .= "<li id=\"$id\" class=\"$item_class\">$li</li>"; + } + } + $html .= '</ul>'; +} + +if ($position == 'before' || $position == 'both') { + $html = $nav . $html; +} + +if ($position == 'after' || $position == 'both') { + $html .= $nav; +} + +echo $html; diff --git a/views/default/page/components/module.php b/views/default/page/components/module.php new file mode 100644 index 000000000..7e1eaff20 --- /dev/null +++ b/views/default/page/components/module.php @@ -0,0 +1,48 @@ +<?php +/** + * Elgg module element + * + * @uses $vars['title'] Optional title text (do not pass header with this option) + * @uses $vars['header'] Optional HTML content of the header + * @uses $vars['body'] HTML content of the body + * @uses $vars['footer'] Optional HTML content of the footer + * @uses $vars['class'] Optional additional class for module + * @uses $vars['id'] Optional id for module + * @uses $vars['show_inner'] Optional flag to leave out inner div (default: false) + */ + +$title = elgg_extract('title', $vars, ''); +$header = elgg_extract('header', $vars, ''); +$body = elgg_extract('body', $vars, ''); +$footer = elgg_extract('footer', $vars, ''); +$show_inner = elgg_extract('show_inner', $vars, false); + +$class = 'elgg-module'; +$additional_class = elgg_extract('class', $vars, ''); +if ($additional_class) { + $class = "$class $additional_class"; +} + +$id = ''; +if (isset($vars['id'])) { + $id = "id=\"{$vars['id']}\""; +} + +if (isset($vars['header'])) { + $header = "<div class=\"elgg-head\">$header</div>"; +} elseif ($title) { + $header = "<div class=\"elgg-head\"><h3>$title</h3></div>"; +} + +$body = "<div class=\"elgg-body\">$body</div>"; + +if ($footer) { + $footer = "<div class=\"elgg-foot\">$footer</div>"; +} + +$contents = $header . $body . $footer; +if ($show_inner) { + $contents = "<div class=\"elgg-inner\">$contents</div>"; +} + +echo "<div class=\"$class\" $id>$contents</div>"; diff --git a/views/default/page/components/summary.php b/views/default/page/components/summary.php new file mode 100644 index 000000000..ea61a6e4b --- /dev/null +++ b/views/default/page/components/summary.php @@ -0,0 +1,4 @@ +<?php + +// Deprecated in favor of type/elements/summary +echo elgg_view('object/elements/summary', $vars); diff --git a/views/default/page/default.php b/views/default/page/default.php new file mode 100644 index 000000000..567494d0c --- /dev/null +++ b/views/default/page/default.php @@ -0,0 +1,76 @@ +<?php +/** + * Elgg pageshell + * The standard HTML page shell that everything else fits into + * + * @package Elgg + * @subpackage Core + * + * @uses $vars['title'] The page title + * @uses $vars['body'] The main content of the page + * @uses $vars['sysmessages'] A 2d array of various message registers, passed from system_messages() + */ + +// backward compatability support for plugins that are not using the new approach +// of routing through admin. See reportedcontent plugin for a simple example. +if (elgg_get_context() == 'admin') { + if (get_input('handler') != 'admin') { + elgg_deprecated_notice("admin plugins should route through 'admin'.", 1.8); + } + elgg_admin_add_plugin_settings_menu(); + elgg_unregister_css('elgg'); + echo elgg_view('page/admin', $vars); + return true; +} + +// render content before head so that JavaScript and CSS can be loaded. See #4032 +$topbar = elgg_view('page/elements/topbar', $vars); +$messages = elgg_view('page/elements/messages', array('object' => $vars['sysmessages'])); +$header = elgg_view('page/elements/header', $vars); +$body = elgg_view('page/elements/body', $vars); +$footer = elgg_view('page/elements/footer', $vars); + +// Set the content type +header("Content-type: text/html; charset=UTF-8"); + +$lang = get_current_language(); + +?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $lang; ?>" lang="<?php echo $lang; ?>"> +<head> +<?php echo elgg_view('page/elements/head', $vars); ?> +</head> +<body> +<div class="elgg-page elgg-page-default"> + <div class="elgg-page-messages"> + <?php echo $messages; ?> + </div> + + <?php if (elgg_is_logged_in()){ ?> + <div class="elgg-page-topbar"> + <div class="elgg-inner"> + <?php echo $topbar; ?> + </div> + </div> + <?php } ?> + + <div class="elgg-page-header"> + <div class="elgg-inner"> + <?php echo $header; ?> + </div> + </div> + <div class="elgg-page-body"> + <div class="elgg-inner"> + <?php echo $body; ?> + </div> + </div> + <div class="elgg-page-footer"> + <div class="elgg-inner"> + <?php echo $footer; ?> + </div> + </div> +</div> +<?php echo elgg_view('page/elements/foot'); ?> +</body> +</html>
\ No newline at end of file diff --git a/views/default/page/elements/body.php b/views/default/page/elements/body.php new file mode 100644 index 000000000..14c3978d3 --- /dev/null +++ b/views/default/page/elements/body.php @@ -0,0 +1,8 @@ +<?php +/** + * Elgg page body wrapper + * + * @uses $vars['body'] The HTML of the page body + */ + +echo elgg_extract('body', $vars, '');
\ No newline at end of file diff --git a/views/default/page/elements/comments.php b/views/default/page/elements/comments.php new file mode 100644 index 000000000..97cb9574e --- /dev/null +++ b/views/default/page/elements/comments.php @@ -0,0 +1,42 @@ +<?php +/** + * List comments with optional add form + * + * @uses $vars['entity'] ElggEntity + * @uses $vars['show_add_form'] Display add form or not + * @uses $vars['id'] Optional id for the div + * @uses $vars['class'] Optional additional class for the div + */ + +$show_add_form = elgg_extract('show_add_form', $vars, true); + +$id = ''; +if (isset($vars['id'])) { + $id = "id=\"{$vars['id']}\""; +} + +$class = 'elgg-comments'; +if (isset($vars['class'])) { + $class = "$class {$vars['class']}"; +} + +// work around for deprecation code in elgg_view() +unset($vars['internalid']); + +echo "<div $id class=\"$class\">"; + +$options = array( + 'guid' => $vars['entity']->getGUID(), + 'annotation_name' => 'generic_comment' +); +$html = elgg_list_annotations($options); +if ($html) { + echo '<h3>' . elgg_echo('comments') . '</h3>'; + echo $html; +} + +if ($show_add_form) { + echo elgg_view_form('comments/add', array(), $vars); +} + +echo '</div>'; diff --git a/views/default/page/elements/comments_block.php b/views/default/page/elements/comments_block.php new file mode 100644 index 000000000..d0f8ab809 --- /dev/null +++ b/views/default/page/elements/comments_block.php @@ -0,0 +1,45 @@ +<?php +/** + * Display the latest related comments + * + * Generally used in a sidebar. Does not work with groups currently. + * + * @uses $vars['subtypes'] Object subtype string or array of subtypes + * @uses $vars['owner_guid'] The owner of the content being commented on + * @uses $vars['limit'] The number of comments to display + */ + +$owner_guid = elgg_extract('owner_guid', $vars, ELGG_ENTITIES_ANY_VALUE); +if (!$owner_guid) { + $owner_guid = ELGG_ENTITIES_ANY_VALUE; +} + +$owner_entity = get_entity($owner_guid); +if ($owner_entity && elgg_instanceof($owner_entity, 'group')) { + // not supporting groups so return + return true; +} + +$options = array( + 'annotation_name' => 'generic_comment', + 'owner_guid' => $owner_guid, + 'reverse_order_by' => true, + 'limit' => elgg_extract('limit', $vars, 4), + 'type' => 'object', + 'subtypes' => elgg_extract('subtypes', $vars, ELGG_ENTITIES_ANY_VALUE), +); + +$title = elgg_echo('generic_comments:latest'); +$comments = elgg_get_annotations($options); +if ($comments) { + $body = elgg_view('page/components/list', array( + 'items' => $comments, + 'pagination' => false, + 'list_class' => 'elgg-latest-comments', + 'full_view' => false, + )); +} else { + $body = '<p>' . elgg_echo('generic_comment:none') . '</p>'; +} + +echo elgg_view_module('aside', $title, $body); diff --git a/views/default/page/elements/foot.php b/views/default/page/elements/foot.php new file mode 100644 index 000000000..a56b373b4 --- /dev/null +++ b/views/default/page/elements/foot.php @@ -0,0 +1,11 @@ +<?php + +echo elgg_view('footer/analytics'); + +$js = elgg_get_loaded_js('footer'); +foreach ($js as $script) { ?> + <script type="text/javascript" src="<?php echo $script; ?>"></script> +<?php +} + +?>
\ No newline at end of file diff --git a/views/default/page/elements/footer.php b/views/default/page/elements/footer.php new file mode 100644 index 000000000..ded2cea9a --- /dev/null +++ b/views/default/page/elements/footer.php @@ -0,0 +1,22 @@ +<?php +/** + * Elgg footer + * The standard HTML footer that displays across the site + * + * @package Elgg + * @subpackage Core + * + */ + +echo elgg_view_menu('footer', array('sort_by' => 'priority', 'class' => 'elgg-menu-hz')); + +$powered_url = elgg_get_site_url() . "_graphics/powered_by_elgg_badge_drk_bckgnd.gif"; + +echo '<div class="mts clearfloat float-alt">'; +echo elgg_view('output/url', array( + 'href' => 'http://elgg.org', + 'text' => "<img src=\"$powered_url\" alt=\"Powered by Elgg\" width=\"106\" height=\"15\" />", + 'class' => '', + 'is_trusted' => true, +)); +echo '</div>'; diff --git a/views/default/page/elements/head.php b/views/default/page/elements/head.php new file mode 100644 index 000000000..d4a95b4d0 --- /dev/null +++ b/views/default/page/elements/head.php @@ -0,0 +1,81 @@ +<?php +/** + * The standard HTML head + * + * @uses $vars['title'] The page title + */ + +// Set title +if (empty($vars['title'])) { + $title = elgg_get_config('sitename'); +} else { + $title = elgg_get_config('sitename') . ": " . $vars['title']; +} + +global $autofeed; +if (isset($autofeed) && $autofeed == true) { + $url = current_page_url(); + if (substr_count($url,'?')) { + $url .= "&view=rss"; + } else { + $url .= "?view=rss"; + } + $url = elgg_format_url($url); + $feedref = <<<END + + <link rel="alternate" type="application/rss+xml" title="RSS" href="{$url}" /> + +END; +} else { + $feedref = ""; +} + +$js = elgg_get_loaded_js('head'); +$css = elgg_get_loaded_css(); + +$version = get_version(); +$release = get_version(true); +?> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <meta name="ElggRelease" content="<?php echo $release; ?>" /> + <meta name="ElggVersion" content="<?php echo $version; ?>" /> + <title><?php echo $title; ?></title> + <?php echo elgg_view('page/elements/shortcut_icon', $vars); ?> + +<?php foreach ($css as $link) { ?> + <link rel="stylesheet" href="<?php echo $link; ?>" type="text/css" /> +<?php } ?> + +<?php + $ie_url = elgg_get_simplecache_url('css', 'ie'); + $ie7_url = elgg_get_simplecache_url('css', 'ie7'); + $ie6_url = elgg_get_simplecache_url('css', 'ie6'); +?> + <!--[if gt IE 7]> + <link rel="stylesheet" type="text/css" href="<?php echo $ie_url; ?>" /> + <![endif]--> + <!--[if IE 7]> + <link rel="stylesheet" type="text/css" href="<?php echo $ie7_url; ?>" /> + <![endif]--> + <!--[if IE 6]> + <link rel="stylesheet" type="text/css" href="<?php echo $ie6_url; ?>" /> + <![endif]--> + +<?php foreach ($js as $script) { ?> + <script type="text/javascript" src="<?php echo $script; ?>"></script> +<?php } ?> + +<script type="text/javascript"> +// <![CDATA[ + <?php echo elgg_view('js/initialize_elgg'); ?> +// ]]> +</script> + +<?php +echo $feedref; + +$metatags = elgg_view('metatags', $vars); +if ($metatags) { + elgg_deprecated_notice("The metatags view has been deprecated. Extend page/elements/head instead", 1.8); + echo $metatags; +} diff --git a/views/default/page/elements/header.php b/views/default/page/elements/header.php new file mode 100644 index 000000000..1a1f5d211 --- /dev/null +++ b/views/default/page/elements/header.php @@ -0,0 +1,14 @@ +<?php +/** + * Elgg page header + * In the default theme, the header lives between the topbar and main content area. + */ + +// link back to main site. +echo elgg_view('page/elements/header_logo', $vars); + +// drop-down login +echo elgg_view('core/account/login_dropdown'); + +// insert site-wide navigation +echo elgg_view_menu('site');
\ No newline at end of file diff --git a/views/default/page/elements/header_logo.php b/views/default/page/elements/header_logo.php new file mode 100644 index 000000000..7fe721c40 --- /dev/null +++ b/views/default/page/elements/header_logo.php @@ -0,0 +1,15 @@ +<?php +/** + * Elgg header logo + */ + +$site = elgg_get_site_entity(); +$site_name = $site->name; +$site_url = elgg_get_site_url(); +?> + +<h1> + <a class="elgg-heading-site" href="<?php echo $site_url; ?>"> + <?php echo $site_name; ?> + </a> +</h1> diff --git a/views/default/page/elements/messages.php b/views/default/page/elements/messages.php new file mode 100644 index 000000000..edd40d71e --- /dev/null +++ b/views/default/page/elements/messages.php @@ -0,0 +1,27 @@ +<?php +/** + * Elgg global system message list + * Lists all system messages + * + * @package Elgg + * @subpackage Core + * + * @uses $vars['object'] The array of message registers + */ + +echo '<ul class="elgg-system-messages">'; + +// hidden li so we validate +echo '<li class="hidden"></li>'; + +if (isset($vars['object']) && is_array($vars['object']) && sizeof($vars['object']) > 0) { + foreach ($vars['object'] as $type => $list ) { + foreach ($list as $message) { + echo "<li class=\"elgg-message elgg-state-$type\">"; + echo elgg_autop($message); + echo '</li>'; + } + } +} + +echo '</ul>'; diff --git a/views/default/page/elements/owner_block.php b/views/default/page/elements/owner_block.php new file mode 100644 index 000000000..fc7f0f6d2 --- /dev/null +++ b/views/default/page/elements/owner_block.php @@ -0,0 +1,31 @@ +<?php +/** + * Elgg owner block + * Displays page ownership information + * + * @package Elgg + * @subpackage Core + * + */ + +elgg_push_context('owner_block'); + +// groups and other users get owner block +$owner = elgg_get_page_owner_entity(); +if ($owner instanceof ElggGroup || + ($owner instanceof ElggUser && $owner->getGUID() != elgg_get_logged_in_user_guid())) { + + $header = elgg_view_entity($owner, array('full_view' => false)); + + $body = elgg_view_menu('owner_block', array('entity' => $owner)); + + $body .= elgg_view('page/elements/owner_block/extend', $vars); + + echo elgg_view('page/components/module', array( + 'header' => $header, + 'body' => $body, + 'class' => 'elgg-owner-block', + )); +} + +elgg_pop_context();
\ No newline at end of file diff --git a/views/default/page/elements/shortcut_icon.php b/views/default/page/elements/shortcut_icon.php new file mode 100644 index 000000000..12fe9c1f8 --- /dev/null +++ b/views/default/page/elements/shortcut_icon.php @@ -0,0 +1,6 @@ +<?php +/** + * Displays the default shortcut icon + */ +?> +<link rel="SHORTCUT ICON" href="<?php echo elgg_get_site_url(); ?>_graphics/favicon.ico" />
\ No newline at end of file diff --git a/views/default/page/elements/sidebar.php b/views/default/page/elements/sidebar.php new file mode 100644 index 000000000..fe6bb450e --- /dev/null +++ b/views/default/page/elements/sidebar.php @@ -0,0 +1,32 @@ +<?php +/** + * Elgg sidebar contents + * + * @uses $vars['sidebar'] Optional content that is displayed at the bottom of sidebar + */ + +echo elgg_view_menu('extras', array( + 'sort_by' => 'priority', + 'class' => 'elgg-menu-hz', +)); + +echo elgg_view('page/elements/owner_block', $vars); + +echo elgg_view_menu('page', array('sort_by' => 'name')); + +// optional 'sidebar' parameter +if (isset($vars['sidebar'])) { + echo $vars['sidebar']; +} + +// @todo deprecated so remove in Elgg 2.0 +// optional second parameter of elgg_view_layout +if (isset($vars['area2'])) { + echo $vars['area2']; +} + +// @todo deprecated so remove in Elgg 2.0 +// optional third parameter of elgg_view_layout +if (isset($vars['area3'])) { + echo $vars['area3']; +}
\ No newline at end of file diff --git a/views/default/page/elements/sidebar_alt.php b/views/default/page/elements/sidebar_alt.php new file mode 100644 index 000000000..6d91ca58b --- /dev/null +++ b/views/default/page/elements/sidebar_alt.php @@ -0,0 +1,12 @@ +<?php +/** + * Elgg secondary sidebar contents + * + * You can override, extend, or pass content to it + * + * @uses $vars['sidebar_alt] HTML content for the alternate sidebar + */ + +$sidebar = elgg_extract('sidebar_alt', $vars, ''); + +echo $sidebar; diff --git a/views/default/page/elements/tagcloud_block.php b/views/default/page/elements/tagcloud_block.php new file mode 100644 index 000000000..258951c41 --- /dev/null +++ b/views/default/page/elements/tagcloud_block.php @@ -0,0 +1,58 @@ +<?php +/** + * Display content-based tags + * + * Generally used in a sidebar. Does not work with groups currently. + * + * @uses $vars['subtypes'] Object subtype string or array of subtypes + * @uses $vars['owner_guid'] The owner of the content being tagged + * @uses $vars['limit'] The maxinum number of tags to display + */ + +$owner_guid = elgg_extract('owner_guid', $vars, ELGG_ENTITIES_ANY_VALUE); +if (!$owner_guid) { + $owner_guid = ELGG_ENTITIES_ANY_VALUE; +} + +$owner_entity = get_entity($owner_guid); +if ($owner_entity && elgg_instanceof($owner_entity, 'group')) { + // not supporting groups so return + return true; +} + +$options = array( + 'type' => 'object', + 'subtype' => elgg_extract('subtypes', $vars, ELGG_ENTITIES_ANY_VALUE), + 'owner_guid' => $owner_guid, + 'threshold' => 0, + 'limit' => elgg_extract('limit', $vars, 50), + 'tag_name' => 'tags', +); + +$title = elgg_echo('tagcloud'); +if (is_array($options['subtype']) && count($options['subtype']) > 1) { + // we cannot provide links to tagged objects with multiple types + $tag_data = elgg_get_tags($options); + $cloud = elgg_view("output/tagcloud", array( + 'value' => $tag_data, + 'type' => $type, + )); +} else { + $cloud = elgg_view_tagcloud($options); +} +if (!$cloud) { + return true; +} + +// add a link to all site tags +$cloud .= '<p class="small">'; +$cloud .= elgg_view_icon('tag'); +$cloud .= elgg_view('output/url', array( + 'href' => 'tags', + 'text' => elgg_echo('tagcloud:allsitetags'), + 'is_trusted' => true, +)); +$cloud .= '</p>'; + + +echo elgg_view_module('aside', $title, $cloud); diff --git a/views/default/page/elements/title.php b/views/default/page/elements/title.php new file mode 100644 index 000000000..19f47f4e6 --- /dev/null +++ b/views/default/page/elements/title.php @@ -0,0 +1,14 @@ +<?php +/** + * Elgg title element + * + * @uses $vars['title'] The page title + * @uses $vars['class'] Optional class for heading + */ + +$class= ''; +if (isset($vars['class'])) { + $class = " class=\"{$vars['class']}\""; +} + +echo "<h2{$class}>{$vars['title']}</h2>"; diff --git a/views/default/page/elements/topbar.php b/views/default/page/elements/topbar.php new file mode 100644 index 000000000..e4c6c86bb --- /dev/null +++ b/views/default/page/elements/topbar.php @@ -0,0 +1,16 @@ +<?php +/** + * Elgg topbar + * The standard elgg top toolbar + */ + +// Elgg logo +echo elgg_view_menu('topbar', array('sort_by' => 'priority', array('elgg-menu-hz'))); + +// elgg tools menu +// need to echo this empty view for backward compatibility. +$content = elgg_view("navigation/topbar_tools"); +if ($content) { + elgg_deprecated_notice('navigation/topbar_tools was deprecated. Extend the topbar menus or the page/elements/topbar view directly', 1.8); + echo $content; +} diff --git a/views/default/page/elements/wrapper.php b/views/default/page/elements/wrapper.php new file mode 100644 index 000000000..61828832d --- /dev/null +++ b/views/default/page/elements/wrapper.php @@ -0,0 +1,22 @@ +<?php +/** + * Deprecated content wrapper view from Elgg 1.5 through 1.7 + * + * @uses $vars['body'] The content to display inside content wrapper + * @uses $vars['subclass'] Additional css class + */ + +elgg_deprecated_notice("The 'page_elements/contentwrapper' has been deprecated", 1.8); +?> + +<div class="contentWrapper<?php + + if (isset($vars['subclass'])) { + echo ' ' . $vars['subclass']; + } + +?>"> +<?php + echo $vars['body']; +?> +</div> diff --git a/views/default/page/error.php b/views/default/page/error.php new file mode 100644 index 000000000..b7ba3ae9b --- /dev/null +++ b/views/default/page/error.php @@ -0,0 +1,14 @@ +<?php +/** + * Page shell for errors + * + * This is for errors that are not unhandled exceptions. Those are handled + * through the failsafe viewtype to guarantee that no further exceptions occur. + * An example error would be 404 (page not found). + * + * @uses $vars['title'] The page title + * @uses $vars['body'] The main content of the page + * @uses $vars['sysmessages'] A 2d array of various message registers, passed from system_messages() + */ + +echo elgg_view('page/default', $vars); diff --git a/views/default/page/layouts/admin.php b/views/default/page/layouts/admin.php new file mode 100644 index 000000000..8dbdc27e6 --- /dev/null +++ b/views/default/page/layouts/admin.php @@ -0,0 +1,40 @@ +<?php +/** + * Elgg Admin Area Canvas + * + * @package Elgg + * @subpackage Core + * + * @uses $vars['content'] Content string + * @uses $vars['sidebar'] Optional sidebar content + * @uses $vars['title'] Title string + */ + +?> + +<div class="elgg-layout elgg-layout-one-sidebar"> + <div class="elgg-sidebar clearfix"> + <?php + echo elgg_view('admin/sidebar', $vars); + ?> + </div> + <div class="elgg-main elgg-body"> + <div class="elgg-head"> + <?php + echo elgg_view_menu('title', array( + 'sort_by' => 'priority', + 'class' => 'elgg-menu-hz', + )); + + if (isset($vars['title'])) { + echo elgg_view_title($vars['title']); + } + ?> + </div> + <?php + if (isset($vars['content'])) { + echo $vars['content']; + } + ?> + </div> +</div>
\ No newline at end of file diff --git a/views/default/page/layouts/content.php b/views/default/page/layouts/content.php new file mode 100644 index 000000000..c406c9faf --- /dev/null +++ b/views/default/page/layouts/content.php @@ -0,0 +1,53 @@ +<?php +/** + * Main content area layout + * + * @uses $vars['content'] HTML of main content area + * @uses $vars['sidebar'] HTML of the sidebar + * @uses $vars['header'] HTML of the content area header (override) + * @uses $vars['nav'] HTML of the content area nav (override) + * @uses $vars['footer'] HTML of the content area footer + * @uses $vars['filter'] HTML of the content area filter (override) + * @uses $vars['title'] Title text (override) + * @uses $vars['context'] Page context (override) + * @uses $vars['filter_context'] Filter context: everyone, friends, mine + * @uses $vars['class'] Additional class to apply to layout + */ + +// give plugins an opportunity to add to content sidebars +$sidebar_content = elgg_extract('sidebar', $vars, ''); +$params = $vars; +$params['content'] = $sidebar_content; +$sidebar = elgg_view('page/layouts/content/sidebar', $params); + +// allow page handlers to override the default header +if (isset($vars['header'])) { + $vars['header_override'] = $vars['header']; +} +$header = elgg_view('page/layouts/content/header', $vars); + +// allow page handlers to override the default filter +if (isset($vars['filter'])) { + $vars['filter_override'] = $vars['filter']; +} +$filter = elgg_view('page/layouts/content/filter', $vars); + +// the all important content +$content = elgg_extract('content', $vars, ''); + +// optional footer for main content area +$footer_content = elgg_extract('footer', $vars, ''); +$params = $vars; +$params['content'] = $footer_content; +$footer = elgg_view('page/layouts/content/footer', $params); + +$body = $header . $filter . $content . $footer; + +$params = array( + 'content' => $body, + 'sidebar' => $sidebar, +); +if (isset($vars['class'])) { + $params['class'] = $vars['class']; +} +echo elgg_view_layout('one_sidebar', $params); diff --git a/views/default/page/layouts/content/filter.php b/views/default/page/layouts/content/filter.php new file mode 100644 index 000000000..701c6418a --- /dev/null +++ b/views/default/page/layouts/content/filter.php @@ -0,0 +1,52 @@ +<?php +/** + * Main content filter + * + * Select between user, friends, and all content + * + * @uses $vars['filter_context'] Filter context: all, friends, mine + * @uses $vars['filter_override'] HTML for overriding the default filter (override) + * @uses $vars['context'] Page context (override) + */ + +if (isset($vars['filter_override'])) { + echo $vars['filter_override']; + return true; +} + +$context = elgg_extract('context', $vars, elgg_get_context()); + +if (elgg_is_logged_in() && $context) { + $username = elgg_get_logged_in_user_entity()->username; + $filter_context = elgg_extract('filter_context', $vars, 'all'); + + // generate a list of default tabs + $tabs = array( + 'all' => array( + 'text' => elgg_echo('all'), + 'href' => (isset($vars['all_link'])) ? $vars['all_link'] : "$context/all", + 'selected' => ($filter_context == 'all'), + 'priority' => 200, + ), + 'mine' => array( + 'text' => elgg_echo('mine'), + 'href' => (isset($vars['mine_link'])) ? $vars['mine_link'] : "$context/owner/$username", + 'selected' => ($filter_context == 'mine'), + 'priority' => 300, + ), + 'friend' => array( + 'text' => elgg_echo('friends'), + 'href' => (isset($vars['friend_link'])) ? $vars['friend_link'] : "$context/friends/$username", + 'selected' => ($filter_context == 'friends'), + 'priority' => 400, + ), + ); + + foreach ($tabs as $name => $tab) { + $tab['name'] = $name; + + elgg_register_menu_item('filter', $tab); + } + + echo elgg_view_menu('filter', array('sort_by' => 'priority', 'class' => 'elgg-menu-hz')); +} diff --git a/views/default/page/layouts/content/footer.php b/views/default/page/layouts/content/footer.php new file mode 100644 index 000000000..66f5d3ff8 --- /dev/null +++ b/views/default/page/layouts/content/footer.php @@ -0,0 +1,8 @@ +<?php +/** + * Main content footer + * + * @uses $vars['content'] The content for the footer + */ + +echo $vars['content']; diff --git a/views/default/page/layouts/content/header.php b/views/default/page/layouts/content/header.php new file mode 100644 index 000000000..1e66e52db --- /dev/null +++ b/views/default/page/layouts/content/header.php @@ -0,0 +1,43 @@ +<?php +/** + * Main content header + * + * Title and title menu + * + * @uses $vars['header_override'] HTML for overriding the default header (override) + * @uses $vars['title'] Title text (override) + * @uses $vars['context'] Page context (override) + */ + +if (isset($vars['buttons'])) { + // it was a bad idea to implement buttons with a pass through + elgg_deprecated_notice("Use elgg_register_menu_item() to register for the title menu", 1.0); +} + +if (isset($vars['header_override'])) { + echo $vars['header_override']; + return true; +} + +$context = elgg_extract('context', $vars, elgg_get_context()); + +$title = elgg_extract('title', $vars, ''); +if (!$title) { + $title = elgg_echo($context); +} +$title = elgg_view_title($title, array('class' => 'elgg-heading-main')); + +if (isset($vars['buttons']) && $vars['buttons']) { + $buttons = $vars['buttons']; +} else { + $buttons = elgg_view_menu('title', array( + 'sort_by' => 'priority', + 'class' => 'elgg-menu-hz', + )); +} + +echo <<<HTML +<div class="elgg-head clearfix"> + $title$buttons +</div> +HTML; diff --git a/views/default/page/layouts/content/sidebar.php b/views/default/page/layouts/content/sidebar.php new file mode 100644 index 000000000..86ca8435f --- /dev/null +++ b/views/default/page/layouts/content/sidebar.php @@ -0,0 +1,8 @@ +<?php +/** + * Main content sidebar + * + * @uses $vars['content] The content for the sidebar + */ + +echo $vars['content']; diff --git a/views/default/page/layouts/default.php b/views/default/page/layouts/default.php new file mode 100644 index 000000000..60dc90b0d --- /dev/null +++ b/views/default/page/layouts/default.php @@ -0,0 +1,18 @@ +<?php +/** + * Elgg default layout + * + * @package Elgg + * @subpackage Core + * + * @uses $vars['content'] Content string + */ + +// @todo deprecated so remove in Elgg 2.0 +if (isset($vars['area1'])) { + echo $vars['area1']; +} + +if (isset($vars['content'])) { + echo $vars['content']; +} diff --git a/views/default/page/layouts/error.php b/views/default/page/layouts/error.php new file mode 100644 index 000000000..cdce28a8e --- /dev/null +++ b/views/default/page/layouts/error.php @@ -0,0 +1,12 @@ +<?php +/** + * Error layout + */ + +$class = 'elgg-layout-error'; +if (isset($vars['class'])) { + $class = "$class {$vars['class']}"; +} +$vars['class'] = $class; + +echo elgg_view('page/layouts/one_column', $vars); diff --git a/views/default/page/layouts/one_column.php b/views/default/page/layouts/one_column.php new file mode 100644 index 000000000..491d5b459 --- /dev/null +++ b/views/default/page/layouts/one_column.php @@ -0,0 +1,38 @@ +<?php +/** + * Elgg one-column layout + * + * @package Elgg + * @subpackage Core + * + * @uses $vars['content'] Content string + * @uses $vars['class'] Additional class to apply to layout + */ + +$class = 'elgg-layout elgg-layout-one-column clearfix'; +if (isset($vars['class'])) { + $class = "$class {$vars['class']}"; +} + +// navigation defaults to breadcrumbs +$nav = elgg_extract('nav', $vars, elgg_view('navigation/breadcrumbs')); + +?> +<div class="<?php echo $class; ?>"> + <div class="elgg-body elgg-main"> + <?php + echo $nav; + + if (isset($vars['title'])) { + echo elgg_view_title($vars['title']); + } + + echo $vars['content']; + + // @deprecated 1.8 + if (isset($vars['area1'])) { + echo $vars['area1']; + } + ?> + </div> +</div>
\ No newline at end of file diff --git a/views/default/page/layouts/one_sidebar.php b/views/default/page/layouts/one_sidebar.php new file mode 100644 index 000000000..d74dad53d --- /dev/null +++ b/views/default/page/layouts/one_sidebar.php @@ -0,0 +1,48 @@ +<?php +/** + * Layout for main column with one sidebar + * + * @package Elgg + * @subpackage Core + * + * @uses $vars['content'] Content HTML for the main column + * @uses $vars['sidebar'] Optional content that is displayed in the sidebar + * @uses $vars['title'] Optional title for main content area + * @uses $vars['class'] Additional class to apply to layout + * @uses $vars['nav'] HTML of the page nav (override) (default: breadcrumbs) + */ + +$class = 'elgg-layout elgg-layout-one-sidebar clearfix'; +if (isset($vars['class'])) { + $class = "$class {$vars['class']}"; +} + +// navigation defaults to breadcrumbs +$nav = elgg_extract('nav', $vars, elgg_view('navigation/breadcrumbs')); + +?> + +<div class="<?php echo $class; ?>"> + <div class="elgg-sidebar"> + <?php + echo elgg_view('page/elements/sidebar', $vars); + ?> + </div> + + <div class="elgg-main elgg-body"> + <?php + echo $nav; + + if (isset($vars['title'])) { + echo elgg_view_title($vars['title']); + } + // @todo deprecated so remove in Elgg 2.0 + if (isset($vars['area1'])) { + echo $vars['area1']; + } + if (isset($vars['content'])) { + echo $vars['content']; + } + ?> + </div> +</div> diff --git a/views/default/page/layouts/two_column_left_sidebar.php b/views/default/page/layouts/two_column_left_sidebar.php new file mode 100644 index 000000000..e395a5053 --- /dev/null +++ b/views/default/page/layouts/two_column_left_sidebar.php @@ -0,0 +1,26 @@ +<?php +/** + * Deprecated layout from 1.0-1.7 + * + * Use one_sidebar instead + */ + +if (!isset($vars['content'])) { + $vars['content'] = $vars['area2']; +} +if (!isset($vars['content'])) { + $vars['sidebar'] = $vars['area1'] . $vars['area3']; +} + +unset($vars['area1']); +unset($vars['area2']); +unset($vars['area3']); + +// backward compatability support for plugins that are not using the new approach +// of routing through 'admin' +if (elgg_get_context() == 'admin') { + echo elgg_view('page/layouts/admin', $vars); + return true; +} + +echo elgg_view('page/layouts/one_sidebar', $vars); diff --git a/views/default/page/layouts/two_sidebar.php b/views/default/page/layouts/two_sidebar.php new file mode 100644 index 000000000..7521dd44f --- /dev/null +++ b/views/default/page/layouts/two_sidebar.php @@ -0,0 +1,43 @@ +<?php +/** + * Elgg 2 sidebar layout + * + * @package Elgg + * @subpackage Core + * + * @uses $vars['content'] The content string for the main column + * @uses $vars['sidebar'] Optional content that is displayed in the sidebar + * @uses $vars['sidebar_alt'] Optional content that is displayed in the alternate sidebar + * @uses $vars['class'] Additional class to apply to layout + */ + +$class = 'elgg-layout elgg-layout-two-sidebar clearfix'; +if (isset($vars['class'])) { + $class = "$class {$vars['class']}"; +} +?> + +<div class="<?php echo $class; ?>"> + <div class="elgg-sidebar"> + <?php + echo elgg_view('page/elements/sidebar', $vars); + ?> + </div> + <div class="elgg-sidebar-alt"> + <?php + echo elgg_view('page/elements/sidebar_alt', $vars); + ?> + </div> + + <div class="elgg-main elgg-body"> + <?php + // @todo deprecated so remove in Elgg 2.0 + if (isset($vars['area1'])) { + echo $vars['area1']; + } + if (isset($vars['content'])) { + echo $vars['content']; + } + ?> + </div> +</div> diff --git a/views/default/page/layouts/walled_garden.php b/views/default/page/layouts/walled_garden.php new file mode 100644 index 000000000..6ecd941ef --- /dev/null +++ b/views/default/page/layouts/walled_garden.php @@ -0,0 +1,16 @@ +<?php +/** + * Walled Garden layout + * + * @uses $vars['content'] Main content + * @uses $vars['class'] CSS classes + * @uses $vars['id'] CSS id + */ + +$class = elgg_extract('class', $vars, 'elgg-walledgarden-single'); +echo elgg_view_module('walledgarden', '', $vars['content'], array( + 'class' => $class, + 'id' => elgg_extract('id', $vars, ''), + 'header' => ' ', + 'footer' => ' ', +)); diff --git a/views/default/page/layouts/widgets.php b/views/default/page/layouts/widgets.php new file mode 100644 index 000000000..c6b162516 --- /dev/null +++ b/views/default/page/layouts/widgets.php @@ -0,0 +1,62 @@ +<?php +/** + * Elgg widgets layout + * + * @uses $vars['content'] Optional display box at the top of layout + * @uses $vars['num_columns'] Number of widget columns for this layout (3) + * @uses $vars['show_add_widgets'] Display the add widgets button and panel (true) + * @uses $vars['exact_match'] Widgets must match the current context (false) + * @uses $vars['show_access'] Show the access control (true) + */ + +$num_columns = elgg_extract('num_columns', $vars, 3); +$show_add_widgets = elgg_extract('show_add_widgets', $vars, true); +$exact_match = elgg_extract('exact_match', $vars, false); +$show_access = elgg_extract('show_access', $vars, true); + +$owner = elgg_get_page_owner_entity(); + +$widget_types = elgg_get_widget_types(); + +$context = elgg_get_context(); +elgg_push_context('widgets'); + +$widgets = elgg_get_widgets($owner->guid, $context); + +if (elgg_can_edit_widget_layout($context)) { + if ($show_add_widgets) { + echo elgg_view('page/layouts/widgets/add_button'); + } + $params = array( + 'widgets' => $widgets, + 'context' => $context, + 'exact_match' => $exact_match, + 'show_access' => $show_access, + ); + echo elgg_view('page/layouts/widgets/add_panel', $params); +} + +echo $vars['content']; + +$widget_class = "elgg-col-1of{$num_columns}"; +for ($column_index = 1; $column_index <= $num_columns; $column_index++) { + if (isset($widgets[$column_index])) { + $column_widgets = $widgets[$column_index]; + } else { + $column_widgets = array(); + } + + echo "<div class=\"$widget_class elgg-widgets\" id=\"elgg-widget-col-$column_index\">"; + if (sizeof($column_widgets) > 0) { + foreach ($column_widgets as $widget) { + if (array_key_exists($widget->handler, $widget_types)) { + echo elgg_view_entity($widget, array('show_access' => $show_access)); + } + } + } + echo '</div>'; +} + +elgg_pop_context(); + +echo elgg_view('graphics/ajax_loader', array('id' => 'elgg-widget-loader')); diff --git a/views/default/page/layouts/widgets/add_button.php b/views/default/page/layouts/widgets/add_button.php new file mode 100644 index 000000000..c33a45f99 --- /dev/null +++ b/views/default/page/layouts/widgets/add_button.php @@ -0,0 +1,16 @@ +<?php +/** + * Button area for showing the add widgets panel + */ +?> +<div class="elgg-widget-add-control"> +<?php + echo elgg_view('output/url', array( + 'href' => '#widgets-add-panel', + 'text' => elgg_echo('widgets:add'), + 'class' => 'elgg-button elgg-button-action', + 'rel' => 'toggle', + 'is_trusted' => true, + )); +?> +</div> diff --git a/views/default/page/layouts/widgets/add_panel.php b/views/default/page/layouts/widgets/add_panel.php new file mode 100644 index 000000000..d9b11342a --- /dev/null +++ b/views/default/page/layouts/widgets/add_panel.php @@ -0,0 +1,62 @@ +<?php +/** + * Widget add panel + * + * @uses $vars['widgets'] Array of current widgets + * @uses $vars['context'] The context for this widget layout + * @uses $vars['exact_match'] Only use widgets that match the context + */ + +$widgets = $vars['widgets']; +$context = $vars['context']; +$exact = elgg_extract('exact_match', $vars, false); + +$widget_types = elgg_get_widget_types($context, $exact); +uasort($widget_types, create_function('$a,$b', 'return strcmp($a->name,$b->name);')); + +$current_handlers = array(); +foreach ($widgets as $column_widgets) { + foreach ($column_widgets as $widget) { + $current_handlers[] = $widget->handler; + } +} + +?> +<div class="elgg-widgets-add-panel hidden clearfix" id="widgets-add-panel"> + <p> + <?php echo elgg_echo('widgets:add:description'); ?> + </p> + <ul> +<?php + foreach ($widget_types as $handler => $widget_type) { + $id = "elgg-widget-type-$handler"; + // check if widget added and only one instance allowed + if ($widget_type->multiple == false && in_array($handler, $current_handlers)) { + $class = 'elgg-state-unavailable'; + $tooltip = elgg_echo('widget:unavailable'); + } else { + $class = 'elgg-state-available'; + $tooltip = $widget_type->description; + } + + if ($widget_type->multiple) { + $class .= ' elgg-widget-multiple'; + } else { + $class .= ' elgg-widget-single'; + } + + echo "<li title=\"$tooltip\" id=\"$id\" class=\"$class\">$widget_type->name</li>"; + } +?> + </ul> +<?php + echo elgg_view('input/hidden', array( + 'name' => 'widget_context', + 'value' => $context + )); + echo elgg_view('input/hidden', array( + 'name' => 'show_access', + 'value' => (int)$vars['show_access'] + )); +?> +</div> diff --git a/views/default/page/upgrade.php b/views/default/page/upgrade.php new file mode 100644 index 000000000..1a92042be --- /dev/null +++ b/views/default/page/upgrade.php @@ -0,0 +1,18 @@ +<?php +/** + * Page shell for upgrade script + * + * Displays an ajax loader until upgrade is complete + */ +?> +<html> + <head> + <?php echo elgg_view('page/elements/head', $vars); ?> + <meta http-equiv="refresh" content="1;url=<?php echo elgg_get_site_url(); ?>upgrade.php?upgrade=upgrade"/> + </head> + <body> + <div style="margin-top:200px"> + <?php echo elgg_view('graphics/ajax_loader', array('hidden' => false)); ?> + </div> + </body> +</html>
\ No newline at end of file diff --git a/views/default/page/walled_garden.php b/views/default/page/walled_garden.php new file mode 100644 index 000000000..ff8e317c7 --- /dev/null +++ b/views/default/page/walled_garden.php @@ -0,0 +1,27 @@ +<?php +/** + * Walled garden page shell + * + * Used for the walled garden index page + */ + +// Set the content type +header("Content-type: text/html; charset=UTF-8"); +?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> +<?php echo elgg_view('page/elements/head', $vars); ?> +</head> +<body> +<div class="elgg-page elgg-page-walledgarden"> + <div class="elgg-page-messages"> + <?php echo elgg_view('page/elements/messages', array('object' => $vars['sysmessages'])); ?> + </div> + <div class="elgg-body-walledgarden"> + <?php echo $vars['body']; ?> + </div> +</div> +<?php echo elgg_view('page/elements/foot'); ?> +</body> +</html>
\ No newline at end of file diff --git a/views/default/profile/icon.php b/views/default/profile/icon.php new file mode 100644 index 000000000..5f06cfd54 --- /dev/null +++ b/views/default/profile/icon.php @@ -0,0 +1,17 @@ +<?php +/** + * Elgg profile icon + * + * @deprecated 1.8 use elgg_view_entity_icon() + * + * @uses $vars['entity'] The user entity. If none specified, the current user is assumed. + * @uses $vars['size'] The size - small, medium or large. If none specified, medium is assumed. + * @uses $vars['override'] + * @uses $vars['js'] + */ +elgg_deprecated_notice('The profile/icon view was deprecated. Use elgg_view_entity_icon()', 1.8); + +$override = elgg_extract('override', $vars, false); +$vars['use_hover'] = !$override; + +echo elgg_view('icon/user/default', $vars); diff --git a/views/default/river/annotation/generic_comment/create.php b/views/default/river/annotation/generic_comment/create.php new file mode 100644 index 000000000..7d586450d --- /dev/null +++ b/views/default/river/annotation/generic_comment/create.php @@ -0,0 +1,11 @@ +<?php +/** + * Post comment river view + */ +$object = $vars['item']->getObjectEntity(); +$comment = $vars['item']->getAnnotation(); + +echo elgg_view('river/elements/layout', array( + 'item' => $vars['item'], + 'message' => elgg_get_excerpt($comment->value), +)); diff --git a/views/default/river/elements/body.php b/views/default/river/elements/body.php new file mode 100644 index 000000000..2cd7f2289 --- /dev/null +++ b/views/default/river/elements/body.php @@ -0,0 +1,67 @@ +<?php +/** + * Body of river item + * + * @uses $vars['item'] ElggRiverItem + * @uses $vars['summary'] Alternate summary (the short text summary of action) + * @uses $vars['message'] Optional message (usually excerpt of text) + * @uses $vars['attachments'] Optional attachments (displaying icons or other non-text data) + * @uses $vars['responses'] Alternate respones (comments, replies, etc.) + */ + +$item = $vars['item']; + +$menu = elgg_view_menu('river', array( + 'item' => $item, + 'sort_by' => 'priority', + 'class' => 'elgg-menu-hz', +)); + +// river item header +$timestamp = elgg_view_friendly_time($item->getPostedTime()); + +$summary = elgg_extract('summary', $vars, elgg_view('river/elements/summary', array('item' => $vars['item']))); +if ($summary === false) { + $subject = $item->getSubjectEntity(); + $summary = elgg_view('output/url', array( + 'href' => $subject->getURL(), + 'text' => $subject->name, + 'class' => 'elgg-river-subject', + 'is_trusted' => true, + )); +} + +$message = elgg_extract('message', $vars, false); +if ($message !== false) { + $message = "<div class=\"elgg-river-message\">$message</div>"; +} + +$attachments = elgg_extract('attachments', $vars, false); +if ($attachments !== false) { + $attachments = "<div class=\"elgg-river-attachments clearfix\">$attachments</div>"; +} + +$responses = elgg_view('river/elements/responses', $vars); +if ($responses) { + $responses = "<div class=\"elgg-river-responses\">$responses</div>"; +} + +$group_string = ''; +$object = $item->getObjectEntity(); +$container = $object->getContainerEntity(); +if ($container instanceof ElggGroup && $container->guid != elgg_get_page_owner_guid()) { + $group_link = elgg_view('output/url', array( + 'href' => $container->getURL(), + 'text' => $container->name, + 'is_trusted' => true, + )); + $group_string = elgg_echo('river:ingroup', array($group_link)); +} + +echo <<<RIVER +$menu +<div class="elgg-river-summary">$summary $group_string <span class="elgg-river-timestamp">$timestamp</span></div> +$message +$attachments +$responses +RIVER; diff --git a/views/default/river/elements/image.php b/views/default/river/elements/image.php new file mode 100644 index 000000000..6f6aeae65 --- /dev/null +++ b/views/default/river/elements/image.php @@ -0,0 +1,16 @@ +<?php +/** + * Elgg river image + * + * Displayed next to the body of each river item + * + * @uses $vars['item'] + */ + +$subject = $vars['item']->getSubjectEntity(); + +if (elgg_in_context('widgets')) { + echo elgg_view_entity_icon($subject, 'tiny'); +} else { + echo elgg_view_entity_icon($subject, 'small'); +} diff --git a/views/default/river/elements/layout.php b/views/default/river/elements/layout.php new file mode 100644 index 000000000..94622e272 --- /dev/null +++ b/views/default/river/elements/layout.php @@ -0,0 +1,14 @@ +<?php +/** + * Layout of a river item + * + * @uses $vars['item'] ElggRiverItem + */ + +$item = $vars['item']; + +echo elgg_view('page/components/image_block', array( + 'image' => elgg_view('river/elements/image', $vars), + 'body' => elgg_view('river/elements/body', $vars), + 'class' => 'elgg-river-item', +)); diff --git a/views/default/river/elements/responses.php b/views/default/river/elements/responses.php new file mode 100644 index 000000000..f6c32e142 --- /dev/null +++ b/views/default/river/elements/responses.php @@ -0,0 +1,63 @@ +<?php +/** + * River item footer + * + * @uses $vars['item'] ElggRiverItem + * @uses $vars['responses'] Alternate override for this item + */ + +// allow river views to override the response content +$responses = elgg_extract('responses', $vars, false); +if ($responses) { + echo $responses; + return true; +} + +$item = $vars['item']; +$object = $item->getObjectEntity(); + +// annotations do not have comments +if ($item->annotation_id != 0 || !$object) { + return true; +} + +$comment_count = $object->countComments(); + +$options = array( + 'guid' => $object->getGUID(), + 'annotation_name' => 'generic_comment', + 'limit' => 3, + 'order_by' => 'n_table.time_created desc' +); +$comments = elgg_get_annotations($options); + +if ($comments) { + // why is this reversing it? because we're asking for the 3 latest + // comments by sorting desc and limiting by 3, but we want to display + // these comments with the latest at the bottom. + $comments = array_reverse($comments); + +?> + <span class="elgg-river-comments-tab"><?php echo elgg_echo('comments'); ?></span> + +<?php + + echo elgg_view_annotation_list($comments, array('list_class' => 'elgg-river-comments')); + + if ($comment_count > count($comments)) { + $num_more_comments = $comment_count - count($comments); + $url = $object->getURL(); + $params = array( + 'href' => $url, + 'text' => elgg_echo('river:comments:more', array($num_more_comments)), + 'is_trusted' => true, + ); + $link = elgg_view('output/url', $params); + echo "<div class=\"elgg-river-more\">$link</div>"; + } +} + +// inline comment form +$form_vars = array('id' => "comments-add-{$object->getGUID()}", 'class' => 'hidden'); +$body_vars = array('entity' => $object, 'inline' => true); +echo elgg_view_form('comments/add', $form_vars, $body_vars); diff --git a/views/default/river/elements/summary.php b/views/default/river/elements/summary.php new file mode 100644 index 000000000..416bc708b --- /dev/null +++ b/views/default/river/elements/summary.php @@ -0,0 +1,53 @@ +<?php +/** + * Short summary of the action that occurred + * + * @vars['item'] ElggRiverItem + */ + +$item = $vars['item']; + +$subject = $item->getSubjectEntity(); +$object = $item->getObjectEntity(); +$target = $object->getContainerEntity(); + +$subject_link = elgg_view('output/url', array( + 'href' => $subject->getURL(), + 'text' => $subject->name, + 'class' => 'elgg-river-subject', + 'is_trusted' => true, +)); + +$object_link = elgg_view('output/url', array( + 'href' => $object->getURL(), + 'text' => $object->title ? $object->title : $object->name, + 'class' => 'elgg-river-object', + 'is_trusted' => true, +)); + +$action = $item->action_type; +$type = $item->type; +$subtype = $item->subtype ? $item->subtype : 'default'; + +$container = $object->getContainerEntity(); +if ($container instanceof ElggGroup) { + $params = array( + 'href' => $container->getURL(), + 'text' => $container->name, + 'is_trusted' => true, + ); + $group_link = elgg_view('output/url', $params); + $group_string = elgg_echo('river:ingroup', array($group_link)); +} + +// check summary translation keys. +// will use the $type:$subtype if that's defined, otherwise just uses $type:default +$key = "river:$action:$type:$subtype"; +$summary = elgg_echo($key, array($subject_link, $object_link)); + +if ($summary == $key) { + $key = "river:$action:$type:default"; + $summary = elgg_echo($key, array($subject_link, $object_link)); +} + +echo $summary;
\ No newline at end of file diff --git a/views/default/river/item.php b/views/default/river/item.php new file mode 100644 index 000000000..75767e08d --- /dev/null +++ b/views/default/river/item.php @@ -0,0 +1,30 @@ +<?php +/** + * Primary river item view + * + * Calls the individual view saved for that river item. Most of these + * individual river views then use the views in river/elements. + * + * @uses $vars['item'] ElggRiverItem + */ + +// @todo remove this in Elgg 1.9 +global $_elgg_special_river_catch; +if (!isset($_elgg_special_river_catch)) { + $_elgg_special_river_catch = false; +} +if ($_elgg_special_river_catch) { + // we changed the views a little in 1.8.1 so this catches the plugins that + // were updated in 1.8.0 and redirects to the layout view + echo elgg_view('river/elements/layout', $vars); + return true; +} +$_elgg_special_river_catch = true; + + +$item = $vars['item']; + +echo elgg_view($item->getView(), $vars); + + +$_elgg_special_river_catch = false; diff --git a/views/default/river/relationship/friend/create.php b/views/default/river/relationship/friend/create.php new file mode 100644 index 000000000..0408d79e1 --- /dev/null +++ b/views/default/river/relationship/friend/create.php @@ -0,0 +1,14 @@ +<?php +/** + * Create friend river view + */ +$subject = $vars['item']->getSubjectEntity(); +$object = $vars['item']->getObjectEntity(); + +$subject_icon = elgg_view_entity_icon($subject, 'tiny'); +$object_icon = elgg_view_entity_icon($object, 'tiny'); + +echo elgg_view('river/elements/layout', array( + 'item' => $vars['item'], + 'attachments' => $subject_icon . elgg_view_icon('arrow-right') . $object_icon, +)); diff --git a/views/default/river/user/default/profileiconupdate.php b/views/default/river/user/default/profileiconupdate.php new file mode 100644 index 000000000..271064a06 --- /dev/null +++ b/views/default/river/user/default/profileiconupdate.php @@ -0,0 +1,24 @@ +<?php +/** + * Update avatar river view + */ + +$subject = $vars['item']->getSubjectEntity(); + +$subject_link = elgg_view('output/url', array( + 'href' => $subject->getURL(), + 'text' => $subject->name, + 'class' => 'elgg-river-subject', + 'is_trusted' => true, +)); + +$string = elgg_echo('river:update:user:avatar', array($subject_link)); + +echo elgg_view('river/elements/layout', array( + 'item' => $vars['item'], + 'summary' => $string, + 'attachments' => elgg_view_entity_icon($subject, 'tiny', array( + 'use_hover' => false, + 'use_link' => false, + )), +)); diff --git a/views/default/river/user/default/profileupdate.php b/views/default/river/user/default/profileupdate.php new file mode 100644 index 000000000..ce72970d6 --- /dev/null +++ b/views/default/river/user/default/profileupdate.php @@ -0,0 +1,20 @@ +<?php +/** + * Update profile river view + */ + +$subject = $vars['item']->getSubjectEntity(); + +$subject_link = elgg_view('output/url', array( + 'href' => $subject->getURL(), + 'text' => $subject->name, + 'class' => 'elgg-river-subject', + 'is_trusted' => true, +)); + +$string = elgg_echo('river:update:user:profile', array($subject_link)); + +echo elgg_view('river/elements/layout', array( + 'item' => $vars['item'], + 'summary' => $string, +)); diff --git a/views/default/settings/beechat/edit.php b/views/default/settings/beechat/edit.php deleted file mode 100755 index ec4ab08de..000000000 --- a/views/default/settings/beechat/edit.php +++ /dev/null @@ -1,31 +0,0 @@ -<?php -/** - * Barter Plugin - * @package Barters - **/ - $domain = elgg_get_plugin_setting("domain", "beechat"); - //$group_domain = elgg_get_plugin_setting("groupdomain", "beechat"); - $xmlrpc_ip = elgg_get_plugin_setting("xmlrpcip", "beechat"); - $dbname = elgg_get_plugin_setting("dbname", "beechat"); - $dbhost = elgg_get_plugin_setting("dbhost", "beechat"); - $dbuser = elgg_get_plugin_setting("dbuser", "beechat"); - $dbpassword = elgg_get_plugin_setting("dbpassword", "beechat"); -?> -<p> - <?php echo elgg_echo('beechat:domain'); ?> - <?php echo elgg_view('input/text', array('internalname' => 'params[domain]','value' => $domain)); ?> - <!--<?php echo elgg_echo('beechat:groupdomain'); ?> - <?php echo elgg_view('input/text', array('internalname' => 'params[groupdomain]','value' => $group_domain)); ?>--> - <?php echo elgg_echo('beechat:xmlrpcip'); ?> - <?php echo elgg_view('input/text', array('internalname' => 'params[xmlrpcip]','value' => $xmlrpc_ip)); ?> - <?php echo elgg_echo('beechat:dbname'); ?> - <?php echo elgg_view('input/text', array('internalname' => 'params[dbname]','value' => $dbname)); ?> - <?php echo elgg_echo('beechat:dbhost'); ?> - <?php echo elgg_view('input/text', array('internalname' => 'params[dbhost]','value' => $dbhost)); ?> - <?php echo elgg_echo('beechat:dbuser'); ?> - <?php echo elgg_view('input/text', array('internalname' => 'params[dbuser]','value' => $dbuser)); ?> - <?php echo elgg_echo('beechat:dbpassword'); ?> - <?php echo elgg_view('input/password', array('internalname' => 'params[dbpassword]','value' => $dbpassword)); ?> - -</p> - diff --git a/views/default/site/default.php b/views/default/site/default.php new file mode 100644 index 000000000..5dacb4019 --- /dev/null +++ b/views/default/site/default.php @@ -0,0 +1,17 @@ +<?php +/** + * ElggSite default view. + * + * @package Elgg + * @subpackage Core + */ + +// sites information (including plugin settings) shouldn't be shown. +// this view is required for pinging home during install. +if (!defined('INSTALLING')) { + if ($site = $vars['entity']->url) { + forward($site); + } else { + forward(); + } +} diff --git a/views/default/user/default.php b/views/default/user/default.php new file mode 100644 index 000000000..6c84e84ad --- /dev/null +++ b/views/default/user/default.php @@ -0,0 +1,57 @@ +<?php +/** + * Elgg user display + * + * @uses $vars['entity'] ElggUser entity + * @uses $vars['size'] Size of the icon + */ + +$entity = $vars['entity']; +$size = elgg_extract('size', $vars, 'tiny'); + +$icon = elgg_view_entity_icon($entity, $size, $vars); + +// Simple XFN +$rel = ''; +if (elgg_get_logged_in_user_guid() == $entity->guid) { + $rel = 'rel="me"'; +} elseif (check_entity_relationship(elgg_get_logged_in_user_guid(), 'friend', $entity->guid)) { + $rel = 'rel="friend"'; +} + +$title = "<a href=\"" . $entity->getUrl() . "\" $rel>" . $entity->name . "</a>"; + +$metadata = elgg_view_menu('entity', array( + 'entity' => $entity, + 'sort_by' => 'priority', + 'class' => 'elgg-menu-hz', +)); + +if (elgg_in_context('owner_block') || elgg_in_context('widgets')) { + $metadata = ''; +} + +if (elgg_get_context() == 'gallery') { + echo $icon; +} else { + if ($entity->isBanned()) { + $banned = elgg_echo('banned'); + $params = array( + 'entity' => $entity, + 'title' => $title, + 'metadata' => $metadata, + ); + } else { + $params = array( + 'entity' => $entity, + 'title' => $title, + 'metadata' => $metadata, + 'subtitle' => $entity->briefdescription, + 'content' => elgg_view('user/status', array('entity' => $entity)), + ); + } + + $list_body = elgg_view('user/elements/summary', $params); + + echo elgg_view_image_block($icon, $list_body, $vars); +} diff --git a/views/default/user/elements/summary.php b/views/default/user/elements/summary.php new file mode 100644 index 000000000..46d11c14c --- /dev/null +++ b/views/default/user/elements/summary.php @@ -0,0 +1,13 @@ +<?php +/** + * User summary + * + * @uses $vars['entity'] ElggEntity + * @uses $vars['title'] Title link (optional) false = no title, '' = default + * @uses $vars['metadata'] HTML for entity metadata and actions (optional) + * @uses $vars['subtitle'] HTML for the subtitle (optional) + * @uses $vars['tags'] HTML for the tags (optional) + * @uses $vars['content'] HTML for the entity content (optional) + */ + +echo elgg_view('object/elements/summary', $vars); diff --git a/views/default/user/search/finishblurb.php b/views/default/user/search/finishblurb.php new file mode 100644 index 000000000..a3878a803 --- /dev/null +++ b/views/default/user/search/finishblurb.php @@ -0,0 +1,18 @@ +<?php +/** + * @package Elgg + * @subpackage Core + * @deprecated 1.7 + */ + +elgg_deprecated_notice('view user/search/finishblurb was deprecated.', 1.7); + +if ($vars['count'] > $vars['threshold']) { + +?> +<a href="<?php echo elgg_get_site_url(); ?>search/users?tag=<?php echo urlencode($vars['tag']); ?>"><?php + echo elgg_echo("user:search:finishblurb"); + ?></a> +<?php + +} diff --git a/views/default/user/search/startblurb.php b/views/default/user/search/startblurb.php new file mode 100644 index 000000000..806157609 --- /dev/null +++ b/views/default/user/search/startblurb.php @@ -0,0 +1,10 @@ +<?php +/** + * @package Elgg + * @subpackage Core + * @deprecated 1.7 + */ + +elgg_deprecated_notice('view user/search/startblurb was deprecated.', 1.7); + +echo elgg_echo("user:search:startblurb", array($vars['tag']));
\ No newline at end of file diff --git a/views/default/widgets/admin_welcome/content.php b/views/default/widgets/admin_welcome/content.php new file mode 100644 index 000000000..f4b92ea66 --- /dev/null +++ b/views/default/widgets/admin_welcome/content.php @@ -0,0 +1,19 @@ +<?php +/** + * Welcome widget for admins + */ + +// section => string replacements. +$sections = array( + 'intro' => array(), + 'admin_overview' => array(), + 'outro' => array() +); + +// don't use longtext because it filters output. +// that's annoying. +echo '<div class="elgg-output">'; +foreach ($sections as $section => $strings) { + echo '<p>' . elgg_echo("admin:widget:admin_welcome:$section", $strings) . '</p>'; +} +echo '</div>';
\ No newline at end of file diff --git a/views/default/widgets/content_stats/content.php b/views/default/widgets/content_stats/content.php new file mode 100644 index 000000000..56772047d --- /dev/null +++ b/views/default/widgets/content_stats/content.php @@ -0,0 +1,28 @@ +<?php +/** + * Content stats widget + */ + +$max = $vars['entity']->num_display; + +$entity_stats = get_entity_statistics(); +$object_stats = $entity_stats['object']; +arsort($object_stats); +$object_stats = array_slice($object_stats, 0, $max); + +echo '<table class="elgg-table-alt">'; +echo '<tr><th>' . elgg_echo('widget:content_stats:type') . '</th>'; +echo '<th>' . elgg_echo('widget:content_stats:number') . '</th></tr>'; +foreach ($object_stats as $subtype => $num) { + $name = elgg_echo("item:object:$subtype"); + echo "<tr><td>$name</td><td>$num</td></tr>"; +} +echo '</table>'; + +echo '<div class="mtm">'; +echo elgg_view('output/url', array( + 'href' => 'admin/statistics/overview', + 'text' => elgg_echo('more'), + 'is_trusted' => true, +)); +echo '</div>'; diff --git a/views/default/widgets/content_stats/edit.php b/views/default/widgets/content_stats/edit.php new file mode 100644 index 000000000..f1a050df8 --- /dev/null +++ b/views/default/widgets/content_stats/edit.php @@ -0,0 +1,23 @@ +<?php +/** + * Content statistics widget edit view + */ + + +// set default value +if (!isset($vars['entity']->num_display)) { + $vars['entity']->num_display = 8; +} + +$params = array( + 'name' => 'params[num_display]', + 'value' => $vars['entity']->num_display, + 'options' => array(5, 8, 10, 12, 15, 20), +); +$dropdown = elgg_view('input/dropdown', $params); + +?> +<p> + <?php echo elgg_echo('widget:numbertodisplay'); ?>: + <?php echo $dropdown; ?> +</p> diff --git a/views/default/widgets/control_panel/content.php b/views/default/widgets/control_panel/content.php new file mode 100644 index 000000000..a348d612f --- /dev/null +++ b/views/default/widgets/control_panel/content.php @@ -0,0 +1,38 @@ +<?php +/** + * Admin control panel widget + */ + +elgg_register_menu_item('admin_control_panel', array( + 'name' => 'flush', + 'text' => elgg_echo('admin:cache:flush'), + 'href' => 'action/admin/site/flush_cache', + 'is_action' => true, + 'link_class' => 'elgg-button elgg-button-action', +)); + +// @todo Move in this in ElggUpgradeManager::isLocked() when #4682 fixed +$is_locked = _elgg_upgrade_is_locked(); + +if (!$is_locked) { + elgg_register_menu_item('admin_control_panel', array( + 'name' => 'upgrade', + 'text' => elgg_echo('upgrade'), + 'href' => 'upgrade.php', + 'link_class' => 'elgg-button elgg-button-action', + )); +} else { + elgg_register_menu_item('admin_control_panel', array( + 'name' => 'unlock_upgrade', + 'text' => elgg_echo('upgrade:unlock'), + 'href' => 'action/admin/site/unlock_upgrade', + 'is_action' => true, + 'link_class' => 'elgg-button elgg-button-action', + 'confirm' => elgg_echo('upgrade:unlock:confirm'), + )); +} + +echo elgg_view_menu('admin_control_panel', array( + 'class' => 'elgg-menu-hz', + 'item_class' => 'mrm', +)); diff --git a/views/default/widgets/friends/content.php b/views/default/widgets/friends/content.php new file mode 100644 index 000000000..98814c244 --- /dev/null +++ b/views/default/widgets/friends/content.php @@ -0,0 +1,25 @@ +<?php +/** + * Friend widget display view + * + */ + +// owner of the widget +$owner = $vars['entity']->getOwnerEntity(); + +// the number of friends to display +$num = (int) $vars['entity']->num_display; + +// get the correct size +$size = $vars['entity']->icon_size; + +if (elgg_instanceof($owner, 'user')) { + $html = $owner->listFriends('', $num, array( + 'size' => $size, + 'list_type' => 'gallery', + 'pagination' => false + )); + if ($html) { + echo $html; + } +} diff --git a/views/default/widgets/friends/edit.php b/views/default/widgets/friends/edit.php new file mode 100644 index 000000000..c7e6b06ff --- /dev/null +++ b/views/default/widgets/friends/edit.php @@ -0,0 +1,52 @@ +<?php +/** + * Friend widget options + * + */ + +// set default value for display number +if (!isset($vars['entity']->num_display)) { + $vars['entity']->num_display = 12; +} + +$params = array( + 'name' => 'params[num_display]', + 'value' => $vars['entity']->num_display, + 'options' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 20, 30, 50, 100), +); +$display_dropdown = elgg_view('input/dropdown', $params); + + +// handle upgrade to 1.7.2 from previous versions +if ($vars['entity']->icon_size == 1) { + $vars['entity']->icon_size = 'small'; +} elseif ($vars['entity']->icon_size == 2) { + $vars['entity']->icon_size = 'tiny'; +} + +// set default value for icon size +if (!isset($vars['entity']->icon_size)) { + $vars['entity']->icon_size = 'small'; +} + +$params = array( + 'name' => 'params[icon_size]', + 'value' => $vars['entity']->icon_size, + 'options_values' => array( + 'small' => elgg_echo('friends:small'), + 'tiny' => elgg_echo('friends:tiny'), + ), +); +$size_dropdown = elgg_view('input/dropdown', $params); + + +?> +<p> + <?php echo elgg_echo('friends:num_display'); ?>: + <?php echo $display_dropdown; ?> +</p> + +<p> + <?php echo elgg_echo('friends:icon_size'); ?>: + <?php echo $size_dropdown; ?> +</p> diff --git a/views/default/widgets/new_users/content.php b/views/default/widgets/new_users/content.php new file mode 100644 index 000000000..ba85e7421 --- /dev/null +++ b/views/default/widgets/new_users/content.php @@ -0,0 +1,11 @@ +<?php +/** + * New users admin widget + */ + +echo elgg_list_entities(array( + 'type' => 'user', + 'subtype'=> null, + 'full_view' => false, + 'pagination' => false, +));
\ No newline at end of file diff --git a/views/default/widgets/new_users/edit.php b/views/default/widgets/new_users/edit.php new file mode 100644 index 000000000..ed07213cb --- /dev/null +++ b/views/default/widgets/new_users/edit.php @@ -0,0 +1,23 @@ +<?php +/** + * New users widget edit view + */ + + +// set default value +if (!isset($vars['entity']->num_display)) { + $vars['entity']->num_display = 5; +} + +$params = array( + 'name' => 'params[num_display]', + 'value' => $vars['entity']->num_display, + 'options' => array(5, 8, 10, 12, 15, 20), +); +$dropdown = elgg_view('input/dropdown', $params); + +?> +<p> + <?php echo elgg_echo('widget:numbertodisplay'); ?>: + <?php echo $dropdown; ?> +</p> diff --git a/views/default/widgets/online_users/content.php b/views/default/widgets/online_users/content.php new file mode 100644 index 000000000..6e0cc7abb --- /dev/null +++ b/views/default/widgets/online_users/content.php @@ -0,0 +1,15 @@ +<?php +/** + * Online users widget + */ + +$count = find_active_users(600, 10, 0, true); +$objects = find_active_users(600, 10); + +if ($objects) { + echo elgg_view_entity_list($objects, array( + 'count' => $count, + 'limit' => 10, + 'pagination' => false, + )); +} diff --git a/views/default/widgets/online_users/edit.php b/views/default/widgets/online_users/edit.php new file mode 100644 index 000000000..66f03a745 --- /dev/null +++ b/views/default/widgets/online_users/edit.php @@ -0,0 +1,22 @@ +<?php +/** + * Online users widget edit view + */ + +// set default value +if (!isset($vars['entity']->num_display)) { + $vars['entity']->num_display = 8; +} + +$params = array( + 'name' => 'params[num_display]', + 'value' => $vars['entity']->num_display, + 'options' => array(5, 8, 10, 12, 15, 20), +); +$dropdown = elgg_view('input/dropdown', $params); + +?> +<p> + <?php echo elgg_echo('widget:numbertodisplay'); ?>: + <?php echo $dropdown; ?> +</p> diff --git a/views/default/widgets/river_widget/content.php b/views/default/widgets/river_widget/content.php new file mode 100644 index 000000000..867fc9db6 --- /dev/null +++ b/views/default/widgets/river_widget/content.php @@ -0,0 +1,27 @@ +<?php +/** + * Activity widget content view + */ + +$num = (int) $vars['entity']->num_display; + +$options = array( + 'limit' => $num, + 'pagination' => false, +); + +if (elgg_in_context('dashboard')) { + if ($vars['entity']->content_type == 'friends') { + $options['relationship_guid'] = elgg_get_page_owner_guid(); + $options['relationship'] = 'friend'; + } +} else { + $options['subject_guid'] = elgg_get_page_owner_guid(); +} + +$content = elgg_list_river($options); +if (!$content) { + $content = elgg_echo('river:none'); +} + +echo $content; diff --git a/views/default/widgets/river_widget/edit.php b/views/default/widgets/river_widget/edit.php new file mode 100644 index 000000000..228212e47 --- /dev/null +++ b/views/default/widgets/river_widget/edit.php @@ -0,0 +1,58 @@ +<?php +/** + * Edit settings for river widget + */ + +// dashboard widget has type parameter +if (elgg_in_context('dashboard')) { + if (!isset($vars['entity']->content_type)) { + $vars['entity']->content_type = 'friends'; + } + $params = array( + 'name' => 'params[content_type]', + 'value' => $vars['entity']->content_type, + 'options_values' => array( + 'friends' => elgg_echo('river:widgets:friends'), + 'all' => elgg_echo('river:widgets:all'), + ), + ); + $type_dropdown = elgg_view('input/dropdown', $params); + ?> + <div> + <?php echo elgg_echo('river:widget:type'); ?>: + <?php echo $type_dropdown; ?> + </div> + <?php +} + + +// set default value for number to display +if (!isset($vars['entity']->num_display)) { + $vars['entity']->num_display = 8; +} + +$params = array( + 'name' => 'params[num_display]', + 'value' => $vars['entity']->num_display, + 'options' => array(5, 8, 10, 12, 15, 20), +); +$num_dropdown = elgg_view('input/dropdown', $params); + +?> +<div> + <?php echo elgg_echo('widget:numbertodisplay'); ?>: + <?php echo $num_dropdown; ?> +</div> + +<?php +// pass the context so we have the correct output upon save. +if (elgg_in_context('dashboard')) { + $context = 'dashboard'; +} else { + $context = 'profile'; +} + +echo elgg_view('input/hidden', array( + 'name' => 'context', + 'value' => $context +));
\ No newline at end of file |