Merge remote-tracking branch 'upstream/2021.06-rc' into http-input-data

This commit is contained in:
Michael 2021-05-22 20:26:32 +00:00
commit 6f44476c56
158 changed files with 760 additions and 633 deletions

View file

@ -1 +1 @@
2021.06-dev
2021.06-rc

View file

@ -38,7 +38,7 @@ use Friendica\Util\DateTimeFormat;
define('FRIENDICA_PLATFORM', 'Friendica');
define('FRIENDICA_CODENAME', 'Siberian Iris');
define('FRIENDICA_VERSION', '2021.06-dev');
define('FRIENDICA_VERSION', '2021.06-rc');
define('DFRN_PROTOCOL_VERSION', '2.23');
define('NEW_TABLE_STRUCTURE_VERSION', 1288);

View file

@ -1,6 +1,6 @@
-- ------------------------------------------
-- Friendica 2021.06-dev (Siberian Iris)
-- DB_UPDATE_VERSION 1418
-- Friendica 2021.06-rc (Siberian Iris)
-- DB_UPDATE_VERSION 1419
-- ------------------------------------------
@ -751,6 +751,7 @@ CREATE TABLE IF NOT EXISTS `mail` (
`from-photo` varchar(255) NOT NULL DEFAULT '' COMMENT 'contact photo link of the sender',
`from-url` varchar(255) NOT NULL DEFAULT '' COMMENT 'profile linke of the sender',
`contact-id` varchar(255) COMMENT 'contact.id',
`author-id` int unsigned COMMENT 'Link to the contact table with uid=0 of the author of the mail',
`convid` int unsigned COMMENT 'conv.id',
`title` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`body` mediumtext COMMENT '',
@ -759,7 +760,11 @@ CREATE TABLE IF NOT EXISTS `mail` (
`replied` boolean NOT NULL DEFAULT '0' COMMENT '',
`unknown` boolean NOT NULL DEFAULT '0' COMMENT 'if sender not in the contact table this is 1',
`uri` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`uri-id` int unsigned COMMENT 'Item-uri id of the related mail',
`parent-uri` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`parent-uri-id` int unsigned COMMENT 'Item-uri id of the parent of the related mail',
`thr-parent` varchar(255) COMMENT '',
`thr-parent-id` int unsigned COMMENT 'Id of the item-uri table that contains the thread parent uri',
`created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'creation time of the private message',
PRIMARY KEY(`id`),
INDEX `uid_seen` (`uid`,`seen`),
@ -767,7 +772,15 @@ CREATE TABLE IF NOT EXISTS `mail` (
INDEX `uri` (`uri`(64)),
INDEX `parent-uri` (`parent-uri`(64)),
INDEX `contactid` (`contact-id`(32)),
FOREIGN KEY (`uid`) REFERENCES `user` (`uid`) ON UPDATE RESTRICT ON DELETE CASCADE
INDEX `author-id` (`author-id`),
INDEX `uri-id` (`uri-id`),
INDEX `parent-uri-id` (`parent-uri-id`),
INDEX `thr-parent-id` (`thr-parent-id`),
FOREIGN KEY (`uid`) REFERENCES `user` (`uid`) ON UPDATE RESTRICT ON DELETE CASCADE,
FOREIGN KEY (`author-id`) REFERENCES `contact` (`id`) ON UPDATE RESTRICT ON DELETE RESTRICT,
FOREIGN KEY (`uri-id`) REFERENCES `item-uri` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE,
FOREIGN KEY (`parent-uri-id`) REFERENCES `item-uri` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE,
FOREIGN KEY (`thr-parent-id`) REFERENCES `item-uri` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE
) DEFAULT COLLATE utf8mb4_general_ci COMMENT='private messages';
--

View file

@ -119,17 +119,29 @@ These endpoints use the [Mastodon API entities](https://docs.joinmastodon.org/en
## Currently unimplemented endpoints
These emdpoints are planned to be implemented
These emdpoints are planned to be implemented somewhere in the future.
- [`PATCH /api/v1/accounts/update_credentials`](https://docs.joinmastodon.org/methods/accounts/)
- [`GET /api/v1/instance/activity`](https://docs.joinmastodon.org/methods/instance#weekly-activity)
## Dummy endpoints
These endpoints are returning empty data to avoid error messages when using third party clients.
They refer to features that don't exist in Friendica yet.
- [`GET /api/v1/accounts/:id/identity_proofs`](https://docs.joinmastodon.org/methods/accounts/)
- [`GET /api/v1/announcements`](https://docs.joinmastodon.org/methods/announcements/)
- [`GET /api/v1/endorsements`](https://docs.joinmastodon.org/methods/accounts/endorsements/)
- [`GET /api/v1/filters`](https://docs.joinmastodon.org/methods/accounts/filters/)
- [`GET /api/v1/markers`](https://docs.joinmastodon.org/methods/timelines/markers/)
- [`GET /api/v1/scheduled_statuses`](https://docs.joinmastodon.org/methods/statuses/scheduled_statuses/)
## Non supportable endpoints
These endpoints won't be implemented, since they refer to functionality that doesn't exist in Friendica
These endpoints won't be implemented at the moment.
They refer to features that don't exist in Friendica yet.
- [`POST /api/v1/accounts`](https://docs.joinmastodon.org/methods/accounts/)
- [`GET /api/v1/accounts/:id/identity_proofs`](https://docs.joinmastodon.org/methods/accounts/)
- [`POST /api/v1/accounts/:id/pin`](https://docs.joinmastodon.org/methods/accounts/)
- [`POST /api/v1/accounts/:id/unpin`](https://docs.joinmastodon.org/methods/accounts/)
- [`GET /api/v1/admin/accounts`](https://docs.joinmastodon.org/methods/admin/)
@ -138,29 +150,24 @@ These endpoints won't be implemented, since they refer to functionality that doe
- [`GET /api/v1/admin/reports`](https://docs.joinmastodon.org/methods/admin/)
- [`GET /api/v1/admin/reports/:id`](https://docs.joinmastodon.org/methods/admin/)
- [`POST /api/v1/admin/reports/:id/{action}`](https://docs.joinmastodon.org/methods/admin/)
- [`GET /api/v1/announcements`](https://docs.joinmastodon.org/methods/announcements/)
- [`POST /api/v1/announcements/:id/dismiss`](https://docs.joinmastodon.org/methods/announcements/)
- [`PUT /api/v1/announcements/:id/reactions/{name}`](https://docs.joinmastodon.org/methods/announcements/)
- [`DELETE /api/v1/announcements/:id/reactions/{name}`](https://docs.joinmastodon.org/methods/announcements/)
- [`GET /api/v1/domain_blocks`](https://docs.joinmastodon.org/methods/accounts/domain_blocks/)
- [`POST /api/v1/domain_blocks`](https://docs.joinmastodon.org/methods/accounts/domain_blocks/)
- [`DELETE /api/v1/domain_blocks`](https://docs.joinmastodon.org/methods/accounts/domain_blocks/)
- [`GET /api/v1/endorsements`](https://docs.joinmastodon.org/methods/accounts/endorsements/)
- [`GET /api/v1/featured_tags`](https://docs.joinmastodon.org/methods/accounts/featured_tags/)
- [`POST /api/v1/featured_tags`](https://docs.joinmastodon.org/methods/accounts/featured_tags/)
- [`DELETE /api/v1/featured_tags/:id`](https://docs.joinmastodon.org/methods/accounts/featured_tags/)
- [`GET /api/v1/featured_tags/suggestions`](https://docs.joinmastodon.org/methods/accounts/featured_tags/)
- [`GET /api/v1/filters`](https://docs.joinmastodon.org/methods/accounts/filters/)
- [`GET /api/v1/filters/:id`](https://docs.joinmastodon.org/methods/accounts/filters/)
- [`POST /api/v1/filters/:id`](https://docs.joinmastodon.org/methods/accounts/filters/)
- [`PUT /api/v1/filters/:id`](https://docs.joinmastodon.org/methods/accounts/filters/)
- [`DELETE /api/v1/filters/:id`](https://docs.joinmastodon.org/methods/accounts/filters/)
- [`GET /api/v1/markers`](https://docs.joinmastodon.org/methods/timelines/markers/)
- [`POST /api/v1/markers`](https://docs.joinmastodon.org/methods/timelines/markers/)
- [`GET /api/v1/polls/:id`](https://docs.joinmastodon.org/methods/statuses/polls/)
- [`POST /api/v1/polls/:id/votes`](https://docs.joinmastodon.org/methods/statuses/polls/)
- [`POST /api/v1/reports`](https://docs.joinmastodon.org/methods/accounts/reports/)
- [`GET /api/v1/scheduled_statuses`](https://docs.joinmastodon.org/methods/statuses/scheduled_statuses/)
- [`GET /api/v1/scheduled_statuses/:id`](https://docs.joinmastodon.org/methods/statuses/scheduled_statuses/)
- [`PUT /api/v1/scheduled_statuses/:id`](https://docs.joinmastodon.org/methods/statuses/scheduled_statuses/)
- [`DELETE /api/v1/scheduled_statuses/:id`](https://docs.joinmastodon.org/methods/statuses/scheduled_statuses/)

View file

@ -50,7 +50,7 @@ use Friendica\Util\XML;
class BBCode
{
// Update this value to the current date whenever changes are made to BBCode::convert
const VERSION = '2021-05-01';
const VERSION = '2021-05-21';
const INTERNAL = 0;
const EXTERNAL = 1;
@ -1039,7 +1039,9 @@ class BBCode
switch ($simplehtml) {
case self::API:
$text = ($is_quote_share? '<br>' : '') . '<p>' . html_entity_decode('&#x2672; ', ENT_QUOTES, 'UTF-8') . ' ' . $author_contact['addr'] . ': </p>' . "\n" . $content;
$text = ($is_quote_share? '<br>' : '') .
'<p><b><a href="' . $attributes['link'] . '">' . html_entity_decode('&#x2672; ', ENT_QUOTES, 'UTF-8') . ' ' . $author_contact['addr'] . "</a>:</b> </p>\n" .
'<blockquote class="shared_content">' . $content . '</blockquote>';
break;
case self::DIASPORA:
if (stripos(Strings::normaliseLink($attributes['link']), 'http://twitter.com/') === 0) {
@ -1721,7 +1723,7 @@ class BBCode
$text);
} elseif (!$simple_html) {
$text = preg_replace("/([@!])\[url\=(.*?)\](.*?)\[\/url\]/ism",
'$1<a href="$2" class="userinfo mention" title="$3"><bdi>$3</bdi></a>',
'<bdi>$1<a href="$2" class="userinfo mention" title="$3">$3</a></bdi>',
$text);
}

View file

@ -136,7 +136,9 @@ class Status extends BaseFactory
$account = DI::mstdnAccount()->createFromContactId($item['author-id']);
$counts = new \Friendica\Object\Api\Mastodon\Status\Counts(0, 0, 0);
$replies = DBA::count('mail', ['thr-parent-id' => $item['uri-id'], 'reply' => true]);
$counts = new \Friendica\Object\Api\Mastodon\Status\Counts($replies, 0, 0);
$userAttributes = new \Friendica\Object\Api\Mastodon\Status\UserAttributes(false, false, false, false, false);

View file

@ -1941,6 +1941,11 @@ class Contact
return false;
}
if (Contact::isLocal($ret['url'])) {
Logger::info('Local contacts are not updated here.');
return true;
}
if (!empty($ret['account-type']) && $ret['account-type'] == User::ACCOUNT_TYPE_DELETED) {
Logger::info('Deleted account', ['id' => $id, 'url' => $ret['url'], 'ret' => $ret]);
self::remove($id);

View file

@ -71,6 +71,20 @@ class Mail
return false;
}
$msg['author-id'] = Contact::getIdForURL($msg['from-url'], 0, false);
$msg['uri-id'] = ItemURI::insert(['uri' => $msg['uri'], 'guid' => $msg['guid']]);
$msg['parent-uri-id'] = ItemURI::getIdByURI($msg['parent-uri']);
if ($msg['reply']) {
$reply = DBA::selectFirst('mail', ['uri', 'uri-id'], ['parent-uri' => $mail['parent-uri'], 'reply' => false]);
$msg['thr-parent'] = $reply['uri'];
$msg['thr-parent-id'] = $reply['uri-id'];
} else {
$msg['thr-parent'] = $msg['uri'];
$msg['thr-parent-id'] = $msg['uri-id'];
}
DBA::insert('mail', $msg);
$msg['id'] = DBA::lastInsertId();

View file

@ -145,7 +145,7 @@ class Profile
*/
public static function load(App $a, $nickname, array $profiledata = [], $show_connect = true)
{
$user = DBA::selectFirst('user', ['uid'], ['nickname' => $nickname, 'account_removed' => false]);
$user = User::getByNickname($nickname);
if (!DBA::isResult($user) && empty($profiledata)) {
Logger::log('profile error: ' . DI::args()->getQueryString(), Logger::DEBUG);

View file

@ -425,8 +425,8 @@ class Tag
$item['body'] = str_replace($orig_tag, $tag['url'], $item['body']);
}
$return['hashtags'][] = $prefix . '<a href="' . $tag['url'] . '" target="_blank" rel="noopener noreferrer">' . htmlspecialchars($tag['name']) . '</a>';
$return['tags'][] = $prefix . '<a href="' . $tag['url'] . '" target="_blank" rel="noopener noreferrer">' . htmlspecialchars($tag['name']) . '</a>';
$return['hashtags'][] = '<bdi>' . $prefix . '<a href="' . $tag['url'] . '" target="_blank" rel="noopener noreferrer">' . htmlspecialchars($tag['name']) . '</a></bdi>';
$return['tags'][] = '<bdi>' . $prefix . '<a href="' . $tag['url'] . '" target="_blank" rel="noopener noreferrer">' . htmlspecialchars($tag['name']) . '</a></bdi>';
break;
case self::MENTION:
case self::EXCLUSIVE_MENTION:
@ -435,8 +435,8 @@ class Tag
} else {
$tag['url'] = Contact::magicLink($tag['url']);
}
$return['mentions'][] = $prefix . '<a href="' . $tag['url'] . '" target="_blank" rel="noopener noreferrer">' . htmlspecialchars($tag['name']) . '</a>';
$return['tags'][] = $prefix . '<a href="' . $tag['url'] . '" target="_blank" rel="noopener noreferrer">' . htmlspecialchars($tag['name']) . '</a>';
$return['mentions'][] = '<bdi>' . $prefix . '<a href="' . $tag['url'] . '" target="_blank" rel="noopener noreferrer">' . htmlspecialchars($tag['name']) . '</a></bdi>';
$return['tags'][] = '<bdi>' . $prefix . '<a href="' . $tag['url'] . '" target="_blank" rel="noopener noreferrer">' . htmlspecialchars($tag['name']) . '</a></bdi>';
break;
case self::IMPLICIT_MENTION:
$return['implicit_mentions'][] = $prefix . $tag['name'];

View file

@ -515,7 +515,27 @@ class User
*/
public static function getIdFromPasswordAuthentication($user_info, $password, $third_party = false)
{
$user = self::getAuthenticationInfo($user_info);
// Addons registered with the "authenticate" hook may create the user on the
// fly. `getAuthenticationInfo` will fail if the user doesn't exist yet. If
// the user doesn't exist, we should give the addons a chance to create the
// user in our database, if applicable, before re-throwing the exception if
// they fail.
try {
$user = self::getAuthenticationInfo($user_info);
} catch (Exception $e) {
$username = (is_string($user_info) ? $user_info : $user_info['nickname'] ?? '');
// Addons can create users, and since this 'catch' branch should only
// execute if getAuthenticationInfo can't find an existing user, that's
// exactly what will happen here. Creating a numeric username would create
// abiguity with user IDs, possibly opening up an attack vector.
// So let's be very careful about that.
if (empty($username) || is_numeric($username)) {
throw $e;
}
return self::getIdFromAuthenticateHooks($username, $password);
}
if ($third_party && DI::pConfig()->get($user['uid'], '2fa', 'verified')) {
// Third-party apps can't verify two-factor authentication, we use app-specific passwords instead
@ -545,23 +565,40 @@ class User
return $user['uid'];
} else {
$addon_auth = [
'username' => $user['nickname'],
'password' => $password,
'authenticated' => 0,
'user_record' => null
];
return self::getIdFromAuthenticateHooks($user['nickname'], $password); // throws
}
/*
* An addon indicates successful login by setting 'authenticated' to non-zero value and returning a user record
* Addons should never set 'authenticated' except to indicate success - as hooks may be chained
* and later addons should not interfere with an earlier one that succeeded.
*/
Hook::callAll('authenticate', $addon_auth);
throw new HTTPException\ForbiddenException(DI::l10n()->t('Login failed'));
}
if ($addon_auth['authenticated'] && $addon_auth['user_record']) {
return $user['uid'];
}
/**
* Try to obtain a user ID via "authenticate" hook addons
*
* Returns the user id associated with a successful password authentication
*
* @param string $username
* @param string $password
* @return int User Id if authentication is successful
* @throws HTTPException\ForbiddenException
*/
public static function getIdFromAuthenticateHooks($username, $password)
{
$addon_auth = [
'username' => $username,
'password' => $password,
'authenticated' => 0,
'user_record' => null
];
/*
* An addon indicates successful login by setting 'authenticated' to non-zero value and returning a user record
* Addons should never set 'authenticated' except to indicate success - as hooks may be chained
* and later addons should not interfere with an earlier one that succeeded.
*/
Hook::callAll('authenticate', $addon_auth);
if ($addon_auth['authenticated'] && $addon_auth['user_record']) {
return $addon_auth['user_record']['uid'];
}
throw new HTTPException\ForbiddenException(DI::l10n()->t('Login failed'));

View file

@ -29,7 +29,7 @@ use Friendica\Module\BaseApi;
/**
* @see https://docs.joinmastodon.org/methods/timelines/conversations/
*/
class Conversation extends BaseApi
class Conversations extends BaseApi
{
public static function delete(array $parameters = [])
{

View file

@ -19,7 +19,7 @@
*
*/
namespace Friendica\Module\Api\Mastodon\Conversation;
namespace Friendica\Module\Api\Mastodon\Conversations;
use Friendica\Core\System;
use Friendica\Database\DBA;

View file

@ -48,22 +48,22 @@ class Direct extends BaseApi
'limit' => 20, // Maximum number of results to return. Defaults to 20.
]);
$params = ['order' => ['id' => true], 'limit' => $request['limit']];
$params = ['order' => ['uri-id' => true], 'limit' => $request['limit']];
$condition = ['uid' => $uid];
if (!empty($request['max_id'])) {
$condition = DBA::mergeConditions($condition, ["`id` < ?", $request['max_id']]);
$condition = DBA::mergeConditions($condition, ["`uri-id` < ?", $request['max_id']]);
}
if (!empty($request['since_id'])) {
$condition = DBA::mergeConditions($condition, ["`id` > ?", $request['since_id']]);
$condition = DBA::mergeConditions($condition, ["`uri-id` > ?", $request['since_id']]);
}
if (!empty($request['min_id'])) {
$condition = DBA::mergeConditions($condition, ["`id` > ?", $request['min_id']]);
$condition = DBA::mergeConditions($condition, ["`uri-id` > ?", $request['min_id']]);
$params['order'] = ['id'];
$params['order'] = ['uri-id'];
}
$mails = DBA::select('mail', ['id'], $condition, $params);

View file

@ -50,20 +50,20 @@ class NoScrape extends BaseModule
System::jsonError(403, 'Authentication required');
}
Profile::load($a, $which);
$profile = Profile::getByNickname($which, local_user());
if (empty($a->profile['uid'])) {
if (empty($profile['uid'])) {
System::jsonError(404, 'Profile not found');
}
$json_info = [
'addr' => $a->profile['addr'],
'addr' => $profile['addr'],
'nick' => $which,
'guid' => $a->profile['guid'],
'key' => $a->profile['upubkey'],
'guid' => $profile['guid'],
'key' => $profile['upubkey'],
'homepage' => DI::baseUrl() . "/profile/{$which}",
'comm' => ($a->profile['account-type'] == User::ACCOUNT_TYPE_COMMUNITY),
'account-type' => $a->profile['account-type'],
'comm' => ($profile['account-type'] == User::ACCOUNT_TYPE_COMMUNITY),
'account-type' => $profile['account-type'],
];
$dfrn_pages = ['request', 'confirm', 'notify', 'poll'];
@ -71,30 +71,30 @@ class NoScrape extends BaseModule
$json_info["dfrn-{$dfrn}"] = DI::baseUrl() . "/dfrn_{$dfrn}/{$which}";
}
if (!$a->profile['net-publish']) {
if (!$profile['net-publish']) {
$json_info['hide'] = true;
System::jsonExit($json_info);
}
$keywords = $a->profile['pub_keywords'] ?? '';
$keywords = $profile['pub_keywords'] ?? '';
$keywords = str_replace(['#', ',', ' ', ',,'], ['', ' ', ',', ','], $keywords);
$keywords = explode(',', $keywords);
$contactPhoto = DBA::selectFirst('contact', ['photo'], ['self' => true, 'uid' => $a->profile['uid']]);
$contactPhoto = DBA::selectFirst('contact', ['photo'], ['self' => true, 'uid' => $profile['uid']]);
$json_info['fn'] = $a->profile['name'];
$json_info['fn'] = $profile['name'];
$json_info['photo'] = $contactPhoto["photo"];
$json_info['tags'] = $keywords;
$json_info['language'] = $a->profile['language'];
$json_info['language'] = $profile['language'];
if (!empty($a->profile['last-item'])) {
$json_info['updated'] = date("c", strtotime($a->profile['last-item']));
if (!empty($profile['last-item'])) {
$json_info['updated'] = date("c", strtotime($profile['last-item']));
}
if (!($a->profile['hide-friends'] ?? false)) {
if (!($profile['hide-friends'] ?? false)) {
$json_info['contacts'] = DBA::count('contact',
[
'uid' => $a->profile['uid'],
'uid' => $profile['uid'],
'self' => 0,
'blocked' => 0,
'pending' => 0,
@ -106,13 +106,13 @@ class NoScrape extends BaseModule
// We display the last activity (post or login), reduced to year and week number
$last_active = 0;
$condition = ['uid' => $a->profile['uid'], 'self' => true];
$condition = ['uid' => $profile['uid'], 'self' => true];
$contact = DBA::selectFirst('contact', ['last-item'], $condition);
if (DBA::isResult($contact)) {
$last_active = strtotime($contact['last-item']);
}
$condition = ['uid' => $a->profile['uid']];
$condition = ['uid' => $profile['uid']];
$user = DBA::selectFirst('user', ['login_date'], $condition);
if (DBA::isResult($user)) {
if ($last_active < strtotime($user['login_date'])) {
@ -124,8 +124,8 @@ class NoScrape extends BaseModule
//These are optional fields.
$profile_fields = ['about', 'locality', 'region', 'postal-code', 'country-name'];
foreach ($profile_fields as $field) {
if (!empty($a->profile[$field])) {
$json_info["$field"] = $a->profile[$field];
if (!empty($profile[$field])) {
$json_info["$field"] = $profile[$field];
}
}

View file

@ -63,9 +63,9 @@ class Authorize extends BaseApi
// @todo Compare the application scope and requested scope
$request = $_REQUEST;
unset($request['pagename']);
$redirect = 'oauth/authorize?' . http_build_query($request);
$redirect_request = $_REQUEST;
unset($redirect_request['pagename']);
$redirect = 'oauth/authorize?' . http_build_query($redirect_request);
$uid = local_user();
if (empty($uid)) {

View file

@ -868,24 +868,19 @@ class Transmitter
return [];
}
$mail['uri-id'] = ItemURI::insert(['uri' => $mail['uri'], 'guid' => $mail['guid']]);
$reply = DBA::selectFirst('mail', ['uri', 'from-url', 'guid'], ['parent-uri' => $mail['parent-uri'], 'reply' => false]);
$reply = DBA::selectFirst('mail', ['uri', 'uri-id', 'from-url'], ['parent-uri' => $mail['parent-uri'], 'reply' => false]);
// Making the post more compatible for Mastodon by:
// - Making it a note and not an article (no title)
// - Moving the title into the "summary" field that is used as a "content warning"
if ($use_title) {
$mail['body'] = $mail['body'];
$mail['title'] = $mail['title'];
} else {
if (!$use_title) {
$mail['body'] = '[abstract]' . $mail['title'] . "[/abstract]\n" . $mail['body'];
$mail['title'] = '';
}
$mail['author-link'] = $mail['owner-link'] = $mail['from-url'];
$mail['author-id'] = Contact::getIdForURL($mail['author-link'], 0, false);
$mail['owner-id'] = $mail['author-id'];
$mail['allow_cid'] = '<'.$mail['contact-id'].'>';
$mail['allow_gid'] = '';
$mail['deny_cid'] = '';
@ -893,9 +888,9 @@ class Transmitter
$mail['private'] = Item::PRIVATE;
$mail['deleted'] = false;
$mail['edited'] = $mail['created'];
$mail['plink'] = $mail['uri'];
$mail['thr-parent'] = $reply['uri'];
$mail['thr-parent-id'] = ItemURI::insert(['uri' => $reply['uri'], 'guid' => $reply['guid']]);
$mail['plink'] = DI::baseUrl() . '/message/' . $mail['id'];
$mail['parent-uri'] = $reply['uri'];
$mail['parent-uri-id'] = $reply['uri-id'];
$mail['parent-author-id'] = Contact::getIdForURL($reply['from-url'], 0, false);
$mail['gravity'] = ($mail['reply'] ? GRAVITY_COMMENT: GRAVITY_PARENT);
$mail['event-type'] = '';
@ -1530,12 +1525,21 @@ class Transmitter
if ($type == 'Note') {
$body = $item['raw-body'] ?? self::removePictures($body);
} elseif (($type == 'Article') && empty($data['summary'])) {
$regexp = "/[@!]\[url\=([^\[\]]*)\].*?\[\/url\]/ism";
$summary = preg_replace_callback($regexp, ['self', 'mentionAddrCallback'], $body);
$data['summary'] = BBCode::toPlaintext(Plaintext::shorten(self::removePictures($summary), 1000));
}
/**
* @todo Improve the automated summary
* This part is currently deactivated. The automated summary seems to be more
* confusing than helping. But possibly we will find a better way.
* So the code is left here for now as a reminder
*
* } elseif (($type == 'Article') && empty($data['summary'])) {
* $regexp = "/[@!]\[url\=([^\[\]]*)\].*?\[\/url\]/ism";
* $summary = preg_replace_callback($regexp, ['self', 'mentionAddrCallback'], $body);
* $data['summary'] = BBCode::toPlaintext(Plaintext::shorten(self::removePictures($summary), 1000));
* }
*/
if (empty($item['uid']) || !Feature::isEnabled($item['uid'], 'explicit_mentions')) {
$body = self::prependMentions($body, $item['uri-id'], $item['author-link']);
}

View file

@ -558,8 +558,10 @@ class HTTPSignature
if (!empty($key['url']) && !empty($key['type']) && ($key['type'] == 'Tombstone')) {
Logger::info('Actor is a tombstone', ['key' => $key]);
// We now delete everything that we possibly knew from this actor
Contact::deleteContactByUrl($key['url']);
if (!Contact::isLocal($key['url'])) {
// We now delete everything that we possibly knew from this actor
Contact::deleteContactByUrl($key['url']);
}
return null;
}

View file

@ -181,7 +181,10 @@ class ExpirePosts
AND NOT EXISTS(SELECT `uri-id` FROM `post-user` WHERE `uri-id` = `item-uri`.`id`)
AND NOT EXISTS(SELECT `parent-uri-id` FROM `post-user` WHERE `parent-uri-id` = `item-uri`.`id`)
AND NOT EXISTS(SELECT `thr-parent-id` FROM `post-user` WHERE `thr-parent-id` = `item-uri`.`id`)
AND NOT EXISTS(SELECT `external-id` FROM `post-user` WHERE `external-id` = `item-uri`.`id`)", $item['uri-id']]);
AND NOT EXISTS(SELECT `external-id` FROM `post-user` WHERE `external-id` = `item-uri`.`id`)
AND NOT EXISTS(SELECT `uri-id` FROM `mail` WHERE `uri-id` = `item-uri`.`id`)
AND NOT EXISTS(SELECT `parent-uri-id` FROM `mail` WHERE `parent-uri-id` = `item-uri`.`id`)
AND NOT EXISTS(SELECT `thr-parent-id` FROM `mail` WHERE `thr-parent-id` = `item-uri`.`id`)", $item['uri-id']]);
Logger::notice('Start deleting orphaned URI-ID', ['last-id' => $item['uri-id']]);
$affected_count = 0;

View file

@ -55,6 +55,7 @@ class RemoveContact {
}
DBA::delete('mail', ['contact-id' => $id]);
DBA::delete('mail', ['author-id' => $id]);
Post\ThreadUser::delete(['author-id' => $id]);
Post\ThreadUser::delete(['owner-id' => $id]);

View file

@ -55,7 +55,7 @@
use Friendica\Database\DBA;
if (!defined('DB_UPDATE_VERSION')) {
define('DB_UPDATE_VERSION', 1418);
define('DB_UPDATE_VERSION', 1419);
}
return [
@ -818,6 +818,7 @@ return [
"from-photo" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "contact photo link of the sender"],
"from-url" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "profile linke of the sender"],
"contact-id" => ["type" => "varchar(255)", "relation" => ["contact" => "id"], "comment" => "contact.id"],
"author-id" => ["type" => "int unsigned", "foreign" => ["contact" => "id", "on delete" => "restrict"], "comment" => "Link to the contact table with uid=0 of the author of the mail"],
"convid" => ["type" => "int unsigned", "relation" => ["conv" => "id"], "comment" => "conv.id"],
"title" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
"body" => ["type" => "mediumtext", "comment" => ""],
@ -826,7 +827,11 @@ return [
"replied" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
"unknown" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "if sender not in the contact table this is 1"],
"uri" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
"uri-id" => ["type" => "int unsigned", "foreign" => ["item-uri" => "id"], "comment" => "Item-uri id of the related mail"],
"parent-uri" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
"parent-uri-id" => ["type" => "int unsigned", "foreign" => ["item-uri" => "id"], "comment" => "Item-uri id of the parent of the related mail"],
"thr-parent" => ["type" => "varchar(255)", "comment" => ""],
"thr-parent-id" => ["type" => "int unsigned", "foreign" => ["item-uri" => "id"], "comment" => "Id of the item-uri table that contains the thread parent uri"],
"created" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "creation time of the private message"],
],
"indexes" => [
@ -836,6 +841,10 @@ return [
"uri" => ["uri(64)"],
"parent-uri" => ["parent-uri(64)"],
"contactid" => ["contact-id(32)"],
"author-id" => ["author-id"],
"uri-id" => ["uri-id"],
"parent-uri-id" => ["parent-uri-id"],
"thr-parent-id" => ["thr-parent-id"],
]
],
"mailacct" => [

View file

@ -90,9 +90,9 @@ return [
'/apps/verify_credentials' => [Module\Api\Mastodon\Apps\VerifyCredentials::class, [R::GET ]],
'/blocks' => [Module\Api\Mastodon\Blocks::class, [R::GET ]],
'/bookmarks' => [Module\Api\Mastodon\Bookmarks::class, [R::GET ]],
'/conversations' => [Module\Api\Mastodon\Conversation::class, [R::GET ]],
'/conversations/{id:\d+}' => [Module\Api\Mastodon\Conversation::class, [R::DELETE ]],
'/conversations/{id:\d+}/read' => [Module\Api\Mastodon\Conversation\Read::class, [R::POST ]],
'/conversations' => [Module\Api\Mastodon\Conversations::class, [R::GET ]],
'/conversations/{id:\d+}' => [Module\Api\Mastodon\Conversations::class, [R::DELETE ]],
'/conversations/{id:\d+}/read' => [Module\Api\Mastodon\Conversations\Read::class, [R::POST ]],
'/custom_emojis' => [Module\Api\Mastodon\CustomEmojis::class, [R::GET ]],
'/domain_blocks' => [Module\Api\Mastodon\Unimplemented::class, [R::GET, R::POST, R::DELETE]], // not supported
'/directory' => [Module\Api\Mastodon\Directory::class, [R::GET ]],

View file

@ -49,6 +49,7 @@ use Friendica\Database\DBStructure;
use Friendica\DI;
use Friendica\Model\Contact;
use Friendica\Model\Item;
use Friendica\Model\ItemURI;
use Friendica\Model\Notification;
use Friendica\Model\Photo;
use Friendica\Model\Post;
@ -912,3 +913,31 @@ function update_1413()
return Update::FAILED;
}
}
function update_1419()
{
$mails = DBA::select('mail', ['id', 'from-url', 'uri', 'parent-uri', 'guid'], [], ['order' => ['id']]);
while ($mail = DBA::fetch($mails)) {
$fields = [];
$fields['author-id'] = Contact::getIdForURL($mail['from-url'], 0, false);
if (empty($fields['author-id'])) {
continue;
}
$fields['uri-id'] = ItemURI::insert(['uri' => $mail['uri'], 'guid' => $mail['guid']]);
$fields['parent-uri-id'] = ItemURI::getIdByURI($mail['parent-uri']);
$reply = DBA::selectFirst('mail', ['uri', 'uri-id', 'guid'], ['parent-uri' => $mail['parent-uri'], 'reply' => false]);
if (!empty($reply)) {
$fields['thr-parent'] = $reply['uri'];
if (!empty($reply['uri-id'])) {
$fields['thr-parent-id'] = $reply['uri-id'];
} else {
$fields['thr-parent-id'] = ItemURI::insert(['uri' => $reply['uri'], 'guid' => $reply['guid']]);
}
}
DBA::update('mail', $fields, ['id' => $mail['id']]);
}
return Update::SUCCESS;
}

View file

@ -6,9 +6,9 @@
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: 2021.06-dev\n"
"Project-Id-Version: 2021.06-rc\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-05-16 07:41+0000\n"
"POT-Creation-Date: 2021-05-21 18:18+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -39,8 +39,8 @@ msgstr ""
#: include/api.php:4528 mod/photos.php:107 mod/photos.php:211
#: mod/photos.php:639 mod/photos.php:1043 mod/photos.php:1060
#: mod/photos.php:1609 src/Model/User.php:1045 src/Model/User.php:1053
#: src/Model/User.php:1061 src/Module/Settings/Profile/Photo/Crop.php:97
#: mod/photos.php:1609 src/Model/User.php:1100 src/Model/User.php:1108
#: src/Model/User.php:1116 src/Module/Settings/Profile/Photo/Crop.php:97
#: src/Module/Settings/Profile/Photo/Crop.php:113
#: src/Module/Settings/Profile/Photo/Crop.php:129
#: src/Module/Settings/Profile/Photo/Crop.php:178
@ -54,7 +54,7 @@ msgstr ""
msgid "%1$s poked %2$s"
msgstr ""
#: include/conversation.php:227 src/Model/Item.php:2523
#: include/conversation.php:227 src/Model/Item.php:2534
msgid "event"
msgstr ""
@ -62,7 +62,7 @@ msgstr ""
msgid "status"
msgstr ""
#: include/conversation.php:235 mod/tagger.php:90 src/Model/Item.php:2525
#: include/conversation.php:235 mod/tagger.php:90 src/Model/Item.php:2536
msgid "photo"
msgstr ""
@ -951,7 +951,7 @@ msgstr ""
msgid "list"
msgstr ""
#: mod/cal.php:297 src/Console/User.php:182 src/Model/User.php:607
#: mod/cal.php:297 src/Console/User.php:182 src/Model/User.php:662
#: src/Module/Admin/Users/Active.php:73 src/Module/Admin/Users/Blocked.php:74
#: src/Module/Admin/Users/Index.php:80 src/Module/Admin/Users/Pending.php:71
#: src/Module/Api/Twitter/ContactEndpoint.php:73
@ -2966,7 +2966,7 @@ msgstr ""
msgid "File upload failed."
msgstr ""
#: mod/wall_upload.php:233
#: mod/wall_upload.php:233 src/Model/Photo.php:953
msgid "Wall Photos"
msgstr ""
@ -3636,39 +3636,39 @@ msgstr ""
msgid "last"
msgstr ""
#: src/Content/Text/BBCode.php:942 src/Content/Text/BBCode.php:1605
#: src/Content/Text/BBCode.php:1606
#: src/Content/Text/BBCode.php:942 src/Content/Text/BBCode.php:1607
#: src/Content/Text/BBCode.php:1608
msgid "Image/photo"
msgstr ""
#: src/Content/Text/BBCode.php:1064
#: src/Content/Text/BBCode.php:1066
#, php-format
msgid ""
"<a href=\"%1$s\" target=\"_blank\" rel=\"noopener noreferrer\">%2$s</a> %3$s"
msgstr ""
#: src/Content/Text/BBCode.php:1089 src/Model/Item.php:3024
#: src/Model/Item.php:3030 src/Model/Item.php:3031
#: src/Content/Text/BBCode.php:1091 src/Model/Item.php:3035
#: src/Model/Item.php:3041 src/Model/Item.php:3042
msgid "Link to source"
msgstr ""
#: src/Content/Text/BBCode.php:1523 src/Content/Text/HTML.php:951
#: src/Content/Text/BBCode.php:1525 src/Content/Text/HTML.php:951
msgid "Click to open/close"
msgstr ""
#: src/Content/Text/BBCode.php:1554
#: src/Content/Text/BBCode.php:1556
msgid "$1 wrote:"
msgstr ""
#: src/Content/Text/BBCode.php:1608 src/Content/Text/BBCode.php:1609
#: src/Content/Text/BBCode.php:1610 src/Content/Text/BBCode.php:1611
msgid "Encrypted content"
msgstr ""
#: src/Content/Text/BBCode.php:1822
#: src/Content/Text/BBCode.php:1824
msgid "Invalid source protocol"
msgstr ""
#: src/Content/Text/BBCode.php:1837
#: src/Content/Text/BBCode.php:1839
msgid "Invalid link protocol"
msgstr ""
@ -4542,25 +4542,25 @@ msgstr ""
msgid "%s: updating %s table."
msgstr ""
#: src/Factory/Api/Mastodon/Error.php:32
#: src/Factory/Api/Mastodon/Error.php:38
msgid "Record not found"
msgstr ""
#: src/Factory/Api/Mastodon/Error.php:41
#: src/Factory/Api/Mastodon/Error.php:48
msgid "Unprocessable Entity"
msgstr ""
#: src/Factory/Api/Mastodon/Error.php:50
#: src/Factory/Api/Mastodon/Error.php:58
#: src/Module/Special/HTTPException.php:50
msgid "Unauthorized"
msgstr ""
#: src/Factory/Api/Mastodon/Error.php:59
#: src/Factory/Api/Mastodon/Error.php:68
msgid ""
"Token is not authorized with a valid user or is missing a required scope"
msgstr ""
#: src/Factory/Api/Mastodon/Error.php:68
#: src/Factory/Api/Mastodon/Error.php:78
#: src/Module/Special/HTTPException.php:53
msgid "Internal Server Error"
msgstr ""
@ -4815,33 +4815,33 @@ msgstr ""
msgid "Edit groups"
msgstr ""
#: src/Model/Item.php:1582
#: src/Model/Item.php:1600
#, php-format
msgid "Detected languages in this post:\\n%s"
msgstr ""
#: src/Model/Item.php:2527
#: src/Model/Item.php:2538
msgid "activity"
msgstr ""
#: src/Model/Item.php:2529
#: src/Model/Item.php:2540
msgid "comment"
msgstr ""
#: src/Model/Item.php:2532
#: src/Model/Item.php:2543
msgid "post"
msgstr ""
#: src/Model/Item.php:2646
#: src/Model/Item.php:2657
#, php-format
msgid "Content warning: %s"
msgstr ""
#: src/Model/Item.php:2989
#: src/Model/Item.php:3000
msgid "bytes"
msgstr ""
#: src/Model/Item.php:3018 src/Model/Item.php:3019
#: src/Model/Item.php:3029 src/Model/Item.php:3030
msgid "View on separate page"
msgstr ""
@ -4959,138 +4959,138 @@ msgstr ""
msgid "Enter a valid existing folder"
msgstr ""
#: src/Model/User.php:186 src/Model/User.php:931
#: src/Model/User.php:186 src/Model/User.php:986
msgid "SERIOUS ERROR: Generation of security keys failed."
msgstr ""
#: src/Model/User.php:549
#: src/Model/User.php:571 src/Model/User.php:604
msgid "Login failed"
msgstr ""
#: src/Model/User.php:581
#: src/Model/User.php:636
msgid "Not enough information to authenticate"
msgstr ""
#: src/Model/User.php:676
#: src/Model/User.php:731
msgid "Password can't be empty"
msgstr ""
#: src/Model/User.php:695
#: src/Model/User.php:750
msgid "Empty passwords are not allowed."
msgstr ""
#: src/Model/User.php:699
#: src/Model/User.php:754
msgid ""
"The new password has been exposed in a public data dump, please choose "
"another."
msgstr ""
#: src/Model/User.php:705
#: src/Model/User.php:760
msgid ""
"The password can't contain accentuated letters, white spaces or colons (:)"
msgstr ""
#: src/Model/User.php:811
#: src/Model/User.php:866
msgid "Passwords do not match. Password unchanged."
msgstr ""
#: src/Model/User.php:818
#: src/Model/User.php:873
msgid "An invitation is required."
msgstr ""
#: src/Model/User.php:822
#: src/Model/User.php:877
msgid "Invitation could not be verified."
msgstr ""
#: src/Model/User.php:830
#: src/Model/User.php:885
msgid "Invalid OpenID url"
msgstr ""
#: src/Model/User.php:843 src/Security/Authentication.php:224
#: src/Model/User.php:898 src/Security/Authentication.php:224
msgid ""
"We encountered a problem while logging in with the OpenID you provided. "
"Please check the correct spelling of the ID."
msgstr ""
#: src/Model/User.php:843 src/Security/Authentication.php:224
#: src/Model/User.php:898 src/Security/Authentication.php:224
msgid "The error message was:"
msgstr ""
#: src/Model/User.php:849
#: src/Model/User.php:904
msgid "Please enter the required information."
msgstr ""
#: src/Model/User.php:863
#: src/Model/User.php:918
#, php-format
msgid ""
"system.username_min_length (%s) and system.username_max_length (%s) are "
"excluding each other, swapping values."
msgstr ""
#: src/Model/User.php:870
#: src/Model/User.php:925
#, php-format
msgid "Username should be at least %s character."
msgid_plural "Username should be at least %s characters."
msgstr[0] ""
msgstr[1] ""
#: src/Model/User.php:874
#: src/Model/User.php:929
#, php-format
msgid "Username should be at most %s character."
msgid_plural "Username should be at most %s characters."
msgstr[0] ""
msgstr[1] ""
#: src/Model/User.php:882
#: src/Model/User.php:937
msgid "That doesn't appear to be your full (First Last) name."
msgstr ""
#: src/Model/User.php:887
#: src/Model/User.php:942
msgid "Your email domain is not among those allowed on this site."
msgstr ""
#: src/Model/User.php:891
#: src/Model/User.php:946
msgid "Not a valid email address."
msgstr ""
#: src/Model/User.php:894
#: src/Model/User.php:949
msgid "The nickname was blocked from registration by the nodes admin."
msgstr ""
#: src/Model/User.php:898 src/Model/User.php:906
#: src/Model/User.php:953 src/Model/User.php:961
msgid "Cannot use that email."
msgstr ""
#: src/Model/User.php:913
#: src/Model/User.php:968
msgid "Your nickname can only contain a-z, 0-9 and _."
msgstr ""
#: src/Model/User.php:921 src/Model/User.php:978
#: src/Model/User.php:976 src/Model/User.php:1033
msgid "Nickname is already registered. Please choose another."
msgstr ""
#: src/Model/User.php:965 src/Model/User.php:969
#: src/Model/User.php:1020 src/Model/User.php:1024
msgid "An error occurred during registration. Please try again."
msgstr ""
#: src/Model/User.php:992
#: src/Model/User.php:1047
msgid "An error occurred creating your default profile. Please try again."
msgstr ""
#: src/Model/User.php:999
#: src/Model/User.php:1054
msgid "An error occurred creating your self contact. Please try again."
msgstr ""
#: src/Model/User.php:1004
#: src/Model/User.php:1059
msgid "Friends"
msgstr ""
#: src/Model/User.php:1008
#: src/Model/User.php:1063
msgid ""
"An error occurred creating your default contact group. Please try again."
msgstr ""
#: src/Model/User.php:1199
#: src/Model/User.php:1254
#, php-format
msgid ""
"\n"
@ -5098,7 +5098,7 @@ msgid ""
"\t\t\tthe administrator of %2$s has set up an account for you."
msgstr ""
#: src/Model/User.php:1202
#: src/Model/User.php:1257
#, php-format
msgid ""
"\n"
@ -5135,12 +5135,12 @@ msgid ""
"\t\tThank you and welcome to %4$s."
msgstr ""
#: src/Model/User.php:1235 src/Model/User.php:1342
#: src/Model/User.php:1290 src/Model/User.php:1397
#, php-format
msgid "Registration details for %s"
msgstr ""
#: src/Model/User.php:1255
#: src/Model/User.php:1310
#, php-format
msgid ""
"\n"
@ -5156,12 +5156,12 @@ msgid ""
"\t\t"
msgstr ""
#: src/Model/User.php:1274
#: src/Model/User.php:1329
#, php-format
msgid "Registration at %s"
msgstr ""
#: src/Model/User.php:1298
#: src/Model/User.php:1353
#, php-format
msgid ""
"\n"
@ -5170,7 +5170,7 @@ msgid ""
"\t\t\t"
msgstr ""
#: src/Model/User.php:1306
#: src/Model/User.php:1361
#, php-format
msgid ""
"\n"
@ -7201,7 +7201,7 @@ msgstr ""
msgid "Deny"
msgstr ""
#: src/Module/Api/Mastodon/Apps.php:47 src/Module/Api/Mastodon/Apps.php:58
#: src/Module/Api/Mastodon/Apps.php:58
msgid "Missing parameters"
msgstr ""
@ -8882,15 +8882,15 @@ msgstr ""
msgid "Show all"
msgstr ""
#: src/Module/OAuth/Authorize.php:49
#: src/Module/OAuth/Authorize.php:51
msgid "Unsupported or missing response type"
msgstr ""
#: src/Module/OAuth/Authorize.php:54 src/Module/OAuth/Token.php:55
#: src/Module/OAuth/Authorize.php:56 src/Module/OAuth/Token.php:57
msgid "Incomplete request data"
msgstr ""
#: src/Module/OAuth/Token.php:79
#: src/Module/OAuth/Token.php:81
msgid "Unsupported or missing grant type"
msgstr ""
@ -10585,20 +10585,20 @@ msgstr ""
msgid "Contact information and Social Networks"
msgstr ""
#: src/Security/Authentication.php:210 src/Security/Authentication.php:262
#: src/Security/Authentication.php:210
msgid "Login failed."
msgstr ""
#: src/Security/Authentication.php:273
#: src/Security/Authentication.php:251
msgid "Login failed. Please check your credentials."
msgstr ""
#: src/Security/Authentication.php:392
#: src/Security/Authentication.php:370
#, php-format
msgid "Welcome %s"
msgstr ""
#: src/Security/Authentication.php:393
#: src/Security/Authentication.php:371
msgid "Please upload a profile photo."
msgstr ""

View file

@ -15,7 +15,7 @@
</div>
{{/foreach}}
<div class="settings-submit-wrapper" >
<div class="settings-submit-wrapper">
<input type="submit" name="submit" class="settings-features-submit" value="{{$submit}}" />
</div>
</div>

View file

@ -1,10 +1,10 @@
<div id="photo-album-edit-wrapper">
<form name="photo-album-edit-form" id="photo-album-edit-form" action="photos/{{$nickname}}/album/{{$hexalbum}}" method="post" >
<form name="photo-album-edit-form" id="photo-album-edit-form" action="photos/{{$nickname}}/album/{{$hexalbum}}" method="post">
<label id="photo-album-edit-name-label" for="photo-album-edit-name" >{{$nametext}}</label>
<input type="text" size="64" name="albumname" value="{{$album}}" >
<label id="photo-album-edit-name-label" for="photo-album-edit-name">{{$nametext}}</label>
<input type="text" size="64" name="albumname" value="{{$album}}">
<div id="photo-album-edit-name-end"></div>
@ -12,4 +12,4 @@
</form>
</div>
<div id="photo-album-edit-end" ></div>
<div id="photo-album-edit-end"></div>

View file

@ -1,7 +1,7 @@
{{if $count}}
<div id="birthday-notice" class="birthday-notice fakelink {{$classtoday}}" onclick="openClose('birthday-wrapper');">{{$event_reminders}} ({{$count}})</div>
<div id="birthday-wrapper" style="display: none;" ><div id="birthday-title">{{$event_title}}</div>
<div id="birthday-wrapper" style="display: none;"><div id="birthday-title">{{$event_title}}</div>
<div id="birthday-title-end"></div>
{{foreach $events as $event}}
<div class="birthday-list" id="birthday-{{$event.id}}"> <a href="{{$event.link}}">{{$event.title}}</a> {{$event.date}} </div>

View file

@ -11,13 +11,13 @@
<input type="hidden" name="jsreload" value="{{$jsreload}}" />
<input type="hidden" name="post_id_random" value="{{$rand_num}}" />
<div class="comment-edit-photo" id="comment-edit-photo-{{$id}}" >
<div class="comment-edit-photo" id="comment-edit-photo-{{$id}}">
<a class="comment-edit-photo-link" href="{{$mylink}}" title="{{$mytitle}}"><img class="my-comment-photo" src="{{$myphoto}}" alt="{{$mytitle}}" title="{{$mytitle}}" /></a>
</div>
<div class="comment-edit-photo-end"></div>
<textarea id="comment-edit-text-{{$id}}" class="comment-edit-text-empty" name="body" placeholder="{{$comment}}" onFocus="commentOpen(this,{{$id}});" onBlur="commentClose(this,{{$id}});">{{if $threaded != false}}{{$default}}{{/if}}</textarea>
<textarea id="comment-edit-text-{{$id}}" class="comment-edit-text-empty" name="body" placeholder="{{$comment}}" onFocus="commentOpen(this,{{$id}});" onBlur="commentClose(this,{{$id}});" dir="auto">{{if $threaded != false}}{{$default}}{{/if}}</textarea>
{{if $qcomment}}
<select id="qcomment-select-{{$id}}" name="qcomment-{{$id}}" class="qcomment" onchange="qCommentInsert(this,{{$id}});" >
<select id="qcomment-select-{{$id}}" name="qcomment-{{$id}}" class="qcomment" onchange="qCommentInsert(this,{{$id}});">
<option value=""></option>
{{foreach $qcomment as $qc}}
<option value="{{$qc}}">{{$qc}}</option>
@ -26,7 +26,7 @@
{{/if}}
<div class="comment-edit-text-end"></div>
<div class="comment-edit-submit-wrapper" id="comment-edit-submit-wrapper-{{$id}}" style="display: none;" >
<div class="comment-edit-submit-wrapper" id="comment-edit-submit-wrapper-{{$id}}" style="display: none;">
<input type="submit" onclick="post_comment({{$id}}); return false;" id="comment-edit-submit-{{$id}}" class="comment-edit-submit" name="submit" value="{{$submit}}" />
{{if $preview}}<span onclick="preview_comment({{$id}});" id="comment-edit-preview-link-{{$id}}" class="fakelink">{{$preview}}</span>{{/if}}
<div id="comment-edit-preview-{{$id}}" class="comment-edit-preview" style="display:none;"></div>

View file

@ -9,7 +9,7 @@
</div>
<br />
<form id="contact-advanced-form" action="contact/{{$contact_id}}/advanced" method="post" >
<form id="contact-advanced-form" action="contact/{{$contact_id}}/advanced" method="post">
<!-- <h4>{{$contact_name}}</h4> -->

View file

@ -1,11 +1,11 @@
<div id="contact-edit-wrapper" >
<div id="contact-edit-wrapper">
{{* Insert Tab-Nav *}}
{{$tab_str nofilter}}
<div id="contact-edit-nav-wrapper" >
<form action="contact/{{$contact_id}}" method="post" >
<div id="contact-edit-nav-wrapper">
<form action="contact/{{$contact_id}}" method="post">
<div id="contact-edit-links">
<div id="contact-edit-status-wrapper">
<span id="contact-edit-contact-status">{{$contact_status}}</span>
@ -14,7 +14,7 @@
<div id="contact-edit-actions">
<a class="btn" rel="#contact-actions-menu" href="#" id="contact-edit-actions-button">{{$contact_action_button}}</a>
<ul role="menu" aria-haspopup="true" id="contact-actions-menu" class="menu-popup" >
<ul role="menu" aria-haspopup="true" id="contact-actions-menu" class="menu-popup">
{{if $lblsuggest}}<li role="menuitem"><a href="#" title="{{$contact_actions.suggest.title}}" onclick="window.location.href='{{$contact_actions.suggest.url}}'; return false;">{{$contact_actions.suggest.label}}</a></li>{{/if}}
{{if $poll_enabled}}<li role="menuitem"><a href="#" title="{{$contact_actions.update.title}}" onclick="window.location.href='{{$contact_actions.update.url}}'; return false;">{{$contact_actions.update.label}}</a></li>{{/if}}
{{if $contact_actions.updateprofile}}<li role="menuitem"><a href="{{$contact_actions.updateprofile.url}}" title="{{$contact_actions.updateprofile.title}}">{{$contact_actions.updateprofile.label}}</a></li>{{/if}}
@ -64,7 +64,7 @@
<div id="contact-edit-settings">
<input type="hidden" name="contact_id" value="{{$contact_id}}">
<div id="contact-edit-end" ></div>
<div id="contact-edit-end"></div>
{{include file="field_checkbox.tpl" field=$notify}}
{{if $fetch_further_information}}
{{include file="field_select.tpl" field=$fetch_further_information}}

View file

@ -1,9 +1,9 @@
<div class="contact-entry-wrapper" id="contact-entry-wrapper-{{$contact.id}}" >
<div class="contact-entry-photo-wrapper" >
<div class="contact-entry-wrapper" id="contact-entry-wrapper-{{$contact.id}}">
<div class="contact-entry-photo-wrapper">
<div class="contact-entry-photo mframe" id="contact-entry-photo-{{$contact.id}}"
onmouseover="if (typeof t{{$contact.id}} != 'undefined') clearTimeout(t{{$contact.id}}); openMenu('contact-photo-menu-button-{{$contact.id}}')"
onmouseout="t{{$contact.id}}=setTimeout('closeMenu(\'contact-photo-menu-button-{{$contact.id}}\'); closeMenu(\'contact-photo-menu-{{$contact.id}}\');',200)" >
onmouseout="t{{$contact.id}}=setTimeout('closeMenu(\'contact-photo-menu-button-{{$contact.id}}\'); closeMenu(\'contact-photo-menu-{{$contact.id}}\');',200)">
<a href="{{$contact.url}}" title="{{$contact.img_hover}}" /><img src="{{$contact.thumb}}" {{$contact.sparkle}} alt="{{$contact.name}}" /></a>
@ -30,17 +30,17 @@
</div>
<div class="contact-entry-desc">
<div class="contact-entry-name" id="contact-entry-name-{{$contact.id}}" >
<div class="contact-entry-name" id="contact-entry-name-{{$contact.id}}">
{{$contact.name}}
{{if $contact.account_type}} <span class="contact-entry-details" id="contact-entry-accounttype-{{$contact.id}}">({{$contact.account_type}})</span>{{/if}}
</div>
{{if $contact.alt_text}}<div class="contact-entry-details" id="contact-entry-rel-{{$contact.id}}" >{{$contact.alt_text}}</div>{{/if}}
{{if $contact.itemurl}}<div class="contact-entry-details" id="contact-entry-url-{{$contact.id}}" >{{$contact.itemurl}}</div>{{/if}}
{{if $contact.tags}}<div class="contact-entry-details" id="contact-entry-tags-{{$contact.id}}" >{{$contact.tags}}</div>{{/if}}
{{if $contact.details}}<div class="contact-entry-details" id="contact-entry-details-{{$contact.id}}" >{{$contact.details}}</div>{{/if}}
{{if $contact.network}}<div class="contact-entry-details" id="contact-entry-network-{{$contact.id}}" >{{$contact.network}}</div>{{/if}}
{{if $contact.alt_text}}<div class="contact-entry-details" id="contact-entry-rel-{{$contact.id}}">{{$contact.alt_text}}</div>{{/if}}
{{if $contact.itemurl}}<div class="contact-entry-details" id="contact-entry-url-{{$contact.id}}">{{$contact.itemurl}}</div>{{/if}}
{{if $contact.tags}}<div class="contact-entry-details" id="contact-entry-tags-{{$contact.id}}">{{$contact.tags}}</div>{{/if}}
{{if $contact.details}}<div class="contact-entry-details" id="contact-entry-details-{{$contact.id}}">{{$contact.details}}</div>{{/if}}
{{if $contact.network}}<div class="contact-entry-details" id="contact-entry-network-{{$contact.id}}">{{$contact.network}}</div>{{/if}}
</div>
<div class="contact-entry-end" ></div>
<div class="contact-entry-end"></div>
</div>

View file

@ -4,7 +4,7 @@
{{if $finding}}<h4>{{$finding}}</h4>{{/if}}
<div id="contacts-search-wrapper">
<form id="contacts-search-form" action="{{$cmd}}" method="get" >
<form id="contacts-search-form" action="{{$cmd}}" method="get">
<span class="contacts-search-desc">{{$desc nofilter}}</span>
<input type="text" name="search" id="contacts-search" class="search-input" onfocus="this.select();" value="{{$search}}" />
<input type="submit" name="submit" id="contacts-search-submit" value="{{$submit}}" />

View file

@ -21,8 +21,8 @@
{{if $dropping}}
<div id="item-delete-selected" class="fakelink" onclick="deleteCheckedItems();">
<div id="item-delete-selected-icon" class="icon drophide" title="{{$dropping}}" onmouseover="imgbright(this);" onmouseout="imgdull(this);" ></div>
<div id="item-delete-selected-desc" >{{$dropping}}</div>
<div id="item-delete-selected-icon" class="icon drophide" title="{{$dropping}}" onmouseover="imgbright(this);" onmouseout="imgdull(this);"></div>
<div id="item-delete-selected-desc">{{$dropping}}</div>
</div>
<div id="item-delete-selected-end"></div>
{{/if}}

View file

@ -1,6 +1,6 @@
<p id="dfrn-request-homecoming" >
<p id="dfrn-request-homecoming">
{{$welcome}}
<br />
{{$please}}
@ -16,7 +16,7 @@
<input type="checkbox" name="hidden-contact" value="1" />
<div id="dfrn-request-homecoming-submit-wrapper" >
<div id="dfrn-request-homecoming-submit-wrapper">
<input id="dfrn-request-homecoming-submit" type="submit" name="submit" value="{{$submit}}" />
</div>
</form>

View file

@ -8,7 +8,7 @@
{{/if}}
<div id="directory-search-wrapper">
<form id="directory-search-form" action="{{$search_mod}}" method="get" >
<form id="directory-search-form" action="{{$search_mod}}" method="get">
<span class="dirsearch-desc">{{$desc nofilter}}</span>
<input type="text" name="search" id="directory-search" class="search-input" onfocus="this.select();" value="{{$search}}" />
<input type="submit" name="submit" id="directory-search-submit" value="{{$submit}}" class="button" />
@ -25,6 +25,6 @@
{{include file="contact_template.tpl"}}
{{/foreach}}
<div class="directory-end" ></div>
<div class="directory-end"></div>
{{$paginate nofilter}}

View file

@ -1,9 +1,9 @@
<div class="directory-item lframe" id="directory-item-{{$entry.id}}" >
<div class="contact-photo-wrapper" id="directory-photo-wrapper-{{$entry.id}}" >
<div class="contact-photo" id="directory-photo-{{$entry.id}}" >
<a href="{{$entry.profile_link}}" class="directory-profile-link" id="directory-profile-link-{{$entry.id}}" >
<div class="directory-item lframe" id="directory-item-{{$entry.id}}">
<div class="contact-photo-wrapper" id="directory-photo-wrapper-{{$entry.id}}">
<div class="contact-photo" id="directory-photo-{{$entry.id}}">
<a href="{{$entry.profile_link}}" class="directory-profile-link" id="directory-profile-link-{{$entry.id}}">
<img class="directory-photo-img" src="{{$entry.photo}}" alt="{{$entry.alt_text}}" title="{{$entry.alt_text}}" />
</a>
</div>

View file

@ -2,7 +2,7 @@
{{foreach $events as $event}}
<div class="event">
{{if $event.item.author_name}}<a href="{{$event.item.author_link}}" ><img src="{{$event.item.author_avatar}}" height="32" width="32" />{{$event.item.author_name}}</a>{{/if}}
{{if $event.item.author_name}}<a href="{{$event.item.author_link}}"><img src="{{$event.item.author_avatar}}" height="32" width="32" />{{$event.item.author_name}}</a>{{/if}}
{{$event.html nofilter}}
{{if $event.plink.orig}}<a href="{{$event.plink.orig}}" title="{{$event.plink.orig_title}}" target="_blank" rel="noopener noreferrer" class="plink-event-link icon s22 remote-link"></a>{{/if}}
{{if $event.edit}}<a href="{{$event.edit.0}}" title="{{$event.edit.1}}" class="edit-event-link icon s22 pencil"></a>{{/if}}

View file

@ -5,7 +5,7 @@
{{$desc nofilter}}
</p>
<form id="event-edit-form" action="{{$post}}" method="post" >
<form id="event-edit-form" action="{{$post}}" method="post">
<input type="hidden" name="event_id" value="{{$eid}}" />
<input type="hidden" name="cid" value="{{$cid}}" />

View file

@ -2,7 +2,7 @@
{{$tabs nofilter}}
{{include file="section_title.tpl"}}
<div id="new-event-link"><a href="{{$new_event.0}}" >{{$new_event.1}}</a></div>
<div id="new-event-link"><a href="{{$new_event.0}}">{{$new_event.1}}</a></div>
<div id="event-calendar-wrapper">
<a href="{{$previus.0}}" class="prevcal {{$previus.2}}"><div id="event-calendar-prev" class="icon s22 prev" title="{{$previus.1}}"></div></a>
@ -14,8 +14,8 @@
{{foreach $events as $event}}
<div class="event">
{{if $event.is_first}}<hr /><a name="link-{{$event.j}}" ><div class="event-list-date">{{$event.d}}</div></a>{{/if}}
{{if $event.item.author_name}}<a href="{{$event.item.author_link}}" ><img src="{{$event.item.author_avatar}}" height="32" width="32" />{{$event.item.author_name}}</a>{{/if}}
{{if $event.is_first}}<hr /><a name="link-{{$event.j}}"><div class="event-list-date">{{$event.d}}</div></a>{{/if}}
{{if $event.item.author_name}}<a href="{{$event.item.author_link}}"><img src="{{$event.item.author_avatar}}" height="32" width="32" />{{$event.item.author_name}}</a>{{/if}}
{{$event.html nofilter}}
{{if $event.item.plink}}<a href="{{$event.plink.0}}" title="{{$event.plink.1}}" target="_blank" rel="noopener noreferrer" class="plink-event-link icon s22 remote-link"></a>{{/if}}
{{if $event.edit}}<a href="{{$event.edit.0}}" title="{{$event.edit.1}}" class="edit-event-link icon s22 pencil"></a>{{/if}}

View file

@ -2,6 +2,6 @@
{{$tabs nofilter}}
<h2>{{$title}}</h2>
<div id="new-event-link"><a href="{{$new_event.0}}" >{{$new_event.1}}</a></div>
<div id="new-event-link"><a href="{{$new_event.0}}">{{$new_event.1}}</a></div>
<div id="events-calendar"></div>

View file

@ -1,7 +1,7 @@
{{if $count}}
<div id="event-notice" class="birthday-notice fakelink {{$classtoday}}" onclick="openClose('event-wrapper');">{{$event_reminders}} ({{$count}})</div>
<div id="event-wrapper" style="display: none;" ><div id="event-title">{{$event_title}}</div>
<div id="event-wrapper" style="display: none;"><div id="event-title">{{$event_title}}</div>
<div id="event-title-end"></div>
{{foreach $events as $event}}
<div class="event-list" id="event-{{$event.id}}"> <a class="ajax-popupbox" href="events/?id={{$event.id}}">{{$event.title}}</a> - {{$event.date}} </div>

View file

@ -2,8 +2,8 @@
<div class='field combobox'>
<label for='id_{{$field.0}}' id='id_{{$field.0}}_label'>{{$field.1}}</label>
{{* html5 don't work on Chrome, Safari and IE9
<input id="id_{{$field.0}}" type="text" list="data_{{$field.0}}" >
<datalist id="data_{{$field.0}}" >
<input id="id_{{$field.0}}" type="text" list="data_{{$field.0}}">
<datalist id="data_{{$field.0}}">
{{foreach $field.4 as $opt=>$val}}<option value="{{$val}}">{{/foreach}}
</datalist> *}}

View file

@ -1,7 +1,7 @@
<div class="field input" id="wrapper_{{$field.0}}">
<label for="id_{{$field.0}}">{{$field.1}}{{if $field.4}} <span class="required" title="{{$field.4}}">*</span>{{/if}}</label>
<input type="{{$field.6|default:'text'}}" name="{{$field.0}}" id="id_{{$field.0}}" value="{{$field.2}}"{{if $field.4}} required{{/if}}{{if $field.5 eq "autofocus"}} autofocus{{elseif $field.5}} {{$field.5 nofilter}}{{/if}} aria-describedby="{{$field.0}}_tip">
<input type="{{$field.6|default:'text'}}" name="{{$field.0}}" id="id_{{$field.0}}" value="{{$field.2}}"{{if $field.4}} required{{/if}}{{if $field.5 eq "autofocus"}} autofocus{{elseif $field.5}} {{$field.5 nofilter}}{{/if}} aria-describedby="{{$field.0}}_tip" dir="auto">
{{if $field.3}}
<span class="field_help" role="tooltip" id="{{$field.0}}_tip">{{$field.3 nofilter}}</span>
{{/if}}

View file

@ -1,9 +1,9 @@
<div class='field select'>
<label for='id_{{$field.0}}'>{{$field.1}}</label>
<select name='{{$field.0}}' id='id_{{$field.0}}' aria-describedby='{{$field.0}}_tip'>
<div class="field select">
<label for="id_{{$field.0}}">{{$field.1}}</label>
<select name="{{$field.0}}" id="id_{{$field.0}}" aria-describedby="{{$field.0}}_tip">
{{foreach $field.4 as $opt=>$val}}
<option value="{{$opt}}" {{if $opt==$field.2}}selected="selected"{{/if}}>{{$val}}</option>
<option value="{{$opt}}" dir="auto"{{if $opt==$field.2}} selected="selected"{{/if}}>{{$val}}</option>
{{/foreach}}
</select>
{{if $field.3}}

View file

@ -1,7 +1,7 @@
<div class="field textarea">
<label for="id_{{$field.0}}">{{$field.1}}{{if $field.4}} <span class="required" title="{{$field.4}}">*</span>{{/if}}</label>
<textarea name="{{$field.0}}" id="id_{{$field.0}}"{{if $field.4}} required{{/if}} aria-describedby="{{$field.0}}_tip">{{$field.2}}</textarea>
<textarea name="{{$field.0}}" id="id_{{$field.0}}"{{if $field.4}} required{{/if}} aria-describedby="{{$field.0}}_tip" dir="auto">{{$field.2}}</textarea>
{{if $field.3}}
<span class="field_help" role="tooltip" id="{{$field.0}}_tip">{{$field.3 nofilter}}</span>
{{/if}}

View file

@ -6,7 +6,7 @@
<label for="id_{{$field.0}}">{{$field.1}}</label>
<select name="{{$field.0}}" id="id_{{$field.0}}" {{if $field.5}}onchange="previewTheme(this);"{{/if}} aria-describedby="{{$field.0}}_tip">
{{foreach $field.4 as $opt=>$val}}
<option value="{{$opt}}" {{if $opt==$field.2}}selected="selected"{{/if}}>{{$val}}</option>
<option value="{{$opt}}" dir="auto"{{if $opt==$field.2}} selected="selected"{{/if}}>{{$val}}</option>
{{/foreach}}
</select>
{{if $field.3}}

View file

@ -1,7 +1,7 @@
<!--
This is the template used by mod/fbrowser.php
-->
<script type="text/javascript" src="{{$baseurl}}/view/js/ajaxupload.js?v={{$smarty.const.FRIENDICA_VERSION}}" ></script>
<script type="text/javascript" src="{{$baseurl}}/view/js/ajaxupload.js?v={{$smarty.const.FRIENDICA_VERSION}}"></script>
<script type="text/javascript" src="{{$baseurl}}/view/js/filebrowser.js?v={{$smarty.const.FRIENDICA_VERSION}}"></script>
<script>
$(function() {

View file

@ -1,5 +1,5 @@
{{include file="field_combobox.tpl"}}
<div class="settings-submit-wrapper" >
<div class="settings-submit-wrapper">
<input id="filer_save" type="button" class="settings-submit" value="{{$submit}}" />
</div>

View file

@ -1,5 +1,5 @@
<div class="group-delete-wrapper button" id="group-delete-wrapper-{{$id}}" >
<div class="group-delete-wrapper button" id="group-delete-wrapper-{{$id}}">
<a href="group/drop/{{$id}}?t={{$form_security_token}}"
onclick="return confirmDelete();"
id="group-delete-icon-{{$id}}"

View file

@ -3,16 +3,16 @@
{{if $editable == 1}}
<div id="group-edit-wrapper" >
<form action="group/{{$gid}}" id="group-edit-form" method="post" >
<div id="group-edit-wrapper">
<form action="group/{{$gid}}" id="group-edit-form" method="post">
<input type='hidden' name='form_security_token' value='{{$form_security_token}}'>
{{include file="field_input.tpl" field=$gname}}
{{if $drop}}{{$drop nofilter}}{{/if}}
<div id="group-edit-submit-wrapper" >
<input type="submit" name="submit" value="{{$submit}}" >
<div id="group-edit-submit-wrapper">
<input type="submit" name="submit" value="{{$submit}}">
</div>
<div id="group-edit-select-end" ></div>
<div id="group-edit-select-end"></div>
</form>
</div>
{{/if}}

View file

@ -1,9 +1,9 @@
<div class="field custom">
<label for="group-selection" id="group-selection-lbl">{{$label}}</label>
<select name="group-selection" id="group-selection" >
<select name="group-selection" id="group-selection">
{{foreach $groups as $group}}
<option value="{{$group.id}}" {{if $group.selected}}selected="selected"{{/if}} >{{$group.name}}</option>
<option value="{{$group.id}}"{{if $group.selected}} selected="selected"{{/if}}>{{$group.name}}</option>
{{/foreach}}
</select>
</div>

View file

@ -32,19 +32,19 @@
<!--[if IE]>
<script type="text/javascript" src="https://html5shiv.googlecode.com/svn/trunk/html5.js?v={{$smarty.const.FRIENDICA_VERSION}}"></script>
<![endif]-->
<script type="text/javascript" src="view/js/modernizr.js?v={{$smarty.const.FRIENDICA_VERSION}}" ></script>
<script type="text/javascript" src="view/asset/jquery/dist/jquery.min.js?v={{$smarty.const.FRIENDICA_VERSION}}" ></script>
<script type="text/javascript" src="view/js/jquery.textinputs.js?v={{$smarty.const.FRIENDICA_VERSION}}" ></script>
<script type="text/javascript" src="view/asset/textcomplete/dist/textcomplete.min.js?v={{$smarty.const.FRIENDICA_VERSION}}" ></script>
<script type="text/javascript" src="view/js/autocomplete.js?v={{$smarty.const.FRIENDICA_VERSION}}" ></script>
<script type="text/javascript" src="view/js/modernizr.js?v={{$smarty.const.FRIENDICA_VERSION}}"></script>
<script type="text/javascript" src="view/asset/jquery/dist/jquery.min.js?v={{$smarty.const.FRIENDICA_VERSION}}"></script>
<script type="text/javascript" src="view/js/jquery.textinputs.js?v={{$smarty.const.FRIENDICA_VERSION}}"></script>
<script type="text/javascript" src="view/asset/textcomplete/dist/textcomplete.min.js?v={{$smarty.const.FRIENDICA_VERSION}}"></script>
<script type="text/javascript" src="view/js/autocomplete.js?v={{$smarty.const.FRIENDICA_VERSION}}"></script>
<script type="text/javascript" src="view/asset/jquery-colorbox/jquery.colorbox-min.js?v={{$smarty.const.FRIENDICA_VERSION}}"></script>
<script type="text/javascript" src="view/asset/jgrowl/jquery.jgrowl.min.js?v={{$smarty.const.FRIENDICA_VERSION}}"></script>
<script type="text/javascript" src="view/asset/jquery-datetimepicker/build/jquery.datetimepicker.full.min.js?v={{$smarty.const.FRIENDICA_VERSION}}"></script>
<script type="text/javascript" src="view/asset/perfect-scrollbar/dist/js/perfect-scrollbar.jquery.min.js?v={{$smarty.const.FRIENDICA_VERSION}}" ></script>
<script type="text/javascript" src="view/asset/perfect-scrollbar/dist/js/perfect-scrollbar.jquery.min.js?v={{$smarty.const.FRIENDICA_VERSION}}"></script>
<script type="text/javascript" src="view/asset/imagesloaded/imagesloaded.pkgd.min.js?v={{$smarty.const.FRIENDICA_VERSION}}"></script>
<script type="text/javascript" src="view/asset/base64/base64.min.js?v={{$smarty.const.FRIENDICA_VERSION}}" ></script>
<script type="text/javascript" src="view/asset/base64/base64.min.js?v={{$smarty.const.FRIENDICA_VERSION}}"></script>
<script type="text/javascript" src="view/asset/dompurify/dist/purify.min.js?v={{$smarty.const.FRIENDICA_VERSION}}"></script>
<script type="text/javascript" src="view/js/main.js?v={{$smarty.const.FRIENDICA_VERSION}}" ></script>
<script type="text/javascript" src="view/js/main.js?v={{$smarty.const.FRIENDICA_VERSION}}"></script>
<script>
// Lifted from https://css-tricks.com/snippets/jquery/move-cursor-to-end-of-textarea-or-input/

View file

@ -1,4 +1,4 @@
<div class="basic-content" >
<div class="basic-content">
<div class="hover-card-details">
<div class="hover-card-header left-align">
<div class="hover-card-pic left-align">

View file

@ -1,5 +1,5 @@
<form action="invite" method="post" id="invite-form" >
<form action="invite" method="post" id="invite-form">
<input type='hidden' name='form_security_token' value='{{$form_security_token}}'>

View file

@ -8,11 +8,11 @@
<input type="hidden" name="wall" value="{{$wall}}" />
<div id="jot-title-wrap">
<input type="text" name="title" id="jot-title" class="jothidden jotforms form-control" placeholder="{{$placeholdertitle}}" title="{{$placeholdertitle}}" value="{{$title}}" tabindex="1"/>
<input type="text" name="title" id="jot-title" class="jothidden jotforms form-control" placeholder="{{$placeholdertitle}}" title="{{$placeholdertitle}}" value="{{$title}}" tabindex="1" dir="auto" />
</div>
{{if $placeholdercategory}}
<div id="jot-category-wrap">
<input name="category" id="jot-category" class="jothidden jotforms form-control" type="text" placeholder="{{$placeholdercategory}}" title="{{$placeholdercategory}}" value="{{$category}}" tabindex="2"/>
<input name="category" id="jot-category" class="jothidden jotforms form-control" type="text" placeholder="{{$placeholdercategory}}" title="{{$placeholdercategory}}" value="{{$category}}" tabindex="2" dir="auto" />
</div>
{{/if}}
@ -44,7 +44,7 @@
</span>
</p>
<p>
<textarea id="comment-edit-text-{{$id}}" class="comment-edit-text form-control text-autosize" name="body" placeholder="{{$default}}" rows="7" tabindex="3">{{$body}}</textarea>
<textarea id="comment-edit-text-{{$id}}" class="comment-edit-text form-control text-autosize" name="body" placeholder="{{$default}}" rows="7" tabindex="3" dir="auto" dir="auto">{{$body}}</textarea>
</p>
<p class="comment-edit-submit-wrapper">

View file

@ -40,7 +40,7 @@ function enableOnUser(){
}
</script>
<script type="text/javascript" src="{{$baseurl}}/view/js/ajaxupload.js?v={{$smarty.const.FRIENDICA_VERSION}}" ></script>
<script type="text/javascript" src="{{$baseurl}}/view/js/ajaxupload.js?v={{$smarty.const.FRIENDICA_VERSION}}"></script>
<script>
var ispublic = '{{$ispublic nofilter}}';

View file

@ -1,11 +1,11 @@
<div id="profile-jot-wrapper" >
<div id="profile-jot-wrapper">
<div id="profile-jot-banner-wrapper">
<div id="profile-jot-desc" >&nbsp;</div>
<div id="profile-jot-desc">&nbsp;</div>
<div id="character-counter" class="grey"></div>
</div>
<div id="profile-jot-banner-end"></div>
<form id="profile-jot-form" action="{{$action}}" method="post" >
<form id="profile-jot-form" action="{{$action}}" method="post">
<input type="hidden" name="wall" value="{{$wall}}" />
<input type="hidden" name="post_type" value="{{$posttype}}" />
<input type="hidden" name="profile_uid" value="{{$profile_uid}}" />
@ -18,43 +18,43 @@
{{if $notes_cid}}
<input type="hidden" name="contact_allow[]" value="<{{$notes_cid}}>" />
{{/if}}
<div id="jot-title-wrap"><input name="title" id="jot-title" type="text" placeholder="{{$placeholdertitle}}" value="{{$title}}" class="jothidden" style="display:none"></div>
<div id="jot-title-wrap"><input name="title" id="jot-title" type="text" placeholder="{{$placeholdertitle}}" value="{{$title}}" class="jothidden" style="display:none" dir="auto"></div>
{{if $placeholdercategory}}
<div id="jot-category-wrap"><input name="category" id="jot-category" type="text" placeholder="{{$placeholdercategory}}" value="{{$category}}" class="jothidden" style="display:none" /></div>
<div id="jot-category-wrap"><input name="category" id="jot-category" type="text" placeholder="{{$placeholdercategory}}" value="{{$category}}" class="jothidden" style="display:none" dir="auto"></div>
{{/if}}
<div id="jot-text-wrap">
<img id="profile-jot-text-loading" src="images/rotator.gif" alt="{{$wait}}" title="{{$wait}}" style="display: none;" />
<textarea rows="5" cols="64" class="profile-jot-text" id="profile-jot-text" name="body" placeholder="{{$share}}">{{if $content}}{{$content nofilter}}{{/if}}</textarea>
<textarea rows="5" cols="64" class="profile-jot-text" id="profile-jot-text" name="body" placeholder="{{$share}}" dir="auto">{{if $content}}{{$content nofilter}}{{/if}}</textarea>
</div>
<div id="profile-jot-submit-wrapper" class="jothidden">
<input type="submit" id="profile-jot-submit" name="submit" value="{{$share}}" />
<div id="profile-upload-wrapper" style="display: {{$visitor}};" >
<div id="wall-image-upload-div" ><a href="#" onclick="return false;" id="wall-image-upload" class="icon camera" title="{{$upload}}"></a></div>
<div id="profile-upload-wrapper" style="display: {{$visitor}};">
<div id="wall-image-upload-div"><a href="#" onclick="return false;" id="wall-image-upload" class="icon camera" title="{{$upload}}"></a></div>
</div>
<div id="profile-attach-wrapper" style="display: {{$visitor}};" >
<div id="wall-file-upload-div" ><a href="#" onclick="return false;" id="wall-file-upload" class="icon attach" title="{{$attach}}"></a></div>
<div id="profile-attach-wrapper" style="display: {{$visitor}};">
<div id="wall-file-upload-div"><a href="#" onclick="return false;" id="wall-file-upload" class="icon attach" title="{{$attach}}"></a></div>
</div>
<div id="profile-link-wrapper" style="display: {{$visitor}};" ondragenter="linkdropper(event);" ondragover="linkdropper(event);" ondrop="linkdrop(event);" >
<div id="profile-link-wrapper" style="display: {{$visitor}};" ondragenter="linkdropper(event);" ondragover="linkdropper(event);" ondrop="linkdrop(event);">
<a id="profile-link" class="icon link" title="{{$weblink}}" ondragenter="return linkdropper(event);" ondragover="return linkdropper(event);" ondrop="linkdrop(event);" onclick="jotGetLink(); return false;"></a>
</div>
<div id="profile-video-wrapper" style="display: {{$visitor}};" >
<div id="profile-video-wrapper" style="display: {{$visitor}};">
<a id="profile-video" class="icon video" title="{{$video}}" onclick="jotVideoURL();return false;"></a>
</div>
<div id="profile-audio-wrapper" style="display: {{$visitor}};" >
<div id="profile-audio-wrapper" style="display: {{$visitor}};">
<a id="profile-audio" class="icon audio" title="{{$audio}}" onclick="jotAudioURL();return false;"></a>
</div>
<div id="profile-location-wrapper" style="display: {{$visitor}};" >
<div id="profile-location-wrapper" style="display: {{$visitor}};">
<a id="profile-location" class="icon globe" title="{{$setloc}}" onclick="jotGetLocation();return false;"></a>
</div>
<div id="profile-nolocation-wrapper" style="display: none;" >
<div id="profile-nolocation-wrapper" style="display: none;">
<a id="profile-nolocation" class="icon noglobe" title="{{$noloc}}" onclick="jotClearLocation();return false;"></a>
</div>
<div id="profile-jot-perms" class="profile-jot-perms" style="display: {{$pvisit}};" >
<a href="#profile-jot-acl-wrapper" id="jot-perms-icon" class="icon {{$lockstate}}" title="{{$permset}}" ></a>{{$bang}}
<div id="profile-jot-perms" class="profile-jot-perms" style="display: {{$pvisit}};">
<a href="#profile-jot-acl-wrapper" id="jot-perms-icon" class="icon {{$lockstate}}" title="{{$permset}}"></a>{{$bang}}
</div>
<!-- {{if $preview}}<span onclick="preview_post();" id="jot-preview-link" class="fakelink">{{$preview}}</span>{{/if}} -->
@ -67,7 +67,7 @@
{{$jotplugins nofilter}}
</div>
<div id="profile-rotator-wrapper" style="display: {{$visitor}};" >
<div id="profile-rotator-wrapper" style="display: {{$visitor}};">
<img id="profile-rotator" src="images/rotator.gif" alt="{{$wait}}" title="{{$wait}}" style="display: none;" />
</div>

View file

@ -1,6 +1,6 @@
<form id="login-form" action="{{$dest_url}}" role="form" method="post" >
<form id="login-form" action="{{$dest_url}}" role="form" method="post">
<div id="login-group" role="group" aria-labelledby="login-head">
<input type="hidden" name="auth-params" value="login" />
@ -10,7 +10,7 @@
{{include file="field_input.tpl" field=$lname}}
{{include file="field_password.tpl" field=$lpassword}}
<div id="login-lost-password-link">
<a href="lostpass" title="{{$lostpass}}" id="lost-password-link" >{{$lostlink}}</a>
<a href="lostpass" title="{{$lostpass}}" id="lost-password-link">{{$lostlink}}</a>
</div>
</div>
@ -20,7 +20,7 @@
</div>
{{/if}}
<div id="login-submit-wrapper" >
<div id="login-submit-wrapper">
<input type="submit" name="submit" id="login-submit-button" value="{{$login}}" />
</div>

View file

@ -1,5 +1,5 @@
<form action="{{$dest_url}}" method="post" >
<form action="{{$dest_url}}" method="post">
<div class="logout-wrapper">
<input type="hidden" name="auth-params" value="logout" />
<input type="submit" name="submit" id="logout-button" value="{{$logout}}" />

View file

@ -5,13 +5,13 @@
{{$desc nofilter}}
</p>
<form action="lostpass" method="post" >
<form action="lostpass" method="post">
<div id="login-name-wrapper">
<label for="login-name" id="label-login-name">{{$name}}</label>
<input type="text" maxlength="60" name="login-name" id="login-name" value="" />
</div>
<div id="login-extra-end"></div>
<div id="login-submit-wrapper" >
<div id="login-submit-wrapper">
<input type="submit" name="submit" id="lostpass-submit-button" value="{{$submit}}" />
</div>
<div id="login-submit-end"></div>

View file

@ -1,14 +1,14 @@
<div class="mail-conv-outside-wrapper">
<div class="mail-conv-sender" >
<a href="{{$mail.from_url}}" title="{{$mail.from_addr}}" class="mail-conv-sender-url" ><img class="mframe mail-conv-sender-photo{{$mail.sparkle}}" src="{{$mail.from_photo}}" heigth="80" width="80" alt="{{$mail.from_name}}" /></a>
<div class="mail-conv-sender">
<a href="{{$mail.from_url}}" title="{{$mail.from_addr}}" class="mail-conv-sender-url"><img class="mframe mail-conv-sender-photo{{$mail.sparkle}}" src="{{$mail.from_photo}}" heigth="80" width="80" alt="{{$mail.from_name}}" /></a>
</div>
<div class="mail-conv-detail" >
<div class="mail-conv-sender-name" >{{$mail.from_name}}</div>
<div class="mail-conv-detail">
<div class="mail-conv-sender-name">{{$mail.from_name}}</div>
<div class="mail-conv-date">{{$mail.date}}</div>
<div class="mail-conv-subject">{{$mail.subject}}</div>
<div class="mail-conv-body">{{$mail.body nofilter}}</div>
<div class="mail-conv-delete-wrapper" id="mail-conv-delete-wrapper-{{$mail.id}}" ><a href="message/drop/{{$mail.id}}" class="icon drophide delete-icon mail-list-delete-icon" onclick="return confirmDelete();" title="{{$mail.delete}}" id="mail-conv-delete-icon-{{$mail.id}}" class="mail-conv-delete-icon" onmouseover="imgbright(this);" onmouseout="imgdull(this);" ></a></div><div class="mail-conv-delete-end"></div>
<div class="mail-conv-delete-wrapper" id="mail-conv-delete-wrapper-{{$mail.id}}"><a href="message/drop/{{$mail.id}}" class="icon drophide delete-icon mail-list-delete-icon" onclick="return confirmDelete();" title="{{$mail.delete}}" id="mail-conv-delete-icon-{{$mail.id}}" class="mail-conv-delete-icon" onmouseover="imgbright(this);" onmouseout="imgdull(this);"></a></div><div class="mail-conv-delete-end"></div>
<div class="mail-conv-outside-wrapper-end"></div>
</div>
</div>

View file

@ -1,14 +1,14 @@
<div class="mail-list-outside-wrapper">
<div class="mail-list-sender" >
<a href="{{$from_url}}" title="{{$from_addr}}" class="mail-list-sender-url" ><img class="mail-list-sender-photo{{$sparkle}}" src="{{$from_photo}}" height="80" width="80" alt="{{$from_name}}" title="{{$from_addr}}" /></a>
<div class="mail-list-sender">
<a href="{{$from_url}}" title="{{$from_addr}}" class="mail-list-sender-url"><img class="mail-list-sender-photo{{$sparkle}}" src="{{$from_photo}}" height="80" width="80" alt="{{$from_name}}" title="{{$from_addr}}" /></a>
</div>
<div class="mail-list-detail">
<div class="mail-list-sender-name" >{{$from_name}}</div>
<div class="mail-list-sender-name">{{$from_name}}</div>
<div class="mail-list-date">{{$date}}</div>
<div class="mail-list-subject"><a href="message/{{$id}}" class="mail-list-link">{{$subject}}</a></div>
<div class="mail-list-delete-wrapper" id="mail-list-delete-wrapper-{{$id}}" >
<a href="message/dropconv/{{$id}}" onclick="return confirmDelete();" title="{{$delete}}" class="icon drophide mail-list-delete delete-icon" onmouseover="imgbright(this);" onmouseout="imgdull(this);" ></a>
<div class="mail-list-delete-wrapper" id="mail-list-delete-wrapper-{{$id}}">
<a href="message/dropconv/{{$id}}" onclick="return confirmDelete();" title="{{$delete}}" class="icon drophide mail-list-delete delete-icon" onmouseover="imgbright(this);" onmouseout="imgdull(this);"></a>
</div>
</div>
</div>

View file

@ -1,6 +1,6 @@
<div class="contact-block-div {{if $class}}{{$class}}{{/if}}">
<a class="contact-block-link {{if $class}}{{$class }}{{/if}} {{if $sparkle}}sparkle{{/if}} {{if $click}}fakelink{{/if}}" {{if $redir}}target="redir"{{/if}} {{if $url}}href="{{$url}}"{{/if}} {{if $click}}onclick="{{$click}}"{{/if}} >
<img class="contact-block-img {{if $class}}{{$class }}{{/if}} {{if $sparkle}}sparkle{{/if}}" src="{{$photo}}" title="{{$title}}" alt="{{$name}}" />
<div class="contact-block-div{{if $class}} {{$class}}{{/if}}">
<a class="contact-block-link{{if $class}} {{$class }}{{/if}}{{if $sparkle}} sparkle{{/if}}{{if $click}} fakelink{{/if}}"{{if $redir}} target="redir"{{/if}}{{if $url}} href="{{$url}}"{{/if}}{{if $click}} onclick="{{$click}}"{{/if}}>
<img class="contact-block-img{{if $class}} {{$class }}{{/if}}{{if $sparkle}} sparkle{{/if}}" src="{{$photo}}" title="{{$title}}" alt="{{$name}}"/>
</a>
</div>

View file

@ -1,7 +1,7 @@
<script language="javascript" type="text/javascript">
$("#prvmail-text").editor_autocomplete(baseurl + '/search/acl');
</script>
<script type="text/javascript" src="view/js/ajaxupload.js?v={{$smarty.const.FRIENDICA_VERSION}}" ></script>
<script type="text/javascript" src="view/js/ajaxupload.js?v={{$smarty.const.FRIENDICA_VERSION}}"></script>
<script>
$(document).ready(function() {
var uploader = new window.AjaxUpload(

View file

@ -4,41 +4,41 @@
<div id="site-location">{{$sitelocation}}</div>
{{if $nav.logout}}<a id="nav-logout-link" class="nav-link {{$nav.logout.2}}" href="{{$nav.logout.0}}" title="{{$nav.logout.3}}" >{{$nav.logout.1}}</a> {{/if}}
{{if $nav.login}}<a id="nav-login-link" class="nav-login-link {{$nav.login.2}}" href="{{$nav.login.0}}" title="{{$nav.login.3}}" >{{$nav.login.1}}</a> {{/if}}
{{if $nav.logout}}<a id="nav-logout-link" class="nav-link {{$nav.logout.2}}" href="{{$nav.logout.0}}" title="{{$nav.logout.3}}">{{$nav.logout.1}}</a> {{/if}}
{{if $nav.login}}<a id="nav-login-link" class="nav-login-link {{$nav.login.2}}" href="{{$nav.login.0}}" title="{{$nav.login.3}}">{{$nav.login.1}}</a> {{/if}}
<span id="nav-link-wrapper" >
<span id="nav-link-wrapper">
{{if $nav.register}}<a id="nav-register-link" class="nav-commlink {{$nav.register.2}} {{$sel.register}}" href="{{$nav.register.0}}" title="{{$nav.register.3}}" >{{$nav.register.1}}</a>{{/if}}
{{if $nav.register}}<a id="nav-register-link" class="nav-commlink {{$nav.register.2}} {{$sel.register}}" href="{{$nav.register.0}}" title="{{$nav.register.3}}">{{$nav.register.1}}</a>{{/if}}
{{if $nav.help}} <a id="nav-help-link" class="nav-link {{$nav.help.2}}" target="friendica-help" href="{{$nav.help.0}}" title="{{$nav.help.3}}" >{{$nav.help.1}}</a>{{/if}}
{{if $nav.help}} <a id="nav-help-link" class="nav-link {{$nav.help.2}}" target="friendica-help" href="{{$nav.help.0}}" title="{{$nav.help.3}}">{{$nav.help.1}}</a>{{/if}}
{{if $nav.tos}} <a id="nav-tos-link" class="nav-link {{$nav.tos.2}}" href="{{$nav.tos.0}}" title="{{$nav.tos.3}}" >{{$nav.tos.1}}</a>{{/if}}
{{if $nav.tos}} <a id="nav-tos-link" class="nav-link {{$nav.tos.2}}" href="{{$nav.tos.0}}" title="{{$nav.tos.3}}">{{$nav.tos.1}}</a>{{/if}}
{{if $nav.apps}}<a id="nav-apps-link" class="nav-link {{$nav.apps.2}}" href="{{$nav.apps.0}}" title="{{$nav.apps.3}}" >{{$nav.apps.1}}</a>{{/if}}
{{if $nav.apps}}<a id="nav-apps-link" class="nav-link {{$nav.apps.2}}" href="{{$nav.apps.0}}" title="{{$nav.apps.3}}">{{$nav.apps.1}}</a>{{/if}}
<a accesskey="s" id="nav-search-link" class="nav-link {{$nav.search.2}}" href="{{$nav.search.0}}" title="{{$nav.search.3}}" >{{$nav.search.1}}</a>
<a id="nav-directory-link" class="nav-link {{$nav.directory.2}}" href="{{$nav.directory.0}}" title="{{$nav.directory.3}}" >{{$nav.directory.1}}</a>
<a accesskey="s" id="nav-search-link" class="nav-link {{$nav.search.2}}" href="{{$nav.search.0}}" title="{{$nav.search.3}}">{{$nav.search.1}}</a>
<a id="nav-directory-link" class="nav-link {{$nav.directory.2}}" href="{{$nav.directory.0}}" title="{{$nav.directory.3}}">{{$nav.directory.1}}</a>
{{if $nav.admin}}<a accesskey="a" id="nav-admin-link" class="nav-link {{$nav.admin.2}}" href="{{$nav.admin.0}}" title="{{$nav.admin.3}}" >{{$nav.admin.1}}</a>{{/if}}
{{if $nav.admin}}<a accesskey="a" id="nav-admin-link" class="nav-link {{$nav.admin.2}}" href="{{$nav.admin.0}}" title="{{$nav.admin.3}}">{{$nav.admin.1}}</a>{{/if}}
{{if $nav.network}}
<a accesskey="n" id="nav-network-link" class="nav-commlink {{$nav.network.2}} {{$sel.network}}" href="{{$nav.network.0}}" title="{{$nav.network.3}}" >{{$nav.network.1}}</a>
<a accesskey="n" id="nav-network-link" class="nav-commlink {{$nav.network.2}} {{$sel.network}}" href="{{$nav.network.0}}" title="{{$nav.network.3}}">{{$nav.network.1}}</a>
<span id="net-update" class="nav-ajax-left"></span>
{{/if}}
{{if $nav.home}}
<a accesskey="p" id="nav-home-link" class="nav-commlink {{$nav.home.2}} {{$sel.home}}" href="{{$nav.home.0}}" title="{{$nav.home.3}}" >{{$nav.home.1}}</a>
<a accesskey="p" id="nav-home-link" class="nav-commlink {{$nav.home.2}} {{$sel.home}}" href="{{$nav.home.0}}" title="{{$nav.home.3}}">{{$nav.home.1}}</a>
<span id="home-update" class="nav-ajax-left"></span>
{{/if}}
{{if $nav.community}}
<a accesskey="c" id="nav-community-link" class="nav-commlink {{$nav.community.2}} {{$sel.community}}" href="{{$nav.community.0}}" title="{{$nav.community.3}}" >{{$nav.community.1}}</a>
<a accesskey="c" id="nav-community-link" class="nav-commlink {{$nav.community.2}} {{$sel.community}}" href="{{$nav.community.0}}" title="{{$nav.community.3}}">{{$nav.community.1}}</a>
{{/if}}
{{if $nav.introductions}}
<a id="nav-notification-link" class="nav-commlink {{$nav.introductions.2}} {{$sel.introductions}}" href="{{$nav.introductions.0}}" title="{{$nav.introductions.3}}" >{{$nav.introductions.1}}</a>
<a id="nav-notification-link" class="nav-commlink {{$nav.introductions.2}} {{$sel.introductions}}" href="{{$nav.introductions.0}}" title="{{$nav.introductions.3}}">{{$nav.introductions.1}}</a>
<span id="intro-update" class="nav-ajax-left"></span>
{{/if}}
{{if $nav.messages}}
<a id="nav-messages-link" class="nav-commlink {{$nav.messages.2}} {{$sel.messages}}" href="{{$nav.messages.0}}" title="{{$nav.messages.3}}" >{{$nav.messages.1}}</a>
<a id="nav-messages-link" class="nav-commlink {{$nav.messages.2}} {{$sel.messages}}" href="{{$nav.messages.0}}" title="{{$nav.messages.3}}">{{$nav.messages.1}}</a>
<span id="mail-update" class="nav-ajax-left"></span>
{{/if}}
@ -58,9 +58,9 @@
{{/if}}
{{if $nav.settings}}<a id="nav-settings-link" class="nav-link {{$nav.settings.2}}" href="{{$nav.settings.0}}" title="{{$nav.settings.3}}">{{$nav.settings.1}}</a>{{/if}}
{{if $nav.profiles}}<a id="nav-profiles-link" class="nav-link {{$nav.profiles.2}}" href="{{$nav.profiles.0}}" title="{{$nav.profiles.3}}" >{{$nav.profiles.1}}</a>{{/if}}
{{if $nav.profiles}}<a id="nav-profiles-link" class="nav-link {{$nav.profiles.2}}" href="{{$nav.profiles.0}}" title="{{$nav.profiles.3}}">{{$nav.profiles.1}}</a>{{/if}}
{{if $nav.contacts}}<a id="nav-contacts-link" class="nav-link {{$nav.contacts.2}}" href="{{$nav.contacts.0}}" title="{{$nav.contacts.3}}" >{{$nav.contacts.1}}</a>{{/if}}
{{if $nav.contacts}}<a id="nav-contacts-link" class="nav-link {{$nav.contacts.2}}" href="{{$nav.contacts.0}}" title="{{$nav.contacts.3}}">{{$nav.contacts.1}}</a>{{/if}}
</span>
<span id="nav-end"></span>
<span id="banner">{{$banner nofilter}}</span>

View file

@ -1,6 +1,6 @@
<h2>{{$header}}</h2>
<div class="intro-wrapper" id="intro-{{$contact_id}}" >
<div class="intro-wrapper" id="intro-{{$contact_id}}">
<p class="intro-desc">{{$str_notification_type}} {{$str_type}}</p>
<img id="photo-{{$contact_id}}" class="intro-photo" src="{{$photo}}" width="175" height=175" title="{{$fullname}}" alt="{{$fullname}}" />
@ -25,9 +25,9 @@
{{include file="field_radio.tpl" field=$follower}}
</div>
<input type="hidden" name="dfrn_id" value="{{$dfrn_id}}" >
<input type="hidden" name="intro_id" value="{{$intro_id}}" >
<input type="hidden" name="contact_id" value="{{$contact_id}}" >
<input type="hidden" name="dfrn_id" value="{{$dfrn_id}}">
<input type="hidden" name="intro_id" value="{{$intro_id}}">
<input type="hidden" name="contact_id" value="{{$contact_id}}">
<input class="intro-submit-approve" type="submit" name="submit" value="{{$approve}}" />
</form>

View file

@ -8,7 +8,7 @@
<div class="intro-approve-as-friend-wrapper">
<label class="intro-approve-as-friend-label" for="intro-approve-as-friend-{{$intro_id}}">{{$as_friend}}</label>
<input type="radio" name="duplex" id="intro-approve-as-friend-{{$intro_id}}" class="intro-approve-as-friend" {{$friend_selected}} value="1" />
<div class="intro-approve-friend-break" ></div>
<div class="intro-approve-friend-break"></div>
</div>
<div class="intro-approve-as-friend-end"></div>
<div class="intro-approve-as-fan-wrapper">

View file

@ -1,12 +1,12 @@
<div class="intro-wrapper" >
<div class="intro-wrapper">
<p class="intro-desc">{{$str_notification_type}} {{$str_type}}</p>
{{if $madeby}}<div class="intro-madeby">{{$lbl_madeby}} {{$madeby}}</div>{{/if}}
<div class="intro-fullname" >{{$fullname}}</div>
<a class="intro-url-link" href="{{$url}}" ><img class="intro-photo lframe" src="{{$photo}}" width="175" height="175" title="{{$fullname}}" alt="{{$fullname}}" /></a>
<div class="intro-note" >{{$note}}</div>
<div class="intro-fullname">{{$fullname}}</div>
<a class="intro-url-link" href="{{$url}}"><img class="intro-photo lframe" src="{{$photo}}" width="175" height="175" title="{{$fullname}}" alt="{{$fullname}}" /></a>
<div class="intro-note">{{$note}}</div>
<div class="intro-wrapper-end"></div>
<form class="intro-form" action="notification/{{$intro_id}}" method="post">
<input class="intro-submit-ignore" type="submit" name="submit" value="{{$ignore}}" />

View file

@ -1,4 +1,4 @@
<a class="embed_video" href="{{$embedurl}}" onclick='this.innerHTML=window.atob("{{$escapedhtml}}"); this.classList.add("active"); return false;'>
<img width='{{$tw}}' height='{{$th}}' src='{{$turl}}' >
<div style='width: {{$tw}}px; height: {{$th}}px;'></div>
<a class="embed_video" href="{{$embedurl}}" onclick="this.innerHTML=window.atob('{{$escapedhtml}}'); this.classList.add('active'); return false;">
<img width="{{$tw}}" height="{{$th}}" src="{{$turl}}">
<div style="width: {{$tw}}px; height: {{$th}}px;"></div>
</a>

View file

@ -6,16 +6,16 @@
{{if $drop}}
<div id="album-drop-link"><a href="{{$drop.1}}" title="{{$drop.0}}">{{$drop.0}}</a></div>
{{/if}}
<div class="photos-upload-link" ><a href="{{$order.1}}" title="{{$order.0}}">{{$order.0}}</a></div>
<div class="photos-upload-link"><a href="{{$order.1}}" title="{{$order.0}}">{{$order.0}}</a></div>
{{if $can_post}}
<div class="photos-upload-link" ><a href="{{$upload.1}}">{{$upload.0}}</a></div>
<div class="photos-upload-link"><a href="{{$upload.1}}">{{$upload.0}}</a></div>
{{/if}}
{{foreach $photos as $photo}}
<div class="photo-album-image-wrapper" id="photo-album-image-wrapper-{{$photo.id}}">
<a href="{{$photo.link}}" class="photo-album-photo-link" id="photo-album-photo-link-{{$photo.id}}" title="{{$photo.title}}">
<img src="{{$photo.src}}" alt="{{if $photo.album.name}}{{$photo.album.name}}{{elseif $photo.desc}}{{$photo.desc}}{{elseif $photo.alt}}{{$photo.alt}}{{else}}{{$photo.unknown}}{{/if}}" title="{{$photo.title}}" class="photo-album-photo lframe resize{{$photo.twist}}" id="photo-album-photo-{{$photo.id}}" />
<p class='caption'>{{$photo.desc}}</p>
<p class="caption" dir="auto">{{$photo.desc}}</p>
</a>
</div>
<div class="photo-album-image-wrapper-end"></div>

View file

@ -2,7 +2,7 @@
<h3>{{$title}}</h3>
<ul role="menubar" class="sidebar-photos-albums-ul">
<li role="menuitem" class="sidebar-photos-albums-li">
<a href="{{$baseurl}}/photos/{{$nick}}" class="sidebar-photos-albums-element" title="{{$title}}" >{{$recent}}</a>
<a href="{{$baseurl}}/photos/{{$nick}}" class="sidebar-photos-albums-element" title="{{$title}}">{{$recent}}</a>
</li>
{{if $albums}}
@ -19,6 +19,6 @@
</ul>
{{if $can_post}}
<div class="photos-upload-link" ><a href="{{$upload.1}}">{{$upload.0}}</a></div>
<div class="photos-upload-link"><a href="{{$upload.1}}">{{$upload.0}}</a></div>
{{/if}}
</div>

View file

@ -1,5 +1,5 @@
<form action="photos/{{$nickname}}/image/{{$resource_id}}/edit" method="post" id="photo_edit_form" >
<form action="photos/{{$nickname}}/image/{{$resource_id}}/edit" method="post" id="photo_edit_form">
<input type="hidden" name="item_id" value="{{$item_id}}" />
<input type="hidden" name="origaname" value="{{$album.2}}" />
@ -12,14 +12,14 @@
{{include file="field_radio.tpl" field=$rotate_cw}}
{{include file="field_radio.tpl" field=$rotate_ccw}}
<div id="photo-edit-perms" class="photo-edit-perms" >
<div id="photo-edit-perms" class="photo-edit-perms">
<a href="#photo-edit-perms-select" id="photo-edit-perms-menu" class="button popupbox" title="{{$permissions}}">
<span id="jot-perms-icon" class="icon {{$lockstate}}" ></span>{{$permissions}}
<span id="jot-perms-icon" class="icon {{$lockstate}}"></span>{{$permissions}}
</a>
<div id="photo-edit-perms-menu-end"></div>
<div style="display: none;">
<div id="photo-edit-perms-select" >
<div id="photo-edit-perms-select">
{{$aclselect nofilter}}
</div>
</div>

View file

@ -2,6 +2,6 @@
<a href="{{$photo.link}}" class="photo-top-photo-link" id="photo-top-photo-link-{{$photo.id}}" title="{{$photo.title}}">
<img src="{{$photo.src}}" alt="{{$photo.alt}}" title="{{$photo.title}}" class="photo-top-photo{{$photo.twist}}" id="photo-top-photo-{{$photo.id}}" />
</a>
<div class="photo-top-album-name"><a href="{{$photo.album.link}}" class="photo-top-album-link" title="{{$photo.album.alt}}" >{{$photo.album.name}}</a></div>
<div class="photo-top-album-name"><a href="{{$photo.album.link}}" class="photo-top-album-link" title="{{$photo.album.alt}}">{{$photo.album.name}}</a></div>
</div>

View file

@ -1,4 +1,4 @@
<div class="photos-upload-submit-wrapper" >
<div class="photos-upload-submit-wrapper">
<input type="submit" name="submit" value="{{$submit}}" id="photos-upload-submit" />
</div>

View file

@ -3,10 +3,10 @@
<div id="photos-usage-message">{{$usage}}</div>
<form action="photos/{{$nickname}}" enctype="multipart/form-data" method="post" name="photos-upload-form" id="photos-upload-form" >
<div id="photos-upload-new-wrapper" >
<form action="photos/{{$nickname}}" enctype="multipart/form-data" method="post" name="photos-upload-form" id="photos-upload-form">
<div id="photos-upload-new-wrapper">
<div id="photos-upload-newalbum-div">
<label id="photos-upload-newalbum-text" for="photos-upload-newalbum" >{{$newalbum}}</label>
<label id="photos-upload-newalbum-text" for="photos-upload-newalbum">{{$newalbum}}</label>
</div>
<input id="photos-upload-newalbum" type="text" name="newalbum" />
</div>
@ -19,15 +19,15 @@
</div>
<div id="photos-upload-exist-end"></div>
<div id="photos-upload-noshare-div" class="photos-upload-noshare-div" >
<div id="photos-upload-noshare-div" class="photos-upload-noshare-div">
<input id="photos-upload-noshare" type="checkbox" name="not_visible" value="1" checked/>
<label id="photos-upload-noshare-text" for="photos-upload-noshare" >{{$nosharetext}}</label>
<label id="photos-upload-noshare-text" for="photos-upload-noshare">{{$nosharetext}}</label>
</div>
<div id="photos-upload-perms" class="photos-upload-perms" >
<div id="photos-upload-perms" class="photos-upload-perms">
<a href="#photos-upload-permissions-wrapper" id="photos-upload-perms-menu" class="button popupbox" />
<span id="jot-perms-icon" class="icon {{$lockstate}}" ></span>{{$permissions}}
<span id="jot-perms-icon" class="icon {{$lockstate}}"></span>{{$permissions}}
</a>
</div>
<div id="photos-upload-perms-end"></div>
@ -45,6 +45,6 @@
{{$default_upload_box nofilter}}
{{$default_upload_submit nofilter}}
<div class="photos-upload-end" ></div>
<div class="photos-upload-end"></div>
</form>

View file

@ -7,7 +7,7 @@
<label id="profile-publish-yes-label-{{$instance}}" for="profile-publish-yes-{{$instance}}">{{$str_yes}}</label>
<input type="radio" name="profile_publish_{{$instance}}" id="profile-publish-yes-{{$instance}}" {{$yes_selected}} value="1" />
<div id="profile-publish-break-{{$instance}}" ></div>
<div id="profile-publish-break-{{$instance}}"></div>
</div>
<div id="profile-publish-no-wrapper-{{$instance}}">
<label id="profile-publish-no-label-{{$instance}}" for="profile-publish-no-{{$instance}}">{{$str_no}}</label>

View file

@ -2,8 +2,8 @@
<h3>{{$header}}</h3>
<div id="prvmail-wrapper" >
<form id="prvmail-form" action="message" method="post" >
<div id="prvmail-wrapper">
<form id="prvmail-form" action="message" method="post">
{{$parent nofilter}}
@ -17,15 +17,15 @@
<textarea rows="8" cols="72" class="prvmail-text" id="prvmail-text" name="body" tabindex="12">{{$text}}</textarea>
<div id="prvmail-submit-wrapper" >
<div id="prvmail-submit-wrapper">
<input type="submit" id="prvmail-submit" name="submit" value="{{$submit}}" tabindex="13" />
<div id="prvmail-upload-wrapper" >
<div id="prvmail-upload" class="icon border camera" title="{{$upload}}" ></div>
<div id="prvmail-upload-wrapper">
<div id="prvmail-upload" class="icon border camera" title="{{$upload}}"></div>
</div>
<div id="prvmail-link-wrapper" >
<div id="prvmail-link" class="icon border link" title="{{$insert}}" onclick="jotGetLink();" ></div>
<div id="prvmail-link-wrapper">
<div id="prvmail-link" class="icon border link" title="{{$insert}}" onclick="jotGetLink();"></div>
</div>
<div id="prvmail-rotator-wrapper" >
<div id="prvmail-rotator-wrapper">
<img id="prvmail-rotator" src="images/rotator.gif" alt="{{$wait}}" title="{{$wait}}" style="display: none;" />
</div>
</div>

View file

@ -13,40 +13,40 @@
<p id="register-fill-ext">{{$fillext}}</p>
{{if $oidlabel}}
<div id="register-openid-wrapper" >
<label for="register-openid" id="label-register-openid" >{{$oidlabel}}</label><input type="text" maxlength="60" size="32" name="openid_url" class="openid" id="register-openid" value="{{$openid}}" >
<div id="register-openid-wrapper">
<label for="register-openid" id="label-register-openid">{{$oidlabel}}</label><input type="text" maxlength="60" size="32" name="openid_url" class="openid" id="register-openid" value="{{$openid}}">
</div>
<div id="register-openid-end" ></div>
<div id="register-openid-end"></div>
{{/if}}
{{if $invitations}}
<p id="register-invite-desc">{{$invite_desc nofilter}}</p>
<div id="register-invite-wrapper" >
<label for="register-invite" id="label-register-invite" >{{$invite_label}}</label>
<input type="text" maxlength="60" size="32" name="invite_id" id="register-invite" value="{{$invite_id}}" >
<div id="register-invite-wrapper">
<label for="register-invite" id="label-register-invite">{{$invite_label}}</label>
<input type="text" maxlength="60" size="32" name="invite_id" id="register-invite" value="{{$invite_id}}">
</div>
<div id="register-name-end" ></div>
<div id="register-name-end"></div>
{{/if}}
<div id="register-name-wrapper" >
<label for="register-name" id="label-register-name" >{{$namelabel}}</label>
<div id="register-name-wrapper">
<label for="register-name" id="label-register-name">{{$namelabel}}</label>
<input type="text" maxlength="60" size="32" name="username" id="register-name" value="{{$username}}" required>
</div>
<div id="register-name-end" ></div>
<div id="register-name-end"></div>
{{if !$additional}}
<div id="register-email-wrapper" >
<label for="register-email" id="label-register-email" >{{$addrlabel}}</label>
<div id="register-email-wrapper">
<label for="register-email" id="label-register-email">{{$addrlabel}}</label>
<input type="text" maxlength="60" size="32" name="field1" id="register-email" value="{{$email}}" required>
</div>
<div id="register-email-end" ></div>
<div id="register-email-end"></div>
<div id="register-repeat-wrapper" >
<label for="register-repeat" id="label-register-repeat" >{{$addrlabel2}}</label>
<div id="register-repeat-wrapper">
<label for="register-repeat" id="label-register-repeat">{{$addrlabel2}}</label>
<input type="text" maxlength="60" size="32" name="repeat" id="register-repeat" value="" required>
</div>
<div id="register-repeat-end" ></div>
<div id="register-repeat-end"></div>
{{/if}}
{{if $ask_password}}
@ -54,13 +54,13 @@
{{include file="field_password.tpl" field=$password2}}
{{/if}}
<p id="register-nickname-desc" >{{$nickdesc nofilter}}</p>
<p id="register-nickname-desc">{{$nickdesc nofilter}}</p>
<div id="register-nickname-wrapper" >
<label for="register-nickname" id="label-register-nickname" >{{$nicklabel}}</label>
<div id="register-nickname-wrapper">
<label for="register-nickname" id="label-register-nickname">{{$nicklabel}}</label>
<input type="text" maxlength="60" size="32" name="nickname" id="register-nickname" value="{{$nickname}}" required><div id="register-sitename">@{{$sitename}}</div>
</div>
<div id="register-nickname-end" ></div>
<div id="register-nickname-end"></div>
<input type="input" id=tarpit" name="email" style="display: none;" placeholder="Don't enter anything here"/>
@ -87,7 +87,7 @@
<div id="register-submit-wrapper">
<input type="submit" name="submit" id="register-submit-button" value="{{$regbutt}}" />
</div>
<div id="register-submit-end" ></div>
<div id="register-submit-end"></div>
{{if !$additional}}
<h3>{{$importh}}</h3>

View file

@ -5,7 +5,7 @@
<div id="remove-account-desc">{{$desc nofilter}}</div>
<form action="{{$basedir}}/removeme" autocomplete="off" method="post" >
<form action="{{$basedir}}/removeme" autocomplete="off" method="post">
<input type="hidden" name="verify" value="{{$hash}}" />
<div id="remove-account-pass-wrapper">

View file

@ -32,7 +32,7 @@
</div>
<div class="wall-item-content" id="wall-item-content-{{$item.id}}">
<div class="wall-item-title" id="wall-item-title-{{$item.id}}">{{$item.title}}</div>
<div class="wall-item-title" id="wall-item-title-{{$item.id}}" dir="auto">{{$item.title}}</div>
<div class="wall-item-title-end"></div>
<div class="wall-item-body" id="wall-item-body-{{$item.id}}" dir="auto">{{$item.body_html nofilter}}</div>
{{if $item.has_cats}}
@ -56,9 +56,9 @@
<div class="wall-item-wrapper-end"></div>
<div class="wall-item-conv" id="wall-item-conv-{{$item.id}}">
<div class="wall-item-conv" id="wall-item-conv-{{$item.id}}" dir="auto">
{{if $item.conv}}
<a href='{{$item.conv.href}}' id='context-{{$item.id}}' title='{{$item.conv.title}}'>{{$item.conv.title}}</a>
<a href="{{$item.conv.href}}" id="context-{{$item.id}}" title="{{$item.conv.title}}">{{$item.conv.title}}</a>
{{/if}}
</div>

View file

@ -2,4 +2,4 @@
<div id="settings-nick-wrapper">
<div id="settings-nickname-desc" class="info-message">{{$desc nofilter}}</div>
</div>
<div id="settings-nick-end" ></div>
<div id="settings-nick-end"></div>

View file

@ -10,7 +10,7 @@
{{include file="field_input.tpl" field=$redirect}}
{{include file="field_input.tpl" field=$icon}}
<div class="settings-submit-wrapper" >
<div class="settings-submit-wrapper">
<input type="submit" name="submit" class="settings-submit" value="{{$submit}}" />
<!-- <input type="submit" name="cancel" class="settings-submit" value="{{$cancel}}" /> -->
</div>

View file

@ -1 +1 @@
<script type="text/javascript" src="view/js/country.js?v={{$smarty.const.FRIENDICA_VERSION}}" ></script>
<script type="text/javascript" src="view/js/country.js?v={{$smarty.const.FRIENDICA_VERSION}}"></script>

View file

@ -8,7 +8,7 @@
<p><img src="{{$image_url}}" id="croppa" class="imgCrop" alt="{{$title}}"></p>
</div>
<div id="cropimage-preview-wrapper" >
<div id="cropimage-preview-wrapper">
<div id="previewWrap" class="crop-preview"></div>
</div>

View file

@ -18,7 +18,7 @@
<input type="hidden" name="form_security_token" value="{{$form_security_token}}">
<div>{{$regenerate_message}}</div>
<div class="form-group pull-right settings-submit-wrapper" >
<div class="form-group pull-right settings-submit-wrapper">
<button type="submit" name="action" id="confirm-submit-button" class="btn btn-primary confirm-button" value="regenerate">{{$regenerate_label}}</button>
</div>
</form>

View file

@ -11,7 +11,7 @@
{{include file="field_input.tpl" field=$verify_code}}
<div class="form-group settings-submit-wrapper" >
<div class="form-group settings-submit-wrapper">
<button type="submit" name="action" id="confirm-submit-button" class="btn btn-primary confirm-button" value="verify">{{$verify_label}}</button>
</div>
</form>

View file

@ -7,8 +7,8 @@
{{if $dropping}}
<div id="item-delete-selected" class="fakelink" onclick="deleteCheckedItems();">
<div id="item-delete-selected-icon" class="icon drophide" title="{{$dropping}}" onmouseover="imgbright(this);" onmouseout="imgdull(this);" ></div>
<div id="item-delete-selected-desc" >{{$dropping}}</div>
<div id="item-delete-selected-icon" class="icon drophide" title="{{$dropping}}" onmouseover="imgbright(this);" onmouseout="imgdull(this);"></div>
<div id="item-delete-selected-desc">{{$dropping}}</div>
</div>
<img id="item-delete-selected-rotator" class="like-rotator" src="images/rotator.gif" style="display: none;" />
<div id="item-delete-selected-end"></div>

View file

@ -1,14 +1,14 @@
<form action="uimport" method="post" id="uimport-form" enctype="multipart/form-data">
<h1>{{$import.title}}</h1>
<p>{{$import.intro}}</p>
<p>{{$import.instruct}}</p>
<p><b>{{$import.warn}}</b></p>
{{include file="field_custom.tpl" field=$import.field}}
<div id="register-submit-wrapper">
<input type="submit" name="submit" id="register-submit-button" value="{{$regbutt}}" />
</div>
<div id="register-submit-end" ></div>
</form>
<form action="uimport" method="post" id="uimport-form" enctype="multipart/form-data">
<h1>{{$import.title}}</h1>
<p>{{$import.intro}}</p>
<p>{{$import.instruct}}</p>
<p><b>{{$import.warn}}</b></p>
{{include file="field_custom.tpl" field=$import.field}}
<div id="register-submit-wrapper">
<input type="submit" name="submit" id="register-submit-button" value="{{$regbutt}}" />
</div>
<div id="register-submit-end"></div>
</form>

View file

@ -56,7 +56,7 @@
<div class="wall-item-ago" id="wall-item-ago-{{$item.id}}" title="{{$item.localtime}}"><time class="dt-published" datetime="{{$item.localtime}}">{{$item.ago}}</time><span class="pinned">{{$item.pinned}}</span></div>
</div>
<div class="wall-item-content" id="wall-item-content-{{$item.id}}">
<div class="wall-item-title p-name" id="wall-item-title-{{$item.id}}">{{$item.title}}</div>
<div class="wall-item-title p-name" id="wall-item-title-{{$item.id}}" dir="auto">{{$item.title}}</div>
<div class="wall-item-title-end"></div>
<div class="wall-item-body" id="wall-item-body-{{$item.id}}">
<span class="e-content" dir="auto">{{$item.body_html nofilter}}<span>

View file

@ -4,8 +4,8 @@
<h4>{{$subheader}}</h4>
<div id="prvmail-wrapper" >
<form id="prvmail-form" action="wallmessage/{{$nickname}}" method="post" >
<div id="prvmail-wrapper">
<form id="prvmail-form" action="wallmessage/{{$nickname}}" method="post">
{{$parent nofilter}}
@ -19,12 +19,12 @@
<textarea rows="8" cols="72" class="prvmail-text" id="prvmail-text" name="body" tabindex="12">{{$text}}</textarea>
<div id="prvmail-submit-wrapper" >
<div id="prvmail-submit-wrapper">
<input type="submit" id="prvmail-submit" name="submit" value="Submit" tabindex="13" />
<div id="prvmail-link-wrapper" >
<div id="prvmail-link" class="icon border link" title="{{$insert}}" onclick="jotGetLink();" ></div>
<div id="prvmail-link-wrapper">
<div id="prvmail-link" class="icon border link" title="{{$insert}}" onclick="jotGetLink();"></div>
</div>
<div id="prvmail-rotator-wrapper" >
<div id="prvmail-rotator-wrapper">
<img id="prvmail-rotator" src="images/rotator.gif" alt="{{$wait}}" title="{{$wait}}" style="display: none;" />
</div>
</div>

View file

@ -3,7 +3,7 @@
<h3>{{$etitle}}</h3>
<ul class="sidebar-calendar-export-ul">
<li role="menuitem" class="sidebar-calendar-export-li"><a href="{{$baseurl}}/cal/{{$user}}/export/ical" >{{$export_ical}}</a></li>
<li role="menuitem" class="sidebar-calendar-export-li"><a href="{{$baseurl}}/cal/{{$user}}/export/csv" >{{$export_csv}}</a></li>
<li role="menuitem" class="sidebar-calendar-export-li"><a href="{{$baseurl}}/cal/{{$user}}/export/ical">{{$export_ical}}</a></li>
<li role="menuitem" class="sidebar-calendar-export-li"><a href="{{$baseurl}}/cal/{{$user}}/export/csv">{{$export_csv}}</a></li>
</ul>
</div>

View file

@ -2,7 +2,7 @@
<div id="follow-sidebar" class="widget">
<h3>{{$connect}}</h3>
<div id="connect-desc">{{$desc nofilter}}</div>
<form action="follow" method="get" >
<form action="follow" method="get">
<input id="side-follow-url" type="text" name="url" value="{{$value}}" size="24" placeholder="{{$hint}}" title="{{$hint}}" /><input id="side-follow-submit" type="submit" name="submit" value="{{$follow}}" />
</form>
</div>

View file

@ -5,13 +5,13 @@
<form action="dirfind" method="get" />
<input id="side-peoplefind-url" type="text" name="search" size="24" title="{{$nv.hint}}" /><input id="side-peoplefind-submit" type="submit" name="submit" value="{{$nv.findthem}}" />
</form>
<div class="side-link" id="side-match-link"><a href="match" >{{$nv.similar}}</a></div>
<div class="side-link" id="side-suggest-link"><a href="suggest" >{{$nv.suggest}}</a></div>
<div class="side-link" id="side-directory-link"><a href="directory" >{{$nv.local_directory}}</a></div>
<div class="side-link" id="side-directory-link"><a href="{{$nv.global_dir}}" target="extlink" >{{$nv.directory}}</a></div>
<div class="side-link" id="side-random-profile-link" ><a href="randprof" target="extlink" >{{$nv.random}}</a></div>
<div class="side-link" id="side-match-link"><a href="match">{{$nv.similar}}</a></div>
<div class="side-link" id="side-suggest-link"><a href="suggest">{{$nv.suggest}}</a></div>
<div class="side-link" id="side-directory-link"><a href="directory">{{$nv.local_directory}}</a></div>
<div class="side-link" id="side-directory-link"><a href="{{$nv.global_dir}}" target="extlink">{{$nv.directory}}</a></div>
<div class="side-link" id="side-random-profile-link"><a href="randprof" target="extlink">{{$nv.random}}</a></div>
{{if $nv.inv}}
<div class="side-link" id="side-invite-link" ><a href="invite" >{{$nv.inv}}</a></div>
<div class="side-link" id="side-invite-link"><a href="invite">{{$nv.inv}}</a></div>
{{/if}}
</div>

View file

@ -27,7 +27,7 @@ function showHideForumlist() {
<a href="{{$forum.external_url}}" title="{{$forum.link_desc}}" class="label sparkle" target="_blank" rel="noopener noreferrer">
<img class="forumlist-img" src="{{$forum.micro}}" alt="{{$forum.link_desc}}" />
</a>
<a class="forum-widget-link {{if $forum.selected}}forum-selected{{/if}}" id="forum-widget-link-{{$forum.id}}" href="{{$forum.url}}" >{{$forum.name}}</a>
<a class="forum-widget-link {{if $forum.selected}}forum-selected{{/if}}" id="forum-widget-link-{{$forum.id}}" href="{{$forum.url}}">{{$forum.name}}</a>
</li>
{{/if}}
@ -37,7 +37,7 @@ function showHideForumlist() {
<a href="{{$forum.external_url}}" title="{{$forum.link_desc}}" class="label sparkle" target="_blank" rel="noopener noreferrer">
<img class="forumlist-img" src="{{$forum.micro}}" alt="{{$forum.link_desc}}" />
</a>
<a class="forum-widget-link {{if $forum.selected}}forum-selected{{/if}}" id="forum-widget-link-{{$forum.id}}" href="{{$forum.url}}" >{{$forum.name}}</a>
<a class="forum-widget-link {{if $forum.selected}}forum-selected{{/if}}" id="forum-widget-link-{{$forum.id}}" href="{{$forum.url}}">{{$forum.name}}</a>
</li>
{{/if}}
{{/foreach}}

View file

@ -42,7 +42,7 @@
data-role="insert-formatting" data-bbcode="video" data-id="{{$id}}"></a></li>
</ul>
<div class="comment-edit-bb-end"></div>
<textarea id="comment-edit-text-{{$id}}" class="comment-edit-text-empty" name="body" placeholder="{{$comment}}" onFocus="commentOpen(this,{{$id}});cmtBbOpen(this, {{$id}});" onBlur="commentClose(this,{{$id}});cmtBbClose(this,{{$id}});">{{if $threaded != false}}{{$default}}{{/if}}</textarea>
<textarea id="comment-edit-text-{{$id}}" class="comment-edit-text-empty" name="body" placeholder="{{$comment}}" onFocus="commentOpen(this,{{$id}});cmtBbOpen(this, {{$id}});" onBlur="commentClose(this,{{$id}});cmtBbClose(this,{{$id}});" dir="auto">{{if $threaded != false}}{{$default}}{{/if}}</textarea>
{{if $qcomment}}
<select id="qcomment-select-{{$id}}" name="qcomment-{{$id}}" class="qcomment" onchange="qCommentInsert(this,{{$id}});">
<option value=""></option>

View file

@ -4,41 +4,41 @@
<div id="site-location">{{$sitelocation}}</div>
{{if $nav.logout}}<a id="nav-logout-link" class="nav-link {{$nav.logout.2}}" href="{{$nav.logout.0}}" title="{{$nav.logout.3}}" >{{$nav.logout.1}}</a> {{/if}}
{{if $nav.login}}<a id="nav-login-link" class="nav-login-link {{$nav.login.2}}" href="{{$nav.login.0}}" title="{{$nav.login.3}}" >{{$nav.login.1}}</a> {{/if}}
{{if $nav.logout}}<a id="nav-logout-link" class="nav-link {{$nav.logout.2}}" href="{{$nav.logout.0}}" title="{{$nav.logout.3}}">{{$nav.logout.1}}</a> {{/if}}
{{if $nav.login}}<a id="nav-login-link" class="nav-login-link {{$nav.login.2}}" href="{{$nav.login.0}}" title="{{$nav.login.3}}">{{$nav.login.1}}</a> {{/if}}
<span id="nav-link-wrapper" >
<span id="nav-link-wrapper">
{{if $nav.register}}<a id="nav-register-link" class="nav-commlink {{$nav.register.2}} {{$sel.register}}" href="{{$nav.register.0}}" title="{{$nav.register.3}}" >{{$nav.register.1}}</a>{{/if}}
{{if $nav.register}}<a id="nav-register-link" class="nav-commlink {{$nav.register.2}} {{$sel.register}}" href="{{$nav.register.0}}" title="{{$nav.register.3}}">{{$nav.register.1}}</a>{{/if}}
{{if $nav.help}} <a id="nav-help-link" class="nav-link {{$nav.help.2}}" target="friendica-help" href="{{$nav.help.0}}" title="{{$nav.help.3}}" >{{$nav.help.1}}</a>{{/if}}
{{if $nav.help}} <a id="nav-help-link" class="nav-link {{$nav.help.2}}" target="friendica-help" href="{{$nav.help.0}}" title="{{$nav.help.3}}">{{$nav.help.1}}</a>{{/if}}
{{if $nav.tos}} <a id="nav-tos-link" class="nav-link {{$nav.tos.2}}" href="{{$nav.tos.0}}" title="{{$nav.tos.3}}" >{{$nav.tos.1}}</a>{{/if}}
{{if $nav.tos}} <a id="nav-tos-link" class="nav-link {{$nav.tos.2}}" href="{{$nav.tos.0}}" title="{{$nav.tos.3}}">{{$nav.tos.1}}</a>{{/if}}
{{if $nav.apps}}<a id="nav-apps-link" class="nav-link {{$nav.apps.2}}" href="{{$nav.apps.0}}" title="{{$nav.apps.3}}" >{{$nav.apps.1}}</a>{{/if}}
{{if $nav.apps}}<a id="nav-apps-link" class="nav-link {{$nav.apps.2}}" href="{{$nav.apps.0}}" title="{{$nav.apps.3}}">{{$nav.apps.1}}</a>{{/if}}
<a accesskey="s" id="nav-search-link" class="nav-link {{$nav.search.2}}" href="{{$nav.search.0}}" title="{{$nav.search.3}}" >{{$nav.search.1}}</a>
<a id="nav-directory-link" class="nav-link {{$nav.directory.2}}" href="{{$nav.directory.0}}" title="{{$nav.directory.3}}" >{{$nav.directory.1}}</a>
<a accesskey="s" id="nav-search-link" class="nav-link {{$nav.search.2}}" href="{{$nav.search.0}}" title="{{$nav.search.3}}">{{$nav.search.1}}</a>
<a id="nav-directory-link" class="nav-link {{$nav.directory.2}}" href="{{$nav.directory.0}}" title="{{$nav.directory.3}}">{{$nav.directory.1}}</a>
{{if $nav.admin}}<a accesskey="a" id="nav-admin-link" class="nav-link {{$nav.admin.2}}" href="{{$nav.admin.0}}" title="{{$nav.admin.3}}" >{{$nav.admin.1}}</a>{{/if}}
{{if $nav.admin}}<a accesskey="a" id="nav-admin-link" class="nav-link {{$nav.admin.2}}" href="{{$nav.admin.0}}" title="{{$nav.admin.3}}">{{$nav.admin.1}}</a>{{/if}}
{{if $nav.network}}
<a accesskey="n" id="nav-network-link" class="nav-commlink {{$nav.network.2}} {{$sel.network}}" href="{{$nav.network.0}}" title="{{$nav.network.3}}" >{{$nav.network.1}}</a>
<a accesskey="n" id="nav-network-link" class="nav-commlink {{$nav.network.2}} {{$sel.network}}" href="{{$nav.network.0}}" title="{{$nav.network.3}}">{{$nav.network.1}}</a>
<span id="net-update" class="nav-ajax-left"></span>
{{/if}}
{{if $nav.home}}
<a accesskey="p" id="nav-home-link" class="nav-commlink {{$nav.home.2}} {{$sel.home}}" href="{{$nav.home.0}}" title="{{$nav.home.3}}" >{{$nav.home.1}}</a>
<a accesskey="p" id="nav-home-link" class="nav-commlink {{$nav.home.2}} {{$sel.home}}" href="{{$nav.home.0}}" title="{{$nav.home.3}}">{{$nav.home.1}}</a>
<span id="home-update" class="nav-ajax-left"></span>
{{/if}}
{{if $nav.community}}
<a accesskey="c" id="nav-community-link" class="nav-commlink {{$nav.community.2}} {{$sel.community}}" href="{{$nav.community.0}}" title="{{$nav.community.3}}" >{{$nav.community.1}}</a>
<a accesskey="c" id="nav-community-link" class="nav-commlink {{$nav.community.2}} {{$sel.community}}" href="{{$nav.community.0}}" title="{{$nav.community.3}}">{{$nav.community.1}}</a>
{{/if}}
{{if $nav.introductions}}
<a id="nav-notification-link" class="nav-commlink {{$nav.introductions.2}} {{$sel.introductions}}" href="{{$nav.introductions.0}}" title="{{$nav.introductions.3}}" >{{$nav.introductions.1}}</a>
<a id="nav-notification-link" class="nav-commlink {{$nav.introductions.2}} {{$sel.introductions}}" href="{{$nav.introductions.0}}" title="{{$nav.introductions.3}}">{{$nav.introductions.1}}</a>
<span id="intro-update" class="nav-ajax-left"></span>
{{/if}}
{{if $nav.messages}}
<a id="nav-messages-link" class="nav-commlink {{$nav.messages.2}} {{$sel.messages}}" href="{{$nav.messages.0}}" title="{{$nav.messages.3}}" >{{$nav.messages.1}}</a>
<a id="nav-messages-link" class="nav-commlink {{$nav.messages.2}} {{$sel.messages}}" href="{{$nav.messages.0}}" title="{{$nav.messages.3}}">{{$nav.messages.1}}</a>
<span id="mail-update" class="nav-ajax-left"></span>
{{/if}}
@ -57,9 +57,9 @@
{{/if}}
{{if $nav.settings}}<a id="nav-settings-link" class="nav-link {{$nav.settings.2}}" href="{{$nav.settings.0}}" title="{{$nav.settings.3}}">{{$nav.settings.1}}</a>{{/if}}
{{if $nav.profiles}}<a id="nav-profiles-link" class="nav-link {{$nav.profiles.2}}" href="{{$nav.profiles.0}}" title="{{$nav.profiles.3}}" >{{$nav.profiles.1}}</a>{{/if}}
{{if $nav.profiles}}<a id="nav-profiles-link" class="nav-link {{$nav.profiles.2}}" href="{{$nav.profiles.0}}" title="{{$nav.profiles.3}}">{{$nav.profiles.1}}</a>{{/if}}
{{if $nav.contacts}}<a id="nav-contacts-link" class="nav-link {{$nav.contacts.2}}" href="{{$nav.contacts.0}}" title="{{$nav.contacts.3}}" >{{$nav.contacts.1}}</a>{{/if}}
{{if $nav.contacts}}<a id="nav-contacts-link" class="nav-link {{$nav.contacts.2}}" href="{{$nav.contacts.0}}" title="{{$nav.contacts.3}}">{{$nav.contacts.1}}</a>{{/if}}
{{if $nav.delegation}}<a id="nav-delegation-link" class="nav-link {{$nav.delegation.2}} {{$sel.delegation}}" href="{{$nav.delegation.0}}" title="{{$nav.delegation.3}}">{{$nav.delegation.1}}</a>{{/if}}

View file

@ -22,7 +22,7 @@
{{foreach $users as $u}}
<tr>
<td><img class="avatar-nano" src="{{$u.micro}}" title="{{$u.nickname}}"></td>
<td><a href="{{$u.url}}" title="{{$u.nickname}}" >{{$u.name}}</a></td>
<td><a href="{{$u.url}}" title="{{$u.nickname}}">{{$u.name}}</a></td>
<td>{{$u.email}}</td>
<td>{{$u.deleted}}</td>
</tr>

View file

@ -1,6 +1,6 @@
<div id="photo-album-edit-wrapper">
<form name="photo-album-edit-form" id="photo-album-edit-form" action="photos/{{$nickname}}/album/{{$hexalbum}}" method="post" >
<label id="photo-album-edit-name-label" for="photo-album-edit-name" >{{$nametext}}</label>
<form name="photo-album-edit-form" id="photo-album-edit-form" action="photos/{{$nickname}}/album/{{$hexalbum}}" method="post">
<label id="photo-album-edit-name-label" for="photo-album-edit-name">{{$nametext}}</label>
<div class="pull-left photo-album-edit-name">
<input class="form-control" type="text" size="64" name="albumname" value="{{$album}}" id="photo-album-edit-name">
</div>

View file

@ -39,7 +39,7 @@
</span>
</p>
<p>
<textarea id="comment-edit-text-{{$id}}" class="comment-edit-text-empty form-control text-autosize" name="body" placeholder="{{$comment}}" rows="3" data-default="{{$default}}">{{$default}}</textarea>
<textarea id="comment-edit-text-{{$id}}" class="comment-edit-text-empty form-control text-autosize" name="body" placeholder="{{$comment}}" rows="3" data-default="{{$default}}" dir="auto">{{$default}}</textarea>
</p>
{{if $qcomment}}
<p>

View file

@ -2,7 +2,7 @@
<form action="{{$confirm_url}}" id="confirm-form" method="{{$method}}" class="generic-page-wrapper">
<div id="confirm-message">{{$message}}</div>
<div class="form-group pull-right settings-submit-wrapper" >
<div class="form-group pull-right settings-submit-wrapper">
<button type="submit" name="{{$confirm_name}}" id="confirm-submit-button" class="btn btn-primary confirm-button" value="{{$confirm}}">{{$confirm}}</button>
<button type="submit" name="canceled" id="confirm-cancel-button" class="btn confirm-button" data-dismiss="modal">{{$cancel}}</button>
</div>

Some files were not shown because too many files have changed in this diff Show more