Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge
This commit is contained in:
commit
08c0729f5f
@ -10,7 +10,7 @@ class PermissionLimits {
|
||||
$perms = Permissions::Perms();
|
||||
$limits = array();
|
||||
foreach($perms as $k => $v) {
|
||||
if(strstr($k,'view'))
|
||||
if(strstr($k,'view') || $k === 'post_comments')
|
||||
$limits[$k] = PERMS_PUBLIC;
|
||||
else
|
||||
$limits[$k] = PERMS_SPECIFIC;
|
||||
|
@ -270,7 +270,8 @@ class Notifier {
|
||||
|
||||
// Check for non published items, but allow an exclusion for transmitting hidden file activities
|
||||
|
||||
if(intval($target_item['item_unpublished']) || intval($target_item['item_delayed']) ||
|
||||
if(intval($target_item['item_unpublished']) || intval($target_item['item_delayed']) ||
|
||||
intval($target_item['item_blocked']) ||
|
||||
( intval($target_item['item_hidden']) && ($target_item['obj_type'] !== ACTIVITY_OBJ_FILE))) {
|
||||
logger('notifier: target item not published, so not forwardable', LOGGER_DEBUG);
|
||||
return;
|
||||
|
@ -170,6 +170,7 @@ class Enotify {
|
||||
|
||||
xchan_query($p);
|
||||
|
||||
$moderated = (($p[0]['item_blocked'] = ITEM_MODERATED) ? true : false);
|
||||
|
||||
$item_post_type = item_post_type($p[0]);
|
||||
// $private = $p[0]['item_private'];
|
||||
@ -208,13 +209,21 @@ class Enotify {
|
||||
// Before this we have the name of the replier on the subject rendering
|
||||
// differents subjects for messages on the same thread.
|
||||
|
||||
$subject = sprintf( t('[$Projectname:Notify] Comment to conversation #%1$d by %2$s'), $parent_id, $sender['xchan_name']);
|
||||
if($moderated)
|
||||
$subject = sprintf( t('[$Projectname:Notify] Moderated Comment to conversation #%1$d by %2$s'), $parent_id, $sender['xchan_name']);
|
||||
else
|
||||
$subject = sprintf( t('[$Projectname:Notify] Comment to conversation #%1$d by %2$s'), $parent_id, $sender['xchan_name']);
|
||||
$preamble = sprintf( t('%1$s, %2$s commented on an item/conversation you have been following.'), $recip['channel_name'], $sender['xchan_name']);
|
||||
$epreamble = $dest_str;
|
||||
|
||||
$sitelink = t('Please visit %s to view and/or reply to the conversation.');
|
||||
$tsitelink = sprintf( $sitelink, $siteurl );
|
||||
$hsitelink = sprintf( $sitelink, '<a href="' . $siteurl . '">' . $sitename . '</a>');
|
||||
if($moderated) {
|
||||
$tsitelink .= "\n\n" . sprintf( t('Please visit %s to approve or reject this comment.'), z_root() . '/moderate' );
|
||||
$hsitelink .= "<br><br>" . sprintf( t('Please visit %s to approve or reject this comment.'), '<a href="' . z_root() . '/moderate">' . z_root() . '/moderate</a>' );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if ($params['type'] == NOTIFY_LIKE) {
|
||||
|
@ -153,7 +153,7 @@ class ThreadItem {
|
||||
$response_verbs[] = 'attendyes';
|
||||
$response_verbs[] = 'attendno';
|
||||
$response_verbs[] = 'attendmaybe';
|
||||
if($this->is_commentable()) {
|
||||
if($this->is_commentable() && $observer) {
|
||||
$isevent = true;
|
||||
$attend = array( t('I will attend'), t('I will not attend'), t('I might attend'));
|
||||
}
|
||||
@ -164,7 +164,7 @@ class ThreadItem {
|
||||
$response_verbs[] = 'agree';
|
||||
$response_verbs[] = 'disagree';
|
||||
$response_verbs[] = 'abstain';
|
||||
if($this->is_commentable()) {
|
||||
if($this->is_commentable() && $observer) {
|
||||
$conlabels = array( t('I agree'), t('I disagree'), t('I abstain'));
|
||||
$canvote = true;
|
||||
}
|
||||
@ -265,7 +265,7 @@ class ThreadItem {
|
||||
if(($item['obj_type'] === ACTIVITY_OBJ_EVENT) && $conv->get_profile_owner() == local_channel())
|
||||
$has_event = true;
|
||||
|
||||
if($this->is_commentable()) {
|
||||
if($this->is_commentable() && $observer) {
|
||||
$like = array( t("I like this \x28toggle\x29"), t("like"));
|
||||
$dislike = array( t("I don't like this \x28toggle\x29"), t("dislike"));
|
||||
}
|
||||
@ -371,7 +371,7 @@ class ThreadItem {
|
||||
'has_tags' => $has_tags,
|
||||
'reactions' => $this->reactions,
|
||||
// Item toolbar buttons
|
||||
'emojis' => (($this->is_toplevel() && $this->is_commentable() && feature_enabled($conv->get_profile_owner(),'emojis')) ? '1' : ''),
|
||||
'emojis' => (($this->is_toplevel() && $this->is_commentable() && $observer && feature_enabled($conv->get_profile_owner(),'emojis')) ? '1' : ''),
|
||||
'like' => $like,
|
||||
'dislike' => ((feature_enabled($conv->get_profile_owner(),'dislike')) ? $dislike : ''),
|
||||
'share' => $share,
|
||||
@ -743,8 +743,12 @@ class ThreadItem {
|
||||
'$feature_encrypt' => ((feature_enabled($conv->get_profile_owner(),'content_encrypt')) ? true : false),
|
||||
'$encrypt' => t('Encrypt text'),
|
||||
'$cipher' => $conv->get_cipher(),
|
||||
'$sourceapp' => \App::$sourcename
|
||||
|
||||
'$sourceapp' => \App::$sourcename,
|
||||
'$observer' => get_observer_hash(),
|
||||
'$anoncomments' => (($conv->get_mode() === 'channel' && perm_is_allowed($conv->get_profile_owner(),'','post_comments')) ? true : false),
|
||||
'$anonname' => [ 'anonname', t('Your full name (required)'),'','' ],
|
||||
'$anonmail' => [ 'anonmail', t('Your email address (required)'),'','' ],
|
||||
'$anonurl' => [ 'anonurl', t('Your website URL (optional)'),'','' ]
|
||||
));
|
||||
|
||||
return $comment_box;
|
||||
|
@ -158,7 +158,7 @@ class ThreadStream {
|
||||
if(intval($item->get_data_value('item_nocomment'))) {
|
||||
$item->set_commentable(false);
|
||||
}
|
||||
elseif(($this->observer) && (! $item->is_commentable())) {
|
||||
elseif(! $item->is_commentable()) {
|
||||
if((array_key_exists('owner',$item->data)) && intval($item->data['owner']['abook_self']))
|
||||
$item->set_commentable(perm_is_allowed($this->profile_owner,$ob_hash,'post_comments'));
|
||||
else
|
||||
|
@ -33,7 +33,7 @@ class Item extends \Zotlabs\Web\Controller {
|
||||
// This will change. Figure out who the observer is and whether or not
|
||||
// they have permission to post here. Else ignore the post.
|
||||
|
||||
if((! local_channel()) && (! remote_channel()) && (! x($_REQUEST,'commenter')))
|
||||
if((! local_channel()) && (! remote_channel()) && (! x($_REQUEST,'anonname')))
|
||||
return;
|
||||
|
||||
$uid = local_channel();
|
||||
@ -77,7 +77,7 @@ class Item extends \Zotlabs\Web\Controller {
|
||||
|
||||
call_hooks('post_local_start', $_REQUEST);
|
||||
|
||||
// logger('postvars ' . print_r($_REQUEST,true), LOGGER_DATA);
|
||||
// logger('postvars ' . print_r($_REQUEST,true), LOGGER_DATA);
|
||||
|
||||
$api_source = ((x($_REQUEST,'api_source') && $_REQUEST['api_source']) ? true : false);
|
||||
|
||||
@ -205,10 +205,29 @@ class Item extends \Zotlabs\Web\Controller {
|
||||
$route = $parent_item['route'];
|
||||
|
||||
}
|
||||
|
||||
$moderated = false;
|
||||
|
||||
if(! $observer)
|
||||
if(! $observer) {
|
||||
$observer = \App::get_observer();
|
||||
if(! $observer) {
|
||||
$observer = anon_identity_init($_REQUEST);
|
||||
if($observer) {
|
||||
$moderated = true;
|
||||
$remote_xchan = $remote_observer = $observer;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(! $observer) {
|
||||
notice( t('Permission denied.') . EOL) ;
|
||||
if($api_source)
|
||||
return ( [ 'success' => false, 'message' => 'permission denied' ] );
|
||||
if(x($_REQUEST,'return'))
|
||||
goaway(z_root() . "/" . $return_path );
|
||||
killme();
|
||||
}
|
||||
|
||||
if($parent) {
|
||||
logger('mod_item: item_post parent=' . $parent);
|
||||
$can_comment = false;
|
||||
@ -312,7 +331,7 @@ class Item extends \Zotlabs\Web\Controller {
|
||||
$walltowall = false;
|
||||
$walltowall_comment = false;
|
||||
|
||||
if($remote_xchan)
|
||||
if($remote_xchan && ! $moderated)
|
||||
$observer = $remote_observer;
|
||||
|
||||
if($observer) {
|
||||
@ -996,6 +1015,10 @@ class Item extends \Zotlabs\Web\Controller {
|
||||
\Zotlabs\Daemon\Master::Summon(array('Notifier', $notify_type, $post_id));
|
||||
|
||||
logger('post_complete');
|
||||
|
||||
if($moderated) {
|
||||
info(t('Your comment is awaiting approval.') . EOL);
|
||||
}
|
||||
|
||||
// figure out how to return, depending on from whence we came
|
||||
|
||||
|
77
Zotlabs/Module/Moderate.php
Normal file
77
Zotlabs/Module/Moderate.php
Normal file
@ -0,0 +1,77 @@
|
||||
<?php
|
||||
|
||||
namespace Zotlabs\Module;
|
||||
|
||||
require_once('include/conversation.php');
|
||||
|
||||
|
||||
class Moderate extends \Zotlabs\Web\Controller {
|
||||
|
||||
|
||||
function get() {
|
||||
if(! local_channel()) {
|
||||
notice( t('Permission denied.') . EOL);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if(argc() > 2) {
|
||||
$post_id = intval(argv(1));
|
||||
if(! $post_id)
|
||||
goaway(z_root() . '/moderate');
|
||||
|
||||
$action = argv(2);
|
||||
|
||||
$r = q("select * from item where uid = %d and id = %d and item_blocked = %d limit 1",
|
||||
intval(local_channel()),
|
||||
intval($post_id),
|
||||
intval(ITEM_MODERATED)
|
||||
);
|
||||
|
||||
if($r) {
|
||||
if($action === 'approve') {
|
||||
q("update item set item_blocked = 0 where uid = %d and id = %d",
|
||||
intval(local_channel()),
|
||||
intval($post_id)
|
||||
);
|
||||
notice( t('Comment approved') . EOL);
|
||||
}
|
||||
elseif($action === 'drop') {
|
||||
drop_item($post_id,false);
|
||||
notice( t('Comment deleted') . EOL);
|
||||
}
|
||||
|
||||
$r = q("select * from item where id = %d",
|
||||
intval($post_id)
|
||||
);
|
||||
if($r) {
|
||||
xchan_query($r);
|
||||
$sync_item = fetch_post_tags($r);
|
||||
build_sync_packet(local_channel(),array('item' => array(encode_item($sync_item[0],true))));
|
||||
}
|
||||
if($action === 'approve') {
|
||||
\Zotlabs\Daemon\Master::Summon(array('Notifier', 'comment-new', $post_id));
|
||||
}
|
||||
goaway(z_root() . '/moderate');
|
||||
}
|
||||
}
|
||||
$r = q("select item.id as item_id, item.* from item where item.uid = %d and item_blocked = %d and item_deleted = 0 order by created desc limit 60",
|
||||
intval(local_channel()),
|
||||
intval(ITEM_MODERATED)
|
||||
);
|
||||
|
||||
if($r) {
|
||||
xchan_query($r);
|
||||
$items = fetch_post_tags($r,true);
|
||||
}
|
||||
else {
|
||||
$items = array();
|
||||
}
|
||||
|
||||
$o = conversation($a,$items,'moderate',false,'traditional');
|
||||
|
||||
return $o;
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -324,7 +324,7 @@ class Channel {
|
||||
foreach($global_perms as $k => $perm) {
|
||||
$options = array();
|
||||
foreach($perm_opts as $opt) {
|
||||
if((! strstr($k,'view')) && $opt[1] == PERMS_PUBLIC)
|
||||
if(((! strstr($k,'view')) && $k !== 'post_comments') && $opt[1] == PERMS_PUBLIC)
|
||||
continue;
|
||||
$options[$opt[1]] = $opt[0];
|
||||
}
|
||||
|
3
boot.php
3
boot.php
@ -50,7 +50,7 @@ require_once('include/attach.php');
|
||||
|
||||
|
||||
define ( 'PLATFORM_NAME', 'hubzilla' );
|
||||
define ( 'STD_VERSION', '2.5.3' );
|
||||
define ( 'STD_VERSION', '2.5.4' );
|
||||
define ( 'ZOT_REVISION', '1.2' );
|
||||
|
||||
define ( 'DB_UPDATE_VERSION', 1191 );
|
||||
@ -499,6 +499,7 @@ define ( 'ACTIVITY_POKE', NAMESPACE_ZOT . '/activity/poke' );
|
||||
define ( 'ACTIVITY_MOOD', NAMESPACE_ZOT . '/activity/mood' );
|
||||
|
||||
define ( 'ACTIVITY_OBJ_COMMENT', NAMESPACE_ACTIVITY_SCHEMA . 'comment' );
|
||||
define ( 'ACTIVITY_OBJ_ACTIVITY',NAMESPACE_ACTIVITY_SCHEMA . 'activity' );
|
||||
define ( 'ACTIVITY_OBJ_NOTE', NAMESPACE_ACTIVITY_SCHEMA . 'note' );
|
||||
define ( 'ACTIVITY_OBJ_PERSON', NAMESPACE_ACTIVITY_SCHEMA . 'person' );
|
||||
define ( 'ACTIVITY_OBJ_PHOTO', NAMESPACE_ACTIVITY_SCHEMA . 'photo' );
|
||||
|
@ -2323,3 +2323,73 @@ function channel_codeallowed($channel_id) {
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function anon_identity_init($reqvars) {
|
||||
|
||||
$x = [ 'request_vars' => $reqvars, 'xchan' => null, 'success' => 'unset' ];
|
||||
call_hooks('anon_identity_init',$x);
|
||||
if($x['success'] !== 'unset' && intval($x['success']) && $x['xchan'])
|
||||
return $x['xchan'];
|
||||
|
||||
// allow a captcha handler to over-ride
|
||||
if($x['success'] !== 'unset' && (intval($x['success']) === 0))
|
||||
return false;
|
||||
|
||||
|
||||
$anon_name = strip_tags(trim($reqvars['anonname']));
|
||||
$anon_email = strip_tags(trim($reqvars['anonmail']));
|
||||
$anon_url = strip_tags(trim($reqvars['anonurl']));
|
||||
|
||||
if(! ($anon_name && $anon_email)) {
|
||||
logger('anonymous commenter did not complete form');
|
||||
return false;
|
||||
}
|
||||
|
||||
if(! validate_email($anon_email)) {
|
||||
logger('enonymous email not valid');
|
||||
return false;
|
||||
}
|
||||
|
||||
if(! $anon_url)
|
||||
$anon_url = z_root();
|
||||
|
||||
$hash = hash('md5',$anon_email);
|
||||
|
||||
$x = q("select * from xchan where xchan_guid = '%s' and xchan_hash = '%s' and xchan_network = 'unknown' limit 1",
|
||||
dbesc($anon_email),
|
||||
dbesc($hash)
|
||||
);
|
||||
|
||||
if(! $x) {
|
||||
xchan_store_lowlevel([
|
||||
'xchan_guid' => $anon_email,
|
||||
'xchan_hash' => $hash,
|
||||
'xchan_name' => $anon_name,
|
||||
'xchan_url' => $anon_url,
|
||||
'xchan_network' => 'unknown',
|
||||
'xchan_name_date' => datetime_convert()
|
||||
]);
|
||||
|
||||
|
||||
$x = q("select * from xchan where xchan_guid = '%s' and xchan_hash = '%s' and xchan_network = 'unknown' limit 1",
|
||||
dbesc($anon_email),
|
||||
dbesc($hash)
|
||||
);
|
||||
|
||||
$photo = z_root() . '/' . get_default_profile_photo(300);
|
||||
$photos = import_xchan_photo($photo,$hash);
|
||||
$r = q("update xchan set xchan_photo_date = '%s', xchan_photo_l = '%s', xchan_photo_m = '%s', xchan_photo_s = '%s', xchan_photo_mimetype = '%s' where xchan_guid = '%s' and xchan_hash = '%s' and xchan_network = 'unknown' ",
|
||||
dbesc(datetime_convert()),
|
||||
dbesc($photos[0]),
|
||||
dbesc($photos[1]),
|
||||
dbesc($photos[2]),
|
||||
dbesc($photos[3]),
|
||||
dbesc($anon_email),
|
||||
dbesc($hash)
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
return $x[0];
|
||||
|
||||
}
|
||||
|
@ -533,6 +533,10 @@ function conversation(&$a, $items, $mode, $update, $page_mode = 'traditional', $
|
||||
$live_update_div = '<div id="live-search"></div>' . "\r\n";
|
||||
}
|
||||
|
||||
elseif ($mode === 'moderate') {
|
||||
$profile_owner = local_channel();
|
||||
}
|
||||
|
||||
elseif ($mode === 'photos') {
|
||||
$profile_onwer = App::$profile['profile_uid'];
|
||||
$page_writeable = ($profile_owner == local_channel());
|
||||
@ -577,7 +581,7 @@ function conversation(&$a, $items, $mode, $update, $page_mode = 'traditional', $
|
||||
|
||||
if($items) {
|
||||
|
||||
if($mode === 'network-new' || $mode === 'search' || $mode === 'community') {
|
||||
if(in_array($mode, [ 'network-new', 'search', 'community', 'moderate' ])) {
|
||||
|
||||
// "New Item View" on network page or search page results
|
||||
// - just loop through the items and format them minimally for display
|
||||
@ -609,14 +613,14 @@ function conversation(&$a, $items, $mode, $update, $page_mode = 'traditional', $
|
||||
if(((activity_match($item['verb'],ACTIVITY_LIKE)) || (activity_match($item['verb'],ACTIVITY_DISLIKE)))
|
||||
&& ($item['id'] != $item['parent']))
|
||||
continue;
|
||||
$nickname = $item['nickname'];
|
||||
// $nickname = $item['nickname'];
|
||||
}
|
||||
else
|
||||
$nickname = App::$user['nickname'];
|
||||
// else
|
||||
// $nickname = App::$user['nickname'];
|
||||
|
||||
$profile_name = ((strlen($item['author-name'])) ? $item['author-name'] : $item['name']);
|
||||
if($item['author-link'] && (! $item['author-name']))
|
||||
$profile_name = $item['author-link'];
|
||||
// $profile_name = ((strlen($item['author-name'])) ? $item['author-name'] : $item['name']);
|
||||
// if($item['author-link'] && (! $item['author-name']))
|
||||
// $profile_name = $item['author-link'];
|
||||
|
||||
$sp = false;
|
||||
$profile_link = best_link_url($item,$sp);
|
||||
@ -625,7 +629,7 @@ function conversation(&$a, $items, $mode, $update, $page_mode = 'traditional', $
|
||||
else
|
||||
$profile_link = zid($profile_link);
|
||||
|
||||
$normalised = normalise_link((strlen($item['author-link'])) ? $item['author-link'] : $item['url']);
|
||||
// $normalised = normalise_link((strlen($item['author-link'])) ? $item['author-link'] : $item['url']);
|
||||
|
||||
$profile_name = $item['author']['xchan_name'];
|
||||
$profile_link = $item['author']['xchan_url'];
|
||||
@ -679,6 +683,8 @@ function conversation(&$a, $items, $mode, $update, $page_mode = 'traditional', $
|
||||
'template' => $tpl,
|
||||
'toplevel' => 'toplevel_item',
|
||||
'mode' => $mode,
|
||||
'approve' => t('Approve'),
|
||||
'delete' => t('Delete'),
|
||||
'id' => (($preview) ? 'P0' : $item['item_id']),
|
||||
'linktitle' => sprintf( t('View %s\'s profile @ %s'), $profile_name, $profile_url),
|
||||
'profile_url' => $profile_link,
|
||||
|
@ -259,7 +259,7 @@ function get_atom_elements($feed, $item, &$author) {
|
||||
if(substr($author['author_link'],-1,1) == '/')
|
||||
$author['author_link'] = substr($author['author_link'],0,-1);
|
||||
|
||||
$res['mid'] = unxmlify($item->get_id());
|
||||
$res['mid'] = normalise_id(unxmlify($item->get_id()));
|
||||
$res['title'] = unxmlify($item->get_title());
|
||||
$res['body'] = unxmlify($item->get_content());
|
||||
$res['plink'] = unxmlify($item->get_link(0));
|
||||
@ -354,6 +354,7 @@ function get_atom_elements($feed, $item, &$author) {
|
||||
|
||||
// No photo/profile-link on the item - look at the feed level
|
||||
|
||||
|
||||
if((! (x($author,'author_link'))) || (! (x($author,'author_photo')))) {
|
||||
$rawauthor = $feed->get_feed_tags(SIMPLEPIE_NAMESPACE_ATOM_10,'author');
|
||||
if($rawauthor && $rawauthor[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['link']) {
|
||||
@ -390,7 +391,7 @@ function get_atom_elements($feed, $item, &$author) {
|
||||
|
||||
$rawcnv = $item->get_item_tags(NAMESPACE_OSTATUS, 'conversation');
|
||||
if($rawcnv) {
|
||||
$ostatus_conversation = unxmlify($rawcnv[0]['attribs']['']['ref']);
|
||||
$ostatus_conversation = normalise_id(unxmlify($rawcnv[0]['attribs']['']['ref']));
|
||||
set_iconfig($res,'ostatus','conversation',$ostatus_conversation,true);
|
||||
}
|
||||
|
||||
@ -602,6 +603,10 @@ function get_atom_elements($feed, $item, &$author) {
|
||||
if(! $type)
|
||||
$type = 'application/octet-stream';
|
||||
|
||||
if(($ostatus_protocol) && (strpos($type,'image') === 0) && (strpos($res['body'],$link) === false) && (strpos($link,'http') === 0)) {
|
||||
$res['body'] .= "\n\n" . '[img]' . $link . '[/img]';
|
||||
}
|
||||
|
||||
$res['attach'][] = array('href' => $link, 'length' => $len, 'type' => $type, 'title' => $title );
|
||||
}
|
||||
}
|
||||
@ -683,7 +688,10 @@ function get_atom_elements($feed, $item, &$author) {
|
||||
$res['target'] = $obj;
|
||||
}
|
||||
|
||||
if(array_key_exists('verb',$res) && $res['verb'] === ACTIVITY_SHARE) {
|
||||
|
||||
|
||||
if(array_key_exists('verb',$res) && $res['verb'] === ACTIVITY_SHARE
|
||||
&& array_key_exists('obj_type',$res) && $res['obj_type'] === ACTIVITY_OBJ_NOTE) {
|
||||
feed_get_reshare($res,$item);
|
||||
}
|
||||
|
||||
@ -713,14 +721,14 @@ function feed_get_reshare(&$res,$item) {
|
||||
|
||||
if($rawobj) {
|
||||
|
||||
$rawauthor = $rawobj->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'author');
|
||||
$rawauthor = $rawobj[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['author'];
|
||||
|
||||
if($rawauthor && $rawauthor[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name']) {
|
||||
$share['author'] = unxmlify($rawauthor[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name']);
|
||||
$share['author'] = unxmlify($rawauthor[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data']);
|
||||
}
|
||||
|
||||
if($rawauthor && $rawauthor[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri']) {
|
||||
$share['profile'] = unxmlify($rawauthor[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri']);
|
||||
$share['profile'] = unxmlify($rawauthor[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data']);
|
||||
}
|
||||
|
||||
if($rawauthor && $rawauthor[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['link']) {
|
||||
@ -744,9 +752,10 @@ function feed_get_reshare(&$res,$item) {
|
||||
|
||||
|
||||
if(x($child[SIMPLEPIE_NAMESPACE_ATOM_10], 'link') && $child[SIMPLEPIE_NAMESPACE_ATOM_10]['link'])
|
||||
$share['link'] = encode_rel_links($child[SIMPLEPIE_NAMESPACE_ATOM_10]['link']);
|
||||
$share['links'] = encode_rel_links($child[SIMPLEPIE_NAMESPACE_ATOM_10]['link']);
|
||||
|
||||
$rawcreated = $rawobj[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['published'];
|
||||
|
||||
$rawcreated = $rawobj->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'published');
|
||||
if($rawcreated)
|
||||
$share['created'] = unxmlify($rawcreated[0]['data']);
|
||||
else
|
||||
@ -766,13 +775,19 @@ function feed_get_reshare(&$res,$item) {
|
||||
}
|
||||
}
|
||||
|
||||
$attach = $rawobj->get_enclosures();
|
||||
$attach = $share['links'];
|
||||
if($attach) {
|
||||
foreach($attach as $att) {
|
||||
$len = intval($att->get_length());
|
||||
$link = str_replace(array(',','"'),array('%2D','%22'),notags(trim(unxmlify($att->get_link()))));
|
||||
$title = str_replace(array(',','"'),array('%2D','%22'),notags(trim(unxmlify($att->get_title()))));
|
||||
$type = str_replace(array(',','"'),array('%2D','%22'),notags(trim(unxmlify($att->get_type()))));
|
||||
if($att['rel'] === 'alternate') {
|
||||
$share['alternate'] = str_replace(array(',','"'),array('%2D','%22'),notags(trim(unxmlify($att['href']))));
|
||||
continue;
|
||||
}
|
||||
if($att['rel'] !== 'enclosure')
|
||||
continue;
|
||||
$len = intval($att['length']);
|
||||
$link = str_replace(array(',','"'),array('%2D','%22'),notags(trim(unxmlify($att['href']))));
|
||||
$title = str_replace(array(',','"'),array('%2D','%22'),notags(trim(unxmlify($att['title']))));
|
||||
$type = str_replace(array(',','"'),array('%2D','%22'),notags(trim(unxmlify($att['type']))));
|
||||
if(strpos($type,';'))
|
||||
$type = substr($type,0,strpos($type,';'));
|
||||
if((! $link) || (strpos($link,'http') !== 0))
|
||||
@ -792,11 +807,12 @@ function feed_get_reshare(&$res,$item) {
|
||||
$res['body'] = "[share author='" . urlencode($share['author']) .
|
||||
"' profile='" . $share['profile'] .
|
||||
"' avatar='" . $share['avatar'] .
|
||||
"' link='" . $share['link'] .
|
||||
"' link='" . $share['alternate'] .
|
||||
"' posted='" . $share['created'] .
|
||||
"' message_id='" . $share['message_id'] . "']";
|
||||
$o .= $body;
|
||||
$o .= "[/share]";
|
||||
|
||||
$res['body'] .= $body;
|
||||
$res['body'] .= "[/share]";
|
||||
}
|
||||
|
||||
}
|
||||
@ -818,6 +834,10 @@ function encode_rel_links($links) {
|
||||
$l = array();
|
||||
if($link['attribs']['']['rel'])
|
||||
$l['rel'] = $link['attribs']['']['rel'];
|
||||
if($link['attribs']['']['length'])
|
||||
$l['length'] = $link['attribs']['']['length'];
|
||||
if($link['attribs']['']['title'])
|
||||
$l['title'] = $link['attribs']['']['title'];
|
||||
if($link['attribs']['']['type'])
|
||||
$l['type'] = $link['attribs']['']['type'];
|
||||
if($link['attribs']['']['href'])
|
||||
@ -938,7 +958,6 @@ function consume_feed($xml, $importer, &$contact, $pass = 0) {
|
||||
foreach($items as $item) {
|
||||
|
||||
$is_reply = false;
|
||||
$item_id = normalise_id($item->get_id());
|
||||
|
||||
logger('processing ' . $item->get_id(), LOGGER_DEBUG);
|
||||
|
||||
@ -955,12 +974,11 @@ function consume_feed($xml, $importer, &$contact, $pass = 0) {
|
||||
|
||||
// Have we seen it? If not, import it.
|
||||
|
||||
$item_id = normalise_id($item->get_id());
|
||||
$author = array();
|
||||
$datarray = get_atom_elements($feed,$item,$author);
|
||||
|
||||
if($datarray['mid'])
|
||||
$datarray['mid'] = normalise_id($item->get_id());
|
||||
if(! $datarray['mid'])
|
||||
continue;
|
||||
|
||||
if($contact['xchan_network'] === 'rss') {
|
||||
$datarray['public_policy'] = 'specific';
|
||||
@ -987,7 +1005,7 @@ function consume_feed($xml, $importer, &$contact, $pass = 0) {
|
||||
$datarray['owner_xchan'] = $contact['xchan_hash'];
|
||||
|
||||
$r = q("SELECT edited FROM item WHERE mid = '%s' AND uid = %d LIMIT 1",
|
||||
dbesc($item_id),
|
||||
dbesc($datarray['mid']),
|
||||
intval($importer['channel_id'])
|
||||
);
|
||||
|
||||
@ -1010,6 +1028,9 @@ function consume_feed($xml, $importer, &$contact, $pass = 0) {
|
||||
$pmid = '';
|
||||
$conv_id = get_iconfig($datarray,'ostatus','conversation');
|
||||
|
||||
// match conversations - first try ostatus:conversation
|
||||
// next try thr:in_reply_to
|
||||
|
||||
if($conv_id) {
|
||||
$c = q("select parent_mid from item left join iconfig on item.id = iconfig.iid where iconfig.cat = 'ostatus' and iconfig.k = 'conversation' and iconfig.v = '%s' and item.uid = %d order by item.id limit 1",
|
||||
dbesc($conv_id),
|
||||
@ -1020,14 +1041,14 @@ function consume_feed($xml, $importer, &$contact, $pass = 0) {
|
||||
$datarray['parent_mid'] = $pmid;
|
||||
}
|
||||
}
|
||||
else {
|
||||
$x = q("select mid from item where mid = '%s' and uid = %d limit 1",
|
||||
if(! $pmid) {
|
||||
$x = q("select parent_mid from item where mid = '%s' and uid = %d limit 1",
|
||||
dbesc($parent_mid),
|
||||
intval($importer['channel_id'])
|
||||
);
|
||||
|
||||
if($x) {
|
||||
$pmid = $x[0]['mid'];
|
||||
$pmid = $x[0]['parent_mid'];
|
||||
$datarray['parent_mid'] = $pmid;
|
||||
}
|
||||
}
|
||||
@ -1056,12 +1077,11 @@ function consume_feed($xml, $importer, &$contact, $pass = 0) {
|
||||
|
||||
// Head post of a conversation. Have we seen it? If not, import it.
|
||||
|
||||
$item_id = normalise_id($item->get_id());
|
||||
$author = array();
|
||||
$datarray = get_atom_elements($feed,$item,$author);
|
||||
|
||||
if($datarray['mid'])
|
||||
$datarray['mid'] = normalise_id($item->get_id());
|
||||
if(! $datarray['mid'])
|
||||
continue;
|
||||
|
||||
if($contact['xchan_network'] === 'rss') {
|
||||
$datarray['public_policy'] = 'specific';
|
||||
@ -1116,7 +1136,7 @@ function consume_feed($xml, $importer, &$contact, $pass = 0) {
|
||||
|
||||
|
||||
$r = q("SELECT edited FROM item WHERE mid = '%s' AND uid = %d LIMIT 1",
|
||||
dbesc($item_id),
|
||||
dbesc($datarray['mid']),
|
||||
intval($importer['channel_id'])
|
||||
);
|
||||
|
||||
@ -1136,7 +1156,7 @@ function consume_feed($xml, $importer, &$contact, $pass = 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$datarray['parent_mid'] = $item_id;
|
||||
$datarray['parent_mid'] = $datarray['mid'];
|
||||
$datarray['uid'] = $importer['channel_id'];
|
||||
$datarray['aid'] = $importer['channel_account_id'];
|
||||
|
||||
@ -1505,6 +1525,10 @@ function atom_entry($item, $type, $author, $owner, $comment = false, $cid = 0, $
|
||||
|
||||
if(($item['parent'] != $item['id']) || ($item['parent_mid'] !== $item['mid']) || (($item['thr_parent'] !== '') && ($item['thr_parent'] !== $item['mid']))) {
|
||||
$parent_item = (($item['thr_parent']) ? $item['thr_parent'] : $item['parent_mid']);
|
||||
// ensure it's a legal uri and not just a message-id
|
||||
if(! strpos($parent_item,':'))
|
||||
$parent_item = 'X-ZOT:' . $parent_item;
|
||||
|
||||
$o .= '<thr:in-reply-to ref="' . xmlify($parent_item) . '" type="text/html" href="' . xmlify($item['plink']) . '" />' . "\r\n";
|
||||
}
|
||||
|
||||
@ -1720,3 +1744,4 @@ function asencode_person($p) {
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
|
@ -938,7 +938,7 @@ function import_author_unknown($x) {
|
||||
$photos = import_xchan_photo($x['photo']['src'],$x['url']);
|
||||
|
||||
if($photos) {
|
||||
$r = q("update xchan set xchan_photo_date = '%s', xchan_photo_l = '%s', xchan_photo_m = '%s', xchan_photo_s = '%s', xchan_photo_mimetype = '%s' where xchan_url = '%s' and xchan_network = 'unknown'",
|
||||
$r = q("update xchan set xchan_photo_date = '%s', xchan_photo_l = '%s', xchan_photo_m = '%s', xchan_photo_s = '%s', xchan_photo_mimetype = '%s' where xchan_hash = '%s' and xchan_network = 'unknown'",
|
||||
dbesc(datetime_convert()),
|
||||
dbesc($photos[0]),
|
||||
dbesc($photos[1]),
|
||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
375
library/bootstrap/css/bootstrap.css
vendored
375
library/bootstrap/css/bootstrap.css
vendored
@ -2156,7 +2156,7 @@ pre code {
|
||||
.form-control {
|
||||
display: block;
|
||||
width: 100%;
|
||||
padding: 0.5rem 1rem;
|
||||
padding: 0.5rem 0.75rem;
|
||||
font-size: 1rem;
|
||||
line-height: 1.25;
|
||||
color: #464a4c;
|
||||
@ -2249,7 +2249,7 @@ select.form-control:focus::-ms-value {
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
.form-control-static {
|
||||
.form-control-plaintext {
|
||||
padding-top: 0.5rem;
|
||||
padding-bottom: 0.5rem;
|
||||
margin-bottom: 0;
|
||||
@ -2258,11 +2258,11 @@ select.form-control:focus::-ms-value {
|
||||
border-width: 1px 0;
|
||||
}
|
||||
|
||||
.form-control-static.form-control-sm, .input-group-sm > .form-control-static.form-control,
|
||||
.input-group-sm > .form-control-static.input-group-addon,
|
||||
.input-group-sm > .input-group-btn > .form-control-static.btn, .form-control-static.form-control-lg, .input-group-lg > .form-control-static.form-control,
|
||||
.input-group-lg > .form-control-static.input-group-addon,
|
||||
.input-group-lg > .input-group-btn > .form-control-static.btn {
|
||||
.form-control-plaintext.form-control-sm, .input-group-sm > .form-control-plaintext.form-control,
|
||||
.input-group-sm > .form-control-plaintext.input-group-addon,
|
||||
.input-group-sm > .input-group-btn > .form-control-plaintext.btn, .form-control-plaintext.form-control-lg, .input-group-lg > .form-control-plaintext.form-control,
|
||||
.input-group-lg > .form-control-plaintext.input-group-addon,
|
||||
.input-group-lg > .input-group-btn > .form-control-plaintext.btn {
|
||||
padding-right: 0;
|
||||
padding-left: 0;
|
||||
}
|
||||
@ -2294,7 +2294,7 @@ select.form-control-sm:not([size]):not([multiple]), .input-group-sm > select.for
|
||||
select.form-control-lg:not([size]):not([multiple]), .input-group-lg > select.form-control:not([size]):not([multiple]),
|
||||
.input-group-lg > select.input-group-addon:not([size]):not([multiple]),
|
||||
.input-group-lg > .input-group-btn > select.btn:not([size]):not([multiple]) {
|
||||
height: calc(2.875rem + 2px);
|
||||
height: calc(2.3125rem + 2px);
|
||||
}
|
||||
|
||||
.form-group {
|
||||
@ -2306,6 +2306,24 @@ select.form-control-lg:not([size]):not([multiple]), .input-group-lg > select.for
|
||||
margin-top: 0.25rem;
|
||||
}
|
||||
|
||||
.form-row {
|
||||
display: -webkit-box;
|
||||
display: -webkit-flex;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
-webkit-flex-wrap: wrap;
|
||||
-ms-flex-wrap: wrap;
|
||||
flex-wrap: wrap;
|
||||
margin-right: -5px;
|
||||
margin-left: -5px;
|
||||
}
|
||||
|
||||
.form-row > .col,
|
||||
.form-row > [class*="col-"] {
|
||||
padding-right: 5px;
|
||||
padding-left: 5px;
|
||||
}
|
||||
|
||||
.form-check {
|
||||
position: relative;
|
||||
display: block;
|
||||
@ -2343,90 +2361,124 @@ select.form-control-lg:not([size]):not([multiple]), .input-group-lg > select.for
|
||||
margin-left: 0.75rem;
|
||||
}
|
||||
|
||||
.form-control-feedback {
|
||||
margin-top: 0.25rem;
|
||||
}
|
||||
|
||||
.form-control-success,
|
||||
.form-control-warning,
|
||||
.form-control-danger {
|
||||
padding-right: 3rem;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center right 0.5625rem;
|
||||
-webkit-background-size: 1.125rem 1.125rem;
|
||||
background-size: 1.125rem 1.125rem;
|
||||
}
|
||||
|
||||
.has-success .form-control-feedback,
|
||||
.has-success .form-control-label,
|
||||
.has-success .col-form-label,
|
||||
.has-success .form-check-label,
|
||||
.has-success .custom-control {
|
||||
color: #5cb85c;
|
||||
}
|
||||
|
||||
.has-success .form-control,
|
||||
.has-success .custom-select,
|
||||
.has-success .custom-file-control {
|
||||
border-color: #5cb85c;
|
||||
}
|
||||
|
||||
.has-success .input-group-addon {
|
||||
color: #5cb85c;
|
||||
background-color: #eaf6ea;
|
||||
border-color: #5cb85c;
|
||||
}
|
||||
|
||||
.has-success .form-control-success {
|
||||
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%235cb85c' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E");
|
||||
}
|
||||
|
||||
.has-warning .form-control-feedback,
|
||||
.has-warning .form-control-label,
|
||||
.has-warning .col-form-label,
|
||||
.has-warning .form-check-label,
|
||||
.has-warning .custom-control {
|
||||
color: #f0ad4e;
|
||||
}
|
||||
|
||||
.has-warning .form-control,
|
||||
.has-warning .custom-select,
|
||||
.has-warning .custom-file-control {
|
||||
border-color: #f0ad4e;
|
||||
}
|
||||
|
||||
.has-warning .input-group-addon {
|
||||
color: #f0ad4e;
|
||||
background-color: white;
|
||||
border-color: #f0ad4e;
|
||||
}
|
||||
|
||||
.has-warning .form-control-warning {
|
||||
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23f0ad4e' d='M4.4 5.324h-.8v-2.46h.8zm0 1.42h-.8V5.89h.8zM3.76.63L.04 7.075c-.115.2.016.425.26.426h7.397c.242 0 .372-.226.258-.426C6.726 4.924 5.47 2.79 4.253.63c-.113-.174-.39-.174-.494 0z'/%3E%3C/svg%3E");
|
||||
}
|
||||
|
||||
.has-danger .form-control-feedback,
|
||||
.has-danger .form-control-label,
|
||||
.has-danger .col-form-label,
|
||||
.has-danger .form-check-label,
|
||||
.has-danger .custom-control {
|
||||
.invalid-feedback {
|
||||
display: none;
|
||||
margin-top: .25rem;
|
||||
font-size: .875rem;
|
||||
color: #d9534f;
|
||||
}
|
||||
|
||||
.has-danger .form-control,
|
||||
.has-danger .custom-select,
|
||||
.has-danger .custom-file-control {
|
||||
.invalid-tooltip {
|
||||
position: absolute;
|
||||
top: 100%;
|
||||
z-index: 5;
|
||||
display: none;
|
||||
width: 250px;
|
||||
padding: .5rem;
|
||||
margin-top: .1rem;
|
||||
font-size: .875rem;
|
||||
line-height: 1;
|
||||
color: #fff;
|
||||
background-color: rgba(217, 83, 79, 0.8);
|
||||
border-radius: .2rem;
|
||||
}
|
||||
|
||||
.was-validated .form-control:valid, .form-control.is-valid, .was-validated
|
||||
.custom-select:valid,
|
||||
.custom-select.is-valid {
|
||||
border-color: #5cb85c;
|
||||
}
|
||||
|
||||
.was-validated .form-control:valid:focus, .form-control.is-valid:focus, .was-validated
|
||||
.custom-select:valid:focus,
|
||||
.custom-select.is-valid:focus {
|
||||
-webkit-box-shadow: 0 0 0 0.2rem rgba(92, 184, 92, 0.25);
|
||||
box-shadow: 0 0 0 0.2rem rgba(92, 184, 92, 0.25);
|
||||
}
|
||||
|
||||
.was-validated .form-control:valid ~ .invalid-feedback,
|
||||
.was-validated .form-control:valid ~ .invalid-tooltip, .form-control.is-valid ~ .invalid-feedback,
|
||||
.form-control.is-valid ~ .invalid-tooltip, .was-validated
|
||||
.custom-select:valid ~ .invalid-feedback,
|
||||
.was-validated
|
||||
.custom-select:valid ~ .invalid-tooltip,
|
||||
.custom-select.is-valid ~ .invalid-feedback,
|
||||
.custom-select.is-valid ~ .invalid-tooltip {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.was-validated .form-check-input:valid + .form-check-label, .form-check-input.is-valid + .form-check-label {
|
||||
color: #5cb85c;
|
||||
}
|
||||
|
||||
.was-validated .custom-control-input:valid ~ .custom-control-indicator, .custom-control-input.is-valid ~ .custom-control-indicator {
|
||||
background-color: rgba(92, 184, 92, 0.25);
|
||||
}
|
||||
|
||||
.was-validated .custom-control-input:valid ~ .custom-control-description, .custom-control-input.is-valid ~ .custom-control-description {
|
||||
color: #5cb85c;
|
||||
}
|
||||
|
||||
.was-validated .custom-file-input:valid ~ .custom-file-control, .custom-file-input.is-valid ~ .custom-file-control {
|
||||
border-color: #5cb85c;
|
||||
}
|
||||
|
||||
.was-validated .custom-file-input:valid ~ .custom-file-control::before, .custom-file-input.is-valid ~ .custom-file-control::before {
|
||||
border-color: inherit;
|
||||
}
|
||||
|
||||
.was-validated .custom-file-input:valid:focus, .custom-file-input.is-valid:focus {
|
||||
-webkit-box-shadow: 0 0 0 0.2rem rgba(92, 184, 92, 0.25);
|
||||
box-shadow: 0 0 0 0.2rem rgba(92, 184, 92, 0.25);
|
||||
}
|
||||
|
||||
.was-validated .form-control:invalid, .form-control.is-invalid, .was-validated
|
||||
.custom-select:invalid,
|
||||
.custom-select.is-invalid {
|
||||
border-color: #d9534f;
|
||||
}
|
||||
|
||||
.has-danger .input-group-addon {
|
||||
.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus, .was-validated
|
||||
.custom-select:invalid:focus,
|
||||
.custom-select.is-invalid:focus {
|
||||
-webkit-box-shadow: 0 0 0 0.2rem rgba(217, 83, 79, 0.25);
|
||||
box-shadow: 0 0 0 0.2rem rgba(217, 83, 79, 0.25);
|
||||
}
|
||||
|
||||
.was-validated .form-control:invalid ~ .invalid-feedback,
|
||||
.was-validated .form-control:invalid ~ .invalid-tooltip, .form-control.is-invalid ~ .invalid-feedback,
|
||||
.form-control.is-invalid ~ .invalid-tooltip, .was-validated
|
||||
.custom-select:invalid ~ .invalid-feedback,
|
||||
.was-validated
|
||||
.custom-select:invalid ~ .invalid-tooltip,
|
||||
.custom-select.is-invalid ~ .invalid-feedback,
|
||||
.custom-select.is-invalid ~ .invalid-tooltip {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.was-validated .form-check-input:invalid + .form-check-label, .form-check-input.is-invalid + .form-check-label {
|
||||
color: #d9534f;
|
||||
background-color: #fdf7f7;
|
||||
}
|
||||
|
||||
.was-validated .custom-control-input:invalid ~ .custom-control-indicator, .custom-control-input.is-invalid ~ .custom-control-indicator {
|
||||
background-color: rgba(217, 83, 79, 0.25);
|
||||
}
|
||||
|
||||
.was-validated .custom-control-input:invalid ~ .custom-control-description, .custom-control-input.is-invalid ~ .custom-control-description {
|
||||
color: #d9534f;
|
||||
}
|
||||
|
||||
.was-validated .custom-file-input:invalid ~ .custom-file-control, .custom-file-input.is-invalid ~ .custom-file-control {
|
||||
border-color: #d9534f;
|
||||
}
|
||||
|
||||
.has-danger .form-control-danger {
|
||||
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23d9534f' viewBox='-2 -2 7 7'%3E%3Cpath stroke='%23d9534f' d='M0 0l3 3m0-3L0 3'/%3E%3Ccircle r='.5'/%3E%3Ccircle cx='3' r='.5'/%3E%3Ccircle cy='3' r='.5'/%3E%3Ccircle cx='3' cy='3' r='.5'/%3E%3C/svg%3E");
|
||||
.was-validated .custom-file-input:invalid ~ .custom-file-control::before, .custom-file-input.is-invalid ~ .custom-file-control::before {
|
||||
border-color: inherit;
|
||||
}
|
||||
|
||||
.was-validated .custom-file-input:invalid:focus, .custom-file-input.is-invalid:focus {
|
||||
-webkit-box-shadow: 0 0 0 0.2rem rgba(217, 83, 79, 0.25);
|
||||
box-shadow: 0 0 0 0.2rem rgba(217, 83, 79, 0.25);
|
||||
}
|
||||
|
||||
.form-inline {
|
||||
@ -2563,7 +2615,7 @@ select.form-control-lg:not([size]):not([multiple]), .input-group-lg > select.for
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
border: 1px solid transparent;
|
||||
padding: 0.5rem 1rem;
|
||||
padding: 0.5rem 0.75rem;
|
||||
font-size: 1rem;
|
||||
line-height: 1.25;
|
||||
border-radius: 0.25rem;
|
||||
@ -2578,8 +2630,8 @@ select.form-control-lg:not([size]):not([multiple]), .input-group-lg > select.for
|
||||
|
||||
.btn:focus, .btn.focus {
|
||||
outline: 0;
|
||||
-webkit-box-shadow: 0 0 0 2px rgba(2, 117, 216, 0.25);
|
||||
box-shadow: 0 0 0 2px rgba(2, 117, 216, 0.25);
|
||||
-webkit-box-shadow: 0 0 0 3px rgba(2, 117, 216, 0.25);
|
||||
box-shadow: 0 0 0 3px rgba(2, 117, 216, 0.25);
|
||||
}
|
||||
|
||||
.btn.disabled, .btn:disabled {
|
||||
@ -2608,8 +2660,8 @@ fieldset[disabled] a.btn {
|
||||
}
|
||||
|
||||
.btn-primary:focus, .btn-primary.focus {
|
||||
-webkit-box-shadow: 0 0 0 2px rgba(2, 117, 216, 0.5);
|
||||
box-shadow: 0 0 0 2px rgba(2, 117, 216, 0.5);
|
||||
-webkit-box-shadow: 0 0 0 3px rgba(2, 117, 216, 0.5);
|
||||
box-shadow: 0 0 0 3px rgba(2, 117, 216, 0.5);
|
||||
}
|
||||
|
||||
.btn-primary.disabled, .btn-primary:disabled {
|
||||
@ -2638,8 +2690,8 @@ fieldset[disabled] a.btn {
|
||||
}
|
||||
|
||||
.btn-secondary:focus, .btn-secondary.focus {
|
||||
-webkit-box-shadow: 0 0 0 2px rgba(204, 204, 204, 0.5);
|
||||
box-shadow: 0 0 0 2px rgba(204, 204, 204, 0.5);
|
||||
-webkit-box-shadow: 0 0 0 3px rgba(204, 204, 204, 0.5);
|
||||
box-shadow: 0 0 0 3px rgba(204, 204, 204, 0.5);
|
||||
}
|
||||
|
||||
.btn-secondary.disabled, .btn-secondary:disabled {
|
||||
@ -2668,8 +2720,8 @@ fieldset[disabled] a.btn {
|
||||
}
|
||||
|
||||
.btn-info:focus, .btn-info.focus {
|
||||
-webkit-box-shadow: 0 0 0 2px rgba(91, 192, 222, 0.5);
|
||||
box-shadow: 0 0 0 2px rgba(91, 192, 222, 0.5);
|
||||
-webkit-box-shadow: 0 0 0 3px rgba(91, 192, 222, 0.5);
|
||||
box-shadow: 0 0 0 3px rgba(91, 192, 222, 0.5);
|
||||
}
|
||||
|
||||
.btn-info.disabled, .btn-info:disabled {
|
||||
@ -2698,8 +2750,8 @@ fieldset[disabled] a.btn {
|
||||
}
|
||||
|
||||
.btn-success:focus, .btn-success.focus {
|
||||
-webkit-box-shadow: 0 0 0 2px rgba(92, 184, 92, 0.5);
|
||||
box-shadow: 0 0 0 2px rgba(92, 184, 92, 0.5);
|
||||
-webkit-box-shadow: 0 0 0 3px rgba(92, 184, 92, 0.5);
|
||||
box-shadow: 0 0 0 3px rgba(92, 184, 92, 0.5);
|
||||
}
|
||||
|
||||
.btn-success.disabled, .btn-success:disabled {
|
||||
@ -2728,8 +2780,8 @@ fieldset[disabled] a.btn {
|
||||
}
|
||||
|
||||
.btn-warning:focus, .btn-warning.focus {
|
||||
-webkit-box-shadow: 0 0 0 2px rgba(240, 173, 78, 0.5);
|
||||
box-shadow: 0 0 0 2px rgba(240, 173, 78, 0.5);
|
||||
-webkit-box-shadow: 0 0 0 3px rgba(240, 173, 78, 0.5);
|
||||
box-shadow: 0 0 0 3px rgba(240, 173, 78, 0.5);
|
||||
}
|
||||
|
||||
.btn-warning.disabled, .btn-warning:disabled {
|
||||
@ -2758,8 +2810,8 @@ fieldset[disabled] a.btn {
|
||||
}
|
||||
|
||||
.btn-danger:focus, .btn-danger.focus {
|
||||
-webkit-box-shadow: 0 0 0 2px rgba(217, 83, 79, 0.5);
|
||||
box-shadow: 0 0 0 2px rgba(217, 83, 79, 0.5);
|
||||
-webkit-box-shadow: 0 0 0 3px rgba(217, 83, 79, 0.5);
|
||||
box-shadow: 0 0 0 3px rgba(217, 83, 79, 0.5);
|
||||
}
|
||||
|
||||
.btn-danger.disabled, .btn-danger:disabled {
|
||||
@ -2789,8 +2841,8 @@ fieldset[disabled] a.btn {
|
||||
}
|
||||
|
||||
.btn-outline-primary:focus, .btn-outline-primary.focus {
|
||||
-webkit-box-shadow: 0 0 0 2px rgba(2, 117, 216, 0.5);
|
||||
box-shadow: 0 0 0 2px rgba(2, 117, 216, 0.5);
|
||||
-webkit-box-shadow: 0 0 0 3px rgba(2, 117, 216, 0.5);
|
||||
box-shadow: 0 0 0 3px rgba(2, 117, 216, 0.5);
|
||||
}
|
||||
|
||||
.btn-outline-primary.disabled, .btn-outline-primary:disabled {
|
||||
@ -2819,8 +2871,8 @@ fieldset[disabled] a.btn {
|
||||
}
|
||||
|
||||
.btn-outline-secondary:focus, .btn-outline-secondary.focus {
|
||||
-webkit-box-shadow: 0 0 0 2px rgba(204, 204, 204, 0.5);
|
||||
box-shadow: 0 0 0 2px rgba(204, 204, 204, 0.5);
|
||||
-webkit-box-shadow: 0 0 0 3px rgba(204, 204, 204, 0.5);
|
||||
box-shadow: 0 0 0 3px rgba(204, 204, 204, 0.5);
|
||||
}
|
||||
|
||||
.btn-outline-secondary.disabled, .btn-outline-secondary:disabled {
|
||||
@ -2849,8 +2901,8 @@ fieldset[disabled] a.btn {
|
||||
}
|
||||
|
||||
.btn-outline-info:focus, .btn-outline-info.focus {
|
||||
-webkit-box-shadow: 0 0 0 2px rgba(91, 192, 222, 0.5);
|
||||
box-shadow: 0 0 0 2px rgba(91, 192, 222, 0.5);
|
||||
-webkit-box-shadow: 0 0 0 3px rgba(91, 192, 222, 0.5);
|
||||
box-shadow: 0 0 0 3px rgba(91, 192, 222, 0.5);
|
||||
}
|
||||
|
||||
.btn-outline-info.disabled, .btn-outline-info:disabled {
|
||||
@ -2879,8 +2931,8 @@ fieldset[disabled] a.btn {
|
||||
}
|
||||
|
||||
.btn-outline-success:focus, .btn-outline-success.focus {
|
||||
-webkit-box-shadow: 0 0 0 2px rgba(92, 184, 92, 0.5);
|
||||
box-shadow: 0 0 0 2px rgba(92, 184, 92, 0.5);
|
||||
-webkit-box-shadow: 0 0 0 3px rgba(92, 184, 92, 0.5);
|
||||
box-shadow: 0 0 0 3px rgba(92, 184, 92, 0.5);
|
||||
}
|
||||
|
||||
.btn-outline-success.disabled, .btn-outline-success:disabled {
|
||||
@ -2909,8 +2961,8 @@ fieldset[disabled] a.btn {
|
||||
}
|
||||
|
||||
.btn-outline-warning:focus, .btn-outline-warning.focus {
|
||||
-webkit-box-shadow: 0 0 0 2px rgba(240, 173, 78, 0.5);
|
||||
box-shadow: 0 0 0 2px rgba(240, 173, 78, 0.5);
|
||||
-webkit-box-shadow: 0 0 0 3px rgba(240, 173, 78, 0.5);
|
||||
box-shadow: 0 0 0 3px rgba(240, 173, 78, 0.5);
|
||||
}
|
||||
|
||||
.btn-outline-warning.disabled, .btn-outline-warning:disabled {
|
||||
@ -2939,8 +2991,8 @@ fieldset[disabled] a.btn {
|
||||
}
|
||||
|
||||
.btn-outline-danger:focus, .btn-outline-danger.focus {
|
||||
-webkit-box-shadow: 0 0 0 2px rgba(217, 83, 79, 0.5);
|
||||
box-shadow: 0 0 0 2px rgba(217, 83, 79, 0.5);
|
||||
-webkit-box-shadow: 0 0 0 3px rgba(217, 83, 79, 0.5);
|
||||
box-shadow: 0 0 0 3px rgba(217, 83, 79, 0.5);
|
||||
}
|
||||
|
||||
.btn-outline-danger.disabled, .btn-outline-danger:disabled {
|
||||
@ -3253,8 +3305,8 @@ tbody.collapse.show {
|
||||
}
|
||||
|
||||
.btn + .dropdown-toggle-split {
|
||||
padding-right: 0.75rem;
|
||||
padding-left: 0.75rem;
|
||||
padding-right: 0.5625rem;
|
||||
padding-left: 0.5625rem;
|
||||
}
|
||||
|
||||
.btn + .dropdown-toggle-split::after {
|
||||
@ -3392,7 +3444,7 @@ tbody.collapse.show {
|
||||
}
|
||||
|
||||
.input-group-addon {
|
||||
padding: 0.5rem 1rem;
|
||||
padding: 0.5rem 0.75rem;
|
||||
margin-bottom: 0;
|
||||
font-size: 1rem;
|
||||
font-weight: normal;
|
||||
@ -3629,6 +3681,7 @@ tbody.collapse.show {
|
||||
}
|
||||
|
||||
.custom-select-sm {
|
||||
height: calc(1.8125rem + 2px);
|
||||
padding-top: 0.375rem;
|
||||
padding-bottom: 0.375rem;
|
||||
font-size: 75%;
|
||||
@ -3762,7 +3815,7 @@ tbody.collapse.show {
|
||||
}
|
||||
|
||||
.nav-pills .nav-link.active,
|
||||
.show .nav-pills .nav-link {
|
||||
.show > .nav-pills .nav-link {
|
||||
color: #fff;
|
||||
background-color: #0275d8;
|
||||
}
|
||||
@ -3877,11 +3930,8 @@ tbody.collapse.show {
|
||||
}
|
||||
|
||||
.navbar-nav .dropdown-menu {
|
||||
position: static !important;
|
||||
position: static;
|
||||
float: none;
|
||||
-webkit-transform: unset !important;
|
||||
-o-transform: unset !important;
|
||||
transform: unset !important;
|
||||
}
|
||||
|
||||
.navbar-text {
|
||||
@ -3951,8 +4001,11 @@ tbody.collapse.show {
|
||||
flex-direction: row;
|
||||
}
|
||||
.navbar-expand-sm .navbar-nav .dropdown-menu {
|
||||
position: absolute !important;
|
||||
top: 100% !important;
|
||||
position: absolute;
|
||||
}
|
||||
.navbar-expand-sm .navbar-nav .dropdown-menu-right {
|
||||
right: 0;
|
||||
left: auto;
|
||||
}
|
||||
.navbar-expand-sm .navbar-nav .nav-link {
|
||||
padding-right: .5rem;
|
||||
@ -4006,8 +4059,11 @@ tbody.collapse.show {
|
||||
flex-direction: row;
|
||||
}
|
||||
.navbar-expand-md .navbar-nav .dropdown-menu {
|
||||
position: absolute !important;
|
||||
top: 100% !important;
|
||||
position: absolute;
|
||||
}
|
||||
.navbar-expand-md .navbar-nav .dropdown-menu-right {
|
||||
right: 0;
|
||||
left: auto;
|
||||
}
|
||||
.navbar-expand-md .navbar-nav .nav-link {
|
||||
padding-right: .5rem;
|
||||
@ -4061,8 +4117,11 @@ tbody.collapse.show {
|
||||
flex-direction: row;
|
||||
}
|
||||
.navbar-expand-lg .navbar-nav .dropdown-menu {
|
||||
position: absolute !important;
|
||||
top: 100% !important;
|
||||
position: absolute;
|
||||
}
|
||||
.navbar-expand-lg .navbar-nav .dropdown-menu-right {
|
||||
right: 0;
|
||||
left: auto;
|
||||
}
|
||||
.navbar-expand-lg .navbar-nav .nav-link {
|
||||
padding-right: .5rem;
|
||||
@ -4116,8 +4175,11 @@ tbody.collapse.show {
|
||||
flex-direction: row;
|
||||
}
|
||||
.navbar-expand-xl .navbar-nav .dropdown-menu {
|
||||
position: absolute !important;
|
||||
top: 100% !important;
|
||||
position: absolute;
|
||||
}
|
||||
.navbar-expand-xl .navbar-nav .dropdown-menu-right {
|
||||
right: 0;
|
||||
left: auto;
|
||||
}
|
||||
.navbar-expand-xl .navbar-nav .nav-link {
|
||||
padding-right: .5rem;
|
||||
@ -4170,8 +4232,12 @@ tbody.collapse.show {
|
||||
}
|
||||
|
||||
.navbar-expand .navbar-nav .dropdown-menu {
|
||||
position: absolute !important;
|
||||
top: 100% !important;
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
.navbar-expand .navbar-nav .dropdown-menu-right {
|
||||
right: 0;
|
||||
left: auto;
|
||||
}
|
||||
|
||||
.navbar-expand .navbar-nav .nav-link {
|
||||
@ -4288,12 +4354,14 @@ tbody.collapse.show {
|
||||
-webkit-flex-direction: column;
|
||||
-ms-flex-direction: column;
|
||||
flex-direction: column;
|
||||
min-width: 0;
|
||||
word-wrap: break-word;
|
||||
background-color: #fff;
|
||||
border: 1px solid rgba(0, 0, 0, 0.125);
|
||||
border-radius: 0.25rem;
|
||||
}
|
||||
|
||||
.card-block {
|
||||
.card-body {
|
||||
-webkit-box-flex: 1;
|
||||
-webkit-flex: 1 1 auto;
|
||||
-ms-flex: 1 1 auto;
|
||||
@ -4303,7 +4371,6 @@ tbody.collapse.show {
|
||||
|
||||
.card-title {
|
||||
margin-bottom: 0.75rem;
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
.card-subtitle {
|
||||
@ -4562,8 +4629,8 @@ tbody.collapse.show {
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
-webkit-box-flex: 1;
|
||||
-webkit-flex: 1 0 0;
|
||||
-ms-flex: 1 0 0px;
|
||||
-webkit-flex: 1 0 0%;
|
||||
-ms-flex: 1 0 0%;
|
||||
flex: 1 0 0%;
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-box-direction: normal;
|
||||
@ -4589,8 +4656,8 @@ tbody.collapse.show {
|
||||
}
|
||||
.card-group .card {
|
||||
-webkit-box-flex: 1;
|
||||
-webkit-flex: 1 0 0;
|
||||
-ms-flex: 1 0 0px;
|
||||
-webkit-flex: 1 0 0%;
|
||||
-ms-flex: 1 0 0%;
|
||||
flex: 1 0 0%;
|
||||
}
|
||||
.card-group .card + .card {
|
||||
@ -4739,6 +4806,7 @@ tbody.collapse.show {
|
||||
.pagination-lg .page-link {
|
||||
padding: 0.75rem 1.5rem;
|
||||
font-size: 1.25rem;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.pagination-lg .page-item:first-child .page-link {
|
||||
@ -4754,6 +4822,7 @@ tbody.collapse.show {
|
||||
.pagination-sm .page-link {
|
||||
padding: 0.25rem 0.5rem;
|
||||
font-size: 0.875rem;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.pagination-sm .page-item:first-child .page-link {
|
||||
@ -5024,7 +5093,7 @@ a.badge:focus, a.badge:hover {
|
||||
-webkit-box-flex: 1;
|
||||
-webkit-flex: 1;
|
||||
-ms-flex: 1;
|
||||
flex: 1 1 0%;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.list-group {
|
||||
@ -5671,7 +5740,7 @@ button.close {
|
||||
border-bottom-color: #fff;
|
||||
}
|
||||
|
||||
.popover.bs-popover-bottom .popover-title::before, .popover.bs-popover-auto[x-placement^="bottom"] .popover-title::before {
|
||||
.popover.bs-popover-bottom .popover-header::before, .popover.bs-popover-auto[x-placement^="bottom"] .popover-header::before {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 50%;
|
||||
@ -5706,7 +5775,7 @@ button.close {
|
||||
border-left-color: #fff;
|
||||
}
|
||||
|
||||
.popover-title {
|
||||
.popover-header {
|
||||
padding: 8px 14px;
|
||||
margin-bottom: 0;
|
||||
font-size: 1rem;
|
||||
@ -5717,11 +5786,11 @@ button.close {
|
||||
border-top-right-radius: calc(0.3rem - 1px);
|
||||
}
|
||||
|
||||
.popover-title:empty {
|
||||
.popover-header:empty {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.popover-content {
|
||||
.popover-body {
|
||||
padding: 9px 14px;
|
||||
color: #292b2c;
|
||||
}
|
||||
@ -6013,27 +6082,27 @@ a.bg-inverse:focus, a.bg-inverse:hover {
|
||||
}
|
||||
|
||||
.rounded {
|
||||
border-radius: 0.25rem;
|
||||
border-radius: 0.25rem !important;
|
||||
}
|
||||
|
||||
.rounded-top {
|
||||
border-top-left-radius: 0.25rem;
|
||||
border-top-right-radius: 0.25rem;
|
||||
border-top-left-radius: 0.25rem !important;
|
||||
border-top-right-radius: 0.25rem !important;
|
||||
}
|
||||
|
||||
.rounded-right {
|
||||
border-top-right-radius: 0.25rem;
|
||||
border-bottom-right-radius: 0.25rem;
|
||||
border-top-right-radius: 0.25rem !important;
|
||||
border-bottom-right-radius: 0.25rem !important;
|
||||
}
|
||||
|
||||
.rounded-bottom {
|
||||
border-bottom-right-radius: 0.25rem;
|
||||
border-bottom-left-radius: 0.25rem;
|
||||
border-bottom-right-radius: 0.25rem !important;
|
||||
border-bottom-left-radius: 0.25rem !important;
|
||||
}
|
||||
|
||||
.rounded-left {
|
||||
border-top-left-radius: 0.25rem;
|
||||
border-bottom-left-radius: 0.25rem;
|
||||
border-top-left-radius: 0.25rem !important;
|
||||
border-bottom-left-radius: 0.25rem !important;
|
||||
}
|
||||
|
||||
.rounded-circle {
|
||||
@ -7276,11 +7345,13 @@ a.bg-inverse:focus, a.bg-inverse:hover {
|
||||
z-index: 1030;
|
||||
}
|
||||
|
||||
.sticky-top {
|
||||
position: -webkit-sticky;
|
||||
position: sticky;
|
||||
top: 0;
|
||||
z-index: 1020;
|
||||
@supports ((position: -webkit-sticky) or (position: sticky)) {
|
||||
.sticky-top {
|
||||
position: -webkit-sticky;
|
||||
position: sticky;
|
||||
top: 0;
|
||||
z-index: 1020;
|
||||
}
|
||||
}
|
||||
|
||||
.sr-only {
|
||||
|
File diff suppressed because one or more lines are too long
2
library/bootstrap/css/bootstrap.min.css
vendored
2
library/bootstrap/css/bootstrap.min.css
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
238
library/bootstrap/js/bootstrap.js
vendored
238
library/bootstrap/js/bootstrap.js
vendored
@ -1107,6 +1107,14 @@ var Collapse = function ($) {
|
||||
this._element = element;
|
||||
this._config = this._getConfig(config);
|
||||
this._triggerArray = $.makeArray($('[data-toggle="collapse"][href="#' + element.id + '"],' + ('[data-toggle="collapse"][data-target="#' + element.id + '"]')));
|
||||
var tabToggles = $(Selector.DATA_TOGGLE);
|
||||
for (var i = 0; i < tabToggles.length; i++) {
|
||||
var elem = tabToggles[i];
|
||||
var selector = Util.getSelectorFromElement(elem);
|
||||
if (selector !== null && $(selector).filter(element).length > 0) {
|
||||
this._triggerArray.push(elem);
|
||||
}
|
||||
}
|
||||
|
||||
this._parent = this._config.parent ? this._getParent() : null;
|
||||
|
||||
@ -1225,7 +1233,16 @@ var Collapse = function ($) {
|
||||
$(this._element).addClass(ClassName.COLLAPSING).removeClass(ClassName.COLLAPSE).removeClass(ClassName.SHOW);
|
||||
|
||||
if (this._triggerArray.length) {
|
||||
$(this._triggerArray).addClass(ClassName.COLLAPSED).attr('aria-expanded', false);
|
||||
for (var i = 0; i < this._triggerArray.length; i++) {
|
||||
var trigger = this._triggerArray[i];
|
||||
var selector = Util.getSelectorFromElement(trigger);
|
||||
if (selector !== null) {
|
||||
var $elem = $(selector);
|
||||
if (!$elem.hasClass(ClassName.SHOW)) {
|
||||
$(trigger).addClass(ClassName.COLLAPSED).attr('aria-expanded', false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this.setTransitioning(true);
|
||||
@ -1353,11 +1370,14 @@ var Collapse = function ($) {
|
||||
event.preventDefault();
|
||||
}
|
||||
|
||||
var target = Collapse._getTargetFromElement(this);
|
||||
var data = $(target).data(DATA_KEY);
|
||||
var config = data ? 'toggle' : $(this).data();
|
||||
|
||||
Collapse._jQueryInterface.call($(target), config);
|
||||
var $trigger = $(this);
|
||||
var selector = Util.getSelectorFromElement(this);
|
||||
$(selector).each(function () {
|
||||
var $target = $(this);
|
||||
var data = $target.data(DATA_KEY);
|
||||
var config = data ? 'toggle' : $trigger.data();
|
||||
Collapse._jQueryInterface.call($target, config);
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
@ -1475,6 +1495,7 @@ var Dropdown = function ($) {
|
||||
this._popper = null;
|
||||
this._config = this._getConfig(config);
|
||||
this._menu = this._getMenuElement();
|
||||
this._inNavbar = this._detectNavbar();
|
||||
|
||||
this._addEventListeners();
|
||||
}
|
||||
@ -1515,17 +1536,7 @@ var Dropdown = function ($) {
|
||||
element = parent;
|
||||
}
|
||||
}
|
||||
this._popper = new Popper(element, this._menu, {
|
||||
placement: this._getPlacement(),
|
||||
modifiers: {
|
||||
offset: {
|
||||
offset: this._config.offset
|
||||
},
|
||||
flip: {
|
||||
enabled: this._config.flip
|
||||
}
|
||||
}
|
||||
});
|
||||
this._popper = new Popper(element, this._menu, this._getPopperConfig());
|
||||
|
||||
// if this is a touch-enabled device we add extra
|
||||
// empty mouseover listeners to the body's immediate children;
|
||||
@ -1554,6 +1565,7 @@ var Dropdown = function ($) {
|
||||
};
|
||||
|
||||
Dropdown.prototype.update = function update() {
|
||||
this._inNavbar = this._detectNavbar();
|
||||
if (this._popper !== null) {
|
||||
this._popper.scheduleUpdate();
|
||||
}
|
||||
@ -1602,14 +1614,44 @@ var Dropdown = function ($) {
|
||||
if ($(this._menu).hasClass(ClassName.MENURIGHT)) {
|
||||
placement = AttachmentMap.TOPEND;
|
||||
}
|
||||
} else {
|
||||
if ($(this._menu).hasClass(ClassName.MENURIGHT)) {
|
||||
placement = AttachmentMap.BOTTOMEND;
|
||||
}
|
||||
} else if ($(this._menu).hasClass(ClassName.MENURIGHT)) {
|
||||
placement = AttachmentMap.BOTTOMEND;
|
||||
}
|
||||
return placement;
|
||||
};
|
||||
|
||||
Dropdown.prototype._detectNavbar = function _detectNavbar() {
|
||||
return $(this._element).closest('.navbar').length > 0;
|
||||
};
|
||||
|
||||
Dropdown.prototype._getPopperConfig = function _getPopperConfig() {
|
||||
var _this10 = this;
|
||||
|
||||
var popperConfig = {
|
||||
placement: this._getPlacement(),
|
||||
modifiers: {
|
||||
offset: {
|
||||
offset: this._config.offset
|
||||
},
|
||||
flip: {
|
||||
enabled: this._config.flip
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
if (this._inNavbar) {
|
||||
popperConfig.modifiers.AfterApplyStyle = {
|
||||
enabled: true,
|
||||
order: 901, // ApplyStyle order + 1
|
||||
fn: function fn() {
|
||||
// reset Popper styles
|
||||
$(_this10._menu).attr('style', '');
|
||||
}
|
||||
};
|
||||
}
|
||||
return popperConfig;
|
||||
};
|
||||
|
||||
// static
|
||||
|
||||
Dropdown._jQueryInterface = function _jQueryInterface(config) {
|
||||
@ -1887,7 +1929,7 @@ var Modal = function ($) {
|
||||
};
|
||||
|
||||
Modal.prototype.show = function show(relatedTarget) {
|
||||
var _this10 = this;
|
||||
var _this11 = this;
|
||||
|
||||
if (this._isTransitioning) {
|
||||
return;
|
||||
@ -1918,24 +1960,24 @@ var Modal = function ($) {
|
||||
this._setResizeEvent();
|
||||
|
||||
$(this._element).on(Event.CLICK_DISMISS, Selector.DATA_DISMISS, function (event) {
|
||||
return _this10.hide(event);
|
||||
return _this11.hide(event);
|
||||
});
|
||||
|
||||
$(this._dialog).on(Event.MOUSEDOWN_DISMISS, function () {
|
||||
$(_this10._element).one(Event.MOUSEUP_DISMISS, function (event) {
|
||||
if ($(event.target).is(_this10._element)) {
|
||||
_this10._ignoreBackdropClick = true;
|
||||
$(_this11._element).one(Event.MOUSEUP_DISMISS, function (event) {
|
||||
if ($(event.target).is(_this11._element)) {
|
||||
_this11._ignoreBackdropClick = true;
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
this._showBackdrop(function () {
|
||||
return _this10._showElement(relatedTarget);
|
||||
return _this11._showElement(relatedTarget);
|
||||
});
|
||||
};
|
||||
|
||||
Modal.prototype.hide = function hide(event) {
|
||||
var _this11 = this;
|
||||
var _this12 = this;
|
||||
|
||||
if (event) {
|
||||
event.preventDefault();
|
||||
@ -1974,7 +2016,7 @@ var Modal = function ($) {
|
||||
if (transition) {
|
||||
|
||||
$(this._element).one(Util.TRANSITION_END, function (event) {
|
||||
return _this11._hideModal(event);
|
||||
return _this12._hideModal(event);
|
||||
}).emulateTransitionEnd(TRANSITION_DURATION);
|
||||
} else {
|
||||
this._hideModal();
|
||||
@ -2009,7 +2051,7 @@ var Modal = function ($) {
|
||||
};
|
||||
|
||||
Modal.prototype._showElement = function _showElement(relatedTarget) {
|
||||
var _this12 = this;
|
||||
var _this13 = this;
|
||||
|
||||
var transition = Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.FADE);
|
||||
|
||||
@ -2037,11 +2079,11 @@ var Modal = function ($) {
|
||||
});
|
||||
|
||||
var transitionComplete = function transitionComplete() {
|
||||
if (_this12._config.focus) {
|
||||
_this12._element.focus();
|
||||
if (_this13._config.focus) {
|
||||
_this13._element.focus();
|
||||
}
|
||||
_this12._isTransitioning = false;
|
||||
$(_this12._element).trigger(shownEvent);
|
||||
_this13._isTransitioning = false;
|
||||
$(_this13._element).trigger(shownEvent);
|
||||
};
|
||||
|
||||
if (transition) {
|
||||
@ -2052,24 +2094,24 @@ var Modal = function ($) {
|
||||
};
|
||||
|
||||
Modal.prototype._enforceFocus = function _enforceFocus() {
|
||||
var _this13 = this;
|
||||
var _this14 = this;
|
||||
|
||||
$(document).off(Event.FOCUSIN) // guard against infinite focus loop
|
||||
.on(Event.FOCUSIN, function (event) {
|
||||
if (document !== event.target && _this13._element !== event.target && !$(_this13._element).has(event.target).length) {
|
||||
_this13._element.focus();
|
||||
if (document !== event.target && _this14._element !== event.target && !$(_this14._element).has(event.target).length) {
|
||||
_this14._element.focus();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
Modal.prototype._setEscapeEvent = function _setEscapeEvent() {
|
||||
var _this14 = this;
|
||||
var _this15 = this;
|
||||
|
||||
if (this._isShown && this._config.keyboard) {
|
||||
$(this._element).on(Event.KEYDOWN_DISMISS, function (event) {
|
||||
if (event.which === ESCAPE_KEYCODE) {
|
||||
event.preventDefault();
|
||||
_this14.hide();
|
||||
_this15.hide();
|
||||
}
|
||||
});
|
||||
} else if (!this._isShown) {
|
||||
@ -2078,11 +2120,11 @@ var Modal = function ($) {
|
||||
};
|
||||
|
||||
Modal.prototype._setResizeEvent = function _setResizeEvent() {
|
||||
var _this15 = this;
|
||||
var _this16 = this;
|
||||
|
||||
if (this._isShown) {
|
||||
$(window).on(Event.RESIZE, function (event) {
|
||||
return _this15.handleUpdate(event);
|
||||
return _this16.handleUpdate(event);
|
||||
});
|
||||
} else {
|
||||
$(window).off(Event.RESIZE);
|
||||
@ -2090,16 +2132,16 @@ var Modal = function ($) {
|
||||
};
|
||||
|
||||
Modal.prototype._hideModal = function _hideModal() {
|
||||
var _this16 = this;
|
||||
var _this17 = this;
|
||||
|
||||
this._element.style.display = 'none';
|
||||
this._element.setAttribute('aria-hidden', true);
|
||||
this._isTransitioning = false;
|
||||
this._showBackdrop(function () {
|
||||
$(document.body).removeClass(ClassName.OPEN);
|
||||
_this16._resetAdjustments();
|
||||
_this16._resetScrollbar();
|
||||
$(_this16._element).trigger(Event.HIDDEN);
|
||||
_this17._resetAdjustments();
|
||||
_this17._resetScrollbar();
|
||||
$(_this17._element).trigger(Event.HIDDEN);
|
||||
});
|
||||
};
|
||||
|
||||
@ -2111,7 +2153,7 @@ var Modal = function ($) {
|
||||
};
|
||||
|
||||
Modal.prototype._showBackdrop = function _showBackdrop(callback) {
|
||||
var _this17 = this;
|
||||
var _this18 = this;
|
||||
|
||||
var animate = $(this._element).hasClass(ClassName.FADE) ? ClassName.FADE : '';
|
||||
|
||||
@ -2128,17 +2170,17 @@ var Modal = function ($) {
|
||||
$(this._backdrop).appendTo(document.body);
|
||||
|
||||
$(this._element).on(Event.CLICK_DISMISS, function (event) {
|
||||
if (_this17._ignoreBackdropClick) {
|
||||
_this17._ignoreBackdropClick = false;
|
||||
if (_this18._ignoreBackdropClick) {
|
||||
_this18._ignoreBackdropClick = false;
|
||||
return;
|
||||
}
|
||||
if (event.target !== event.currentTarget) {
|
||||
return;
|
||||
}
|
||||
if (_this17._config.backdrop === 'static') {
|
||||
_this17._element.focus();
|
||||
if (_this18._config.backdrop === 'static') {
|
||||
_this18._element.focus();
|
||||
} else {
|
||||
_this17.hide();
|
||||
_this18.hide();
|
||||
}
|
||||
});
|
||||
|
||||
@ -2162,7 +2204,7 @@ var Modal = function ($) {
|
||||
$(this._backdrop).removeClass(ClassName.SHOW);
|
||||
|
||||
var callbackRemove = function callbackRemove() {
|
||||
_this17._removeBackdrop();
|
||||
_this18._removeBackdrop();
|
||||
if (callback) {
|
||||
callback();
|
||||
}
|
||||
@ -2206,7 +2248,7 @@ var Modal = function ($) {
|
||||
};
|
||||
|
||||
Modal.prototype._setScrollbar = function _setScrollbar() {
|
||||
var _this18 = this;
|
||||
var _this19 = this;
|
||||
|
||||
if (this._isBodyOverflowing) {
|
||||
// Note: DOMNode.style.paddingRight returns the actual value or '' if not set
|
||||
@ -2216,14 +2258,14 @@ var Modal = function ($) {
|
||||
$(Selector.FIXED_CONTENT).each(function (index, element) {
|
||||
var actualPadding = $(element)[0].style.paddingRight;
|
||||
var calculatedPadding = $(element).css('padding-right');
|
||||
$(element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this18._scrollbarWidth + 'px');
|
||||
$(element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this19._scrollbarWidth + 'px');
|
||||
});
|
||||
|
||||
// Adjust navbar-toggler margin
|
||||
$(Selector.NAVBAR_TOGGLER).each(function (index, element) {
|
||||
var actualMargin = $(element)[0].style.marginRight;
|
||||
var calculatedMargin = $(element).css('margin-right');
|
||||
$(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) + _this18._scrollbarWidth + 'px');
|
||||
$(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) + _this19._scrollbarWidth + 'px');
|
||||
});
|
||||
|
||||
// Adjust body padding
|
||||
@ -2312,7 +2354,7 @@ var Modal = function ($) {
|
||||
*/
|
||||
|
||||
$(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {
|
||||
var _this19 = this;
|
||||
var _this20 = this;
|
||||
|
||||
var target = void 0;
|
||||
var selector = Util.getSelectorFromElement(this);
|
||||
@ -2334,8 +2376,8 @@ var Modal = function ($) {
|
||||
}
|
||||
|
||||
$target.one(Event.HIDDEN, function () {
|
||||
if ($(_this19).is(':visible')) {
|
||||
_this19.focus();
|
||||
if ($(_this20).is(':visible')) {
|
||||
_this20.focus();
|
||||
}
|
||||
});
|
||||
});
|
||||
@ -2429,7 +2471,7 @@ var ScrollSpy = function ($) {
|
||||
|
||||
var ScrollSpy = function () {
|
||||
function ScrollSpy(element, config) {
|
||||
var _this20 = this;
|
||||
var _this21 = this;
|
||||
|
||||
_classCallCheck(this, ScrollSpy);
|
||||
|
||||
@ -2443,7 +2485,7 @@ var ScrollSpy = function ($) {
|
||||
this._scrollHeight = 0;
|
||||
|
||||
$(this._scrollElement).on(Event.SCROLL, function (event) {
|
||||
return _this20._process(event);
|
||||
return _this21._process(event);
|
||||
});
|
||||
|
||||
this.refresh();
|
||||
@ -2455,7 +2497,7 @@ var ScrollSpy = function ($) {
|
||||
// public
|
||||
|
||||
ScrollSpy.prototype.refresh = function refresh() {
|
||||
var _this21 = this;
|
||||
var _this22 = this;
|
||||
|
||||
var autoMethod = this._scrollElement !== this._scrollElement.window ? OffsetMethod.POSITION : OffsetMethod.OFFSET;
|
||||
|
||||
@ -2491,8 +2533,8 @@ var ScrollSpy = function ($) {
|
||||
}).sort(function (a, b) {
|
||||
return a[0] - b[0];
|
||||
}).forEach(function (item) {
|
||||
_this21._offsets.push(item[0]);
|
||||
_this21._targets.push(item[1]);
|
||||
_this22._offsets.push(item[0]);
|
||||
_this22._targets.push(item[1]);
|
||||
});
|
||||
};
|
||||
|
||||
@ -2739,7 +2781,7 @@ var Tab = function ($) {
|
||||
// public
|
||||
|
||||
Tab.prototype.show = function show() {
|
||||
var _this22 = this;
|
||||
var _this23 = this;
|
||||
|
||||
if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(ClassName.ACTIVE) || $(this._element).hasClass(ClassName.DISABLED)) {
|
||||
return;
|
||||
@ -2781,7 +2823,7 @@ var Tab = function ($) {
|
||||
|
||||
var complete = function complete() {
|
||||
var hiddenEvent = $.Event(Event.HIDDEN, {
|
||||
relatedTarget: _this22._element
|
||||
relatedTarget: _this23._element
|
||||
});
|
||||
|
||||
var shownEvent = $.Event(Event.SHOWN, {
|
||||
@ -2789,7 +2831,7 @@ var Tab = function ($) {
|
||||
});
|
||||
|
||||
$(previous).trigger(hiddenEvent);
|
||||
$(_this22._element).trigger(shownEvent);
|
||||
$(_this23._element).trigger(shownEvent);
|
||||
};
|
||||
|
||||
if (target) {
|
||||
@ -2807,13 +2849,13 @@ var Tab = function ($) {
|
||||
// private
|
||||
|
||||
Tab.prototype._activate = function _activate(element, container, callback) {
|
||||
var _this23 = this;
|
||||
var _this24 = this;
|
||||
|
||||
var active = $(container).find(Selector.ACTIVE)[0];
|
||||
var isTransitioning = callback && Util.supportsTransitionEnd() && active && $(active).hasClass(ClassName.FADE);
|
||||
|
||||
var complete = function complete() {
|
||||
return _this23._transitionComplete(element, active, isTransitioning, callback);
|
||||
return _this24._transitionComplete(element, active, isTransitioning, callback);
|
||||
};
|
||||
|
||||
if (active && isTransitioning) {
|
||||
@ -3125,7 +3167,7 @@ var Tooltip = function ($) {
|
||||
};
|
||||
|
||||
Tooltip.prototype.show = function show() {
|
||||
var _this24 = this;
|
||||
var _this25 = this;
|
||||
|
||||
if ($(this.element).css('display') === 'none') {
|
||||
throw new Error('Please use show on visible elements');
|
||||
@ -3183,11 +3225,11 @@ var Tooltip = function ($) {
|
||||
},
|
||||
onCreate: function onCreate(data) {
|
||||
if (data.originalPlacement !== data.placement) {
|
||||
_this24._handlePopperPlacementChange(data);
|
||||
_this25._handlePopperPlacementChange(data);
|
||||
}
|
||||
},
|
||||
onUpdate: function onUpdate(data) {
|
||||
_this24._handlePopperPlacementChange(data);
|
||||
_this25._handlePopperPlacementChange(data);
|
||||
}
|
||||
});
|
||||
|
||||
@ -3202,16 +3244,16 @@ var Tooltip = function ($) {
|
||||
}
|
||||
|
||||
var complete = function complete() {
|
||||
if (_this24.config.animation) {
|
||||
_this24._fixTransition();
|
||||
if (_this25.config.animation) {
|
||||
_this25._fixTransition();
|
||||
}
|
||||
var prevHoverState = _this24._hoverState;
|
||||
_this24._hoverState = null;
|
||||
var prevHoverState = _this25._hoverState;
|
||||
_this25._hoverState = null;
|
||||
|
||||
$(_this24.element).trigger(_this24.constructor.Event.SHOWN);
|
||||
$(_this25.element).trigger(_this25.constructor.Event.SHOWN);
|
||||
|
||||
if (prevHoverState === HoverState.OUT) {
|
||||
_this24._leave(null, _this24);
|
||||
_this25._leave(null, _this25);
|
||||
}
|
||||
};
|
||||
|
||||
@ -3224,20 +3266,20 @@ var Tooltip = function ($) {
|
||||
};
|
||||
|
||||
Tooltip.prototype.hide = function hide(callback) {
|
||||
var _this25 = this;
|
||||
var _this26 = this;
|
||||
|
||||
var tip = this.getTipElement();
|
||||
var hideEvent = $.Event(this.constructor.Event.HIDE);
|
||||
var complete = function complete() {
|
||||
if (_this25._hoverState !== HoverState.SHOW && tip.parentNode) {
|
||||
if (_this26._hoverState !== HoverState.SHOW && tip.parentNode) {
|
||||
tip.parentNode.removeChild(tip);
|
||||
}
|
||||
|
||||
_this25._cleanTipClass();
|
||||
_this25.element.removeAttribute('aria-describedby');
|
||||
$(_this25.element).trigger(_this25.constructor.Event.HIDDEN);
|
||||
if (_this25._popper !== null) {
|
||||
_this25._popper.destroy();
|
||||
_this26._cleanTipClass();
|
||||
_this26.element.removeAttribute('aria-describedby');
|
||||
$(_this26.element).trigger(_this26.constructor.Event.HIDDEN);
|
||||
if (_this26._popper !== null) {
|
||||
_this26._popper.destroy();
|
||||
}
|
||||
|
||||
if (callback) {
|
||||
@ -3332,28 +3374,28 @@ var Tooltip = function ($) {
|
||||
};
|
||||
|
||||
Tooltip.prototype._setListeners = function _setListeners() {
|
||||
var _this26 = this;
|
||||
var _this27 = this;
|
||||
|
||||
var triggers = this.config.trigger.split(' ');
|
||||
|
||||
triggers.forEach(function (trigger) {
|
||||
if (trigger === 'click') {
|
||||
$(_this26.element).on(_this26.constructor.Event.CLICK, _this26.config.selector, function (event) {
|
||||
return _this26.toggle(event);
|
||||
$(_this27.element).on(_this27.constructor.Event.CLICK, _this27.config.selector, function (event) {
|
||||
return _this27.toggle(event);
|
||||
});
|
||||
} else if (trigger !== Trigger.MANUAL) {
|
||||
var eventIn = trigger === Trigger.HOVER ? _this26.constructor.Event.MOUSEENTER : _this26.constructor.Event.FOCUSIN;
|
||||
var eventOut = trigger === Trigger.HOVER ? _this26.constructor.Event.MOUSELEAVE : _this26.constructor.Event.FOCUSOUT;
|
||||
var eventIn = trigger === Trigger.HOVER ? _this27.constructor.Event.MOUSEENTER : _this27.constructor.Event.FOCUSIN;
|
||||
var eventOut = trigger === Trigger.HOVER ? _this27.constructor.Event.MOUSELEAVE : _this27.constructor.Event.FOCUSOUT;
|
||||
|
||||
$(_this26.element).on(eventIn, _this26.config.selector, function (event) {
|
||||
return _this26._enter(event);
|
||||
}).on(eventOut, _this26.config.selector, function (event) {
|
||||
return _this26._leave(event);
|
||||
$(_this27.element).on(eventIn, _this27.config.selector, function (event) {
|
||||
return _this27._enter(event);
|
||||
}).on(eventOut, _this27.config.selector, function (event) {
|
||||
return _this27._leave(event);
|
||||
});
|
||||
}
|
||||
|
||||
$(_this26.element).closest('.modal').on('hide.bs.modal', function () {
|
||||
return _this26.hide();
|
||||
$(_this27.element).closest('.modal').on('hide.bs.modal', function () {
|
||||
return _this27.hide();
|
||||
});
|
||||
});
|
||||
|
||||
@ -3625,7 +3667,7 @@ var Popover = function ($) {
|
||||
placement: 'right',
|
||||
trigger: 'click',
|
||||
content: '',
|
||||
template: '<div class="popover" role="tooltip">' + '<div class="arrow"></div>' + '<h3 class="popover-title"></h3>' + '<div class="popover-content"></div></div>'
|
||||
template: '<div class="popover" role="tooltip">' + '<div class="arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div></div>'
|
||||
});
|
||||
|
||||
var DefaultType = $.extend({}, Tooltip.DefaultType, {
|
||||
@ -3638,8 +3680,8 @@ var Popover = function ($) {
|
||||
};
|
||||
|
||||
var Selector = {
|
||||
TITLE: '.popover-title',
|
||||
CONTENT: '.popover-content'
|
||||
TITLE: '.popover-header',
|
||||
CONTENT: '.popover-body'
|
||||
};
|
||||
|
||||
var Event = {
|
||||
|
2
library/bootstrap/js/bootstrap.min.js
vendored
2
library/bootstrap/js/bootstrap.min.js
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
3
library/popper/popper.min.js
vendored
Normal file
3
library/popper/popper.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1395
util/hmessages.po
1395
util/hmessages.po
File diff suppressed because it is too large
Load Diff
6
view/css/bootstrap-red.css
vendored
6
view/css/bootstrap-red.css
vendored
@ -46,12 +46,6 @@ nav .dropdown-menu {
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
/* this is a hack and needs fixing in bootstrap */
|
||||
nav .dropdown-menu-right {
|
||||
right: 0;
|
||||
left: auto !important;
|
||||
}
|
||||
|
||||
#navbar-collapse-2 {
|
||||
flex-basis: 100%;
|
||||
max-height: 70vh;
|
||||
|
@ -13,6 +13,7 @@ function commentOpenUI(obj, id) {
|
||||
$("#comment-edit-text-" + id).attr('tabindex','9');
|
||||
$("#comment-edit-submit-" + id).attr('tabindex','10');
|
||||
$("#comment-tools-" + id).show();
|
||||
$("#comment-edit-anon-" + id).show();
|
||||
}
|
||||
};
|
||||
|
||||
@ -41,6 +42,7 @@ function commentOpen(obj, id) {
|
||||
$("#comment-edit-text-" + id).addClass("comment-edit-text-full");
|
||||
$("#comment-edit-text-" + id).removeClass("comment-edit-text-empty");
|
||||
$("#mod-cmnt-wrap-" + id).show();
|
||||
$("#comment-edit-anon-" + id).show();
|
||||
openMenu("comment-tools-" + id);
|
||||
return true;
|
||||
}
|
||||
|
@ -1339,6 +1339,14 @@ main.fullscreen .section-content-wrapper-np {
|
||||
}
|
||||
/* bootstrap overrides */
|
||||
|
||||
.btn,
|
||||
.rounded-top,
|
||||
.form-control,
|
||||
.nav-pills .nav-link,
|
||||
.nav-tabs .nav-link {
|
||||
border-radius: $radius;
|
||||
}
|
||||
|
||||
blockquote {
|
||||
font-size: 1rem;
|
||||
font-style: italic;
|
||||
@ -1353,10 +1361,6 @@ blockquote {
|
||||
border-radius: $radius;
|
||||
}
|
||||
|
||||
.dropdown-menu img {
|
||||
border-radius: $radius;
|
||||
}
|
||||
|
||||
.dropdown-item {
|
||||
color: $font_colour;
|
||||
}
|
||||
@ -1491,7 +1495,7 @@ dl.bb-dl > dd > li {
|
||||
.form-group.checkbox > div label {
|
||||
display: block; overflow: hidden; cursor: pointer;
|
||||
border: 1px solid #ccc;
|
||||
border-radius: 4px;
|
||||
border-radius: $radius;
|
||||
margin:0px;
|
||||
-webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;
|
||||
-o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
|
||||
|
@ -8,7 +8,7 @@ head_add_css('/library/datetimepicker/jquery.datetimepicker.css');
|
||||
head_add_css('/library/bootstrap-colorpicker/dist/css/bootstrap-colorpicker.min.css');
|
||||
require_once('view/php/theme_init.php');
|
||||
|
||||
head_add_js('/library/popper/popper.js');
|
||||
head_add_js('/library/popper/popper.min.js');
|
||||
head_add_js('/library/bootstrap/js/bootstrap.min.js');
|
||||
head_add_js('/library/bootbox/bootbox.min.js');
|
||||
head_add_js('/library/bootstrap-tagsinput/bootstrap-tagsinput.js');
|
||||
|
@ -10,6 +10,14 @@
|
||||
<input type="hidden" name="return" value="{{$return_path}}" />
|
||||
<input type="hidden" name="jsreload" value="{{$jsreload}}" />
|
||||
<input type="hidden" name="preview" id="comment-preview-inp-{{$id}}" value="0" />
|
||||
{{if $anoncomments && ! $observer}}
|
||||
<div id="comment-edit-anon-{{$id}}" style="display: none;" >
|
||||
{{include file="field_input.tpl" field=$anonname}}
|
||||
{{include file="field_input.tpl" field=$anonmail}}
|
||||
{{include file="field_input.tpl" field=$anonurl}}
|
||||
{{$anon_extras}}
|
||||
</div>
|
||||
{{/if}}
|
||||
<textarea id="comment-edit-text-{{$id}}" class="comment-edit-text-empty" name="body" onFocus="commentOpenUI(this,{{$id}});" onBlur="commentCloseUI(this,{{$id}});" ondragenter="linkdropper(event);" ondragleave="linkdropexit(event);" ondragover="linkdropper(event);" ondrop="linkdrop(event);" >{{$comment}}</textarea>
|
||||
{{if $qcomment}}
|
||||
<select id="qcomment-select-{{$id}}" name="qcomment-{{$id}}" class="qcomment" onchange="qCommentInsert(this,{{$id}});" >
|
||||
|
@ -101,6 +101,17 @@
|
||||
<button type="button" class="btn btn-outline-secondary btn-sm wall-item-like dropdown-toggle" data-toggle="dropdown" id="attachment-menu-{{$item.id}}"><i class="fa fa-paperclip"></i></button>
|
||||
<div class="dropdown-menu">{{$item.attachments}}</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{if $item.mode === 'moderate'}}
|
||||
|
||||
<div class="wall-item-tools-left btn-group">
|
||||
<a href="moderate/{{$item.id}}/approve" class="btn btn-outline-secondary btn-small">{{$item.approve}}</a>
|
||||
<a href="moderate/{{$item.id}}/drop" class="btn btn-outline-secondary btn-small">{{$item.delete}}</a>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
{{/if}}
|
||||
</div>
|
||||
</div>
|
||||
|
Reference in New Issue
Block a user