diff options
86 files changed, 3064 insertions, 1091 deletions
diff --git a/.homeinstall/README.md b/.homeinstall/README.md index aeecb9184..d63931a84 100644 --- a/.homeinstall/README.md +++ b/.homeinstall/README.md @@ -5,8 +5,8 @@ Run hubzilla-setup.sh for an unattended installation of hubzilla. The script is known to work without adjustments with + Hardware - - Mini-PC with Debian-9.2-amd64, or - - Rapberry 3 with Raspbian, Debian-9.3 + - Mini-PC with Debian-9.5-amd64, or + - Rapberry 3 with Raspbian, Debian-9.5 + DynDNS - selfHOST.de - freedns.afraid.org @@ -38,7 +38,7 @@ Software - apt-get install git - mkdir -p /var/www - cd /var/www - - git clone https://github.com/redmatrix/hubzilla.git html + - git clone https://framagit.org/hubzilla/core.git html - cd html/.homeinstall - cp hubzilla-config.txt.template hubzilla-config.txt - nano hubzilla-config.txt @@ -100,7 +100,7 @@ Create bootable USB drive with Debian on it.You could use Example for command dd... su - - dd if=2017-11-29-raspbian-stretch.img of=/dev/mmcblk0 + dd if=2018-10-09-raspbian-stretch.img of=/dev/mmcblk0 Do not forget to unmount the SD card before and check if unmounted like in this example... @@ -164,7 +164,7 @@ Make the directory for apache and change diretory to it Clone hubzilla from git ("git pull" will update it later) - git clone https://framagit.org/hubzilla/core html + git clone https://framagit.org/hubzilla/core.git html Change to the install script @@ -217,14 +217,20 @@ After the daily script was executed at 05:30 (am) - optionally view the daily log under yourdomain.org/admin/logs/ - set the logfile to var/www/html/hubzilla-daily.log -## Note for the Rasperry -The script was tested with an Raspberry 3 under Raspian (Debian 9.3, 2017-11-29-raspbian-stretch.img). +## Install Hubzilla in a Virtual Machine for Test Purposes + +Modify the file "hubzilla-config.txt". + + nano hubzilla-config.txt -It is recommended to deinstall these programms to avoid endless updates. Use... +There use + + le_domain=localhost + +## Note for the Rasperry - sudo apt-get purge wolfram-engine sonic-pi - sudo apt-get autoremove +The script was tested with an Raspberry 3 under Raspian (Debian 9.5, 2018-10-09-raspbian-stretch.img). It is recommended to run the Raspi without graphical frontend (X-Server). Use... @@ -234,7 +240,7 @@ to boot the Rapsi to the client console. DO NOT FORGET TO CHANGE THE DEFAULT PASSWORD FOR USER PI! -On a Raspian Stretch (Debian 9) the validation of the mail address fails for the very first user. +If the validation of the mail address fails for the very first registered user... This used to happen on some *bsd distros but there was some work to fix that a year ago (2017). So if your system isn't registered in DNS or DNS isn't active do diff --git a/.homeinstall/hubzilla-config.txt.template b/.homeinstall/hubzilla-config.txt.template index 2776ccd27..e42da0e4e 100644 --- a/.homeinstall/hubzilla-config.txt.template +++ b/.homeinstall/hubzilla-config.txt.template @@ -18,6 +18,8 @@ db_pass= # Example: my.cooldomain.org # Example: cooldomain.org # +# Example: localhost (test installation without certificates for httpS) +# # Email is optional # # diff --git a/.homeinstall/hubzilla-setup.sh b/.homeinstall/hubzilla-setup.sh index ff101086c..1f3ad5db5 100755 --- a/.homeinstall/hubzilla-setup.sh +++ b/.homeinstall/hubzilla-setup.sh @@ -816,15 +816,35 @@ install_run_selfhost ping_domain configure_cron_freedns configure_cron_selfhost -install_letsencrypt -configure_apache_for_https -check_https + +if [ "$le_domain" != "localhost" ] +then + install_letsencrypt + configure_apache_for_https + check_https +else + print_info "is localhost - skipped installation of letsencrypt and configuration of apache for https" +fi + install_hubzilla -rewrite_to_https -install_rsnapshot + +if [ "$le_domain" != "localhost" ] +then + rewrite_to_https + install_rsnapshot +else + print_info "is localhost - skipped rewrite to https and installation of rsnapshot" +fi + configure_cron_daily -install_cryptosetup -write_uninstall_script + +if [ "$le_domain" != "localhost" ] +then + install_cryptosetup + write_uninstall_script +else + print_info "is localhost - skipped installation of cryptosetup" +fi #set +x # stop debugging from here @@ -1,3 +1,30 @@ +Hubzilla 3.8.6 (2018-12-03) + - Prevent incompatible export files (osada/zap) from being imported + - Catch exception if readImageBlob() receives bogus data + - Streamline PDF previews + - Allow notification filtering by name or address + - Fix too restrictive attached photo permissions + - Update ES translation + - Use flex for the default template + - Do not store serialized pconfig value received via to Module/Pconfig.php + - Update jquery-file-upload lib and move to composer + - Update imagesloaded lib and move to composer + - Fix activitypub tag notifications + - Fix call to undefined function in PConfig + - Fix typo which prevented propagation of comments to zot6 (dev) + - Activitypub: add support for pterotype (wordpress plugin) + - Openstreetmap: check validity of lat+lon before rendering a map + + +Hubzilla 3.8.5 (2018-11-19) + - Fix pconfig for new installs + - Fix delayed publication of posts in combination with channel clones + - Fix issue where photo filesize was not updated in the DB when a photo was edited + - Fix issue where the original photo size was not set correct in the DB + - Fix delivery issue in zot_fetch() + - Fix typo in channel reputation addon + + Hubzilla 3.8.4 (2018-11-14) - Fix xss issue (thanks to Eduardo) - Implement hook in enotify to be used by superblock diff --git a/Zotlabs/Daemon/Cron.php b/Zotlabs/Daemon/Cron.php index 25e49b817..8b6b42c8a 100644 --- a/Zotlabs/Daemon/Cron.php +++ b/Zotlabs/Daemon/Cron.php @@ -94,6 +94,29 @@ class Cron { @time_sleep_until(microtime(true) + (float) $interval); } } + + // Clean expired photos from cache + + $age = get_config('system','active_expire_days', '30'); + $r = q("SELECT DISTINCT xchan, content FROM photo WHERE photo_usage = %d AND expires < %s - INTERVAL %s", + intval(PHOTO_CACHE), + db_utcnow(), + db_quoteinterval($age . ' DAY') + ); + if($r) { + foreach($r as $rr) { + $file = dbunescbin($rr['content']); + if(is_file($file)) { + @unlink($file); + logger('info: deleted cached photo file ' . $file, LOGGER_DEBUG); + } + } + } + q("DELETE FROM photo WHERE photo_usage = %d AND expires < %s - INTERVAL %s", + intval(PHOTO_CACHE), + db_utcnow(), + db_quoteinterval($age . ' DAY') + ); // publish any applicable items that were set to be published in the future // (time travel posts). Restrict to items that have come of age in the last diff --git a/Zotlabs/Lib/Enotify.php b/Zotlabs/Lib/Enotify.php index 523ccf93a..5e5798cac 100644 --- a/Zotlabs/Lib/Enotify.php +++ b/Zotlabs/Lib/Enotify.php @@ -828,7 +828,7 @@ class Enotify { $x = array( 'notify_link' => $item['llink'], 'name' => $item['author']['xchan_name'], - 'addr' => $item['author']['xchan_addr'], + 'addr' => (($item['author']['xchan_addr']) ? $item['author']['xchan_addr'] : $item['author']['xchan_url']), 'url' => $item['author']['xchan_url'], 'photo' => $item['author']['xchan_photo_s'], 'when' => relative_date(($edit)? $item['edited'] : $item['created']), diff --git a/Zotlabs/Module/Pconfig.php b/Zotlabs/Module/Pconfig.php index 44fe5d9a9..f31d5fdf6 100644 --- a/Zotlabs/Module/Pconfig.php +++ b/Zotlabs/Module/Pconfig.php @@ -22,6 +22,11 @@ class Pconfig extends \Zotlabs\Web\Controller { $k = trim(escape_tags($_POST['k'])); $v = trim($_POST['v']); $aj = intval($_POST['aj']); + + // Do not store "serialized" data received in the $_POST + if (preg_match('|^a:[0-9]+:{.*}$|s',$v) || preg_match('O:8:"stdClass":[0-9]+:{.*}$|s',$v)) { + return; + } if(in_array(argv(2),$this->disallowed_pconfig())) { notice( t('This setting requires special processing and editing has been blocked.') . EOL); diff --git a/Zotlabs/Module/Photo.php b/Zotlabs/Module/Photo.php index 30e8340e2..d85db7307 100644 --- a/Zotlabs/Module/Photo.php +++ b/Zotlabs/Module/Photo.php @@ -1,19 +1,20 @@ <?php + + namespace Zotlabs\Module; require_once('include/security.php'); require_once('include/attach.php'); require_once('include/photo/photo_driver.php'); - class Photo extends \Zotlabs\Web\Controller { function init() { - $prvcachecontrol = false; $streaming = null; $channel = null; $person = 0; + $renew = false; switch(argc()) { case 4: @@ -29,7 +30,15 @@ class Photo extends \Zotlabs\Web\Controller { killme(); // NOTREACHED } - + + $cache_mode = array( + 'on' => get_config('system','photo_cache_enable', 0), + 'age' => 86400, + 'exp' => true, + 'leak' => false + ); + call_hooks('cache_mode_hook', $cache_mode); + $observer_xchan = get_observer_hash(); $ismodified = $_SERVER['HTTP_IF_MODIFIED_SINCE']; @@ -106,13 +115,14 @@ class Photo extends \Zotlabs\Web\Controller { License link: http://creativecommons.org/licenses/by/3.0/ */ + // @FIXME It seems this part doesn't work because we are not setting such cookie $cookie_value = false; if (isset($_COOKIE['devicePixelRatio'])) { $cookie_value = intval($_COOKIE['devicePixelRatio']); } else { // Force revalidation of cache on next request - $cache_directive = 'no-cache'; + // $prvcachecontrol = 'no-cache'; $status = 'no cookie'; } @@ -129,27 +139,43 @@ class Photo extends \Zotlabs\Web\Controller { $resolution = 1; } - $r = q("SELECT uid, photo_usage FROM photo WHERE resource_id = '%s' AND imgscale = %d LIMIT 1", + $r = q("SELECT uid, photo_usage, expires, display_path FROM photo WHERE resource_id = '%s' AND imgscale = %d LIMIT 1", dbesc($photo), intval($resolution) ); if($r) { - $allowed = (-1); - if(intval($r[0]['photo_usage'])) { + $u = intval($r[0]['photo_usage']); + if($u) { $allowed = 1; - if(intval($r[0]['photo_usage']) === PHOTO_COVER) + if($u === PHOTO_COVER) if($resolution < PHOTO_RES_COVER_1200) $allowed = (-1); - if(intval($r[0]['photo_usage']) === PHOTO_PROFILE) + if($u === PHOTO_PROFILE) if(! in_array($resolution,[4,5,6])) $allowed = (-1); + if($u === PHOTO_CACHE) { + // Cached image leak protection + if(! (local_channel() || $cache_mode['leak'])) { + header("Location: " . $r[0]['display_path']); + killme(); + } + // Revalidate cache + if($cache_mode['on'] && strtotime($r[0]['expires']) - 60 < time()) { + $cache = array( + 'url' => $r[0]['display_path'], + 'uid' => $r[0]['uid'] + ); + call_hooks('cache_url_hook', $cache); + if(! $cache['status']) + http_status_exit(404,'not found'); + } + } } - if($allowed === (-1)) { + if($allowed === (-1)) $allowed = attach_can_view($r[0]['uid'],$observer_xchan,$photo); - } $channel = channelx_by_n($r[0]['uid']); @@ -160,16 +186,19 @@ class Photo extends \Zotlabs\Web\Controller { ); $exists = (($e) ? true : false); - + if($exists && $allowed) { + $expires = strtotime($e[0]['expires'] . 'Z'); $data = dbunescbin($e[0]['content']); $filesize = $e[0]['filesize']; $mimetype = $e[0]['mimetype']; $modified = strtotime($e[0]['edited'] . 'Z'); - if(intval($e[0]['os_storage'])) + + if(intval($e[0]['os_storage'])) { $streaming = $data; + } if($e[0]['allow_cid'] != '' || $e[0]['allow_gid'] != '' || $e[0]['deny_gid'] != '' || $e[0]['deny_gid'] != '') - $prvcachecontrol = true; + $prvcachecontrol = 'no-store, no-cache, must-revalidate'; } else { if(! $allowed) { @@ -180,9 +209,9 @@ class Photo extends \Zotlabs\Web\Controller { } } - } else { + } + else http_status_exit(404,'not found'); - } } header_remove('Pragma'); @@ -225,24 +254,14 @@ class Photo extends \Zotlabs\Web\Controller { $mimetype = $ph->getType(); } } - - // @FIXME Seems never invoked - // Writing in cachefile - if (isset($cachefile) && $cachefile != '') { - file_put_contents($cachefile, $data); - $modified = filemtime($cachefile); - } - - header("Content-type: " . $mimetype); - - if($prvcachecontrol) { + if(isset($prvcachecontrol)) { // it is a private photo that they have no permission to view. // tell the browser not to cache it, in case they authenticate // and subsequently have permission to see it - header("Cache-Control: no-store, no-cache, must-revalidate"); + header("Cache-Control: " . $prvcachecontrol); } else { @@ -255,18 +274,23 @@ class Photo extends \Zotlabs\Web\Controller { // This has performance considerations but we highly recommend you // leave it alone. - $cache = get_config('system','photo_cache_time', 86400); // 1 day by default + $maxage = $cache_mode['age']; - header("Expires: " . gmdate("D, d M Y H:i:s", time() + $cache) . " GMT"); - header("Cache-Control: max-age=" . $cache); + if($cache_mode['exp'] || (! isset($expires)) || (isset($expires) && $expires - 60 < time())) + $expires = time() + $maxage; + else + $maxage = $expires - time(); + + header("Expires: " . gmdate("D, d M Y H:i:s", $expires) . " GMT"); + header("Cache-Control: max-age=" . $maxage); } + header("Content-type: " . $mimetype); header("Last-Modified: " . gmdate("D, d M Y H:i:s", $modified) . " GMT"); header("Content-Length: " . (isset($filesize) ? $filesize : strlen($data))); // If it's a file resource, stream it. - if($streaming && $channel) { if(strpos($streaming,'store') !== false) $istream = fopen($streaming,'rb'); diff --git a/Zotlabs/Module/Photos.php b/Zotlabs/Module/Photos.php index 03fd8a53d..21f6293ef 100644 --- a/Zotlabs/Module/Photos.php +++ b/Zotlabs/Module/Photos.php @@ -264,7 +264,7 @@ class Photos extends \Zotlabs\Web\Controller { } $x = q("update photo set edited = '%s', content = '%s', filesize = %d, height = %d, width = %d where resource_id = '%s' and uid = %d and imgscale = 0", - dbesc(datetime_convert()), + dbesc(datetime_convert()), dbescbin($data), intval($fsize), intval($height), @@ -278,10 +278,13 @@ class Photos extends \Zotlabs\Web\Controller { $width = $ph->getWidth(); $height = $ph->getHeight(); + $data = $ph->imageString(); + $fsize = strlen($data); - $x = q("update photo set edited = '%s', content = '%s', height = %d, width = %d where resource_id = '%s' and uid = %d and imgscale = 1", - dbesc(datetime_convert()), - dbescbin($ph->imageString()), + $x = q("update photo set edited = '%s', content = '%s', filesize = %d, height = %d, width = %d where resource_id = '%s' and uid = %d and imgscale = 1", + dbesc(datetime_convert()), + dbescbin($data), + intval($fsize), intval($height), intval($width), dbesc($resource_id), @@ -294,10 +297,13 @@ class Photos extends \Zotlabs\Web\Controller { $width = $ph->getWidth(); $height = $ph->getHeight(); + $data = $ph->imageString(); + $fsize = strlen($data); - $x = q("update photo set edited = '%s', content = '%s', height = %d, width = %d where resource_id = '%s' and uid = %d and imgscale = 2", - dbesc(datetime_convert()), - dbescbin($ph->imageString()), + $x = q("update photo set edited = '%s', content = '%s', filesize = %d, height = %d, width = %d where resource_id = '%s' and uid = %d and imgscale = 2", + dbesc(datetime_convert()), + dbescbin($data), + intval($fsize), intval($height), intval($width), dbesc($resource_id), @@ -310,10 +316,13 @@ class Photos extends \Zotlabs\Web\Controller { $width = $ph->getWidth(); $height = $ph->getHeight(); + $data = $ph->imageString(); + $fsize = strlen($data); - $x = q("update photo set edited = '%s', content = '%s', height = %d, width = %d where resource_id = '%s' and uid = %d and imgscale = 3", - dbesc(datetime_convert()), - dbescbin($ph->imageString()), + $x = q("update photo set edited = '%s', content = '%s', filesize = %d, height = %d, width = %d where resource_id = '%s' and uid = %d and imgscale = 3", + dbesc(datetime_convert()), + dbescbin($data), + intval($fsize), intval($height), intval($width), dbesc($resource_id), diff --git a/Zotlabs/Update/_1228.php b/Zotlabs/Update/_1228.php index b9ba1d86f..9e6bf8047 100644 --- a/Zotlabs/Update/_1228.php +++ b/Zotlabs/Update/_1228.php @@ -11,8 +11,8 @@ class _1228 { if(ACTIVE_DBTYPE == DBTYPE_POSTGRES) { $r1 = q("ALTER TABLE item ADD uuid text NOT NULL DEFAULT '' "); - $r2 = q("create index \"uuid_idx\" on channel (\"uuid\")"); - $r3 = q("ALTER TABLE item add summary TEXT NOT NULL"); + $r2 = q("create index \"uuid_idx\" on item (\"uuid\")"); + $r3 = q("ALTER TABLE item add summary TEXT NOT NULL DEFAULT ''"); $r = ($r1 && $r2 && $r3); } @@ -25,7 +25,6 @@ class _1228 { if($r) { q("COMMIT"); - self::upgrade(); return UPDATE_SUCCESS; } diff --git a/Zotlabs/Update/_1229.php b/Zotlabs/Update/_1229.php new file mode 100644 index 000000000..8e8711644 --- /dev/null +++ b/Zotlabs/Update/_1229.php @@ -0,0 +1,32 @@ +<?php + +namespace Zotlabs\Update; + +class _1229 { + + function run() { + + q("START TRANSACTION"); + + if(ACTIVE_DBTYPE == DBTYPE_POSTGRES) { + $r1 = q("ALTER TABLE photo ADD expires timestamp NOT NULL DEFAULT '0001-01-01 00:00:00' "); + $r2 = q("create index \"photo_expires_idx\" on photo (\"expires\")"); + + $r = ($r1 && $r2); + } + else { + $r = q("ALTER TABLE `photo` ADD `expires` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' , + ADD INDEX `expires` (`expires`)"); + } + + if($r) { + q("COMMIT"); + return UPDATE_SUCCESS; + } + + q("ROLLBACK"); + return UPDATE_FAILED; + + } + +} diff --git a/Zotlabs/Widget/Notifications.php b/Zotlabs/Widget/Notifications.php index 0f9f609e4..37d9139ec 100644 --- a/Zotlabs/Widget/Notifications.php +++ b/Zotlabs/Widget/Notifications.php @@ -24,7 +24,7 @@ class Notifications { ], 'filter' => [ 'posts_label' => t('Show new posts only'), - 'name_label' => t('Filter by name') + 'name_label' => t('Filter by name or address') ] ]; @@ -43,7 +43,7 @@ class Notifications { ], 'filter' => [ 'posts_label' => t('Show new posts only'), - 'name_label' => t('Filter by name') + 'name_label' => t('Filter by name or address') ] ]; @@ -119,7 +119,7 @@ class Notifications { 'label' => t('Forums'), 'title' => t('Forums'), 'filter' => [ - 'name_label' => t('Filter by name') + 'name_label' => t('Filter by name or address') ] ]; } @@ -150,7 +150,7 @@ class Notifications { ], 'filter' => [ 'posts_label' => t('Show new posts only'), - 'name_label' => t('Filter by name') + 'name_label' => t('Filter by name or address') ] ]; } @@ -53,7 +53,7 @@ define ( 'PLATFORM_NAME', 'hubzilla' ); define ( 'STD_VERSION', '3.9.5' ); define ( 'ZOT_REVISION', '6.0a' ); -define ( 'DB_UPDATE_VERSION', 1228 ); +define ( 'DB_UPDATE_VERSION', 1229 ); define ( 'PROJECT_BASE', __DIR__ ); @@ -217,6 +217,7 @@ define ( 'PHOTO_PROFILE', 0x0001 ); define ( 'PHOTO_XCHAN', 0x0002 ); define ( 'PHOTO_THING', 0x0004 ); define ( 'PHOTO_COVER', 0x0010 ); +define ( 'PHOTO_CACHE', 0x0020 ); define ( 'PHOTO_ADULT', 0x0008 ); define ( 'PHOTO_FLAG_OS', 0x4000 ); diff --git a/composer.json b/composer.json index f117cc3b1..e6cefa241 100644 --- a/composer.json +++ b/composer.json @@ -40,7 +40,8 @@ "smarty/smarty": "~3.1", "ramsey/uuid": "^3.8", "twbs/bootstrap": "4.1.3", - "blueimp/jquery-file-upload": "^9.25" + "blueimp/jquery-file-upload": "^9.25", + "desandro/imagesloaded": "^4.1" }, "require-dev" : { "phpunit/phpunit" : "@stable", diff --git a/composer.lock b/composer.lock index d7e8d11f6..bd95e8c78 100644 --- a/composer.lock +++ b/composer.lock @@ -4,20 +4,20 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "63d0e52cc07f8113059ec30d3637b850", + "content-hash": "fe5e71d7076eeddf1c174be4a5c052dd", "packages": [ { "name": "blueimp/jquery-file-upload", - "version": "v9.25.1", + "version": "v9.28.0", "source": { "type": "git", "url": "https://github.com/vkhramtsov/jQuery-File-Upload.git", - "reference": "28891f9b2bc339bcc1ca8d548e5401e8563bf04b" + "reference": "ff5accfe2e5c4a522777faa980a90cf86a636d1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vkhramtsov/jQuery-File-Upload/zipball/28891f9b2bc339bcc1ca8d548e5401e8563bf04b", - "reference": "28891f9b2bc339bcc1ca8d548e5401e8563bf04b", + "url": "https://api.github.com/repos/vkhramtsov/jQuery-File-Upload/zipball/ff5accfe2e5c4a522777faa980a90cf86a636d1d", + "reference": "ff5accfe2e5c4a522777faa980a90cf86a636d1d", "shasum": "" }, "type": "library", @@ -59,7 +59,7 @@ "upload", "widget" ], - "time": "2018-10-26T07:21:48+00:00" + "time": "2018-11-13T05:41:39+00:00" }, { "name": "bshaffer/oauth2-server-php", @@ -164,6 +164,45 @@ "time": "2017-12-29T00:13:05+00:00" }, { + "name": "desandro/imagesloaded", + "version": "v4.1.4", + "source": { + "type": "git", + "url": "https://github.com/desandro/imagesloaded.git", + "reference": "67c4e57453120935180c45c6820e7d3fbd2ea1f9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/desandro/imagesloaded/zipball/67c4e57453120935180c45c6820e7d3fbd2ea1f9", + "reference": "67c4e57453120935180c45c6820e7d3fbd2ea1f9", + "shasum": "" + }, + "type": "component", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "David DeSandro", + "homepage": "http://desandro.com/", + "role": "developer" + } + ], + "description": "JavaScript is all like _You images done yet or what?_", + "homepage": "http://imagesloaded.desandro.com", + "keywords": [ + "dom", + "images", + "javascript", + "jquery-plugin", + "library", + "loaded", + "ui" + ], + "time": "2018-01-02T16:53:35+00:00" + }, + { "name": "ezyang/htmlpurifier", "version": "v4.10.0", "source": { @@ -446,16 +485,16 @@ }, { "name": "psr/log", - "version": "1.0.2", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" + "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", - "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", + "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", "shasum": "" }, "require": { @@ -489,7 +528,7 @@ "psr", "psr-3" ], - "time": "2016-10-10T12:19:37+00:00" + "time": "2018-11-20T15:27:04+00:00" }, { "name": "ramsey/uuid", @@ -1110,7 +1149,7 @@ }, { "name": "symfony/polyfill-ctype", - "version": "v1.9.0", + "version": "v1.10.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", @@ -2536,16 +2575,16 @@ }, { "name": "phpunit/php-code-coverage", - "version": "6.1.3", + "version": "6.1.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "4d3ae9b21a7d7e440bd0cf65565533117976859f" + "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/4d3ae9b21a7d7e440bd0cf65565533117976859f", - "reference": "4d3ae9b21a7d7e440bd0cf65565533117976859f", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/807e6013b00af69b6c5d9ceb4282d0393dbb9d8d", + "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d", "shasum": "" }, "require": { @@ -2595,7 +2634,7 @@ "testing", "xunit" ], - "time": "2018-10-23T05:59:32+00:00" + "time": "2018-10-31T16:06:48+00:00" }, { "name": "phpunit/php-file-iterator", @@ -2788,16 +2827,16 @@ }, { "name": "phpunit/phpunit", - "version": "7.4.3", + "version": "7.4.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "c151651fb6ed264038d486ea262e243af72e5e64" + "reference": "b1be2c8530c4c29c3519a052c9fb6cee55053bbd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c151651fb6ed264038d486ea262e243af72e5e64", - "reference": "c151651fb6ed264038d486ea262e243af72e5e64", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b1be2c8530c4c29c3519a052c9fb6cee55053bbd", + "reference": "b1be2c8530c4c29c3519a052c9fb6cee55053bbd", "shasum": "" }, "require": { @@ -2868,7 +2907,7 @@ "testing", "xunit" ], - "time": "2018-10-23T05:57:41+00:00" + "time": "2018-11-14T16:52:02+00:00" }, { "name": "psr/container", @@ -3534,7 +3573,7 @@ }, { "name": "symfony/browser-kit", - "version": "v4.1.6", + "version": "v4.1.7", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", @@ -3591,16 +3630,16 @@ }, { "name": "symfony/class-loader", - "version": "v3.4.17", + "version": "v3.4.18", "source": { "type": "git", "url": "https://github.com/symfony/class-loader.git", - "reference": "f31333bdff54c7595f834d510a6d2325573ddb36" + "reference": "5605edec7b8f034ead2497ff4aab17bb70d558c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/class-loader/zipball/f31333bdff54c7595f834d510a6d2325573ddb36", - "reference": "f31333bdff54c7595f834d510a6d2325573ddb36", + "url": "https://api.github.com/repos/symfony/class-loader/zipball/5605edec7b8f034ead2497ff4aab17bb70d558c1", + "reference": "5605edec7b8f034ead2497ff4aab17bb70d558c1", "shasum": "" }, "require": { @@ -3643,20 +3682,20 @@ ], "description": "Symfony ClassLoader Component", "homepage": "https://symfony.com", - "time": "2018-10-02T12:28:39+00:00" + "time": "2018-10-31T09:06:03+00:00" }, { "name": "symfony/config", - "version": "v4.1.6", + "version": "v4.1.7", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "b3d4d7b567d7a49e6dfafb6d4760abc921177c96" + "reference": "991fec8bbe77367fc8b48ecbaa8a4bd6e905a238" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/b3d4d7b567d7a49e6dfafb6d4760abc921177c96", - "reference": "b3d4d7b567d7a49e6dfafb6d4760abc921177c96", + "url": "https://api.github.com/repos/symfony/config/zipball/991fec8bbe77367fc8b48ecbaa8a4bd6e905a238", + "reference": "991fec8bbe77367fc8b48ecbaa8a4bd6e905a238", "shasum": "" }, "require": { @@ -3706,20 +3745,20 @@ ], "description": "Symfony Config Component", "homepage": "https://symfony.com", - "time": "2018-09-08T13:24:10+00:00" + "time": "2018-10-31T09:09:42+00:00" }, { "name": "symfony/console", - "version": "v4.1.6", + "version": "v4.1.7", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "dc7122fe5f6113cfaba3b3de575d31112c9aa60b" + "reference": "432122af37d8cd52fba1b294b11976e0d20df595" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/dc7122fe5f6113cfaba3b3de575d31112c9aa60b", - "reference": "dc7122fe5f6113cfaba3b3de575d31112c9aa60b", + "url": "https://api.github.com/repos/symfony/console/zipball/432122af37d8cd52fba1b294b11976e0d20df595", + "reference": "432122af37d8cd52fba1b294b11976e0d20df595", "shasum": "" }, "require": { @@ -3774,11 +3813,11 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2018-10-03T08:15:46+00:00" + "time": "2018-10-31T09:30:44+00:00" }, { "name": "symfony/css-selector", - "version": "v3.4.17", + "version": "v3.4.18", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", @@ -3831,16 +3870,16 @@ }, { "name": "symfony/dependency-injection", - "version": "v4.1.6", + "version": "v4.1.7", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "f6b9d893ad28aefd8942dc0469c8397e2216fe30" + "reference": "e72ee2c23d952e4c368ee98610fa22b79b89b483" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/f6b9d893ad28aefd8942dc0469c8397e2216fe30", - "reference": "f6b9d893ad28aefd8942dc0469c8397e2216fe30", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/e72ee2c23d952e4c368ee98610fa22b79b89b483", + "reference": "e72ee2c23d952e4c368ee98610fa22b79b89b483", "shasum": "" }, "require": { @@ -3898,11 +3937,11 @@ ], "description": "Symfony DependencyInjection Component", "homepage": "https://symfony.com", - "time": "2018-10-02T12:40:59+00:00" + "time": "2018-10-31T10:54:16+00:00" }, { "name": "symfony/dom-crawler", - "version": "v4.1.6", + "version": "v4.1.7", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", @@ -3959,16 +3998,16 @@ }, { "name": "symfony/event-dispatcher", - "version": "v4.1.6", + "version": "v4.1.7", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "bfb30c2ad377615a463ebbc875eba64a99f6aa3e" + "reference": "552541dad078c85d9414b09c041ede488b456cd5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/bfb30c2ad377615a463ebbc875eba64a99f6aa3e", - "reference": "bfb30c2ad377615a463ebbc875eba64a99f6aa3e", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/552541dad078c85d9414b09c041ede488b456cd5", + "reference": "552541dad078c85d9414b09c041ede488b456cd5", "shasum": "" }, "require": { @@ -4018,20 +4057,20 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2018-07-26T09:10:45+00:00" + "time": "2018-10-10T13:52:42+00:00" }, { "name": "symfony/filesystem", - "version": "v4.1.6", + "version": "v4.1.7", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "596d12b40624055c300c8b619755b748ca5cf0b5" + "reference": "fd7bd6535beb1f0a0a9e3ee960666d0598546981" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/596d12b40624055c300c8b619755b748ca5cf0b5", - "reference": "596d12b40624055c300c8b619755b748ca5cf0b5", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/fd7bd6535beb1f0a0a9e3ee960666d0598546981", + "reference": "fd7bd6535beb1f0a0a9e3ee960666d0598546981", "shasum": "" }, "require": { @@ -4068,20 +4107,20 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2018-10-02T12:40:59+00:00" + "time": "2018-10-30T13:18:25+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.9.0", + "version": "v1.10.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "d0cd638f4634c16d8df4508e847f14e9e43168b8" + "reference": "c79c051f5b3a46be09205c73b80b346e4153e494" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/d0cd638f4634c16d8df4508e847f14e9e43168b8", - "reference": "d0cd638f4634c16d8df4508e847f14e9e43168b8", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/c79c051f5b3a46be09205c73b80b346e4153e494", + "reference": "c79c051f5b3a46be09205c73b80b346e4153e494", "shasum": "" }, "require": { @@ -4127,20 +4166,20 @@ "portable", "shim" ], - "time": "2018-08-06T14:22:27+00:00" + "time": "2018-09-21T13:07:52+00:00" }, { "name": "symfony/translation", - "version": "v4.1.6", + "version": "v4.1.7", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "9f0b61e339160a466ebcde167a6c5521c810e304" + "reference": "aa04dc1c75b7d3da7bd7003104cd0cfc5dff635c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/9f0b61e339160a466ebcde167a6c5521c810e304", - "reference": "9f0b61e339160a466ebcde167a6c5521c810e304", + "url": "https://api.github.com/repos/symfony/translation/zipball/aa04dc1c75b7d3da7bd7003104cd0cfc5dff635c", + "reference": "aa04dc1c75b7d3da7bd7003104cd0cfc5dff635c", "shasum": "" }, "require": { @@ -4196,11 +4235,11 @@ ], "description": "Symfony Translation Component", "homepage": "https://symfony.com", - "time": "2018-10-02T16:36:10+00:00" + "time": "2018-10-28T18:38:52+00:00" }, { "name": "symfony/yaml", - "version": "v4.1.6", + "version": "v4.1.7", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", diff --git a/doc/es-es/about/about.bb b/doc/es-es/about/about.bb index 1d5f3a4a2..50d23c778 100644 --- a/doc/es-es/about/about.bb +++ b/doc/es-es/about/about.bb @@ -29,7 +29,7 @@ $Projectname es, básicamente, una aplicación de servidor web relativamente est [*= Identidad nómada] La capacidad de autenticar y migrar fácilmente una identidad a través de hubs y dominios web independientes. La identidad nómada proporciona una verdadera propiedad de una identidad en línea, porque las identidades de los canales controlados por una cuenta en un hub no están vinculadas al propio hub. Un hub es más como un "host" para canales. Con Hubzilla, no tienes una "cuenta" en un servidor como lo haces en sitios web típicos; tienes una identidad que puedes llevarte a través de la rejilla usando clones. -[*= Zot] El novedoso protocolo basado en JSON para la implementación de comunicaciones y servicios descentralizados seguros. Se diferencia de muchos otros protocolos de comunicación en que construye las comunicaciones sobre un marco de identidad y autenticación descentralizado. El componente de autenticación es similar a OpenID conceptualmente pero está aislado de las identidades basadas en DNS. Cuando es posible, la autenticación remota es silenciosa e invisible. Esto proporciona un mecanismo para el control de acceso distribuido a escala de Internet que es discreto. +[*= Zot] El novedoso protocolo basado en JSON para la implementación de comunicaciones y servicios descentralizados seguros. Se diferencia de muchos otros protocolos de comunicación en que construye las comunicaciones sobre un marco de identidad y autenticación descentralizado. El componente de autenticación es similar a OpenID conceptualmente pero está aislado de las identidades basadas en DNS. Cuando es posible, la autenticación remota es silenciosa e invisible. Esto proporciona un mecanismo discreto para el control de acceso distribuido a escala de Internet. [/dl] @@ -41,7 +41,7 @@ Esta página enumera algunas de las características principales de $Projectname [h4]Control deslizante de afinidad[/h4] Cuando se añaden conexiones en $Projectname, los miembros tienen la opción de asignar niveles de "afinidad" (cuán cerca está su amigo). -Por otro lado, al añadir el canal de un amigo, se puede situar bajo el nivel de afinidad de "Amigos". +Por otro lado, al añadir el canal de un amigo, se puede situar bajo el nivel de afinidad, justamente, de "Amigos". En este punto, la herramienta $Projectname [i]Control deslizante de afinidad[/i], que normalmente aparece en la parte superior de la página, ajusta su contenido para incluir aquellos contactos que están dentro del rango de afinidad deseado. Los canales fuera de ese rango no se mostrarán, a menos que ajuste el control deslizante para incluirlos. @@ -62,7 +62,7 @@ Las listas de control de acceso se pueden aplicar a contenido y mensajes, fotos, [h4]Inicio de sesión único[/h4] -Las listas de control de acceso funcionan para todos los canales de la red gracias a nuestra exclusiva tecnología de inicio de sesión único. La mayoría de los enlaces internos proporcionan un token de identidad que puede ser verificado en otros sitios de $Projectname y utilizado para controlar el acceso a recursos privados. Inicie sesión una vez en el hub de su casa. Después de eso, la autenticación de todos los recursos de $Projectname es "mágica". +Las listas de control de acceso funcionan para todos los canales de la red gracias a nuestra exclusiva tecnología de inicio de sesión único. La mayoría de los enlaces internos proporcionan un token de identidad que puede ser verificado en otros sitios de $Projectname y utilizado para controlar el acceso a recursos privados. Inicie sesión una vez en la página principal del hub. Después de eso, la autenticación de todos los recursos de $Projectname es "mágica". [h4]Almacenamiento de Archivos habilitado para WebDAV[/h4] @@ -93,7 +93,7 @@ Las aplicaciones pueden ser construidas y distribuidas por los miembros. Éstas [h4]Diseño[/h4] -El diseño de la página se basa en un lenguaje de descripción llamado comanche. La propia $Projectname está escrito en diseños comanches que se pueden cambiar. Esto permite un nivel de personalización que no se encuentra normalmente en los llamados "entornos multiusuario". +El diseño de la página se basa en un lenguaje de descripción llamado comanche. La propia $Projectname está escrito en plantillas en comanche que se pueden cambiar. Esto permite un nivel de personalización que no se encuentra normalmente en los llamados "entornos multiusuario". [h4]Marcadores[/h4] @@ -111,14 +111,14 @@ Además, los mensajes pueden crearse utilizando "encriptación de extremo a extr Por lo general, los mensajes públicos no se cifran durante el transporte ni durante el almacenamiento. -Los mensajes privados pueden ser revocados (no enviados) aunque no hay garantía de que el destinatario no lo haya leído todavía. +Los mensajes privados pueden ser revocados (no enviados) aunque no hay garantía de que el destinatario no lo haya leído antes. Los mensajes se pueden crear con una fecha de caducidad, en la que se borrarán/quitarán en el sitio del destinatario. [h4]Federación de Servicios[/h4] -Además de añadir "conectores de publicación cruzada" a una variedad de redes alternativas, hay soporte nativo para la importación de contenido desde RSS/Atom feeds y puede utilizarlo para crear canales especiales. Los plugins también están disponibles para comunicarse con otros usando los protocolos Diáspora, GNU-Social (OStatus) o Mastodon (ActivityPub). Estas redes no soportan la identidad nómada ni el control de acceso entre dominios; sin embargo, las comunicaciones básicas son soportadas desde/hacia la diáspora, Friendica, GNU-Social, Mastodon y otros proveedores que utilizan estos protocolos. +Además de añadir "conectores de publicación cruzada" a una variedad de redes alternativas, hay soporte nativo para la importación de contenido desde RSS/Atom feeds y puede utilizarlo para crear canales especiales. Los plugins también están disponibles para comunicarse con otros usando los protocolos Diáspora, GNU-Social (OStatus) o Mastodon (ActivityPub). Estas redes no soportan la identidad nómada ni el control de acceso entre dominios; sin embargo, las comunicaciones básicas son soportadas desde o hacia Diaspora, Friendica, GNU-Social, Mastodon, Pleroma y otros proveedores que utilizan estos protocolos. También existe soporte experimental para la autenticación OpenID que puede utilizarse en las listas de control de acceso. Este es un trabajo en progreso. Su hub $Projectname puede ser utilizado como un proveedor de OpenID para autenticarle en servicios externos que utilizan esta tecnología. @@ -126,7 +126,7 @@ Los canales pueden tener permisos para convertirse en "canales derivados" cuando [h4]Grupos de Privacidad[/h4] -Nuestra implementación de grupos de privacidad es similar a la de Google "Círculos" y "Aspectos" de la Diáspora. Esto le permite filtrar su flujo entrante por grupos seleccionados y establecer automáticamente la Lista de control de acceso saliente sólo para aquellos que se encuentren en ese grupo de privacidad cuando publique. Usted puede anular esto en cualquier momento (antes de enviar el correo). +Nuestra implementación de grupos de privacidad es similar a la de Google "Círculos" y "Aspectos" de Diaspora. Esto le permite filtrar su flujo entrante por grupos seleccionados y establecer automáticamente la Lista de control de acceso saliente sólo para aquellos que se encuentren en ese grupo de privacidad cuando publique. Usted puede anular esto en cualquier momento (antes de enviar el correo). [h4]Servicios de directorio[/h4] @@ -158,19 +158,25 @@ Las opciones son: [h4]Foros Públicos y Privados[/h4] -Los foros son típicamente canales que pueden estar abiertos a la participación de múltiples autores. Actualmente existen dos mecanismos para enviar mensajes a los foros: 1) mensajes de "muro a muro" y 2) a través de las etiquetas @mención del foro. Los foros pueden ser creados por cualquier persona y utilizados para cualquier propósito. El directorio contiene una opción para buscar foros públicos. Los foros privados sólo pueden ser publicados y, a menudo, sólo pueden ser vistos por los miembros. +Los foros son típicamente canales que pueden estar abiertos a la participación de múltiples autores. Actualmente existen dos mecanismos para enviar mensajes a los foros: + +1) mensajes de "muro a muro" y + +2) a través de las etiquetas @mención del foro. + +Los foros pueden ser creados por cualquier persona y utilizados para cualquier propósito. El directorio contiene una opción para buscar foros públicos. Los foros privados sólo pueden ser publicados y, a menudo, sólo pueden ser vistos por los miembros. [h4]Clonación de cuentas[/h4] -Las cuentas en $Projectname se denominan [i]identidades nómadas[/i], porque la identidad de un miembro no está vinculada al hub donde se creó la identidad originalmente. Por ejemplo, cuando creas una cuenta de Facebook o Gmail, está vinculada a esos servicios. No pueden funcionar sin Facebook.com o Gmail.com. +Las cuentas en $Projectname se denominan [i]identidades nómadas[/i], porque la identidad de un miembro no está vinculada al hub donde se creó la identidad originalmente. Por ejemplo, cuando cree una cuenta de Facebook o Gmail, está vinculada a esos servicios. No pueden funcionar sin Facebook.com o Gmail.com. -Por el contrario, digamos que ha creado una identidad $Projectname llamada[b]tina@$Projectnamehub.com[/b]. Puede clonarlo a otro hub $Projectname eligiendo el mismo o un nombre diferente:[b]vivoParasiempre@algún$ProjectnameHub.info[/b] +Por el contrario, digamos que ha creado una identidad $Projectname llamada [b]tina@$Projectnamehub.com[/b]. Puede clonarlo a otro hub $Projectname eligiendo el mismo o un nombre diferente:[b]vivoParasiempre@algún$ProjectnameHub.info[/b] -Ahora ambos canales están sincronizados, lo que significa que todos sus contactos y preferencias se duplicarán en su clon. No importa si envías un mensaje desde su hub original o desde el nuevo hub. Los mensajes se reflejarán en ambas cuentas. +Ahora ambos canales están sincronizados, lo que significa que todos sus contactos y preferencias se duplicarán en su clon. No importa si envía un mensaje desde su hub original o desde el nuevo hub. Los mensajes se reflejarán en ambas cuentas. Esta es una característica bastante revolucionaria, si consideramos algunos escenarios: - ¿Qué ocurre si el hub en el que se basa una identidad se desconecta de repente? Sin clonación, un miembro no podrá comunicarse hasta que el hub vuelva a estar en línea (sin duda muchos de ustedes han visto y maldecido el Twitter "Fail Whale"). Con la clonación, sólo tienesque iniciar sesión en su cuenta clonada y la vida continúa feliz para siempre. + ¿Qué ocurre si el hub en el que se basa una identidad se desconecta de repente? Sin clonación, un miembro no podrá comunicarse hasta que el hub vuelva a estar en línea (sin duda muchos de ustedes han visto y maldecido el Twitter "Fail Whale"). Con la clonación, sólo tiene que iniciar sesión en su cuenta clonada y la vida continúa feliz para siempre. El administrador de su hub ya no puede permitirse el lujo de pagar por su hub gratuito y público $Projectname. Anuncia que el centro cerrará en dos semanas. Esto le da tiempo suficiente para clonar su(s) identidad(es) y preservar las relaciones, amigos y contenido de su $Projectname. @@ -193,9 +199,10 @@ $Projectname ofrece una sencilla copia de seguridad de la cuenta con un solo cli [h4]Borrado de cuenta[/h4] -Las cuentas se pueden eliminar inmediatamente haciendo clic en un enlace. Eso es todo. Todo el contenido asociado se elimina de la rejilla (esto incluye los mensajes y cualquier otro contenido producido por el perfil eliminado). Dependiendo del número de conexiones que tenga, el proceso de eliminación de contenido remoto podría llevar algún tiempo, pero está previsto que ocurra tan rápido como sea posible. +Las cuentas se pueden eliminar inmediatamente haciendo clic en un enlace. Eso es todo. Todo el contenido asociado se elimina de la red (esto incluye los mensajes y cualquier otro contenido producido por el perfil eliminado). Dependiendo del número de conexiones que tenga, el proceso de eliminación de contenido remoto podría llevar algún tiempo, pero está previsto que ocurra tan rápido como sea posible. [h4]Supresión de contenido[/h4] + Cualquier contenido creado en $Projectname permanece bajo el control del miembro (o canal) que lo creó originalmente. En cualquier momento, un miembro puede borrar un mensaje o un rango de mensajes. El proceso de eliminación garantiza que el contenido se elimine, independientemente de si se publicó en el hub principal de un canal o en otro hub, donde el canal se autenticó de forma remota a través de Zot (protocolo de autenticación y comunicación de $Projectname). @@ -221,4 +228,4 @@ $Projectname se puede ampliar de varias maneras, a través de la personalizació [h4]API[/h4] -Una API está disponible para su uso por parte de servicios de terceros. Un plugin también proporciona una implementación básica de Twitter (para los que existen cientos de herramientas de terceros). El acceso puede ser proporcionado por login/contraseña o OAuth, y el registro del cliente de las aplicaciones de OAuth es proporcionado.
\ No newline at end of file +Una API está disponible para su uso por parte de servicios de terceros. Un plugin también proporciona una implementación básica de Twitter (para los que existen cientos de herramientas de terceros). El acceso puede ser proporcionado por login/contraseña o OAuth, y el registro del cliente de las aplicaciones de OAuth está disponible.
\ No newline at end of file diff --git a/include/items.php b/include/items.php index 8eaeb61b7..b2c288b75 100755 --- a/include/items.php +++ b/include/items.php @@ -618,8 +618,6 @@ function get_item_elements($x,$allow_code = false) { $arr['created'] = datetime_convert('UTC','UTC',$x['created']); $arr['edited'] = datetime_convert('UTC','UTC',$x['edited']); - if($arr['created'] > datetime_convert()) - $arr['created'] = datetime_convert(); if($arr['edited'] > datetime_convert()) $arr['edited'] = datetime_convert(); diff --git a/include/oembed.php b/include/oembed.php index e5557dc11..426197c5f 100755 --- a/include/oembed.php +++ b/include/oembed.php @@ -221,7 +221,11 @@ function oembed_fetch_url($embedurl){ if(strpos(strtolower($embedurl),'.pdf') !== false) { $action = 'allow'; - $j = [ 'html' => '<object data="' . $embedurl . '" type="application/pdf" width="500" height="720">' . '<a href="' . $embedurl . '">' . t('View PDF') . '</a></object>', 'width' => 500, 'height' => 720, 'type' => 'pdf' ]; + $j = [ + 'html' => '<object data="' . $embedurl . '" type="application/pdf" style="width: 100%; height: 300px;"></object>', + 'title' => t('View PDF'), + 'type' => 'pdf' + ]; } diff --git a/include/photo/photo_driver.php b/include/photo/photo_driver.php index 4173d727e..9aeb2ef17 100644 --- a/include/photo/photo_driver.php +++ b/include/photo/photo_driver.php @@ -112,7 +112,7 @@ abstract class photo_driver { public function saveImage($path) { if(!$this->is_valid()) return FALSE; - file_put_contents($path, $this->imageString()); + return (file_put_contents($path, $this->imageString()) ? true : false); } @@ -330,9 +330,9 @@ abstract class photo_driver { } - public function save($arr) { + public function save($arr, $skipcheck = false) { - if(! $this->is_valid()) { + if(! ($skipcheck || $this->is_valid())) { logger('attempt to store invalid photo.'); return false; } @@ -344,6 +344,7 @@ abstract class photo_driver { $p['xchan'] = (($arr['xchan']) ? $arr['xchan'] : ''); $p['resource_id'] = (($arr['resource_id']) ? $arr['resource_id'] : ''); $p['filename'] = (($arr['filename']) ? $arr['filename'] : ''); + $p['mimetype'] = (($arr['mimetype']) ? $arr['mimetype'] : $this->getType()); $p['album'] = (($arr['album']) ? $arr['album'] : ''); $p['imgscale'] = ((intval($arr['imgscale'])) ? intval($arr['imgscale']) : 0); $p['allow_cid'] = (($arr['allow_cid']) ? $arr['allow_cid'] : ''); @@ -360,6 +361,7 @@ abstract class photo_driver { $p['display_path'] = (($arr['display_path']) ? $arr['display_path'] : ''); $p['width'] = (($arr['width']) ? $arr['width'] : $this->getWidth()); $p['height'] = (($arr['height']) ? $arr['height'] : $this->getHeight()); + $p['expires'] = (($arr['expires']) ? $arr['expires'] : gmdate('Y-m-d H:i:s', time() + get_config('system','photo_cache_time', 86400))); if(! intval($p['imgscale'])) logger('save: ' . print_r($arr,true), LOGGER_DATA); @@ -397,23 +399,24 @@ abstract class photo_driver { allow_cid = '%s', allow_gid = '%s', deny_cid = '%s', - deny_gid = '%s' + deny_gid = '%s', + expires = '%s' where id = %d", intval($p['aid']), intval($p['uid']), dbesc($p['xchan']), dbesc($p['resource_id']), - dbesc($p['created']), - dbesc($p['edited']), + dbescdate($p['created']), + dbescdate($p['edited']), dbesc(basename($p['filename'])), - dbesc($this->getType()), + dbesc($p['mimetype']), dbesc($p['album']), intval($p['height']), intval($p['width']), (intval($p['os_storage']) ? dbescbin($p['os_syspath']) : dbescbin($this->imageString())), intval($p['os_storage']), - intval(strlen($this->imageString())), + (intval($p['os_storage']) ? @filesize($p['os_syspath']) : strlen($this->imageString())), intval($p['imgscale']), intval($p['photo_usage']), dbesc($p['title']), @@ -424,28 +427,29 @@ abstract class photo_driver { dbesc($p['allow_gid']), dbesc($p['deny_cid']), dbesc($p['deny_gid']), + dbescdate($p['expires']), intval($x[0]['id']) ); } else { $p['created'] = (($arr['created']) ? $arr['created'] : $p['edited']); $r = q("INSERT INTO photo - ( aid, uid, xchan, resource_id, created, edited, filename, mimetype, album, height, width, content, os_storage, filesize, imgscale, photo_usage, title, description, os_path, display_path, allow_cid, allow_gid, deny_cid, deny_gid ) - VALUES ( %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s', %d, %d, %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s' )", + ( aid, uid, xchan, resource_id, created, edited, filename, mimetype, album, height, width, content, os_storage, filesize, imgscale, photo_usage, title, description, os_path, display_path, allow_cid, allow_gid, deny_cid, deny_gid, expires ) + VALUES ( %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s', %d, %d, %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s' )", intval($p['aid']), intval($p['uid']), dbesc($p['xchan']), dbesc($p['resource_id']), - dbesc($p['created']), - dbesc($p['edited']), + dbescdate($p['created']), + dbescdate($p['edited']), dbesc(basename($p['filename'])), - dbesc($this->getType()), + dbesc($p['mimetype']), dbesc($p['album']), intval($p['height']), intval($p['width']), (intval($p['os_storage']) ? dbescbin($p['os_syspath']) : dbescbin($this->imageString())), intval($p['os_storage']), - intval(strlen($this->imageString())), + (intval($p['os_storage']) ? @filesize($p['os_syspath']) : strlen($this->imageString())), intval($p['imgscale']), intval($p['photo_usage']), dbesc($p['title']), @@ -455,7 +459,8 @@ abstract class photo_driver { dbesc($p['allow_cid']), dbesc($p['allow_gid']), dbesc($p['deny_cid']), - dbesc($p['deny_gid']) + dbesc($p['deny_gid']), + dbescdate($p['expires']) ); } logger('photo save ' . $p['imgscale'] . ' returned ' . intval($r)); diff --git a/include/photo/photo_imagick.php b/include/photo/photo_imagick.php index 89577e71e..f04c00245 100644 --- a/include/photo/photo_imagick.php +++ b/include/photo/photo_imagick.php @@ -31,8 +31,12 @@ class photo_imagick extends photo_driver { if(! $data) return; - $this->image->readImageBlob($data); - + try { + $this->image->readImageBlob($data); + } + catch (Exception $e) { + logger('imagick readImageBlob() exception:' . print_r($e,true)); + } /** * Setup the image to the format it will be saved to @@ -205,4 +209,4 @@ class photo_imagick extends photo_driver { -}
\ No newline at end of file +} diff --git a/include/text.php b/include/text.php index edd0f7a5a..bd0d8048d 100644 --- a/include/text.php +++ b/include/text.php @@ -1105,23 +1105,33 @@ function linkify($s, $me = false) { * to a local redirector which uses https and which redirects to the selected content * * @param string $s + * @param int $uid * @returns string */ function sslify($s) { + + // Local photo cache + $str = array( + 'body' => $s, + 'uid' => local_channel() + ); + call_hooks('cache_body_hook', $str); + + $s = $str['body']; + if (strpos(z_root(),'https:') === false) return $s; - + // By default we'll only sslify img tags because media files will probably choke. // You can set sslify_everything if you want - but it will likely white-screen if it hits your php memory limit. // The downside is that http: media files will likely be blocked by your browser // Complain to your browser maker $allow = get_config('system','sslify_everything'); - - $pattern = (($allow) ? "/\<(.*?)src=\"(http\:.*?)\"(.*?)\>/" : "/\<img(.*?)src=\"(http\:.*?)\"(.*?)\>/" ); + $pattern = (($allow) ? "/\<(.*?)src=[\"|'](http\:.*?)[\"|'](.*?)\>/" : "/\<img(.*?)src=[\"|'](http\:.*?)[\"|'](.*?)\>/" ); $matches = null; - $cnt = preg_match_all($pattern,$s,$matches,PREG_SET_ORDER); + $cnt = preg_match_all($pattern, $s, $matches, PREG_SET_ORDER); if ($cnt) { foreach ($matches as $match) { $filename = basename( parse_url($match[2], PHP_URL_PATH) ); @@ -3295,7 +3305,7 @@ function cleanup_bbcode($body) { $body = preg_replace('/\[\/code\]\s*\[code\]/ism',"\n",$body); - $body = scale_external_images($body,false); + $body = scale_external_images($body, false); return $body; } @@ -3411,7 +3421,7 @@ function get_forum_channels($uid) { $sql_extra = (($xf) ? " and ( xchan_hash in (" . $xf . ") or xchan_pubforum = 1 ) " : " and xchan_pubforum = 1 "); - $r = q("select abook_id, xchan_hash, xchan_name, xchan_url, xchan_photo_s from abook left join xchan on abook_xchan = xchan_hash where xchan_deleted = 0 and abook_channel = %d and abook_pending = 0 and abook_ignored = 0 and abook_blocked = 0 and abook_archived = 0 $sql_extra order by xchan_name", + $r = q("select abook_id, xchan_hash, xchan_name, xchan_url, xchan_addr, xchan_photo_s from abook left join xchan on abook_xchan = xchan_hash where xchan_deleted = 0 and abook_channel = %d and abook_pending = 0 and abook_ignored = 0 and abook_blocked = 0 and abook_archived = 0 $sql_extra order by xchan_name", intval($uid) ); diff --git a/install/schema_mysql.sql b/install/schema_mysql.sql index c820fca25..49a2c476a 100644 --- a/install/schema_mysql.sql +++ b/install/schema_mysql.sql @@ -916,7 +916,6 @@ CREATE TABLE IF NOT EXISTS `outq` ( KEY `outq_priority` (`outq_priority`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - CREATE TABLE IF NOT EXISTS pchan ( `pchan_id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT, `pchan_guid` char(191) NOT NULL DEFAULT '', @@ -928,15 +927,16 @@ CREATE TABLE IF NOT EXISTS pchan ( KEY `pchan_hash` (`pchan_hash`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - CREATE TABLE IF NOT EXISTS `pconfig` ( `id` int(11) NOT NULL AUTO_INCREMENT, `uid` int(11) NOT NULL DEFAULT 0 , `cat` char(191) NOT NULL DEFAULT '', `k` char(191) NOT NULL DEFAULT '', `v` mediumtext NOT NULL, + `updated` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', PRIMARY KEY (`id`), - UNIQUE KEY `access` (`uid`,`cat`,`k`) + UNIQUE KEY `access` (`uid`,`cat`,`k`), + KEY `pconfig_updated` (`updated`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS `photo` ( @@ -947,6 +947,7 @@ CREATE TABLE IF NOT EXISTS `photo` ( `resource_id` char(191) NOT NULL DEFAULT '', `created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', `edited` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', + `expires` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', `title` char(191) NOT NULL DEFAULT '', `description` text NOT NULL, `album` char(191) NOT NULL DEFAULT '', @@ -979,6 +980,7 @@ CREATE TABLE IF NOT EXISTS `photo` ( KEY `xchan` (`xchan`), KEY `filesize` (`filesize`), KEY `resource_id` (`resource_id`), + KEY `expires` (`expires`), KEY `is_nsfw` (`is_nsfw`), KEY `os_storage` (`os_storage`), KEY `photo_usage` (`photo_usage`) diff --git a/install/schema_postgres.sql b/install/schema_postgres.sql index 3bc256377..1b6cab51b 100644 --- a/install/schema_postgres.sql +++ b/install/schema_postgres.sql @@ -897,7 +897,6 @@ create index "outq_async" on outq ("outq_async"); create index "outq_delivered" on outq ("outq_delivered"); create index "outq_priority" on outq ("outq_priority"); - CREATE TABLE "pchan" ( "pchan_id" serial NOT NULL, "pchan_guid" text NOT NULL, @@ -906,7 +905,6 @@ CREATE TABLE "pchan" ( "pchan_prvkey" text NOT NULL, PRIMARY KEY ("pchan_id") ); - create index "pchan_guid" on pchan ("pchan_guid"); create index "pchan_hash" on pchan ("pchan_hash"); @@ -916,9 +914,11 @@ CREATE TABLE "pconfig" ( "cat" text NOT NULL, "k" text NOT NULL, "v" text NOT NULL, + "updated" timestamp NOT NULL DEFAULT '0001-01-01 00:00:00', PRIMARY KEY ("id"), UNIQUE ("uid","cat","k") ); +create index "pconfig_updated_idx" on pconfig ("updated"); CREATE TABLE "photo" ( "id" serial NOT NULL, @@ -928,6 +928,7 @@ CREATE TABLE "photo" ( "resource_id" text NOT NULL, "created" timestamp NOT NULL, "edited" timestamp NOT NULL, + "expires" timestamp NOT NULL, "title" text NOT NULL, "description" text NOT NULL, "album" text NOT NULL, @@ -961,6 +962,7 @@ create index "photo_aid" on photo ("aid"); create index "photo_xchan" on photo ("xchan"); create index "photo_filesize" on photo ("filesize"); create index "photo_resource_id" on photo ("resource_id"); +create index "photo_expires_idx" on photo ("expires"); create index "photo_usage" on photo ("photo_usage"); create index "photo_is_nsfw" on photo ("is_nsfw"); create index "photo_os_storage" on photo ("os_storage"); diff --git a/library/imagesloaded/imagesloaded.pkgd.min.js b/library/imagesloaded/imagesloaded.pkgd.min.js deleted file mode 100644 index c3e71fadc..000000000 --- a/library/imagesloaded/imagesloaded.pkgd.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * imagesLoaded PACKAGED v4.1.0 - * JavaScript is all like "You images are done yet or what?" - * MIT License - */ - -!function(t,e){"function"==typeof define&&define.amd?define("ev-emitter/ev-emitter",e):"object"==typeof module&&module.exports?module.exports=e():t.EvEmitter=e()}(this,function(){function t(){}var e=t.prototype;return e.on=function(t,e){if(t&&e){var i=this._events=this._events||{},n=i[t]=i[t]||[];return-1==n.indexOf(e)&&n.push(e),this}},e.once=function(t,e){if(t&&e){this.on(t,e);var i=this._onceEvents=this._onceEvents||{},n=i[t]=i[t]||[];return n[e]=!0,this}},e.off=function(t,e){var i=this._events&&this._events[t];if(i&&i.length){var n=i.indexOf(e);return-1!=n&&i.splice(n,1),this}},e.emitEvent=function(t,e){var i=this._events&&this._events[t];if(i&&i.length){var n=0,o=i[n];e=e||[];for(var r=this._onceEvents&&this._onceEvents[t];o;){var s=r&&r[o];s&&(this.off(t,o),delete r[o]),o.apply(this,e),n+=s?0:1,o=i[n]}return this}},t}),function(t,e){"use strict";"function"==typeof define&&define.amd?define(["ev-emitter/ev-emitter"],function(i){return e(t,i)}):"object"==typeof module&&module.exports?module.exports=e(t,require("ev-emitter")):t.imagesLoaded=e(t,t.EvEmitter)}(window,function(t,e){function i(t,e){for(var i in e)t[i]=e[i];return t}function n(t){var e=[];if(Array.isArray(t))e=t;else if("number"==typeof t.length)for(var i=0;i<t.length;i++)e.push(t[i]);else e.push(t);return e}function o(t,e,r){return this instanceof o?("string"==typeof t&&(t=document.querySelectorAll(t)),this.elements=n(t),this.options=i({},this.options),"function"==typeof e?r=e:i(this.options,e),r&&this.on("always",r),this.getImages(),h&&(this.jqDeferred=new h.Deferred),void setTimeout(function(){this.check()}.bind(this))):new o(t,e,r)}function r(t){this.img=t}function s(t,e){this.url=t,this.element=e,this.img=new Image}var h=t.jQuery,a=t.console;o.prototype=Object.create(e.prototype),o.prototype.options={},o.prototype.getImages=function(){this.images=[],this.elements.forEach(this.addElementImages,this)},o.prototype.addElementImages=function(t){"IMG"==t.nodeName&&this.addImage(t),this.options.background===!0&&this.addElementBackgroundImages(t);var e=t.nodeType;if(e&&d[e]){for(var i=t.querySelectorAll("img"),n=0;n<i.length;n++){var o=i[n];this.addImage(o)}if("string"==typeof this.options.background){var r=t.querySelectorAll(this.options.background);for(n=0;n<r.length;n++){var s=r[n];this.addElementBackgroundImages(s)}}}};var d={1:!0,9:!0,11:!0};return o.prototype.addElementBackgroundImages=function(t){var e=getComputedStyle(t);if(e)for(var i=/url\((['"])?(.*?)\1\)/gi,n=i.exec(e.backgroundImage);null!==n;){var o=n&&n[2];o&&this.addBackground(o,t),n=i.exec(e.backgroundImage)}},o.prototype.addImage=function(t){var e=new r(t);this.images.push(e)},o.prototype.addBackground=function(t,e){var i=new s(t,e);this.images.push(i)},o.prototype.check=function(){function t(t,i,n){setTimeout(function(){e.progress(t,i,n)})}var e=this;return this.progressedCount=0,this.hasAnyBroken=!1,this.images.length?void this.images.forEach(function(e){e.once("progress",t),e.check()}):void this.complete()},o.prototype.progress=function(t,e,i){this.progressedCount++,this.hasAnyBroken=this.hasAnyBroken||!t.isLoaded,this.emitEvent("progress",[this,t,e]),this.jqDeferred&&this.jqDeferred.notify&&this.jqDeferred.notify(this,t),this.progressedCount==this.images.length&&this.complete(),this.options.debug&&a&&a.log("progress: "+i,t,e)},o.prototype.complete=function(){var t=this.hasAnyBroken?"fail":"done";if(this.isComplete=!0,this.emitEvent(t,[this]),this.emitEvent("always",[this]),this.jqDeferred){var e=this.hasAnyBroken?"reject":"resolve";this.jqDeferred[e](this)}},r.prototype=Object.create(e.prototype),r.prototype.check=function(){var t=this.getIsImageComplete();return t?void this.confirm(0!==this.img.naturalWidth,"naturalWidth"):(this.proxyImage=new Image,this.proxyImage.addEventListener("load",this),this.proxyImage.addEventListener("error",this),this.img.addEventListener("load",this),this.img.addEventListener("error",this),void(this.proxyImage.src=this.img.src))},r.prototype.getIsImageComplete=function(){return this.img.complete&&void 0!==this.img.naturalWidth},r.prototype.confirm=function(t,e){this.isLoaded=t,this.emitEvent("progress",[this,this.img,e])},r.prototype.handleEvent=function(t){var e="on"+t.type;this[e]&&this[e](t)},r.prototype.onload=function(){this.confirm(!0,"onload"),this.unbindEvents()},r.prototype.onerror=function(){this.confirm(!1,"onerror"),this.unbindEvents()},r.prototype.unbindEvents=function(){this.proxyImage.removeEventListener("load",this),this.proxyImage.removeEventListener("error",this),this.img.removeEventListener("load",this),this.img.removeEventListener("error",this)},s.prototype=Object.create(r.prototype),s.prototype.check=function(){this.img.addEventListener("load",this),this.img.addEventListener("error",this),this.img.src=this.url;var t=this.getIsImageComplete();t&&(this.confirm(0!==this.img.naturalWidth,"naturalWidth"),this.unbindEvents())},s.prototype.unbindEvents=function(){this.img.removeEventListener("load",this),this.img.removeEventListener("error",this)},s.prototype.confirm=function(t,e){this.isLoaded=t,this.emitEvent("progress",[this,this.element,e])},o.makeJQueryPlugin=function(e){e=e||t.jQuery,e&&(h=e,h.fn.imagesLoaded=function(t,e){var i=new o(this,t,e);return i.jqDeferred.promise(h(this))})},o.makeJQueryPlugin(),o});
\ No newline at end of file diff --git a/vendor/blueimp/jquery-file-upload/README.md b/vendor/blueimp/jquery-file-upload/README.md index d2f104d5c..d9e16ed18 100644 --- a/vendor/blueimp/jquery-file-upload/README.md +++ b/vendor/blueimp/jquery-file-upload/README.md @@ -10,7 +10,7 @@ Supports cross-domain, chunked and resumable file uploads and client-side image ## ⚠️ Security Notice Security related releases: -* [v9.25.1](https://github.com/blueimp/jQuery-File-Upload/releases/tag/v9.25.1) Mitigates some [Potential vulnerabilities with PHP+ImageMagick](VULNERABILITIES.md#potential-vulnerabilities-with-php+imagemagick). +* [v9.25.1](https://github.com/blueimp/jQuery-File-Upload/releases/tag/v9.25.1) Mitigates some [Potential vulnerabilities with PHP+ImageMagick](VULNERABILITIES.md#potential-vulnerabilities-with-php-imagemagick). * [v9.24.1](https://github.com/blueimp/jQuery-File-Upload/releases/tag/v9.24.1) Fixes a [Remote code execution vulnerability in the PHP component](VULNERABILITIES.md#remote-code-execution-vulnerability-in-the-php-component). * v[9.10.1](https://github.com/blueimp/jQuery-File-Upload/releases/tag/9.10.1) Fixes an [Open redirect vulnerability in the GAE components](VULNERABILITIES.md#open-redirect-vulnerability-in-the-gae-components). * Commit [4175032](https://github.com/blueimp/jQuery-File-Upload/commit/41750323a464e848856dc4c5c940663498beb74a) (*fixed in all tagged releases*) Fixes a [Cross-site scripting vulnerability in the Iframe Transport](VULNERABILITIES.md#cross-site-scripting-vulnerability-in-the-iframe-transport). diff --git a/vendor/blueimp/jquery-file-upload/SECURITY.md b/vendor/blueimp/jquery-file-upload/SECURITY.md index db58f7dd7..86ffc163b 100644 --- a/vendor/blueimp/jquery-file-upload/SECURITY.md +++ b/vendor/blueimp/jquery-file-upload/SECURITY.md @@ -113,7 +113,7 @@ location ^~ /path/to/project/server/php/files { ``` ## Secure image processing configurations -The following configuration mitigates [potential image processing vulnerabilities with ImageMagick](VULNERABILITIES.md#potential-vulnerabilities-with-php+imagemagick) by limiting the attack vectors to a small subset of image types (`GIF/JPEG/PNG`). +The following configuration mitigates [potential image processing vulnerabilities with ImageMagick](VULNERABILITIES.md#potential-vulnerabilities-with-php-imagemagick) by limiting the attack vectors to a small subset of image types (`GIF/JPEG/PNG`). Please also consider using alternative, safer image processing libraries like [libvips](https://github.com/libvips/libvips) or [imageflow](https://github.com/imazen/imageflow). diff --git a/vendor/blueimp/jquery-file-upload/angularjs.html b/vendor/blueimp/jquery-file-upload/angularjs.html index 2051bbf79..e8b05e77f 100644 --- a/vendor/blueimp/jquery-file-upload/angularjs.html +++ b/vendor/blueimp/jquery-file-upload/angularjs.html @@ -22,7 +22,7 @@ <meta name="description" content="File Upload widget with multiple file selection, drag&drop support, progress bars, validation and preview images, audio and video for AngularJS. Supports cross-domain, chunked and resumable file uploads and client-side image resizing. Works with any server-side platform (PHP, Python, Ruby on Rails, Java, Node.js, Go etc.) that supports standard HTML form file uploads."> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <!-- Bootstrap styles --> -<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> +<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> <!-- Generic page styles --> <link rel="stylesheet" href="css/style.css"> <!-- blueimp Gallery styles --> @@ -177,8 +177,8 @@ <a class="play-pause"></a> <ol class="indicator"></ol> </div> -<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> -<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"></script> +<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js" integrity="sha384-xBuQ/xzmlsLoJpyjoggmTEz8OWUFM0/RC5BsqQBDX2v5cMvDHcMakNTNrHIW2I5f" crossorigin="anonymous"></script> +<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js" integrity="sha384-r6jjWwxAypHaESwS5an5J9dkfzwQuKVNV9FZM9B6fnt8PFuY0cVwLhV7BltCZhLy" crossorigin="anonymous"></script> <!-- The jQuery UI widget factory, can be omitted if jQuery UI is already included --> <script src="js/vendor/jquery.ui.widget.js"></script> <!-- The Load Image plugin is included for the preview images and image resizing functionality --> @@ -186,7 +186,7 @@ <!-- The Canvas to Blob plugin is included for image resizing functionality --> <script src="https://blueimp.github.io/JavaScript-Canvas-to-Blob/js/canvas-to-blob.min.js"></script> <!-- Bootstrap JS is not required, but included for the responsive demo navigation --> -<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> +<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script> <!-- blueimp Gallery script --> <script src="https://blueimp.github.io/Gallery/js/jquery.blueimp-gallery.min.js"></script> <!-- The Iframe Transport is required for browsers without support for XHR file uploads --> diff --git a/vendor/blueimp/jquery-file-upload/basic-plus.html b/vendor/blueimp/jquery-file-upload/basic-plus.html index acee24843..6d53acdc1 100644 --- a/vendor/blueimp/jquery-file-upload/basic-plus.html +++ b/vendor/blueimp/jquery-file-upload/basic-plus.html @@ -20,7 +20,7 @@ <meta name="description" content="File Upload widget with multiple file selection, drag&drop support, progress bar, validation and preview images, audio and video for jQuery. Supports cross-domain, chunked and resumable file uploads. Works with any server-side platform (Google App Engine, PHP, Python, Ruby on Rails, Java, etc.) that supports standard HTML form file uploads."> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <!-- Bootstrap styles --> -<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> +<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> <!-- Generic page styles --> <link rel="stylesheet" href="css/style.css"> <!-- CSS to style the file input field as button and adjust the Bootstrap progress bars --> @@ -96,15 +96,15 @@ </div> </div> </div> -<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> +<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js" integrity="sha384-xBuQ/xzmlsLoJpyjoggmTEz8OWUFM0/RC5BsqQBDX2v5cMvDHcMakNTNrHIW2I5f" crossorigin="anonymous"></script> <!-- The jQuery UI widget factory, can be omitted if jQuery UI is already included --> <script src="js/vendor/jquery.ui.widget.js"></script> <!-- The Load Image plugin is included for the preview images and image resizing functionality --> -<script src="https://blueimp.github.io/JavaScript-Load-Image/js/load-image.all.min.js"></script> +<script src="https://blueimp.github.io/JavaScript-Load-Image/js/load-image.all.min.js"></script> <!-- The Canvas to Blob plugin is included for image resizing functionality --> <script src="https://blueimp.github.io/JavaScript-Canvas-to-Blob/js/canvas-to-blob.min.js"></script> <!-- Bootstrap JS is not required, but included for the responsive demo navigation --> -<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> +<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script> <!-- The Iframe Transport is required for browsers without support for XHR file uploads --> <script src="js/jquery.iframe-transport.js"></script> <!-- The basic File Upload plugin --> diff --git a/vendor/blueimp/jquery-file-upload/basic.html b/vendor/blueimp/jquery-file-upload/basic.html index 232a24624..a9ef6273e 100644 --- a/vendor/blueimp/jquery-file-upload/basic.html +++ b/vendor/blueimp/jquery-file-upload/basic.html @@ -20,7 +20,7 @@ <meta name="description" content="File Upload widget with multiple file selection, drag&drop support and progress bar for jQuery. Supports cross-domain, chunked and resumable file uploads. Works with any server-side platform (PHP, Python, Ruby on Rails, Java, Node.js, Go etc.) that supports standard HTML form file uploads."> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <!-- Bootstrap styles --> -<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> +<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> <!-- Generic page styles --> <link rel="stylesheet" href="css/style.css"> <!-- CSS to style the file input field as button and adjust the Bootstrap progress bars --> @@ -96,7 +96,7 @@ </div> </div> </div> -<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> +<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js" integrity="sha384-xBuQ/xzmlsLoJpyjoggmTEz8OWUFM0/RC5BsqQBDX2v5cMvDHcMakNTNrHIW2I5f" crossorigin="anonymous"></script> <!-- The jQuery UI widget factory, can be omitted if jQuery UI is already included --> <script src="js/vendor/jquery.ui.widget.js"></script> <!-- The Iframe Transport is required for browsers without support for XHR file uploads --> @@ -104,7 +104,7 @@ <!-- The basic File Upload plugin --> <script src="js/jquery.fileupload.js"></script> <!-- Bootstrap JS is not required, but included for the responsive demo navigation --> -<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> +<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script> <script> /*jslint unparam: true */ /*global window, $ */ diff --git a/vendor/blueimp/jquery-file-upload/bower-version-update.js b/vendor/blueimp/jquery-file-upload/bower-version-update.js index 09ce3927e..09ce3927e 100755..100644 --- a/vendor/blueimp/jquery-file-upload/bower-version-update.js +++ b/vendor/blueimp/jquery-file-upload/bower-version-update.js diff --git a/vendor/blueimp/jquery-file-upload/bower.json b/vendor/blueimp/jquery-file-upload/bower.json index 34594a32f..2a56262a1 100644 --- a/vendor/blueimp/jquery-file-upload/bower.json +++ b/vendor/blueimp/jquery-file-upload/bower.json @@ -1,6 +1,6 @@ { "name": "blueimp-file-upload", - "version": "9.25.1", + "version": "9.28.0", "title": "jQuery File Upload", "description": "File Upload widget with multiple file selection, drag&drop support, progress bar, validation and preview images.", "keywords": [ diff --git a/vendor/blueimp/jquery-file-upload/cors/postmessage.html b/vendor/blueimp/jquery-file-upload/cors/postmessage.html index 6a56cf0b6..381a8e0cd 100644 --- a/vendor/blueimp/jquery-file-upload/cors/postmessage.html +++ b/vendor/blueimp/jquery-file-upload/cors/postmessage.html @@ -15,7 +15,7 @@ <head> <meta charset="utf-8"> <title>jQuery File Upload Plugin postMessage API</title> -<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> +<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js" integrity="sha384-xBuQ/xzmlsLoJpyjoggmTEz8OWUFM0/RC5BsqQBDX2v5cMvDHcMakNTNrHIW2I5f" crossorigin="anonymous"></script> </head> <body> <script> diff --git a/vendor/blueimp/jquery-file-upload/index.html b/vendor/blueimp/jquery-file-upload/index.html index c8c66ad8b..37e08a7cb 100644 --- a/vendor/blueimp/jquery-file-upload/index.html +++ b/vendor/blueimp/jquery-file-upload/index.html @@ -22,7 +22,7 @@ <meta name="description" content="File Upload widget with multiple file selection, drag&drop support, progress bars, validation and preview images, audio and video for jQuery. Supports cross-domain, chunked and resumable file uploads and client-side image resizing. Works with any server-side platform (PHP, Python, Ruby on Rails, Java, Node.js, Go etc.) that supports standard HTML form file uploads."> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <!-- Bootstrap styles --> -<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> +<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> <!-- Generic page styles --> <link rel="stylesheet" href="css/style.css"> <!-- blueimp Gallery styles --> @@ -216,7 +216,7 @@ </tr> {% } %} </script> -<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> +<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js" integrity="sha384-xBuQ/xzmlsLoJpyjoggmTEz8OWUFM0/RC5BsqQBDX2v5cMvDHcMakNTNrHIW2I5f" crossorigin="anonymous"></script> <!-- The jQuery UI widget factory, can be omitted if jQuery UI is already included --> <script src="js/vendor/jquery.ui.widget.js"></script> <!-- The Templates plugin is included to render the upload/download listings --> @@ -226,7 +226,7 @@ <!-- The Canvas to Blob plugin is included for image resizing functionality --> <script src="https://blueimp.github.io/JavaScript-Canvas-to-Blob/js/canvas-to-blob.min.js"></script> <!-- Bootstrap JS is not required, but included for the responsive demo navigation --> -<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> +<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script> <!-- blueimp Gallery script --> <script src="https://blueimp.github.io/Gallery/js/jquery.blueimp-gallery.min.js"></script> <!-- The Iframe Transport is required for browsers without support for XHR file uploads --> diff --git a/vendor/blueimp/jquery-file-upload/jquery-ui.html b/vendor/blueimp/jquery-file-upload/jquery-ui.html index 842dd4ca7..e44d41e89 100644 --- a/vendor/blueimp/jquery-file-upload/jquery-ui.html +++ b/vendor/blueimp/jquery-file-upload/jquery-ui.html @@ -22,7 +22,7 @@ <meta name="description" content="File Upload widget with multiple file selection, drag&drop support, progress bars, validation and preview images, audio and video for jQuery. Supports cross-domain, chunked and resumable file uploads and client-side image resizing. Works with any server-side platform (PHP, Python, Ruby on Rails, Java, Node.js, Go etc.) that supports standard HTML form file uploads."> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <!-- jQuery UI styles --> -<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/dark-hive/jquery-ui.css" id="theme"> +<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/dark-hive/jquery-ui.css" integrity="sha384-ufZtQaOYGuy/CibAC5jmelOpBu3H78Js7HrXSLo4LGccHUrGGHXt+uaTcDbio3kI" crossorigin="anonymous"> <!-- Generic page styles --> <link rel="stylesheet" href="css/style.css"> <!-- Demo styles --> @@ -201,8 +201,8 @@ </tr> {% } %} </script> -<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> -<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script> +<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js" integrity="sha384-xBuQ/xzmlsLoJpyjoggmTEz8OWUFM0/RC5BsqQBDX2v5cMvDHcMakNTNrHIW2I5f" crossorigin="anonymous"></script> +<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js" integrity="sha384-Dziy8F2VlJQLMShA6FHWNul/veM9bCkRUaLqr199K94ntO5QUrLJBEbYegdSkkqX" crossorigin="anonymous"></script> <!-- The Templates plugin is included to render the upload/download listings --> <script src="https://blueimp.github.io/JavaScript-Templates/js/tmpl.min.js"></script> <!-- The Load Image plugin is included for the preview images and image resizing functionality --> diff --git a/vendor/blueimp/jquery-file-upload/package.json b/vendor/blueimp/jquery-file-upload/package.json index 4b33a0362..0a635397c 100644 --- a/vendor/blueimp/jquery-file-upload/package.json +++ b/vendor/blueimp/jquery-file-upload/package.json @@ -1,6 +1,6 @@ { "name": "blueimp-file-upload", - "version": "9.25.1", + "version": "9.28.0", "title": "jQuery File Upload", "description": "File Upload widget with multiple file selection, drag&drop support, progress bar, validation and preview images, audio and video for jQuery. Supports cross-domain, chunked and resumable file uploads. Works with any server-side platform (Google App Engine, PHP, Python, Ruby on Rails, Java, etc.) that supports standard HTML form file uploads.", "keywords": [ diff --git a/vendor/blueimp/jquery-file-upload/server/php/UploadHandler.php b/vendor/blueimp/jquery-file-upload/server/php/UploadHandler.php index e44004395..5215e4c0f 100755..100644 --- a/vendor/blueimp/jquery-file-upload/server/php/UploadHandler.php +++ b/vendor/blueimp/jquery-file-upload/server/php/UploadHandler.php @@ -38,9 +38,9 @@ class UploadHandler 'image_resize' => 'Failed to resize image' ); - protected const IMAGETYPE_GIF = 1; - protected const IMAGETYPE_JPEG = 2; - protected const IMAGETYPE_PNG = 3; + const IMAGETYPE_GIF = 1; + const IMAGETYPE_JPEG = 2; + const IMAGETYPE_PNG = 3; protected $image_objects = array(); @@ -1047,13 +1047,18 @@ class UploadHandler } protected function create_scaled_image($file_name, $version, $options) { - if ($this->options['image_library'] === 2) { - return $this->imagemagick_create_scaled_image($file_name, $version, $options); - } - if ($this->options['image_library'] && extension_loaded('imagick')) { - return $this->imagick_create_scaled_image($file_name, $version, $options); + try { + if ($this->options['image_library'] === 2) { + return $this->imagemagick_create_scaled_image($file_name, $version, $options); + } + if ($this->options['image_library'] && extension_loaded('imagick')) { + return $this->imagick_create_scaled_image($file_name, $version, $options); + } + return $this->gd_create_scaled_image($file_name, $version, $options); + } catch (\Exception $e) { + error_log($e->getMessage()); + return false; } - return $this->gd_create_scaled_image($file_name, $version, $options); } protected function destroy_image_object($file_path) { @@ -1066,12 +1071,12 @@ class UploadHandler $fp = fopen($file_path, 'r'); $data = fread($fp, 4); fclose($fp); - // GIF: 47 49 46 - if (substr($data, 0, 3) === 'GIF') { + // GIF: 47 49 46 38 + if ($data === 'GIF8') { return self::IMAGETYPE_GIF; } - // JPG: FF D8 - if (bin2hex(substr($data, 0, 2)) === 'ffd8') { + // JPG: FF D8 FF + if (bin2hex(substr($data, 0, 3)) === 'ffd8ff') { return self::IMAGETYPE_JPEG; } // PNG: 89 50 4E 47 @@ -1082,6 +1087,9 @@ class UploadHandler } protected function is_valid_image_file($file_path) { + if (!preg_match('/\.(gif|jpe?g|png)$/i', $file_path)) { + return false; + } return !!$this->imagetype($file_path); } diff --git a/vendor/blueimp/jquery-file-upload/server/php/index.php b/vendor/blueimp/jquery-file-upload/server/php/index.php index 9c2cfb8eb..6caabb710 100644 --- a/vendor/blueimp/jquery-file-upload/server/php/index.php +++ b/vendor/blueimp/jquery-file-upload/server/php/index.php @@ -9,7 +9,7 @@ * Licensed under the MIT license: * https://opensource.org/licenses/MIT */ -exit; + error_reporting(E_ALL | E_STRICT); require('UploadHandler.php'); $upload_handler = new UploadHandler(); diff --git a/vendor/blueimp/jquery-file-upload/test/index.html b/vendor/blueimp/jquery-file-upload/test/index.html index 0b5cf57b7..b8c585df5 100644 --- a/vendor/blueimp/jquery-file-upload/test/index.html +++ b/vendor/blueimp/jquery-file-upload/test/index.html @@ -20,7 +20,7 @@ <meta charset="utf-8"> <title>jQuery File Upload Plugin Test</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> -<link rel="stylesheet" href="https://code.jquery.com/qunit/qunit-1.23.1.css"> +<link rel="stylesheet" href="https://code.jquery.com/qunit/qunit-1.23.1.css" integrity="sha384-RW07PgMHO3eNYL7ddFK/okEi1rjvSeJ3Ck/TxGUHkmzSlGmw4R9/KGJYUD3OicMd" crossorigin="anonymous"> </head> <body> <h1 id="qunit-header">jQuery File Upload Plugin Test</h1> @@ -145,7 +145,7 @@ </tr> {% } %} </script> -<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> +<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js" integrity="sha384-nvAa0+6Qg9clwYCGGPpDQLVpLNn0fRaROjHqs13t4Ggj3Ez50XnGQqc/r8MhnRDZ" crossorigin="anonymous"></script> <script src="../js/vendor/jquery.ui.widget.js"></script> <script src="https://blueimp.github.io/JavaScript-Templates/js/tmpl.min.js"></script> <script src="https://blueimp.github.io/JavaScript-Load-Image/js/load-image.all.min.js"></script> @@ -166,7 +166,7 @@ window.testBasicWidget = $.blueimp.fileupload; /* global window, $ */ window.testUIWidget = $.blueimp.fileupload; </script> -<script src="https://code.jquery.com/qunit/qunit-1.23.1.js"></script> +<script src="https://code.jquery.com/qunit/qunit-1.23.1.js" integrity="sha384-FJbPWND3tHbuhP8PhCp3Kn0bEtCxaIq+sfkmiJ+Su0jchKFnVbPQTTyPiuwqbkXa" crossorigin="anonymous"></script> <script src="test.js"></script> </body> </html> diff --git a/vendor/composer/ClassLoader.php b/vendor/composer/ClassLoader.php index 95f7e0978..fce8549f0 100644 --- a/vendor/composer/ClassLoader.php +++ b/vendor/composer/ClassLoader.php @@ -279,7 +279,7 @@ class ClassLoader */ public function setApcuPrefix($apcuPrefix) { - $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null; + $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null; } /** diff --git a/vendor/composer/LICENSE b/vendor/composer/LICENSE index f0157a6ed..f27399a04 100644 --- a/vendor/composer/LICENSE +++ b/vendor/composer/LICENSE @@ -1,56 +1,21 @@ -Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ -Upstream-Name: Composer -Upstream-Contact: Jordi Boggiano <j.boggiano@seld.be> -Source: https://github.com/composer/composer -Files: * -Copyright: 2016, Nils Adermann <naderman@naderman.de> - 2016, Jordi Boggiano <j.boggiano@seld.be> -License: Expat +Copyright (c) Nils Adermann, Jordi Boggiano -Files: src/Composer/Util/TlsHelper.php -Copyright: 2016, Nils Adermann <naderman@naderman.de> - 2016, Jordi Boggiano <j.boggiano@seld.be> - 2013, Evan Coury <me@evancoury.com> -License: Expat and BSD-2-Clause +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: -License: BSD-2-Clause - Redistribution and use in source and binary forms, with or without modification, - are permitted provided that the following conditions are met: - . - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - . - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - . - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. -License: Expat - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is furnished - to do so, subject to the following conditions: - . - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - . - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php index f3c814e02..86acbb152 100644 --- a/vendor/composer/autoload_classmap.php +++ b/vendor/composer/autoload_classmap.php @@ -380,6 +380,9 @@ return array( 'Psr\\Log\\LoggerInterface' => $vendorDir . '/psr/log/Psr/Log/LoggerInterface.php', 'Psr\\Log\\LoggerTrait' => $vendorDir . '/psr/log/Psr/Log/LoggerTrait.php', 'Psr\\Log\\NullLogger' => $vendorDir . '/psr/log/Psr/Log/NullLogger.php', + 'Psr\\Log\\Test\\DummyTest' => $vendorDir . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php', + 'Psr\\Log\\Test\\LoggerInterfaceTest' => $vendorDir . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php', + 'Psr\\Log\\Test\\TestLogger' => $vendorDir . '/psr/log/Psr/Log/Test/TestLogger.php', 'Ramsey\\Uuid\\BinaryUtils' => $vendorDir . '/ramsey/uuid/src/BinaryUtils.php', 'Ramsey\\Uuid\\Builder\\DefaultUuidBuilder' => $vendorDir . '/ramsey/uuid/src/Builder/DefaultUuidBuilder.php', 'Ramsey\\Uuid\\Builder\\DegradedUuidBuilder' => $vendorDir . '/ramsey/uuid/src/Builder/DegradedUuidBuilder.php', @@ -981,7 +984,6 @@ return array( 'Zotlabs\\Module\\Mood' => $baseDir . '/Zotlabs/Module/Mood.php', 'Zotlabs\\Module\\Network' => $baseDir . '/Zotlabs/Module/Network.php', 'Zotlabs\\Module\\New_channel' => $baseDir . '/Zotlabs/Module/New_channel.php', - 'Zotlabs\\Module\\Nojs' => $baseDir . '/Zotlabs/Module/Nojs.php', 'Zotlabs\\Module\\Notes' => $baseDir . '/Zotlabs/Module/Notes.php', 'Zotlabs\\Module\\Notifications' => $baseDir . '/Zotlabs/Module/Notifications.php', 'Zotlabs\\Module\\Notify' => $baseDir . '/Zotlabs/Module/Notify.php', @@ -1337,7 +1339,10 @@ return array( 'Zotlabs\\Update\\_1222' => $baseDir . '/Zotlabs/Update/_1222.php', 'Zotlabs\\Update\\_1223' => $baseDir . '/Zotlabs/Update/_1223.php', 'Zotlabs\\Update\\_1224' => $baseDir . '/Zotlabs/Update/_1224.php', - 'Zotlabs\\Web\\CheckJS' => $baseDir . '/Zotlabs/Web/CheckJS.php', + 'Zotlabs\\Update\\_1225' => $baseDir . '/Zotlabs/Update/_1225.php', + 'Zotlabs\\Update\\_1226' => $baseDir . '/Zotlabs/Update/_1226.php', + 'Zotlabs\\Update\\_1227' => $baseDir . '/Zotlabs/Update/_1227.php', + 'Zotlabs\\Update\\_1228' => $baseDir . '/Zotlabs/Update/_1228.php', 'Zotlabs\\Web\\Controller' => $baseDir . '/Zotlabs/Web/Controller.php', 'Zotlabs\\Web\\HTTPHeaders' => $baseDir . '/Zotlabs/Web/HTTPHeaders.php', 'Zotlabs\\Web\\HTTPSig' => $baseDir . '/Zotlabs/Web/HTTPSig.php', diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index ce0232306..ea23de753 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -548,6 +548,9 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d 'Psr\\Log\\LoggerInterface' => __DIR__ . '/..' . '/psr/log/Psr/Log/LoggerInterface.php', 'Psr\\Log\\LoggerTrait' => __DIR__ . '/..' . '/psr/log/Psr/Log/LoggerTrait.php', 'Psr\\Log\\NullLogger' => __DIR__ . '/..' . '/psr/log/Psr/Log/NullLogger.php', + 'Psr\\Log\\Test\\DummyTest' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php', + 'Psr\\Log\\Test\\LoggerInterfaceTest' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php', + 'Psr\\Log\\Test\\TestLogger' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/TestLogger.php', 'Ramsey\\Uuid\\BinaryUtils' => __DIR__ . '/..' . '/ramsey/uuid/src/BinaryUtils.php', 'Ramsey\\Uuid\\Builder\\DefaultUuidBuilder' => __DIR__ . '/..' . '/ramsey/uuid/src/Builder/DefaultUuidBuilder.php', 'Ramsey\\Uuid\\Builder\\DegradedUuidBuilder' => __DIR__ . '/..' . '/ramsey/uuid/src/Builder/DegradedUuidBuilder.php', @@ -1149,7 +1152,6 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d 'Zotlabs\\Module\\Mood' => __DIR__ . '/../..' . '/Zotlabs/Module/Mood.php', 'Zotlabs\\Module\\Network' => __DIR__ . '/../..' . '/Zotlabs/Module/Network.php', 'Zotlabs\\Module\\New_channel' => __DIR__ . '/../..' . '/Zotlabs/Module/New_channel.php', - 'Zotlabs\\Module\\Nojs' => __DIR__ . '/../..' . '/Zotlabs/Module/Nojs.php', 'Zotlabs\\Module\\Notes' => __DIR__ . '/../..' . '/Zotlabs/Module/Notes.php', 'Zotlabs\\Module\\Notifications' => __DIR__ . '/../..' . '/Zotlabs/Module/Notifications.php', 'Zotlabs\\Module\\Notify' => __DIR__ . '/../..' . '/Zotlabs/Module/Notify.php', @@ -1506,7 +1508,9 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d 'Zotlabs\\Update\\_1223' => __DIR__ . '/../..' . '/Zotlabs/Update/_1223.php', 'Zotlabs\\Update\\_1224' => __DIR__ . '/../..' . '/Zotlabs/Update/_1224.php', 'Zotlabs\\Update\\_1225' => __DIR__ . '/../..' . '/Zotlabs/Update/_1225.php', - 'Zotlabs\\Web\\CheckJS' => __DIR__ . '/../..' . '/Zotlabs/Web/CheckJS.php', + 'Zotlabs\\Update\\_1226' => __DIR__ . '/../..' . '/Zotlabs/Update/_1226.php', + 'Zotlabs\\Update\\_1227' => __DIR__ . '/../..' . '/Zotlabs/Update/_1227.php', + 'Zotlabs\\Update\\_1228' => __DIR__ . '/../..' . '/Zotlabs/Update/_1228.php', 'Zotlabs\\Web\\Controller' => __DIR__ . '/../..' . '/Zotlabs/Web/Controller.php', 'Zotlabs\\Web\\HTTPHeaders' => __DIR__ . '/../..' . '/Zotlabs/Web/HTTPHeaders.php', 'Zotlabs\\Web\\HTTPSig' => __DIR__ . '/../..' . '/Zotlabs/Web/HTTPSig.php', diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index af845828e..d2f86ea99 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -1,20 +1,20 @@ [ { "name": "blueimp/jquery-file-upload", - "version": "v9.25.1", - "version_normalized": "9.25.1.0", + "version": "v9.28.0", + "version_normalized": "9.28.0.0", "source": { "type": "git", "url": "https://github.com/vkhramtsov/jQuery-File-Upload.git", - "reference": "28891f9b2bc339bcc1ca8d548e5401e8563bf04b" + "reference": "ff5accfe2e5c4a522777faa980a90cf86a636d1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vkhramtsov/jQuery-File-Upload/zipball/28891f9b2bc339bcc1ca8d548e5401e8563bf04b", - "reference": "28891f9b2bc339bcc1ca8d548e5401e8563bf04b", + "url": "https://api.github.com/repos/vkhramtsov/jQuery-File-Upload/zipball/ff5accfe2e5c4a522777faa980a90cf86a636d1d", + "reference": "ff5accfe2e5c4a522777faa980a90cf86a636d1d", "shasum": "" }, - "time": "2018-10-26T07:21:48+00:00", + "time": "2018-11-13T05:41:39+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -163,6 +163,47 @@ "description": "Internationalization library powered by CLDR data." }, { + "name": "desandro/imagesloaded", + "version": "v4.1.4", + "version_normalized": "4.1.4.0", + "source": { + "type": "git", + "url": "https://github.com/desandro/imagesloaded.git", + "reference": "67c4e57453120935180c45c6820e7d3fbd2ea1f9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/desandro/imagesloaded/zipball/67c4e57453120935180c45c6820e7d3fbd2ea1f9", + "reference": "67c4e57453120935180c45c6820e7d3fbd2ea1f9", + "shasum": "" + }, + "time": "2018-01-02T16:53:35+00:00", + "type": "component", + "installation-source": "dist", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "David DeSandro", + "homepage": "http://desandro.com/", + "role": "developer" + } + ], + "description": "JavaScript is all like _You images done yet or what?_", + "homepage": "http://imagesloaded.desandro.com", + "keywords": [ + "dom", + "images", + "javascript", + "jquery-plugin", + "library", + "loaded", + "ui" + ] + }, + { "name": "ezyang/htmlpurifier", "version": "v4.10.0", "version_normalized": "4.10.0.0", @@ -457,23 +498,23 @@ }, { "name": "psr/log", - "version": "1.0.2", - "version_normalized": "1.0.2.0", + "version": "1.1.0", + "version_normalized": "1.1.0.0", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" + "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", - "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", + "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", "shasum": "" }, "require": { "php": ">=5.3.0" }, - "time": "2016-10-10T12:19:37+00:00", + "time": "2018-11-20T15:27:04+00:00", "type": "library", "extra": { "branch-alias": { @@ -1141,8 +1182,8 @@ }, { "name": "symfony/polyfill-ctype", - "version": "v1.9.0", - "version_normalized": "1.9.0.0", + "version": "v1.10.0", + "version_normalized": "1.10.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", diff --git a/vendor/desandro/imagesloaded/.gitignore b/vendor/desandro/imagesloaded/.gitignore new file mode 100644 index 000000000..2486eb53d --- /dev/null +++ b/vendor/desandro/imagesloaded/.gitignore @@ -0,0 +1,5 @@ +bower_components/ +node_modules/ +_site/ +build/ +package-lock.json diff --git a/vendor/desandro/imagesloaded/.jshintrc b/vendor/desandro/imagesloaded/.jshintrc new file mode 100644 index 000000000..78aa4af7b --- /dev/null +++ b/vendor/desandro/imagesloaded/.jshintrc @@ -0,0 +1,12 @@ +{ + "browser": true, + "curly": true, + "newcap": false, + "strict": true, + "undef": true, + "unused": true, + "globals": { + "imagesLoaded": false, + "QUnit": false + } +} diff --git a/vendor/desandro/imagesloaded/README.md b/vendor/desandro/imagesloaded/README.md new file mode 100644 index 000000000..67b799dfd --- /dev/null +++ b/vendor/desandro/imagesloaded/README.md @@ -0,0 +1,362 @@ +# imagesLoaded + +<p class="tagline">JavaScript is all like "You images done yet or what?"</p> + +[imagesloaded.desandro.com](http://imagesloaded.desandro.com) + +Detect when images have been loaded. + +## Install + +### Download + ++ [imagesloaded.pkgd.min.js](https://unpkg.com/imagesloaded@4/imagesloaded.pkgd.min.js) minified ++ [imagesloaded.pkgd.js](https://unpkg.com/imagesloaded@4/imagesloaded.pkgd.js) un-minified + +### CDN + +``` html +<script src="https://unpkg.com/imagesloaded@4/imagesloaded.pkgd.min.js"></script> +<!-- or --> +<script src="https://unpkg.com/imagesloaded@4/imagesloaded.pkgd.js"></script> +``` + +### Package managers + +Install via [npm](https://www.npmjs.com/package/imagesloaded): `npm install imagesloaded` + +Install via [Bower](http://bower.io): `bower install imagesloaded --save` + +## jQuery + +You can use imagesLoaded as a jQuery Plugin. + +``` js +$('#container').imagesLoaded( function() { + // images have loaded +}); + +// options +$('#container').imagesLoaded( { + // options... + }, + function() { + // images have loaded + } +); +``` + +`.imagesLoaded()` returns a [jQuery Deferred object](http://api.jquery.com/category/deferred-object/). This allows you to use `.always()`, `.done()`, `.fail()` and `.progress()`. + +``` js +$('#container').imagesLoaded() + .always( function( instance ) { + console.log('all images loaded'); + }) + .done( function( instance ) { + console.log('all images successfully loaded'); + }) + .fail( function() { + console.log('all images loaded, at least one is broken'); + }) + .progress( function( instance, image ) { + var result = image.isLoaded ? 'loaded' : 'broken'; + console.log( 'image is ' + result + ' for ' + image.img.src ); + }); +``` + +## Vanilla JavaScript + +You can use imagesLoaded with vanilla JS. + +``` js +imagesLoaded( elem, callback ) +// options +imagesLoaded( elem, options, callback ) +// you can use `new` if you like +new imagesLoaded( elem, callback ) +``` + ++ `elem` _Element, NodeList, Array, or Selector String_ ++ `options` _Object_ ++ `callback` _Function_ - function triggered after all images have been loaded + +Using a callback function is the same as binding it to the `always` event (see below). + +``` js +// element +imagesLoaded( document.querySelector('#container'), function( instance ) { + console.log('all images are loaded'); +}); +// selector string +imagesLoaded( '#container', function() {...}); +// multiple elements +var posts = document.querySelectorAll('.post'); +imagesLoaded( posts, function() {...}); +``` + +Bind events with vanilla JS with .on(), .off(), and .once() methods. + +``` js +var imgLoad = imagesLoaded( elem ); +function onAlways( instance ) { + console.log('all images are loaded'); +} +// bind with .on() +imgLoad.on( 'always', onAlways ); +// unbind with .off() +imgLoad.off( 'always', onAlways ); +``` + +## Background + +Detect when background images have loaded, in addition to `<img>`s. + +Set `{ background: true }` to detect when the element's background image has loaded. + +``` js +// jQuery +$('#container').imagesLoaded( { background: true }, function() { + console.log('#container background image loaded'); +}); + +// vanilla JS +imagesLoaded( '#container', { background: true }, function() { + console.log('#container background image loaded'); +}); +``` + +[See jQuery demo](http://codepen.io/desandro/pen/pjVMPB) or [vanilla JS demo](http://codepen.io/desandro/pen/avKooW) on CodePen. + +Set to a selector string like `{ background: '.item' }` to detect when the background images of child elements have loaded. + +``` js +// jQuery +$('#container').imagesLoaded( { background: '.item' }, function() { + console.log('all .item background images loaded'); +}); + +// vanilla JS +imagesLoaded( '#container', { background: '.item' }, function() { + console.log('all .item background images loaded'); +}); +``` + +[See jQuery demo](http://codepen.io/desandro/pen/avKoZL) or [vanilla JS demo](http://codepen.io/desandro/pen/vNrBGz) on CodePen. + +## Events + +### always + +``` js +// jQuery +$('#container').imagesLoaded().always( function( instance ) { + console.log('ALWAYS - all images have been loaded'); +}); + +// vanilla JS +imgLoad.on( 'always', function( instance ) { + console.log('ALWAYS - all images have been loaded'); +}); +``` + +Triggered after all images have been either loaded or confirmed broken. + ++ `instance` _imagesLoaded_ - the imagesLoaded instance + +### done + +``` js +// jQuery +$('#container').imagesLoaded().done( function( instance ) { + console.log('DONE - all images have been successfully loaded'); +}); + +// vanilla JS +imgLoad.on( 'done', function( instance ) { + console.log('DONE - all images have been successfully loaded'); +}); +``` + +Triggered after all images have successfully loaded without any broken images. + +### fail + +``` js +$('#container').imagesLoaded().fail( function( instance ) { + console.log('FAIL - all images loaded, at least one is broken'); +}); + +// vanilla JS +imgLoad.on( 'fail', function( instance ) { + console.log('FAIL - all images loaded, at least one is broken'); +}); +``` + +Triggered after all images have been loaded with at least one broken image. + +### progress + +``` js +imgLoad.on( 'progress', function( instance, image ) { + var result = image.isLoaded ? 'loaded' : 'broken'; + console.log( 'image is ' + result + ' for ' + image.img.src ); +}); +``` + +Triggered after each image has been loaded. + ++ `instance` _imagesLoaded_ - the imagesLoaded instance ++ `image` _LoadingImage_ - the LoadingImage instance of the loaded image + +<!-- sponsored --> + +## Properties + +### LoadingImage.img + +_Image_ - The `img` element + +### LoadingImage.isLoaded + +_Boolean_ - `true` when the image has successfully loaded + +### imagesLoaded.images + +Array of _LoadingImage_ instances for each image detected + +``` js +var imgLoad = imagesLoaded('#container'); +imgLoad.on( 'always', function() { + console.log( imgLoad.images.length + ' images loaded' ); + // detect which image is broken + for ( var i = 0, len = imgLoad.images.length; i < len; i++ ) { + var image = imgLoad.images[i]; + var result = image.isLoaded ? 'loaded' : 'broken'; + console.log( 'image is ' + result + ' for ' + image.img.src ); + } +}); +``` + +## Browserify + +imagesLoaded works with [Browserify](http://browserify.org/). + +``` bash +npm install imagesloaded --save +``` + +``` js +var imagesLoaded = require('imagesloaded'); + +imagesLoaded( elem, function() {...} ); +``` + +Use `.makeJQueryPlugin` to make to use `.imagesLoaded()` jQuery plugin. + +``` js +var $ = require('jquery'); +var imagesLoaded = require('imagesloaded'); + +// provide jQuery argument +imagesLoaded.makeJQueryPlugin( $ ); +// now use .imagesLoaded() jQuery plugin +$('#container').imagesLoaded( function() {...}); +``` + +## Webpack + +Install imagesLoaded with npm. + +``` bash +npm install imagesloaded +``` + +You can then `require('imagesloaded')`. + +``` js +// main.js +var imagesLoaded = require('imagesloaded'); + +imagesLoaded( '#container', function() { + // images have loaded +}); +``` + +Use `.makeJQueryPlugin` to make `.imagesLoaded()` jQuery plugin. + +``` js +// main.js +var imagesLoaded = require('imagesloaded'); +var $ = require('jquery'); + +// provide jQuery argument +imagesLoaded.makeJQueryPlugin( $ ); +// now use .imagesLoaded() jQuery plugin +$('#container').imagesLoaded( function() {...}); +``` + +Run webpack. + +``` bash +webpack main.js bundle.js +``` + +## RequireJS + +imagesLoaded works with [RequireJS](http://requirejs.org). + +You can require [imagesloaded.pkgd.js](http://imagesloaded.desandro.com/imagesloaded.pkgd.js). + +``` js +requirejs( [ + 'path/to/imagesloaded.pkgd.js', +], function( imagesLoaded ) { + imagesLoaded( '#container', function() { ... }); +}); +``` + +Use `.makeJQueryPlugin` to make `.imagesLoaded()` jQuery plugin. + +``` js +requirejs( [ + 'jquery', + 'path/to/imagesloaded.pkgd.js', +], function( $, imagesLoaded ) { + // provide jQuery argument + imagesLoaded.makeJQueryPlugin( $ ); + // now use .imagesLoaded() jQuery plugin + $('#container').imagesLoaded( function() {...}); +}); +``` + +You can manage dependencies with [Bower](http://bower.io). Set `baseUrl` to `bower_components` and set a path config for all your application code. + +``` js +requirejs.config({ + baseUrl: 'bower_components/', + paths: { // path to your app + app: '../' + } +}); + +requirejs( [ + 'imagesloaded/imagesloaded', + 'app/my-component.js' +], function( imagesLoaded, myComp ) { + imagesLoaded( '#container', function() { ... }); +}); +``` + +## Browser support + ++ IE9+ ++ Android 2.3+ ++ iOS Safari 4+ ++ All other modern browsers + +Use [imagesLoaded v3](http://imagesloaded.desandro.com/v3/) for IE8 support. + +## MIT License + +imagesLoaded is released under the [MIT License](http://desandro.mit-license.org/). Have at it. diff --git a/vendor/desandro/imagesloaded/bower.json b/vendor/desandro/imagesloaded/bower.json new file mode 100644 index 000000000..795c69f07 --- /dev/null +++ b/vendor/desandro/imagesloaded/bower.json @@ -0,0 +1,37 @@ +{ + "name": "imagesloaded", + "description": "JavaScript is all like _You images done yet or what?_", + "main": "imagesloaded.js", + "dependencies": { + "ev-emitter": "^1.0.0" + }, + "devDependencies": { + "jquery": ">=1.9 <4.0", + "qunit": "^2.0.0" + }, + "ignore": [ + "**/.*", + "test", + "package.json", + "composer.json", + "node_modules", + "bower_components", + "tests", + "sandbox/", + "gulpfile.js", + "contributing.md" + ], + "homepage": "http://imagesloaded.desandro.com", + "authors": [ + "David DeSandro" + ], + "moduleType": [ + "amd", + "globals", + "node" + ], + "keywords": [ + "images" + ], + "license": "MIT" +} diff --git a/vendor/desandro/imagesloaded/composer.json b/vendor/desandro/imagesloaded/composer.json new file mode 100644 index 000000000..95ba64c4a --- /dev/null +++ b/vendor/desandro/imagesloaded/composer.json @@ -0,0 +1,15 @@ +{ + "name": "desandro/imagesloaded", + "description": "JavaScript is all like _You images done yet or what?_", + "type": "component", + "keywords": ["javascript", "library", "images", "loaded", "dom", "ui", "jquery-plugin"], + "homepage": "http://imagesloaded.desandro.com", + "license": "MIT", + "authors": [ + { + "name": "David DeSandro", + "homepage": "http://desandro.com/", + "role": "developer" + } + ] +} diff --git a/vendor/desandro/imagesloaded/contributing.md b/vendor/desandro/imagesloaded/contributing.md new file mode 100644 index 000000000..acac280cc --- /dev/null +++ b/vendor/desandro/imagesloaded/contributing.md @@ -0,0 +1,20 @@ +## Submitting issues + +### Reduced test case required + +All bug reports and problem issues require a [**reduced test case**](http://css-tricks.com/reduced-test-cases/). + ++ A reduced test case clearly demonstrates the bug or issue. ++ It contains the bare minimum HTML, CSS, and JavaScript required to demonstrate the bug. ++ A link to your production site is **not** a reduced test case. + +Create a test case by forking a [CodePen demos](http://codepen.io/desandro/pens/tags/?selected_tag=imagesloaded-docs). + ++ [progress with jQuery](http://codepen.io/desandro/pen/bIFyl) ++ [progress with vanilla JS](http://codepen.io/desandro/pen/hlzaw) ++ [`{ background: true }` with jQuery](http://codepen.io/desandro/pen/pjVMPB) ++ [`{ background: true }` with vanilla JS](http://codepen.io/desandro/pen/avKooW) ++ [`{ background: '.selector' }` with jQuery](http://codepen.io/desandro/pen/avKoZL) ++ [`{ background: '.selector' }` with vanilla JS](http://codepen.io/desandro/pen/vNrBGz) + +Providing a reduced test case is the best way to get your issue addressed. They help you point out the problem. They help me verify and debug the problem. They help others understand the problem. Without a reduced test case, your issue may be closed. diff --git a/vendor/desandro/imagesloaded/gulpfile.js b/vendor/desandro/imagesloaded/gulpfile.js new file mode 100644 index 000000000..66f775f3d --- /dev/null +++ b/vendor/desandro/imagesloaded/gulpfile.js @@ -0,0 +1,128 @@ +/*jshint node: true, strict: false */ + +var fs = require('fs'); +var gulp = require('gulp'); +var rename = require('gulp-rename'); +var replace = require('gulp-replace'); + +// ----- hint ----- // + +var jshint = require('gulp-jshint'); + +gulp.task( 'hint-js', function() { + return gulp.src('imagesloaded.js') + .pipe( jshint() ) + .pipe( jshint.reporter('default') ); +}); + +gulp.task( 'hint-test', function() { + return gulp.src('test/unit/*.js') + .pipe( jshint() ) + .pipe( jshint.reporter('default') ); +}); + +gulp.task( 'hint-task', function() { + return gulp.src('gulpfile.js') + .pipe( jshint() ) + .pipe( jshint.reporter('default') ); +}); + +var jsonlint = require('gulp-json-lint'); + +gulp.task( 'jsonlint', function() { + return gulp.src( '*.json' ) + .pipe( jsonlint() ) + .pipe( jsonlint.report('verbose') ); +}); + +gulp.task( 'hint', [ 'hint-js', 'hint-test', 'hint-task', 'jsonlint' ]); + +// -------------------------- RequireJS makes pkgd -------------------------- // + +// refactored from gulp-requirejs-optimize +// https://www.npmjs.com/package/gulp-requirejs-optimize/ + +var gutil = require('gulp-util'); +var chalk = require('chalk'); +var rjsOptimize = require('gulp-requirejs-optimize'); + +// regex for banner comment +var reBannerComment = new RegExp('^\\s*(?:\\/\\*[\\s\\S]*?\\*\\/)\\s*'); + +function getBanner() { + var src = fs.readFileSync( 'imagesloaded.js', 'utf8' ); + var matches = src.match( reBannerComment ); + var banner = matches[0].replace( 'imagesLoaded', 'imagesLoaded PACKAGED' ); + return banner; +} + +function addBanner( str ) { + return replace( /^/, str ); +} + +gulp.task( 'requirejs', function() { + var banner = getBanner(); + // HACK src is not needed + // should refactor rjsOptimize to produce src + return gulp.src('imagesloaded.js') + .pipe( rjsOptimize({ + baseUrl: 'bower_components', + optimize: 'none', + include: [ + '../imagesloaded' + ] + }) ) + // remove named module + .pipe( replace( "'../imagesloaded',", '' ) ) + // add banner + .pipe( addBanner( banner ) ) + .pipe( rename('imagesloaded.pkgd.js') ) + .pipe( gulp.dest('.') ); +}); + + +// ----- uglify ----- // + +var uglify = require('gulp-uglify'); + +gulp.task( 'uglify', [ 'requirejs' ], function() { + var banner = getBanner(); + gulp.src('imagesloaded.pkgd.js') + .pipe( uglify() ) + // add banner + .pipe( addBanner( banner ) ) + .pipe( rename('imagesloaded.pkgd.min.js') ) + .pipe( gulp.dest('.') ); +}); + +// ----- version ----- // + +// set version in source files + +var minimist = require('minimist'); + +// use gulp version -t 1.2.3 +gulp.task( 'version', function() { + var args = minimist( process.argv.slice(3) ); + var version = args.t; + if ( !version || !/\d+\.\d+\.\d+/.test( version ) ) { + gutil.log( 'invalid version: ' + chalk.red( version ) ); + return; + } + gutil.log( 'ticking version to ' + chalk.green( version ) ); + + gulp.src('imagesloaded.js') + .pipe( replace( /imagesLoaded v\d+\.\d+\.\d+/, 'imagesLoaded v' + version ) ) + .pipe( gulp.dest('.') ); + + gulp.src( [ 'bower.json', 'package.json' ] ) + .pipe( replace( /"version": "\d+\.\d+\.\d+"/, '"version": "' + version + '"' ) ) + .pipe( gulp.dest('.') ); +}); + +// ----- default ----- // + +gulp.task( 'default', [ + 'hint', + 'uglify' +]); diff --git a/vendor/desandro/imagesloaded/imagesloaded.js b/vendor/desandro/imagesloaded/imagesloaded.js new file mode 100644 index 000000000..f527a71e9 --- /dev/null +++ b/vendor/desandro/imagesloaded/imagesloaded.js @@ -0,0 +1,377 @@ +/*! + * imagesLoaded v4.1.4 + * JavaScript is all like "You images are done yet or what?" + * MIT License + */ + +( function( window, factory ) { 'use strict'; + // universal module definition + + /*global define: false, module: false, require: false */ + + if ( typeof define == 'function' && define.amd ) { + // AMD + define( [ + 'ev-emitter/ev-emitter' + ], function( EvEmitter ) { + return factory( window, EvEmitter ); + }); + } else if ( typeof module == 'object' && module.exports ) { + // CommonJS + module.exports = factory( + window, + require('ev-emitter') + ); + } else { + // browser global + window.imagesLoaded = factory( + window, + window.EvEmitter + ); + } + +})( typeof window !== 'undefined' ? window : this, + +// -------------------------- factory -------------------------- // + +function factory( window, EvEmitter ) { + +'use strict'; + +var $ = window.jQuery; +var console = window.console; + +// -------------------------- helpers -------------------------- // + +// extend objects +function extend( a, b ) { + for ( var prop in b ) { + a[ prop ] = b[ prop ]; + } + return a; +} + +var arraySlice = Array.prototype.slice; + +// turn element or nodeList into an array +function makeArray( obj ) { + if ( Array.isArray( obj ) ) { + // use object if already an array + return obj; + } + + var isArrayLike = typeof obj == 'object' && typeof obj.length == 'number'; + if ( isArrayLike ) { + // convert nodeList to array + return arraySlice.call( obj ); + } + + // array of single index + return [ obj ]; +} + +// -------------------------- imagesLoaded -------------------------- // + +/** + * @param {Array, Element, NodeList, String} elem + * @param {Object or Function} options - if function, use as callback + * @param {Function} onAlways - callback function + */ +function ImagesLoaded( elem, options, onAlways ) { + // coerce ImagesLoaded() without new, to be new ImagesLoaded() + if ( !( this instanceof ImagesLoaded ) ) { + return new ImagesLoaded( elem, options, onAlways ); + } + // use elem as selector string + var queryElem = elem; + if ( typeof elem == 'string' ) { + queryElem = document.querySelectorAll( elem ); + } + // bail if bad element + if ( !queryElem ) { + console.error( 'Bad element for imagesLoaded ' + ( queryElem || elem ) ); + return; + } + + this.elements = makeArray( queryElem ); + this.options = extend( {}, this.options ); + // shift arguments if no options set + if ( typeof options == 'function' ) { + onAlways = options; + } else { + extend( this.options, options ); + } + + if ( onAlways ) { + this.on( 'always', onAlways ); + } + + this.getImages(); + + if ( $ ) { + // add jQuery Deferred object + this.jqDeferred = new $.Deferred(); + } + + // HACK check async to allow time to bind listeners + setTimeout( this.check.bind( this ) ); +} + +ImagesLoaded.prototype = Object.create( EvEmitter.prototype ); + +ImagesLoaded.prototype.options = {}; + +ImagesLoaded.prototype.getImages = function() { + this.images = []; + + // filter & find items if we have an item selector + this.elements.forEach( this.addElementImages, this ); +}; + +/** + * @param {Node} element + */ +ImagesLoaded.prototype.addElementImages = function( elem ) { + // filter siblings + if ( elem.nodeName == 'IMG' ) { + this.addImage( elem ); + } + // get background image on element + if ( this.options.background === true ) { + this.addElementBackgroundImages( elem ); + } + + // find children + // no non-element nodes, #143 + var nodeType = elem.nodeType; + if ( !nodeType || !elementNodeTypes[ nodeType ] ) { + return; + } + var childImgs = elem.querySelectorAll('img'); + // concat childElems to filterFound array + for ( var i=0; i < childImgs.length; i++ ) { + var img = childImgs[i]; + this.addImage( img ); + } + + // get child background images + if ( typeof this.options.background == 'string' ) { + var children = elem.querySelectorAll( this.options.background ); + for ( i=0; i < children.length; i++ ) { + var child = children[i]; + this.addElementBackgroundImages( child ); + } + } +}; + +var elementNodeTypes = { + 1: true, + 9: true, + 11: true +}; + +ImagesLoaded.prototype.addElementBackgroundImages = function( elem ) { + var style = getComputedStyle( elem ); + if ( !style ) { + // Firefox returns null if in a hidden iframe https://bugzil.la/548397 + return; + } + // get url inside url("...") + var reURL = /url\((['"])?(.*?)\1\)/gi; + var matches = reURL.exec( style.backgroundImage ); + while ( matches !== null ) { + var url = matches && matches[2]; + if ( url ) { + this.addBackground( url, elem ); + } + matches = reURL.exec( style.backgroundImage ); + } +}; + +/** + * @param {Image} img + */ +ImagesLoaded.prototype.addImage = function( img ) { + var loadingImage = new LoadingImage( img ); + this.images.push( loadingImage ); +}; + +ImagesLoaded.prototype.addBackground = function( url, elem ) { + var background = new Background( url, elem ); + this.images.push( background ); +}; + +ImagesLoaded.prototype.check = function() { + var _this = this; + this.progressedCount = 0; + this.hasAnyBroken = false; + // complete if no images + if ( !this.images.length ) { + this.complete(); + return; + } + + function onProgress( image, elem, message ) { + // HACK - Chrome triggers event before object properties have changed. #83 + setTimeout( function() { + _this.progress( image, elem, message ); + }); + } + + this.images.forEach( function( loadingImage ) { + loadingImage.once( 'progress', onProgress ); + loadingImage.check(); + }); +}; + +ImagesLoaded.prototype.progress = function( image, elem, message ) { + this.progressedCount++; + this.hasAnyBroken = this.hasAnyBroken || !image.isLoaded; + // progress event + this.emitEvent( 'progress', [ this, image, elem ] ); + if ( this.jqDeferred && this.jqDeferred.notify ) { + this.jqDeferred.notify( this, image ); + } + // check if completed + if ( this.progressedCount == this.images.length ) { + this.complete(); + } + + if ( this.options.debug && console ) { + console.log( 'progress: ' + message, image, elem ); + } +}; + +ImagesLoaded.prototype.complete = function() { + var eventName = this.hasAnyBroken ? 'fail' : 'done'; + this.isComplete = true; + this.emitEvent( eventName, [ this ] ); + this.emitEvent( 'always', [ this ] ); + if ( this.jqDeferred ) { + var jqMethod = this.hasAnyBroken ? 'reject' : 'resolve'; + this.jqDeferred[ jqMethod ]( this ); + } +}; + +// -------------------------- -------------------------- // + +function LoadingImage( img ) { + this.img = img; +} + +LoadingImage.prototype = Object.create( EvEmitter.prototype ); + +LoadingImage.prototype.check = function() { + // If complete is true and browser supports natural sizes, + // try to check for image status manually. + var isComplete = this.getIsImageComplete(); + if ( isComplete ) { + // report based on naturalWidth + this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' ); + return; + } + + // If none of the checks above matched, simulate loading on detached element. + this.proxyImage = new Image(); + this.proxyImage.addEventListener( 'load', this ); + this.proxyImage.addEventListener( 'error', this ); + // bind to image as well for Firefox. #191 + this.img.addEventListener( 'load', this ); + this.img.addEventListener( 'error', this ); + this.proxyImage.src = this.img.src; +}; + +LoadingImage.prototype.getIsImageComplete = function() { + // check for non-zero, non-undefined naturalWidth + // fixes Safari+InfiniteScroll+Masonry bug infinite-scroll#671 + return this.img.complete && this.img.naturalWidth; +}; + +LoadingImage.prototype.confirm = function( isLoaded, message ) { + this.isLoaded = isLoaded; + this.emitEvent( 'progress', [ this, this.img, message ] ); +}; + +// ----- events ----- // + +// trigger specified handler for event type +LoadingImage.prototype.handleEvent = function( event ) { + var method = 'on' + event.type; + if ( this[ method ] ) { + this[ method ]( event ); + } +}; + +LoadingImage.prototype.onload = function() { + this.confirm( true, 'onload' ); + this.unbindEvents(); +}; + +LoadingImage.prototype.onerror = function() { + this.confirm( false, 'onerror' ); + this.unbindEvents(); +}; + +LoadingImage.prototype.unbindEvents = function() { + this.proxyImage.removeEventListener( 'load', this ); + this.proxyImage.removeEventListener( 'error', this ); + this.img.removeEventListener( 'load', this ); + this.img.removeEventListener( 'error', this ); +}; + +// -------------------------- Background -------------------------- // + +function Background( url, element ) { + this.url = url; + this.element = element; + this.img = new Image(); +} + +// inherit LoadingImage prototype +Background.prototype = Object.create( LoadingImage.prototype ); + +Background.prototype.check = function() { + this.img.addEventListener( 'load', this ); + this.img.addEventListener( 'error', this ); + this.img.src = this.url; + // check if image is already complete + var isComplete = this.getIsImageComplete(); + if ( isComplete ) { + this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' ); + this.unbindEvents(); + } +}; + +Background.prototype.unbindEvents = function() { + this.img.removeEventListener( 'load', this ); + this.img.removeEventListener( 'error', this ); +}; + +Background.prototype.confirm = function( isLoaded, message ) { + this.isLoaded = isLoaded; + this.emitEvent( 'progress', [ this, this.element, message ] ); +}; + +// -------------------------- jQuery -------------------------- // + +ImagesLoaded.makeJQueryPlugin = function( jQuery ) { + jQuery = jQuery || window.jQuery; + if ( !jQuery ) { + return; + } + // set local variable + $ = jQuery; + // $().imagesLoaded() + $.fn.imagesLoaded = function( options, callback ) { + var instance = new ImagesLoaded( this, options, callback ); + return instance.jqDeferred.promise( $(this) ); + }; +}; +// try making plugin +ImagesLoaded.makeJQueryPlugin(); + +// -------------------------- -------------------------- // + +return ImagesLoaded; + +}); diff --git a/library/imagesloaded/imagesloaded.pkgd.js b/vendor/desandro/imagesloaded/imagesloaded.pkgd.js index ef23971be..a230750b3 100644 --- a/library/imagesloaded/imagesloaded.pkgd.js +++ b/vendor/desandro/imagesloaded/imagesloaded.pkgd.js @@ -1,11 +1,11 @@ /*! - * imagesLoaded PACKAGED v4.1.0 + * imagesLoaded PACKAGED v4.1.4 * JavaScript is all like "You images are done yet or what?" * MIT License */ /** - * EvEmitter v1.0.1 + * EvEmitter v1.1.0 * Lil' event emitter * MIT License */ @@ -14,7 +14,7 @@ ( function( global, factory ) { // universal module definition - /* jshint strict: false */ /* globals define, module */ + /* jshint strict: false */ /* globals define, module, window */ if ( typeof define == 'function' && define.amd ) { // AMD - RequireJS define( 'ev-emitter/ev-emitter',factory ); @@ -26,7 +26,7 @@ global.EvEmitter = factory(); } -}( this, function() { +}( typeof window != 'undefined' ? window : this, function() { @@ -59,8 +59,8 @@ proto.once = function( eventName, listener ) { // set once flag // set onceEvents hash var onceEvents = this._onceEvents = this._onceEvents || {}; - // set onceListeners array - var onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || []; + // set onceListeners object + var onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {}; // set flag onceListeners[ listener ] = true; @@ -85,13 +85,14 @@ proto.emitEvent = function( eventName, args ) { if ( !listeners || !listeners.length ) { return; } - var i = 0; - var listener = listeners[i]; + // copy over to avoid interference if .off() in listener + listeners = listeners.slice(0); args = args || []; // once stuff var onceListeners = this._onceEvents && this._onceEvents[ eventName ]; - while ( listener ) { + for ( var i=0; i < listeners.length; i++ ) { + var listener = listeners[i] var isOnce = onceListeners && onceListeners[ listener ]; if ( isOnce ) { // remove listener @@ -102,20 +103,22 @@ proto.emitEvent = function( eventName, args ) { } // trigger listener listener.apply( this, args ); - // get next listener - i += isOnce ? 0 : 1; - listener = listeners[i]; } return this; }; +proto.allOff = function() { + delete this._events; + delete this._onceEvents; +}; + return EvEmitter; })); /*! - * imagesLoaded v4.1.0 + * imagesLoaded v4.1.4 * JavaScript is all like "You images are done yet or what?" * MIT License */ @@ -146,7 +149,7 @@ return EvEmitter; ); } -})( window, +})( typeof window !== 'undefined' ? window : this, // -------------------------- factory -------------------------- // @@ -167,22 +170,23 @@ function extend( a, b ) { return a; } +var arraySlice = Array.prototype.slice; + // turn element or nodeList into an array function makeArray( obj ) { - var ary = []; if ( Array.isArray( obj ) ) { // use object if already an array - ary = obj; - } else if ( typeof obj.length == 'number' ) { + return obj; + } + + var isArrayLike = typeof obj == 'object' && typeof obj.length == 'number'; + if ( isArrayLike ) { // convert nodeList to array - for ( var i=0; i < obj.length; i++ ) { - ary.push( obj[i] ); - } - } else { - // array of single index - ary.push( obj ); + return arraySlice.call( obj ); } - return ary; + + // array of single index + return [ obj ]; } // -------------------------- imagesLoaded -------------------------- // @@ -198,13 +202,19 @@ function ImagesLoaded( elem, options, onAlways ) { return new ImagesLoaded( elem, options, onAlways ); } // use elem as selector string + var queryElem = elem; if ( typeof elem == 'string' ) { - elem = document.querySelectorAll( elem ); + queryElem = document.querySelectorAll( elem ); + } + // bail if bad element + if ( !queryElem ) { + console.error( 'Bad element for imagesLoaded ' + ( queryElem || elem ) ); + return; } - this.elements = makeArray( elem ); + this.elements = makeArray( queryElem ); this.options = extend( {}, this.options ); - + // shift arguments if no options set if ( typeof options == 'function' ) { onAlways = options; } else { @@ -223,9 +233,7 @@ function ImagesLoaded( elem, options, onAlways ) { } // HACK check async to allow time to bind listeners - setTimeout( function() { - this.check(); - }.bind( this )); + setTimeout( this.check.bind( this ) ); } ImagesLoaded.prototype = Object.create( EvEmitter.prototype ); @@ -393,7 +401,9 @@ LoadingImage.prototype.check = function() { }; LoadingImage.prototype.getIsImageComplete = function() { - return this.img.complete && this.img.naturalWidth !== undefined; + // check for non-zero, non-undefined naturalWidth + // fixes Safari+InfiniteScroll+Masonry bug infinite-scroll#671 + return this.img.complete && this.img.naturalWidth; }; LoadingImage.prototype.confirm = function( isLoaded, message ) { diff --git a/vendor/desandro/imagesloaded/imagesloaded.pkgd.min.js b/vendor/desandro/imagesloaded/imagesloaded.pkgd.min.js new file mode 100644 index 000000000..e443a77d6 --- /dev/null +++ b/vendor/desandro/imagesloaded/imagesloaded.pkgd.min.js @@ -0,0 +1,7 @@ +/*! + * imagesLoaded PACKAGED v4.1.4 + * JavaScript is all like "You images are done yet or what?" + * MIT License + */ + +!function(e,t){"function"==typeof define&&define.amd?define("ev-emitter/ev-emitter",t):"object"==typeof module&&module.exports?module.exports=t():e.EvEmitter=t()}("undefined"!=typeof window?window:this,function(){function e(){}var t=e.prototype;return t.on=function(e,t){if(e&&t){var i=this._events=this._events||{},n=i[e]=i[e]||[];return n.indexOf(t)==-1&&n.push(t),this}},t.once=function(e,t){if(e&&t){this.on(e,t);var i=this._onceEvents=this._onceEvents||{},n=i[e]=i[e]||{};return n[t]=!0,this}},t.off=function(e,t){var i=this._events&&this._events[e];if(i&&i.length){var n=i.indexOf(t);return n!=-1&&i.splice(n,1),this}},t.emitEvent=function(e,t){var i=this._events&&this._events[e];if(i&&i.length){i=i.slice(0),t=t||[];for(var n=this._onceEvents&&this._onceEvents[e],o=0;o<i.length;o++){var r=i[o],s=n&&n[r];s&&(this.off(e,r),delete n[r]),r.apply(this,t)}return this}},t.allOff=function(){delete this._events,delete this._onceEvents},e}),function(e,t){"use strict";"function"==typeof define&&define.amd?define(["ev-emitter/ev-emitter"],function(i){return t(e,i)}):"object"==typeof module&&module.exports?module.exports=t(e,require("ev-emitter")):e.imagesLoaded=t(e,e.EvEmitter)}("undefined"!=typeof window?window:this,function(e,t){function i(e,t){for(var i in t)e[i]=t[i];return e}function n(e){if(Array.isArray(e))return e;var t="object"==typeof e&&"number"==typeof e.length;return t?d.call(e):[e]}function o(e,t,r){if(!(this instanceof o))return new o(e,t,r);var s=e;return"string"==typeof e&&(s=document.querySelectorAll(e)),s?(this.elements=n(s),this.options=i({},this.options),"function"==typeof t?r=t:i(this.options,t),r&&this.on("always",r),this.getImages(),h&&(this.jqDeferred=new h.Deferred),void setTimeout(this.check.bind(this))):void a.error("Bad element for imagesLoaded "+(s||e))}function r(e){this.img=e}function s(e,t){this.url=e,this.element=t,this.img=new Image}var h=e.jQuery,a=e.console,d=Array.prototype.slice;o.prototype=Object.create(t.prototype),o.prototype.options={},o.prototype.getImages=function(){this.images=[],this.elements.forEach(this.addElementImages,this)},o.prototype.addElementImages=function(e){"IMG"==e.nodeName&&this.addImage(e),this.options.background===!0&&this.addElementBackgroundImages(e);var t=e.nodeType;if(t&&u[t]){for(var i=e.querySelectorAll("img"),n=0;n<i.length;n++){var o=i[n];this.addImage(o)}if("string"==typeof this.options.background){var r=e.querySelectorAll(this.options.background);for(n=0;n<r.length;n++){var s=r[n];this.addElementBackgroundImages(s)}}}};var u={1:!0,9:!0,11:!0};return o.prototype.addElementBackgroundImages=function(e){var t=getComputedStyle(e);if(t)for(var i=/url\((['"])?(.*?)\1\)/gi,n=i.exec(t.backgroundImage);null!==n;){var o=n&&n[2];o&&this.addBackground(o,e),n=i.exec(t.backgroundImage)}},o.prototype.addImage=function(e){var t=new r(e);this.images.push(t)},o.prototype.addBackground=function(e,t){var i=new s(e,t);this.images.push(i)},o.prototype.check=function(){function e(e,i,n){setTimeout(function(){t.progress(e,i,n)})}var t=this;return this.progressedCount=0,this.hasAnyBroken=!1,this.images.length?void this.images.forEach(function(t){t.once("progress",e),t.check()}):void this.complete()},o.prototype.progress=function(e,t,i){this.progressedCount++,this.hasAnyBroken=this.hasAnyBroken||!e.isLoaded,this.emitEvent("progress",[this,e,t]),this.jqDeferred&&this.jqDeferred.notify&&this.jqDeferred.notify(this,e),this.progressedCount==this.images.length&&this.complete(),this.options.debug&&a&&a.log("progress: "+i,e,t)},o.prototype.complete=function(){var e=this.hasAnyBroken?"fail":"done";if(this.isComplete=!0,this.emitEvent(e,[this]),this.emitEvent("always",[this]),this.jqDeferred){var t=this.hasAnyBroken?"reject":"resolve";this.jqDeferred[t](this)}},r.prototype=Object.create(t.prototype),r.prototype.check=function(){var e=this.getIsImageComplete();return e?void this.confirm(0!==this.img.naturalWidth,"naturalWidth"):(this.proxyImage=new Image,this.proxyImage.addEventListener("load",this),this.proxyImage.addEventListener("error",this),this.img.addEventListener("load",this),this.img.addEventListener("error",this),void(this.proxyImage.src=this.img.src))},r.prototype.getIsImageComplete=function(){return this.img.complete&&this.img.naturalWidth},r.prototype.confirm=function(e,t){this.isLoaded=e,this.emitEvent("progress",[this,this.img,t])},r.prototype.handleEvent=function(e){var t="on"+e.type;this[t]&&this[t](e)},r.prototype.onload=function(){this.confirm(!0,"onload"),this.unbindEvents()},r.prototype.onerror=function(){this.confirm(!1,"onerror"),this.unbindEvents()},r.prototype.unbindEvents=function(){this.proxyImage.removeEventListener("load",this),this.proxyImage.removeEventListener("error",this),this.img.removeEventListener("load",this),this.img.removeEventListener("error",this)},s.prototype=Object.create(r.prototype),s.prototype.check=function(){this.img.addEventListener("load",this),this.img.addEventListener("error",this),this.img.src=this.url;var e=this.getIsImageComplete();e&&(this.confirm(0!==this.img.naturalWidth,"naturalWidth"),this.unbindEvents())},s.prototype.unbindEvents=function(){this.img.removeEventListener("load",this),this.img.removeEventListener("error",this)},s.prototype.confirm=function(e,t){this.isLoaded=e,this.emitEvent("progress",[this,this.element,t])},o.makeJQueryPlugin=function(t){t=t||e.jQuery,t&&(h=t,h.fn.imagesLoaded=function(e,t){var i=new o(this,e,t);return i.jqDeferred.promise(h(this))})},o.makeJQueryPlugin(),o});
\ No newline at end of file diff --git a/vendor/desandro/imagesloaded/package.json b/vendor/desandro/imagesloaded/package.json new file mode 100644 index 000000000..ced516d8e --- /dev/null +++ b/vendor/desandro/imagesloaded/package.json @@ -0,0 +1,48 @@ +{ + "name": "imagesloaded", + "version": "4.1.4", + "description": "JavaScript is all like _You images done yet or what?_", + "main": "imagesloaded.js", + "dependencies": { + "ev-emitter": "^1.0.0" + }, + "devDependencies": { + "chalk": "^1.1.1", + "cheerio": "^0.19.0", + "gulp": "^3.9.0", + "gulp-jshint": "^1.11.2", + "gulp-json-lint": "^0.1.0", + "gulp-rename": "^1.2.2", + "gulp-replace": "^0.5.4", + "gulp-requirejs-optimize": "github:metafizzy/gulp-requirejs-optimize", + "gulp-uglify": "^1.4.2", + "gulp-util": "^3.0.7", + "highlight.js": "^8.9.1", + "marked": "^0.3.5", + "minimist": "^1.2.0", + "transfob": "^1.0.0" + }, + "repository": { + "type": "git", + "url": "git://github.com/desandro/imagesloaded.git" + }, + "keywords": [ + "images", + "loaded", + "ui", + "dom", + "jquery-plugin" + ], + "license": "MIT", + "bugs": { + "url": "https://github.com/desandro/imagesloaded/issues" + }, + "homepage": "https://github.com/desandro/imagesloaded", + "directories": { + "test": "test" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "David DeSandro" +} diff --git a/vendor/desandro/imagesloaded/sandbox/background/css/background.css b/vendor/desandro/imagesloaded/sandbox/background/css/background.css new file mode 100644 index 000000000..509966a7d --- /dev/null +++ b/vendor/desandro/imagesloaded/sandbox/background/css/background.css @@ -0,0 +1,29 @@ +.box { + width: 300px; + height: 300px; + margin: 0 20px 20px 0; + border: 1px solid; + display: inline-block; +} + +.orange-tree { + background: url('http://i.imgur.com/bwy74ok.jpg'); + background-size: cover; +} + +.thunder-cloud { + background: url('../../../test/img/thunder-cloud.jpg'); + background-size: contain; +} + +.multi1 { + background: + url("http://i.imgur.com/ZAVN3.png"), + url('http://i.imgur.com/6UdOxeB.png') bottom right, + url(http://i.imgur.com/LkmcILl.jpg); + background-size: cover; +} + +.blue { + background: #09F; +}
\ No newline at end of file diff --git a/vendor/desandro/imagesloaded/sandbox/background/index.html b/vendor/desandro/imagesloaded/sandbox/background/index.html new file mode 100644 index 000000000..853f8ff35 --- /dev/null +++ b/vendor/desandro/imagesloaded/sandbox/background/index.html @@ -0,0 +1,51 @@ +<!doctype html> +<html> +<head> + <meta charset="utf-8" /> + <meta name="viewport" content="width=device-width" /> + + <title>background</title> + + <!-- put in separate folder so JS path is different from CSS path --> + <link rel="stylesheet" href="css/background.css" > + +</head> +<body> + + <h1>background</h1> + +<div class="box orange-tree"></div> + +<div class="box thunder-cloud"></div> + +<div class="box multi1"></div> + +<div class="box blue"></div> + +<script src="../../bower_components/ev-emitter/ev-emitter.js"></script> +<script src="../../imagesloaded.js"></script> +<script> + +var imgLoad0 = imagesLoaded( '.orange-tree', { background: true }, function() { + console.log('orange tree bg images loaded', imgLoad0.images.length ); +}); + +var imgLoad1 = imagesLoaded( '.thunder-cloud', { background: true }, function() { + console.log('thunder cloud bg images loaded', imgLoad1.images.length); +}); + +var imgLoad2 = imagesLoaded( '.multi1', { background: true }, function() { + console.log('multi1 bg images loaded', imgLoad2.images.length); +}); + +var imgLoad3 = imagesLoaded( '.box', { background: true }, function() { + console.log('.box bg images loaded', imgLoad3.images.length); +}); +imgLoad3.on('progress', function( instance, image, element ) { + console.log( 'progress on .box', image.img.src, element.className ); +}); + +</script> + +</body> +</html> diff --git a/vendor/desandro/imagesloaded/sandbox/progress/index.html b/vendor/desandro/imagesloaded/sandbox/progress/index.html new file mode 100644 index 000000000..b01ce28c5 --- /dev/null +++ b/vendor/desandro/imagesloaded/sandbox/progress/index.html @@ -0,0 +1,89 @@ +<!doctype html> +<html> +<head> + <meta charset="utf-8" /> + <meta name="viewport" content="width=device-width" /> + + <title>progress</title> + + <style> + #image-container img { + max-height: 140px; + } + + li { + height: 140px; + min-width: 100px; + display: block; + float: left; + list-style: none; + margin: 0 5px 5px 0; + background-color: black; + background-position: center center; + background-repeat: no-repeat; + } + + li img, + #status { + -webkit-transition: opacity 0.4s; + -moz-transition: opacity 0.4s; + -ms-transition: opacity 0.4s; + transition: opacity 0.4s; + } + + li.is-loading { + background-color: black; + background-image: url('http://desandro.github.io/imagesloaded/assets/loading.gif'); + } + + li.is-broken { + background-image: url('http://desandro.github.io/imagesloaded/assets/broken.png'); + background-color: #be3730; + width: 120px; + } + + li.is-loading img, + li.is-broken img { + opacity: 0; + } + + .buttons { margin-bottom: 1.0em; } + + button { + font-size: 18px; + padding: 0.4em 0.8em; + font-family: sans-serif; + } + + #status { + opacity: 0; + position: fixed; + right: 20px; + top: 20px; + background: hsla( 0, 0%, 0%, 0.8); + padding: 20px; + border-radius: 10px; + z-index: 2; /* over other stuff */ + } + </style> + +</head> +<body> + + <h1>progress</h1> + + <div class="buttons"> + <button id="add">Add images</button> + <button id="reset">Reset</button> + </div> + <div id="status"> + <progress max="7" value="0"></progress> + </div> + <div id="image-container"></div> + +<script src="../../bower_components/ev-emitter/ev-emitter.js"></script> +<script src="../../imagesloaded.js"></script> +<script src="progress.js"></script> + +</body> +</html> diff --git a/vendor/desandro/imagesloaded/sandbox/progress/progress.js b/vendor/desandro/imagesloaded/sandbox/progress/progress.js new file mode 100644 index 000000000..7c00003f5 --- /dev/null +++ b/vendor/desandro/imagesloaded/sandbox/progress/progress.js @@ -0,0 +1,111 @@ +/* jshint strict: false */ + +var progressElem, statusElem; +var supportsProgress; +var loadedImageCount, imageCount; + +var container = document.querySelector('#image-container'); +statusElem = document.querySelector('#status'); +progressElem = document.querySelector('progress'); + +supportsProgress = progressElem && + // IE does not support progress + progressElem.toString().indexOf('Unknown') === -1; + +document.querySelector('#add').onclick = function() { + // add new images + var fragment = getItemsFragment(); + container.insertBefore( fragment, container.firstChild ); + // use ImagesLoaded + var imgLoad = imagesLoaded( container ); + imgLoad.on( 'progress', onProgress ); + imgLoad.on( 'always', onAlways ); + // reset progress counter + imageCount = imgLoad.images.length; + resetProgress(); + updateProgress( 0 ); +}; + +// reset container +document.querySelector('#reset').onclick = function() { + empty( container ); +}; + +// ----- set text helper ----- // + +var docElem = document.documentElement; +var textSetter = docElem.textContent !== undefined ? 'textContent' : 'innerText'; + +function setText( elem, value ) { + elem[ textSetter ] = value; +} + +function empty( elem ) { + while ( elem.firstChild ) { + elem.removeChild( elem.firstChild ); + } +} + +// ----- ----- // + +// return doc fragment with +function getItemsFragment() { + var fragment = document.createDocumentFragment(); + for ( var i = 0; i < 7; i++ ) { + var item = getImageItem(); + fragment.appendChild( item ); + } + return fragment; +} + +// return an <li> with a <img> in it +function getImageItem() { + var item = document.createElement('li'); + item.className = 'is-loading'; + var img = document.createElement('img'); + var size = Math.random() * 3 + 1; + var width = Math.random() * 110 + 100; + width = Math.round( width * size ); + var height = Math.round( 140 * size ); + var rando = Math.ceil( Math.random() * 1000 ); + // 10% chance of broken image src + // random parameter to prevent cached images + img.src = rando < 100 ? '//foo/broken-' + rando + '.jpg' : + // use picsum for great random images + 'https://picsum.photos/' + width + '/' + height + '/' + '?random'; + item.appendChild( img ); + return item; +} + +// ----- ----- // + +function resetProgress() { + statusElem.style.opacity = 1; + loadedImageCount = 0; + if ( supportsProgress ) { + progressElem.setAttribute( 'max', imageCount ); + } +} + +function updateProgress( value ) { + if ( supportsProgress ) { + progressElem.setAttribute( 'value', value ); + } else { + // if you don't support progress elem + setText( statusElem, value + ' / ' + imageCount ); + } +} + +// triggered after each item is loaded +function onProgress( imgLoad, image ) { + // change class if the image is loaded or broken + image.img.parentNode.className = image.isLoaded ? '' : 'is-broken'; + // update progress element + loadedImageCount++; + updateProgress( loadedImageCount ); +} + +// hide status when done +function onAlways() { + statusElem.style.opacity = 0; +} diff --git a/vendor/desandro/imagesloaded/test/css/tests.css b/vendor/desandro/imagesloaded/test/css/tests.css new file mode 100644 index 000000000..af8a7e885 --- /dev/null +++ b/vendor/desandro/imagesloaded/test/css/tests.css @@ -0,0 +1,41 @@ +img { + display: inline-block; + max-width: 240px; +} + +/* ---- backgrounds ---- */ + +.bg-box { + width: 240px; + height: 240px; + margin: 0 20px 20px 0; + border: 1px solid; + display: inline-block; +} + +.bg-box.tulip { + background: url('http://i.imgur.com/9xYjgCk.jpg'); + background-size: cover; +} + +.bg-box.thunder-cloud { + background: url('../img/thunder-cloud.jpg'); + background-size: contain; +} + +.bg-box.multi { + background: + url("http://i.imgur.com/ZAVN3.png"), + url('http://i.imgur.com/6UdOxeB.png') bottom right, + url(https://picsum.photos/601/401/?random); + background-size: cover; +} + +.bg-box.blue { + background: #09F; +} + +.bg-box.gulls { + background-image: url('http://i.imgur.com/qKhkOKC.jpg'); + background-size: cover; +} diff --git a/vendor/desandro/imagesloaded/test/img/blue-shell.jpg b/vendor/desandro/imagesloaded/test/img/blue-shell.jpg Binary files differnew file mode 100644 index 000000000..b47f1e927 --- /dev/null +++ b/vendor/desandro/imagesloaded/test/img/blue-shell.jpg diff --git a/vendor/desandro/imagesloaded/test/img/bowser-jr.jpg b/vendor/desandro/imagesloaded/test/img/bowser-jr.jpg Binary files differnew file mode 100644 index 000000000..b1de2a76f --- /dev/null +++ b/vendor/desandro/imagesloaded/test/img/bowser-jr.jpg diff --git a/vendor/desandro/imagesloaded/test/img/thunder-cloud.jpg b/vendor/desandro/imagesloaded/test/img/thunder-cloud.jpg Binary files differnew file mode 100644 index 000000000..54fc9a1b7 --- /dev/null +++ b/vendor/desandro/imagesloaded/test/img/thunder-cloud.jpg diff --git a/vendor/desandro/imagesloaded/test/index.html b/vendor/desandro/imagesloaded/test/index.html new file mode 100644 index 000000000..02b04f4a6 --- /dev/null +++ b/vendor/desandro/imagesloaded/test/index.html @@ -0,0 +1,104 @@ +<!doctype html> +<html> +<head> + <meta charset="utf-8"> + + <title>imagesLoaded tests</title> + + <link rel="stylesheet" href="../bower_components/qunit/qunit/qunit.css" /> + <link rel="stylesheet" href="css/tests.css" /> + + <script src="../bower_components/ev-emitter/ev-emitter.js"></script> + <script src="../bower_components/qunit/qunit/qunit.js"></script> + <script src="../bower_components/jquery/dist/jquery.js"></script> + + <script src="../imagesloaded.js"></script> + + <script src="unit/basics.js"></script> + <script src="unit/selector-string.js"></script> + <script src="unit/single-element.js"></script> + <script src="unit/local-files.js"></script> + <script src="unit/data-uri.js"></script> + <script src="unit/append.js"></script> + <script src="unit/no-images.js"></script> + <script src="unit/jquery-success.js"></script> + <script src="unit/jquery-fail.js"></script> + <script src="unit/non-element.js"></script> + <script src="unit/background.js"></script> + +</head> +<body> + + <h1>imagesLoaded tests</h1> + + <div id="qunit"></div> + + <h2>Basics</h2> + + <div id="basics"> + <img src="http://i.imgur.com/xrQHn.jpg" /> + <img src="http://i.imgur.com/b3fBJ.jpg" /> + <img src="http://i.imgur.com/xmSh2.jpg" /> + <img src="http://i.imgur.com/iIpJm.jpg" /> + <img src="http://i.imgur.com/cvZZl10.gif" /> + </div> + + <img id="mario-with-shell" src="http://i.imgur.com/ZAVN3.png" > + + <h2>Locals</h2> + + <div id="locals"> + <img src="img/blue-shell.jpg" /> + <img src="img/bowser-jr.jpg" /> + <!-- thunder cloud has bad permissions, should 403 --> + <img src="img/not-there.jpg" /> + </div> + + <h2>Data URI</h2> + + <div id="data-uri"> + <img src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAARgAA/+4ADkFkb2JlAGTAAAAAAf/bAIQABAMDAwMDBAMDBAYEAwQGBwUEBAUHCAYGBwYGCAoICQkJCQgKCgwMDAwMCgwMDQ0MDBERERERFBQUFBQUFBQUFAEEBQUIBwgPCgoPFA4ODhQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU/8AAEQgAMAAwAwERAAIRAQMRAf/EAJMAAAEFAQEBAAAAAAAAAAAAAAYAAwQHCAUBAgEAAgIDAQEAAAAAAAAAAAAAAAUEBgECAwcIEAABAwMDAgQFAwUAAAAAAAACAQMEEQUGACESMQdBUSIyYUJiExRSIwihgiQVFhEAAQMCBQEFBgcAAAAAAAAAAQARAgMEITFBEgVRYYGRIgZxocHRchPw4TJCIxQH/9oADAMBAAIRAxEAPwDf2hCWhC42R5JBxuF+RJq7JcqMWIC/uOmngnkKfMXh/TSTmOZt+MoGrVP0x1kez4nTwCl21rOvPbHvPRRMHuFzutmcuF2NClPyn1ERSjYNiXEQD4DTx389RvTl/VvrKNxUzqGRA6B2AHgt72lGlVMI/tbxRJqyKCloQloQm31eRlxY4iT6CqtCaqIqVNkVURaJXWk9207W3Ng+T9qyGfFUtPutrbyFIuazTtWRyy+1FbuIKyw9v6QiO7tODVdhEuXmldfM/qbi+arXMql2A2hDmAHQM7D29+Kt9tc04w20Rh7+9FkKZIx1VFhf8bkv3I5biqqu6p5Kvw0u9N+sL3iav9eX8tJ22dPoOnsy7FwrW8bnzZS6/NHkZ4pEdt42yZIxQlaP3DXwXX1LQqmrTjMxMNwfbLMdh7VWJBiQ7p3Xdapt99mMy5JkOC1HZEnHXTVBEQBKkSqvRERN9CFSFx7q5PkqOz8TfZs2ON8lizJDIvyZLadHlFxeLYF1BOKlTdadNWy34emIg1XMjoNElr35EmgEORO4uaXWUNnya2QMpxZ50FemSWBhuxXBJFB9tKGDn219ftAtvStdJvUnEQHHXEqQJIpTaP6jI7SwGrk5KVZ3z1IieDkfgqDkOf8AcEsmQ7FGbs+LspRm7SowzJkh2u7iNGvFhpE9iqJGXVeOvPfQX+Yw4+Iu+Q89zIOIPhSfqdanXSOQxxU6+5oSBhROA9/5Isgd08vxltq5ZQ+zfccNUKZIYZFiUwz4ugjXocEfcQ8UKnRa7a9cuOHpyiftOJDQ6pPR5AmTTCvONJYmR2ZcVwXosgBdYeBeQG2aIQkKp1RUWqaqZDJ0qL7p5U9nz1w7cY887FtMSQLGR3JteKyVb9TkJrxQK0F4/HcE8V1ZONsAwrVMtB8Uru7v7flGaGZlqdt8AGnXUOMwQqTYogjTolUTy1Z4yEkid1DwPIrzLzLKbNdba7GsFo+wlruDraCxL/IqQ/jkgopIAJ+9Ui9dKcemlUjWlUkCPKGbwXWpCAhEjMu697gZHfYmW4pabRbnZVjuzjwXa4NAJsRRZ4kX5JKKqCE2pfaUVH1pvXprANaE4iIwLv4IpxgYSJzGSnwLQ7cbe4DLyNx3iJRbVEIadFoi+emkpiJXEll2O1uXu9u5cLt1fnXZVinS1ZsFwMuSwjfWoRHK7q0p1RkvkqgL6aKlc5Pj3BrQ7x8fmn1pd7/Kc1W9zukjtr3AvuMX0VjPSpsm5WqQ5sEyFMeJ4XGyXYlFSVtxE3Eh36ppnYV4VKMRqAyj3luTJwuxIvzV6bKG2+ipJFRJQXdBXqqeVNMwAEs2mKYKZc7MItPG3NbH2PI4jLnH6gL01+IrocrIAllgkk26XgSaYJuG2XueJxHnOPjxAdq+XJaaHKCBHPFSYeQt2JoYDj9Ejigipruop4rrBiDmsGBlih+DOkdzc8s2K2BFkPtTI1wukltOTcOFDeB43XFTZFLigNoq1Ii26Lpdf3EKdEjUhgmdpbyEnK1plWF4pm8BLZltoi3eEKqTYSm0MmyXqTZ7EBbdQVF1R4VJQLxLJ2Q6zdlX8asvxO5O3TtPLbulofLktiukhWpbH0syTRRcBPAXaEn6i0+teV24T8VFq24mEMOdve/F3f8Awf8AjljPJRClS5sQIqeFeYOGS0+kFXTGXLUgMCosbJl9tdu+/FoeWEuHpKc3QZUSdFKMXxQnHGyT+4E0R5aiRiidk6IsX/jVmOW3Jq5d15bdqsrBcksdrfV2Y/T5XZIIgttr8yNciX9Q6X3XK7g0PFSqVuILSmLYbiuE2/8A1eJ2iLaIKrycbitoCuElfU4XuMt+pqq6QTqSmXkXUoBl/9k=" /> + <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACsAAAAwCAMAAAC/knOqAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAMBQTFRFkF0QF27/Bgsp/fQF+fr6jqvpDEG2zp4CCx9Ys4IFo5JU8MqQXJH2Ulxj89QDC0bIsrKxIHn//fxztcv2iYqG5ebmCjCHzNjxAzTYRmih2drcCzijMof+OB8U/Pg59PHXE2D9xMK9eUMDAVf8kXNP/fvr2eP0p6WgOUtnAkX7Eljwa3WB5er2UXjVC0jZAh9/EFHa8PHyl5mZJVKt6NM34dzNz87NASGpsbzZDlDytq4tLWfs4bQFyLNp////+/v7DjziEwAAAEB0Uk5T////////////////////////////////////////////////////////////////////////////////////AMJ7sUQAAAPaSURBVHjadNWLdqo6EAZgQKGRA0YUYzRQY1ELqFykiojV93+rM0FQbLt/VlcvfpmVhGQq3V6TjgyjLOWyNIzR9sdn0stvE0MuQrmOZxmjf9pRybln+sJZspWZiSU7o7+twTmXtcU3BmhZ4f6/zLJk2ej+ttsyDIXVN4klsGzqmQP1ZXn9044TQbmcuS5Yx3Ic380cy2rj2qZJktzrui7MFqiDKlutcv1ip0mNseuGFbaedeVd235qGOMkAo4VJYB4AVcUbHG5erjxtN1ME8kwpgHybV0/63vbRF5QrUFk+7ADwpgGD82nva9+p4m+CQKYWFjwUH3YKYNkjPrnCr6/D4fz93f46WsKuIDqu8amPmGE5bnZr2u+fw2Hwwr3N4FYRZKsazshBLCggPv9S79K56saV+NRbU8McO6+ifSavL1dLtVQk2LYT7VtY/hcgnw8HgkGAL9Q2E78tDGJfWBV3CbiFwnqmzlsfmPXUDd2pTtUFAVVj6IIDtVNqmGtmW+aEYJQDZ9puM/gPTX7cNtBYeS7r+z+hVyfAp0+3gUsDsXKP5IXGLPne7uVUJf8TRFPEi1Ln1YVq/sbazzBbN8+v2LGjCguzNBtllVRwovoPtvnvcgYihlpLaueQeFRjY1f79vWhxfCGKpz54gVRYTZ7Nedn8JeiPNG7lhBGS2KIKdZ99edT6cKQjEiBGMf+UhhZRFQSnG02/60J9i0qmCMcsbimPGABkXIRYdQX+2EaaEcinOc57GWlWXpeR7cYqsUPWj0YksKN73QNEpLdZJer9d0rToeVC2LEG5+2rIqLjjXKKPJ6PrMxPJkK6DcsdSn3dIo5DnK8113de22tOHJWhyUDp88rBFFPEJxvruu0jYVOEE0tCyjsSMchQVBOZ3Px+MfeOehmHJLbs76LioKpuT5QND0hV4nnqZoGPrb3Z6iKNIUJc6Os5nA3ZfKTgCvGtq3Kuw2BIpMP5/O/8JGQEzC4N/BGuyuwAyZKYvtw/GOYc7A4RHf1ICNbUIi2blJqocJWt5Skm8OiyPo8aGufX/UQJvd9sSPZFUqKfGPcHRYPF0MBovT8VhXh3TT1cqgFM7kzESslEbqUezdyszJ4HvwKfhi8eCra0incwFm+1N9Hub9ztnffOqf+0/IY8BhpWbnTmfePjurs2iJZ922dXsPqQcMFouqWfbnLfst+ii05t7Stjd2lb0Y1Lt0hkA73y3bexNddzjs93S7yd5e9i4XaPFQ5tLqD5LohxfouG+S5G/u8T8+7l34Al25+7SHpVRlKS312fo4OA0Ws7Fe/1FaLg+V+l+AAQAurhhy+upm/wAAAABJRU5ErkJggg==" /> + </div> + + <h2>append</h2> + + <div id="append"></div> + + <h2>no images</h2> + + <div id="no-images"></div> + + <h2>jQuery success</h2> + + <div id="jquery-success"> + <img src="http://i.imgur.com/YbYCPFF.png" /> + <img src="http://i.imgur.com/6UdOxeB.png" /> + <img src="http://i.imgur.com/qd8G15D.png" /> + </div> + + <h2>jQuery fail</h2> + + <div id="jquery-fail"> + <img src="http://i.imgur.com/xmSh2.jpg" /> + <img src="img/bowser-jr.jpg" /> + <img src="http://i.imgur.com/ZAVN3.png"> + <img src="img/not-there.jpg" /> + <img src="foobar.jpg" /> + </div> + + <h2>background</h2> + + <div id="background"> + <div class="bg-box tulip"></div> + <div class="bg-box thunder-cloud"></div> + <div class="bg-box multi"></div> + <div class="bg-box blue"></div> + <div class="bg-box gulls"> + <img src="https://picsum.photos/400/300/?random" /> + <img src="https://picsum.photos/800/600/?random" /> + </div> + </div> + +</body> +</html> diff --git a/vendor/desandro/imagesloaded/test/unit/append.js b/vendor/desandro/imagesloaded/test/unit/append.js new file mode 100644 index 000000000..7a6b3c827 --- /dev/null +++ b/vendor/desandro/imagesloaded/test/unit/append.js @@ -0,0 +1,30 @@ +QUnit.test( 'append', function( assert ) { + 'use strict'; + + var imgUrls = [ + 'http://i.imgur.com/bwy74ok.jpg', + 'http://i.imgur.com/bAZWoqx.jpg', + 'http://i.imgur.com/PgmEBSB.jpg', + 'http://i.imgur.com/aboaFoB.jpg', + 'http://i.imgur.com/LkmcILl.jpg', + 'http://i.imgur.com/q9zO6tw.jpg' + ]; + + // create images + var fragment = document.createDocumentFragment(); + for ( var i=0, len = imgUrls.length; i < len; i++ ) { + var img = document.createElement('img'); + img.src = imgUrls[i]; + fragment.appendChild( img ); + } + + var elem = document.querySelector('#append'); + elem.appendChild( fragment ); + var done = assert.async(); + + imagesLoaded( elem, { debug: false } ).on( 'always', function() { + assert.ok( 'appended images loaded' ); + done(); + }); + +}); diff --git a/vendor/desandro/imagesloaded/test/unit/background.js b/vendor/desandro/imagesloaded/test/unit/background.js new file mode 100644 index 000000000..ca76fad6f --- /dev/null +++ b/vendor/desandro/imagesloaded/test/unit/background.js @@ -0,0 +1,70 @@ +QUnit.test( 'background', function( assert ) { + 'use strict'; + + // from Modernizr + var supportsMultiBGs = ( function() { + var style = document.createElement('a').style; + style.cssText = 'background:url(https://),url(https://),red url(https://)'; + return (/(url\s*\(.*?){3}/).test(style.background); + })(); + + var multiBGCount = supportsMultiBGs ? 3 : 0; + var done = assert.async( 14 + multiBGCount ); + + var imgLoad0 = imagesLoaded( '#background .tulip', { background: true }, function() { + assert.ok( true, 'callback triggered on .orange-tree'); + done(); + }); + assert.equal( imgLoad0.images.length, 1, '1 image on .images' ); + + imgLoad0.on( 'progress', function( instance, image, element ) { + assert.ok( element.nodeName == 'DIV', 'progress; element is div'); + assert.ok( image.isLoaded, 'progress; image.isLoaded'); + done(); + }); + + var imgLoad1 = imagesLoaded( '#background .thunder-cloud', { background: true }, function() { + assert.ok( true, 'callback triggered on .thunder-cloud'); + done(); + }); + assert.equal( imgLoad1.images.length, 1, '1 image on .images' ); + + // multiple backgrounds + var imgLoad2 = imagesLoaded( '#background .multi', { background: true }, function() { + assert.ok( true, 'callback triggered on .multi'); + done(); + }); + assert.equal( imgLoad2.images.length, multiBGCount, 'correct multiple BG count on .images' ); + + // multiple elements + var imgLoad3 = imagesLoaded( '#background .bg-box', { background: true }, function() { + assert.ok( true, 'callback triggered on .bg-box'); + var count = 5 + multiBGCount; + assert.equal( imgLoad3.images.length, count, count + ' images on .bg-box' ); + done(); + }); + + imgLoad3.on('progress', function( instance, image/*, element */) { + assert.ok( true, 'progress on .bg-box; ' + image.img.src ); + assert.equal( image.isLoaded, true, 'image.isLoaded == true' ); + done(); + }); + + // background and <img> children + var imgLoad4 = imagesLoaded( '#background .gulls', { background: true } ); + assert.equal( imgLoad4.images.length, 3, '3 images: 1 background and 2 <img>' ); + + imgLoad4.on( 'progress', function( instance, image ) { + assert.equal( image.isLoaded, true, 'image is loaded' ); + done(); + }); + + // child background selector + var imgLoad5 = imagesLoaded( '#background', { background: '.bg-box' }, function() { + var count = 5 + multiBGCount; + assert.equal( imgLoad5.images.length, count, + count + ' images on .bg-box, with {background: .bg-box}' ); + done(); + }); + +}); diff --git a/vendor/desandro/imagesloaded/test/unit/basics.js b/vendor/desandro/imagesloaded/test/unit/basics.js new file mode 100644 index 000000000..6c502a793 --- /dev/null +++ b/vendor/desandro/imagesloaded/test/unit/basics.js @@ -0,0 +1,28 @@ +QUnit.test( 'basics', function( assert ) { + + 'use strict'; + + var elem = document.querySelector('#basics'); + var images = elem.querySelectorAll('img'); + var done = assert.async( 3 + images.length ); + + var imgLoader = new imagesLoaded( elem, function( obj ) { + assert.ok( true, 'callback function triggered' ); + assert.equal( imgLoader, obj, 'callback argument and instance match' ); + done(); + }); + imgLoader.on( 'done', function() { + assert.ok( true, 'done event triggered' ); + done(); + }); + imgLoader.on( 'always', function() { + assert.ok( true, 'always event triggered' ); + done(); + }); + + imgLoader.on( 'progress', function( loader, image ) { + assert.ok( image.isLoaded, 'image is loaded'); + done(); + }); + +}); diff --git a/vendor/desandro/imagesloaded/test/unit/data-uri.js b/vendor/desandro/imagesloaded/test/unit/data-uri.js new file mode 100644 index 000000000..635f69859 --- /dev/null +++ b/vendor/desandro/imagesloaded/test/unit/data-uri.js @@ -0,0 +1,10 @@ +QUnit.test( 'data-uri', function( assert ) { + 'use strict'; + + var done = assert.async(); + imagesLoaded('#data-uri', { debug: false }).on( 'done', function( obj ) { + assert.ok( true, 'data-uri images loaded' ); + assert.equal( obj.images.length, 2, 'instance has 2 images' ); + done(); + }); +}); diff --git a/vendor/desandro/imagesloaded/test/unit/jquery-fail.js b/vendor/desandro/imagesloaded/test/unit/jquery-fail.js new file mode 100644 index 000000000..b2180f6f2 --- /dev/null +++ b/vendor/desandro/imagesloaded/test/unit/jquery-fail.js @@ -0,0 +1,29 @@ +QUnit.test( 'jquery fail', function( assert ) { + + 'use strict'; + + var $ = window.jQuery; + var $images = $('#jquery-fail img'); + var done = assert.async( 3 + $images.length ); + + $('#jquery-fail').imagesLoaded( function( instance ) { + assert.ok( true, 'callback triggered' ); + assert.ok( instance instanceof imagesLoaded, 'instance instanceof imagesLoaded' ); + done(); + }) + .fail( function( instance ) { + assert.ok( true, 'fail triggered' ); + assert.ok( instance instanceof imagesLoaded, 'instance instanceof imagesLoaded' ); + done(); + }) + .always( function( instance ) { + assert.ok( true, 'always triggered' ); + assert.ok( instance instanceof imagesLoaded, 'instance instanceof imagesLoaded' ); + done(); + }) + .progress( function(/* instance, image */) { + assert.ok( true, 'progress trigged'); + done(); + }); + + }); diff --git a/vendor/desandro/imagesloaded/test/unit/jquery-success.js b/vendor/desandro/imagesloaded/test/unit/jquery-success.js new file mode 100644 index 000000000..f16621088 --- /dev/null +++ b/vendor/desandro/imagesloaded/test/unit/jquery-success.js @@ -0,0 +1,28 @@ +QUnit.test( 'jquery success', function( assert ) { + + 'use strict'; + + var $ = window.jQuery; + var done = assert.async( 6 ); + + $('#jquery-success').imagesLoaded( function( instance ) { + assert.ok( true, 'callback triggered' ); + assert.ok( instance instanceof imagesLoaded, 'instance instanceof imagesLoaded' ); + done(); + }) + .done( function( instance ) { + assert.ok( true, 'done triggered' ); + assert.ok( instance instanceof imagesLoaded, 'instance instanceof imagesLoaded' ); + done(); + }) + .always( function( instance ) { + assert.ok( true, 'always triggered' ); + assert.ok( instance instanceof imagesLoaded, 'instance instanceof imagesLoaded' ); + done(); + }) + .progress( function( instance, image ) { + assert.ok( image.isLoaded, 'progress trigged, image is loaded'); + done(); + }); + +}); diff --git a/vendor/desandro/imagesloaded/test/unit/local-files.js b/vendor/desandro/imagesloaded/test/unit/local-files.js new file mode 100644 index 000000000..61da6ae92 --- /dev/null +++ b/vendor/desandro/imagesloaded/test/unit/local-files.js @@ -0,0 +1,31 @@ +QUnit.test( 'local files', function( assert ) { + 'use strict'; + + var elem = document.querySelector('#locals'); + var done = assert.async( 6 ); + + var imgLoader = new imagesLoaded( elem, function( obj ) { + assert.ok( true, 'callback function triggered' ); + assert.equal( imgLoader, obj, 'callback argument and instance match' ); + done(); + }); + imgLoader.on( 'fail', function() { + assert.ok( true, 'fail event triggered' ); + done(); + }); + imgLoader.on( 'always', function() { + assert.ok( true, 'always event triggered' ); + done(); + }); + + imgLoader.on( 'progress', function( loader, image ) { + assert.ok( true, 'image progressed'); + if ( image.img.src.indexOf('img/not-there.jpg') !== -1 ) { + assert.ok( !image.isLoaded, 'thunder cloud is not loaded' ); + } else { + assert.ok( image.isLoaded, 'image is loaded' ); + } + done(); + }); + +}); diff --git a/vendor/desandro/imagesloaded/test/unit/no-images.js b/vendor/desandro/imagesloaded/test/unit/no-images.js new file mode 100644 index 000000000..841216381 --- /dev/null +++ b/vendor/desandro/imagesloaded/test/unit/no-images.js @@ -0,0 +1,11 @@ +QUnit.test( 'no images', function( assert ) { + 'use strict'; + + var elem = document.querySelector('#no-images'); + var done = assert.async(); + imagesLoaded( elem, function() { + assert.ok( true, 'triggered with no images' ); + done(); + }); + +}); diff --git a/vendor/desandro/imagesloaded/test/unit/non-element.js b/vendor/desandro/imagesloaded/test/unit/non-element.js new file mode 100644 index 000000000..4c9986fa6 --- /dev/null +++ b/vendor/desandro/imagesloaded/test/unit/non-element.js @@ -0,0 +1,24 @@ +QUnit.test( 'dismiss non-element nodes', function( assert ) { + 'use strict'; + + var $ = window.jQuery; + var done = assert.async( 2 ); + + $(' <img src="https://picsum.photos/401/301/?random" /> <img src="https://picsum.photos/402/302/?random" /> ') + .imagesLoaded(function() { + assert.ok( true, 'elements from jQuery string ok' ); + done(); + }); + + // test fragment + var frag = document.createDocumentFragment(); + var img = new Image(); + img.src = 'https://picsum.photos/403/303/?random'; + frag.appendChild( img ); + var imgLoad = imagesLoaded( frag, function() { + assert.ok( true, 'document fragment ok' ); + assert.equal( imgLoad.images.length, 1, '1 image found' ); + done(); + }); + +}); diff --git a/vendor/desandro/imagesloaded/test/unit/selector-string.js b/vendor/desandro/imagesloaded/test/unit/selector-string.js new file mode 100644 index 000000000..8c43c4bef --- /dev/null +++ b/vendor/desandro/imagesloaded/test/unit/selector-string.js @@ -0,0 +1,12 @@ +QUnit.test( 'selector string', function( assert ) { + 'use strict'; + var images = document.querySelectorAll('#basics img'); + var done = assert.async(); + var imgLoad = imagesLoaded('#basics', { debug: true }).on( 'done', function( obj ) { + assert.ok( true, 'selector string worked' ); + assert.ok( obj.images, 'argument has images' ); + assert.equal( obj.images.length, images.length, 'images.length matches' ); + done(); + }); + assert.ok( imgLoad.options.debug, 'debug option set' ); +}); diff --git a/vendor/desandro/imagesloaded/test/unit/single-element.js b/vendor/desandro/imagesloaded/test/unit/single-element.js new file mode 100644 index 000000000..42d7e48ee --- /dev/null +++ b/vendor/desandro/imagesloaded/test/unit/single-element.js @@ -0,0 +1,11 @@ +QUnit.test( 'single element', function( assert ) { + 'use strict'; + var elem = document.querySelector('#mario-with-shell'); + var done = assert.async(); + imagesLoaded( elem ).on( 'done', function( obj ) { + assert.ok( true, 'single element worked' ); + assert.ok( obj.images, 'argument has images' ); + assert.equal( obj.images.length, 1, 'images.length = 1' ); + done(); + }); +}); diff --git a/vendor/psr/log/README.md b/vendor/psr/log/README.md index 574bc1cb2..5571a25e8 100644 --- a/vendor/psr/log/README.md +++ b/vendor/psr/log/README.md @@ -7,6 +7,13 @@ This repository holds all interfaces/classes/traits related to Note that this is not a logger of its own. It is merely an interface that describes a logger. See the specification for more details. +Installation +------------ + +```bash +composer require psr/log +``` + Usage ----- diff --git a/view/css/default.css b/view/css/default.css index 765a197d9..bd0f14ba2 100644 --- a/view/css/default.css +++ b/view/css/default.css @@ -1,22 +1,37 @@ main { - display: table; - table-layout: fixed; position: relative; - width: 100%; - height: 100vh; + min-height: 100vh; + display: flex; + flex-direction: column; } -aside { +.content { + display: flex; + flex: 1; +} + +.columns { + display: flex; + flex:1; + min-width: 0; +} + +#region_1 { position: relative; - display: table-cell; - vertical-align: top; + order: 1; padding: 4.5rem 7px 0px 7px; } -section { +#region_2 { position: relative; - width: 100%; - display: table-cell; - vertical-align: top; + flex: 1; + order: 2; padding: 4.5rem 7px 200px 7px; + min-width: 0; +} + +#region_3 { + position: relative; + order: 3; + padding: 4.5rem 7px 0px 7px; } diff --git a/view/css/mod_connedit.css b/view/css/mod_connedit.css index 67a182c5c..b02f928f0 100644 --- a/view/css/mod_connedit.css +++ b/view/css/mod_connedit.css @@ -71,7 +71,6 @@ width: 32px; height: 32px; border-radius: 4px; - border: 1px solid #ccc; text-align: center; } diff --git a/view/es-es/hmessages.po b/view/es-es/hmessages.po index 3b42394b1..67cb21672 100644 --- a/view/es-es/hmessages.po +++ b/view/es-es/hmessages.po @@ -15,7 +15,7 @@ msgstr "" "Project-Id-Version: hubzilla\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-19 11:04+0200\n" -"PO-Revision-Date: 2018-10-24 11:35+0000\n" +"PO-Revision-Date: 2018-11-21 11:04+0000\n" "Last-Translator: Manuel Jiménez Friaza <mjfriaza@disroot.org>\n" "Language-Team: Spanish (Spain) (http://www.transifex.com/Friendica/hubzilla/language/es_ES/)\n" "MIME-Version: 1.0\n" @@ -1729,7 +1729,7 @@ msgstr "Importar elementos" #: ../../Zotlabs/Module/Import_items.php:126 msgid "" "Use this form to import existing posts and content from an export file." -msgstr "Utilice este formulario para importar entradas existentes y contenido desde un archivo de exportación." +msgstr "Utilice este formulario para importar entradas y contenido desde un archivo de exportación." #: ../../Zotlabs/Module/Import_items.php:127 #: ../../Zotlabs/Module/Import.php:548 @@ -1807,7 +1807,7 @@ msgstr "Un canal es una identidad única en la red. Puede representar a una pers #: ../../Zotlabs/Module/New_channel.php:183 msgid "" "or <a href=\"import\">import an existing channel</a> from another location." -msgstr "O <a href=\"import\">importar un canal existente</a> desde otro lugar." +msgstr "O <a href=\"import\">importar un canal </a> desde otro lugar." #: ../../Zotlabs/Module/New_channel.php:188 msgid "Validate" @@ -4496,7 +4496,7 @@ msgid "" "Leave blank to keep your existing channel nickname. You will be randomly " "assigned a similar nickname if either name is already allocated on this " "site." -msgstr "Dejar en blanco para mantener su alias de canal existente. Se le asignará aleatoriamente uno similar si cualquiera de los dos nombres ya está asignado en este sitio." +msgstr "Dejar en blanco para mantener su alias de canal . Se le asignará aleatoriamente uno similar si cualquiera de los dos nombres ya está asignado en este sitio." #: ../../Zotlabs/Module/Import.php:562 msgid "" @@ -4942,7 +4942,7 @@ msgstr "Introducir un nombre de álbum" #: ../../Zotlabs/Module/Photos.php:698 msgid "or select an existing album (doubleclick)" -msgstr "o seleccionar uno existente (doble click)" +msgstr "o seleccionar un álbum (con un doble click)" #: ../../Zotlabs/Module/Photos.php:699 msgid "Create a status post for this upload" @@ -5010,7 +5010,7 @@ msgstr "Introducir un nuevo nombre de álbum" #: ../../Zotlabs/Module/Photos.php:1067 msgid "or select an existing one (doubleclick)" -msgstr "o seleccionar uno (doble click) existente" +msgstr "o seleccionar un álbum (con un doble click)" #: ../../Zotlabs/Module/Photos.php:1072 msgid "Add a Tag" @@ -5557,7 +5557,7 @@ msgstr "Usar una foto de sus álbumes" #: ../../Zotlabs/Module/Profile_photo.php:474 #: ../../Zotlabs/Module/Cover_photo.php:409 msgid "Select existing photo" -msgstr "Seleccionar una foto existente" +msgstr "Seleccionar una foto" #: ../../Zotlabs/Module/Profile_photo.php:493 #: ../../Zotlabs/Module/Cover_photo.php:426 @@ -8443,7 +8443,7 @@ msgid "" "A deleted group with this name was revived. Existing item permissions " "<strong>may</strong> apply to this group and any future members. If this is " "not what you intended, please create another group with a different name." -msgstr "Un grupo suprimido con este nombre ha sido restablecido. <strong>Es posible</strong> que los permisos existentes sean aplicados a este grupo y sus futuros miembros. Si no quiere esto, por favor cree otro grupo con un nombre diferente." +msgstr "Un grupo suprimido con este nombre ha sido restablecido. <strong>Es posible</strong> que los permisos que ya existen sean aplicados a este grupo y sus futuros miembros. Si no quiere esto, por favor cree otro grupo con un nombre diferente." #: ../../Zotlabs/Lib/Group.php:270 ../../include/group.php:264 msgid "Add new connections to this privacy group" @@ -11149,11 +11149,11 @@ msgstr "Por favor visite el sitio web de $Projectname" #: ../../addon/upgrade_info/upgrade_info.php:46 msgid "app store" -msgstr "depósito de apps" +msgstr "aplicaciones disponibles" #: ../../addon/upgrade_info/upgrade_info.php:47 msgid "and install possibly missing apps." -msgstr "e instalar aplicaciones que posiblemente falten." +msgstr "e instale las aplicaciones que posiblemente falten." #: ../../addon/upgrade_info/upgrade_info.php:52 msgid "Upgrade Info" @@ -11364,7 +11364,7 @@ msgstr "Eliminar los datos de localización geográfica del navegador" #: ../../addon/hsse/hsse.php:99 ../../include/conversation.php:1302 msgid "Embed (existing) photo from your photo albums" -msgstr "Insertar (existente) foto de sus álbumes de fotos" +msgstr "Insertar una foto de sus álbumes" #: ../../addon/hsse/hsse.php:135 ../../include/conversation.php:1338 msgid "Tag term:" @@ -12247,7 +12247,7 @@ msgstr "Crear nuevos eventos aquí." msgid "" "You can accept new connections and change permissions for existing ones " "here. You can also e.g. create groups of contacts." -msgstr "Puede aceptar nuevas conexiones y cambiar permisos para las existentes aquí. También puede, por ejemplo, crear grupos de contactos." +msgstr "Puede aceptar nuevas conexiones y cambiar permisos para las que ya existen aquí. También puede, por ejemplo, crear grupos de contactos." #: ../../addon/tour/tour.php:82 msgid "System notifications will arrive here" @@ -14455,7 +14455,7 @@ msgstr "Etiquetas de la comunidad" #: ../../include/features.php:143 msgid "Ability to tag existing posts" -msgstr "Capacidad de etiquetar entradas existentes" +msgstr "Capacidad de etiquetar entradas" #: ../../include/features.php:150 msgid "Emoji Reactions" diff --git a/view/es-es/hstrings.php b/view/es-es/hstrings.php index a459e10dd..1dd38b930 100644 --- a/view/es-es/hstrings.php +++ b/view/es-es/hstrings.php @@ -300,7 +300,7 @@ App::$strings["Imported file is empty."] = "El fichero importado está vacío."; App::$strings["Warning: Database versions differ by %1\$d updates."] = "Atención: Las versiones de la base de datos difieren en %1\$d actualizaciones."; App::$strings["Import completed"] = "Importación completada"; App::$strings["Import Items"] = "Importar elementos"; -App::$strings["Use this form to import existing posts and content from an export file."] = "Utilice este formulario para importar entradas existentes y contenido desde un archivo de exportación."; +App::$strings["Use this form to import existing posts and content from an export file."] = "Utilice este formulario para importar entradas y contenido desde un archivo de exportación."; App::$strings["File to Upload"] = "Fichero para subir"; App::$strings["You have created %1$.0f of %2$.0f allowed channels."] = "Ha creado %1$.0f de %2$.0f canales permitidos."; App::$strings["Loading"] = "Cargando"; @@ -315,7 +315,7 @@ App::$strings["Select a channel permission role compatible with your usage needs App::$strings["Read more about channel permission roles"] = "Leer más sobre los roles y permisos"; App::$strings["Create a Channel"] = "Crear un canal"; App::$strings["A channel is a unique network identity. It can represent a person (social network profile), a forum (group), a business or celebrity page, a newsfeed, and many other things."] = "Un canal es una identidad única en la red. Puede representar a una persona (un perfil de una red social), un foro o grupo, un negocio o una página de una celebridad, un \"feed\" de noticias, y muchas otras cosas."; -App::$strings["or <a href=\"import\">import an existing channel</a> from another location."] = "O <a href=\"import\">importar un canal existente</a> desde otro lugar."; +App::$strings["or <a href=\"import\">import an existing channel</a> from another location."] = "O <a href=\"import\">importar un canal </a> desde otro lugar."; App::$strings["Validate"] = "Validar"; App::$strings["Channel removals are not allowed within 48 hours of changing the account password."] = "La eliminación de canales no está permitida hasta pasadas 48 horas desde el último cambio de contraseña."; App::$strings["Remove This Channel"] = "Eliminar este canal"; @@ -914,7 +914,7 @@ App::$strings["For either option, please choose whether to make this hub your ne App::$strings["Make this hub my primary location"] = "Convertir este servidor en mi ubicación primaria"; App::$strings["Move this channel (disable all previous locations)"] = "Mover este canal (desactivar todas las ubicaciones anteriores)"; App::$strings["Use this channel nickname instead of the one provided"] = "Usa este alias de canal en lugar del que se proporciona"; -App::$strings["Leave blank to keep your existing channel nickname. You will be randomly assigned a similar nickname if either name is already allocated on this site."] = "Dejar en blanco para mantener su alias de canal existente. Se le asignará aleatoriamente uno similar si cualquiera de los dos nombres ya está asignado en este sitio."; +App::$strings["Leave blank to keep your existing channel nickname. You will be randomly assigned a similar nickname if either name is already allocated on this site."] = "Dejar en blanco para mantener su alias de canal . Se le asignará aleatoriamente uno similar si cualquiera de los dos nombres ya está asignado en este sitio."; App::$strings["This process may take several minutes to complete. Please submit the form only once and leave this page open until finished."] = "Este proceso puede tardar varios minutos en completarse. Por favor envíe el formulario una sola vez y mantenga esta página abierta hasta que termine."; App::$strings["Authentication failed."] = "Falló la autenticación."; App::$strings["Remote Authentication"] = "Acceso desde su servidor"; @@ -1014,7 +1014,7 @@ App::$strings["%1$.2f MB of %2$.2f MB photo storage used."] = "%1$.2f MB de %2$. App::$strings["%1$.2f MB photo storage used."] = "%1$.2f MB de almacenamiento de fotos utilizado."; App::$strings["Upload Photos"] = "Subir fotos"; App::$strings["Enter an album name"] = "Introducir un nombre de álbum"; -App::$strings["or select an existing album (doubleclick)"] = "o seleccionar uno existente (doble click)"; +App::$strings["or select an existing album (doubleclick)"] = "o seleccionar un álbum (con un doble click)"; App::$strings["Create a status post for this upload"] = "Crear un mensaje de estado para esta subida"; App::$strings["Description (optional)"] = "Descripción (opcional)"; App::$strings["Show Newest First"] = "Mostrar lo más reciente primero"; @@ -1031,7 +1031,7 @@ App::$strings["Rotate CW (right)"] = "Girar CW (a la derecha)"; App::$strings["Rotate CCW (left)"] = "Girar CCW (a la izquierda)"; App::$strings["Move photo to album"] = "Mover la foto a un álbum"; App::$strings["Enter a new album name"] = "Introducir un nuevo nombre de álbum"; -App::$strings["or select an existing one (doubleclick)"] = "o seleccionar uno (doble click) existente"; +App::$strings["or select an existing one (doubleclick)"] = "o seleccionar un álbum (con un doble click)"; App::$strings["Add a Tag"] = "Añadir una etiqueta"; App::$strings["Example: @bob, @Barbara_Jensen, @jim@example.com"] = "Ejemplos: @eva, @Carmen_Osuna, @jaime@ejemplo.com"; App::$strings["Flag as adult in album view"] = "Marcar como \"solo para adultos\" en el álbum"; @@ -1153,7 +1153,7 @@ App::$strings["Use Photo for Profile"] = "Usar la fotografía para el perfil"; App::$strings["Change Profile Photo"] = "Cambiar la foto del perfil"; App::$strings["Use"] = "Usar"; App::$strings["Use a photo from your albums"] = "Usar una foto de sus álbumes"; -App::$strings["Select existing photo"] = "Seleccionar una foto existente"; +App::$strings["Select existing photo"] = "Seleccionar una foto"; App::$strings["Crop Image"] = "Recortar imagen"; App::$strings["Please adjust the image cropping for optimum viewing."] = "Por favor ajuste el recorte de la imagen para una visión óptima."; App::$strings["Done Editing"] = "Edición completada"; @@ -1829,7 +1829,7 @@ App::$strings["Directory Options"] = "Opciones del directorio"; App::$strings["Safe Mode"] = "Modo seguro"; App::$strings["Public Forums Only"] = "Solo foros públicos"; App::$strings["This Website Only"] = "Solo este sitio web"; -App::$strings["A deleted group with this name was revived. Existing item permissions <strong>may</strong> apply to this group and any future members. If this is not what you intended, please create another group with a different name."] = "Un grupo suprimido con este nombre ha sido restablecido. <strong>Es posible</strong> que los permisos existentes sean aplicados a este grupo y sus futuros miembros. Si no quiere esto, por favor cree otro grupo con un nombre diferente."; +App::$strings["A deleted group with this name was revived. Existing item permissions <strong>may</strong> apply to this group and any future members. If this is not what you intended, please create another group with a different name."] = "Un grupo suprimido con este nombre ha sido restablecido. <strong>Es posible</strong> que los permisos que ya existen sean aplicados a este grupo y sus futuros miembros. Si no quiere esto, por favor cree otro grupo con un nombre diferente."; App::$strings["Add new connections to this privacy group"] = "Añadir conexiones nuevas a este grupo de canales"; App::$strings["edit"] = "editar"; App::$strings["Edit group"] = "Editar grupo"; @@ -2458,8 +2458,8 @@ App::$strings["Jappix Mini Settings"] = "Ajustes de Jappix Mini"; App::$strings["Your channel has been upgraded to the latest \$Projectname version."] = "Su canal ha sido actualizado a la última versión de \$Projectname."; App::$strings["To improve usability, we have converted some features into installable stand-alone apps."] = "Para mejorar la usabilidad, hemos convertido algunas características en aplicaciones independientes instalables."; App::$strings["Please visit the \$Projectname"] = "Por favor visite el sitio web de \$Projectname"; -App::$strings["app store"] = "depósito de apps"; -App::$strings["and install possibly missing apps."] = "e instalar aplicaciones que posiblemente falten."; +App::$strings["app store"] = "aplicaciones disponibles"; +App::$strings["and install possibly missing apps."] = "e instale las aplicaciones que posiblemente falten."; App::$strings["Upgrade Info"] = "Información de actualización"; App::$strings["Do not show this again"] = "No mostrar esto de nuevo"; App::$strings["Access Denied"] = "Acceso denegado"; @@ -2509,7 +2509,7 @@ App::$strings["WYSIWYG status editor"] = "Editor de estado de WYSIWYG"; App::$strings["WYSIWYG Status"] = "Estado de WYSIWYG"; App::$strings["Set your location"] = "Establecer su ubicación"; App::$strings["Clear browser location"] = "Eliminar los datos de localización geográfica del navegador"; -App::$strings["Embed (existing) photo from your photo albums"] = "Insertar (existente) foto de sus álbumes de fotos"; +App::$strings["Embed (existing) photo from your photo albums"] = "Insertar una foto de sus álbumes"; App::$strings["Tag term:"] = "Término de la etiqueta:"; App::$strings["Where are you right now?"] = "¿Donde está ahora?"; App::$strings["Choose a different album..."] = "Elegir un álbum diferente..."; @@ -2706,7 +2706,7 @@ App::$strings["Click here to see activity from your connections."] = "Pulsar aqu App::$strings["Click here to see your channel home."] = "Pulsar aquí para ver la página de inicio de su canal."; App::$strings["You can access your private messages from here."] = "Puede acceder a sus mensajes privados desde aquí."; App::$strings["Create new events here."] = "Crear nuevos eventos aquí."; -App::$strings["You can accept new connections and change permissions for existing ones here. You can also e.g. create groups of contacts."] = "Puede aceptar nuevas conexiones y cambiar permisos para las existentes aquí. También puede, por ejemplo, crear grupos de contactos."; +App::$strings["You can accept new connections and change permissions for existing ones here. You can also e.g. create groups of contacts."] = "Puede aceptar nuevas conexiones y cambiar permisos para las que ya existen aquí. También puede, por ejemplo, crear grupos de contactos."; App::$strings["System notifications will arrive here"] = "Las notificaciones del sistema llegarán aquí"; App::$strings["Search for content and users"] = "Buscar contenido y usuarios"; App::$strings["Browse for new contacts"] = "Buscar nuevos contactos"; @@ -3270,7 +3270,7 @@ App::$strings["Connection Filtering"] = "Filtrado de conexiones"; App::$strings["Filter incoming posts from connections based on keywords/content"] = "Filtrar publicaciones entrantes de conexiones por palabras clave o contenido"; App::$strings["Conversation"] = "Conversación"; App::$strings["Community Tagging"] = "Etiquetas de la comunidad"; -App::$strings["Ability to tag existing posts"] = "Capacidad de etiquetar entradas existentes"; +App::$strings["Ability to tag existing posts"] = "Capacidad de etiquetar entradas"; App::$strings["Emoji Reactions"] = "Emoticonos \"emoji\""; App::$strings["Add emoji reaction ability to posts"] = "Activar la capacidad de añadir un emoticono \"emoji\" a las entradas"; App::$strings["Dislike Posts"] = "Desagrado de publicaciones"; diff --git a/view/js/main.js b/view/js/main.js index f4bfd413b..a69bcfa64 100644 --- a/view/js/main.js +++ b/view/js/main.js @@ -558,7 +558,8 @@ function handleNotificationsItems(notifyType, data) { if(filter) { $('#nav-' + notifyType + '-menu .notification').each(function(i, el){ var cn = $(el).data('contact_name').toString().toLowerCase(); - if(cn.indexOf(filter) === -1) + var ca = $(el).data('contact_addr').toString().toLowerCase(); + if(cn.indexOf(filter) === -1 && ca.indexOf(filter) === -1) $(el).addClass('d-none'); else $(el).removeClass('d-none'); diff --git a/view/php/default.php b/view/php/default.php index 60f3f6a6f..388c94382 100644 --- a/view/php/default.php +++ b/view/php/default.php @@ -10,12 +10,16 @@ <header><?php if(x($page,'header')) echo $page['header']; ?></header> <nav class="navbar fixed-top navbar-expand-lg navbar-dark bg-dark"><?php if(x($page,'nav')) echo $page['nav']; ?></nav> <main> - <aside id="region_1"><div class="aside_spacer"><div id="left_aside_wrapper"><?php if(x($page,'aside')) echo $page['aside']; ?></div></div></aside> - <section id="region_2"><?php if(x($page,'content')) echo $page['content']; ?> + <div class="content"> + <div class="columns"> + <aside id="region_1"><div class="aside_spacer"><div id="left_aside_wrapper"><?php if(x($page,'aside')) echo $page['aside']; ?></div></div></aside> + <section id="region_2"><?php if(x($page,'content')) echo $page['content']; ?> <div id="page-footer"></div> - <div id="pause"></div> - </section> - <aside id="region_3" class="d-none d-xl-table-cell"><div class="aside_spacer"><div id="right_aside_wrapper"><?php if(x($page,'right_aside')) echo $page['right_aside']; ?></div></div></aside> + <div id="pause"></div> + </section> + <aside id="region_3" class="d-none d-xl-table-cell"><div class="aside_spacer"><div id="right_aside_wrapper"><?php if(x($page,'right_aside')) echo $page['right_aside']; ?></div></div></aside> + </div> + </div> </main> <footer><?php if(x($page,'footer')) echo $page['footer']; ?></footer> </body> diff --git a/view/php/theme_init.php b/view/php/theme_init.php index dd8dcb5ee..73e559c45 100644 --- a/view/php/theme_init.php +++ b/view/php/theme_init.php @@ -36,7 +36,7 @@ head_add_js('/library/colorbox/jquery.colorbox-min.js'); head_add_js('/library/jquery.AreYouSure/jquery.are-you-sure.js'); head_add_js('/library/tableofcontents/jquery.toc.js'); -head_add_js('/library/imagesloaded/imagesloaded.pkgd.min.js'); +head_add_js('/vendor/desandro/imagesloaded/imagesloaded.pkgd.min.js'); /** * Those who require this feature will know what to do with it. * Those who don't, won't. diff --git a/view/ru/hmessages.po b/view/ru/hmessages.po index d21f707d1..6a8c8805c 100644 --- a/view/ru/hmessages.po +++ b/view/ru/hmessages.po @@ -12,7 +12,7 @@ msgstr "" "Project-Id-Version: hubzilla\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-18 11:03+0200\n" -"PO-Revision-Date: 2018-10-18 11:06+0200\n" +"PO-Revision-Date: 2018-11-19 14:12+0200\n" "Last-Translator: Max Kostikov <max@kostikov.co>\n" "Language-Team: Russian (http://www.transifex.com/Friendica/hubzilla/language/ru/)\n" "MIME-Version: 1.0\n" @@ -25,7 +25,7 @@ msgstr "" msgid "Source channel not found." msgstr "Канал-источник не найден." -#: ../../view/theme/redbasic/php/config.php:15 ../../include/text.php:3087 +#: ../../view/theme/redbasic/php/config.php:15 ../../include/text.php:3086 #: ../../Zotlabs/Module/Admin/Site.php:187 msgid "Default" msgstr "По умолчанию" @@ -41,8 +41,8 @@ msgstr "Фокус (по умолчанию Hubzilla)" #: ../../Zotlabs/Module/Xchan.php:15 #: ../../Zotlabs/Module/Email_validation.php:40 #: ../../Zotlabs/Module/Poke.php:217 ../../Zotlabs/Module/Appman.php:155 -#: ../../Zotlabs/Module/Profiles.php:723 ../../Zotlabs/Module/Photos.php:1084 -#: ../../Zotlabs/Module/Photos.php:1124 ../../Zotlabs/Module/Photos.php:1242 +#: ../../Zotlabs/Module/Profiles.php:723 ../../Zotlabs/Module/Photos.php:1097 +#: ../../Zotlabs/Module/Photos.php:1137 ../../Zotlabs/Module/Photos.php:1255 #: ../../Zotlabs/Module/Oauth.php:111 ../../Zotlabs/Module/Events.php:495 #: ../../Zotlabs/Module/Rate.php:166 ../../Zotlabs/Module/Locs.php:121 #: ../../Zotlabs/Module/Sources.php:125 ../../Zotlabs/Module/Sources.php:162 @@ -79,15 +79,15 @@ msgstr "Фокус (по умолчанию Hubzilla)" #: ../../Zotlabs/Module/Admin/Account_edit.php:73 #: ../../Zotlabs/Module/Tokens.php:188 ../../Zotlabs/Module/Thing.php:326 #: ../../Zotlabs/Module/Thing.php:379 ../../Zotlabs/Module/Editpost.php:85 -#: ../../Zotlabs/Module/Connedit.php:888 ../../Zotlabs/Module/Group.php:140 -#: ../../Zotlabs/Module/Group.php:156 ../../Zotlabs/Module/Mood.php:156 +#: ../../Zotlabs/Module/Connedit.php:893 ../../Zotlabs/Module/Group.php:140 +#: ../../Zotlabs/Module/Group.php:156 ../../Zotlabs/Module/Mood.php:158 #: ../../Zotlabs/Module/Invite.php:168 ../../Zotlabs/Module/Connect.php:124 #: ../../Zotlabs/Module/Pdledit.php:107 ../../Zotlabs/Module/Wiki.php:215 #: ../../Zotlabs/Module/Import.php:565 #: ../../Zotlabs/Module/Import_items.php:129 #: ../../Zotlabs/Widget/Wiki_pages.php:42 #: ../../Zotlabs/Widget/Wiki_pages.php:99 -#: ../../Zotlabs/Widget/Eventstools.php:16 ../../Zotlabs/Lib/ThreadItem.php:767 +#: ../../Zotlabs/Widget/Eventstools.php:16 ../../Zotlabs/Lib/ThreadItem.php:770 #: ../../extend/addon/hzaddons/dwpost/dwpost.php:89 #: ../../extend/addon/hzaddons/fuzzloc/fuzzloc.php:191 #: ../../extend/addon/hzaddons/redphotos/redphotos.php:136 @@ -106,7 +106,7 @@ msgstr "Фокус (по умолчанию Hubzilla)" #: ../../extend/addon/hzaddons/mailtest/mailtest.php:100 #: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:53 #: ../../extend/addon/hzaddons/hzfiles/hzfiles.php:84 -#: ../../extend/addon/hzaddons/ljpost/ljpost.php:86 +#: ../../extend/addon/hzaddons/ljpost/ljpost.php:89 #: ../../extend/addon/hzaddons/statusnet/statusnet.php:322 #: ../../extend/addon/hzaddons/statusnet/statusnet.php:380 #: ../../extend/addon/hzaddons/statusnet/statusnet.php:432 @@ -150,9 +150,9 @@ msgstr "Узкая панель навигации" #: ../../view/theme/redbasic/php/config.php:99 #: ../../view/theme/redbasic/php/config.php:116 ../../include/dir_fns.php:143 #: ../../include/dir_fns.php:144 ../../include/dir_fns.php:145 -#: ../../boot.php:1630 ../../Zotlabs/Storage/Browser.php:405 +#: ../../boot.php:1629 ../../Zotlabs/Storage/Browser.php:405 #: ../../Zotlabs/Module/Defperms.php:197 ../../Zotlabs/Module/Profiles.php:681 -#: ../../Zotlabs/Module/Photos.php:699 ../../Zotlabs/Module/Api.php:99 +#: ../../Zotlabs/Module/Photos.php:712 ../../Zotlabs/Module/Api.php:99 #: ../../Zotlabs/Module/Events.php:472 ../../Zotlabs/Module/Events.php:473 #: ../../Zotlabs/Module/Sources.php:124 ../../Zotlabs/Module/Sources.php:159 #: ../../Zotlabs/Module/Settings/Display.php:89 @@ -163,7 +163,7 @@ msgstr "Узкая панель навигации" #: ../../Zotlabs/Module/Menu.php:221 ../../Zotlabs/Module/Mitem.php:176 #: ../../Zotlabs/Module/Mitem.php:177 ../../Zotlabs/Module/Mitem.php:256 #: ../../Zotlabs/Module/Mitem.php:257 ../../Zotlabs/Module/Admin/Site.php:255 -#: ../../Zotlabs/Module/Connedit.php:397 ../../Zotlabs/Module/Connedit.php:780 +#: ../../Zotlabs/Module/Connedit.php:398 ../../Zotlabs/Module/Connedit.php:785 #: ../../Zotlabs/Module/Wiki.php:227 ../../Zotlabs/Module/Wiki.php:228 #: ../../Zotlabs/Module/Import.php:554 ../../Zotlabs/Module/Import.php:558 #: ../../Zotlabs/Module/Import.php:559 ../../Zotlabs/Lib/Libzotdir.php:162 @@ -189,8 +189,8 @@ msgstr "Узкая панель навигации" #: ../../extend/addon/hzaddons/pumpio/pumpio.php:227 #: ../../extend/addon/hzaddons/pumpio/pumpio.php:231 #: ../../extend/addon/hzaddons/nsabait/nsabait.php:157 -#: ../../extend/addon/hzaddons/ljpost/ljpost.php:70 -#: ../../extend/addon/hzaddons/ljpost/ljpost.php:82 +#: ../../extend/addon/hzaddons/ljpost/ljpost.php:73 +#: ../../extend/addon/hzaddons/ljpost/ljpost.php:85 #: ../../extend/addon/hzaddons/statusnet/statusnet.php:389 #: ../../extend/addon/hzaddons/statusnet/statusnet.php:411 #: ../../extend/addon/hzaddons/statusnet/statusnet.php:415 @@ -229,9 +229,9 @@ msgstr "Нет" #: ../../view/theme/redbasic/php/config.php:99 #: ../../view/theme/redbasic/php/config.php:116 ../../include/dir_fns.php:143 #: ../../include/dir_fns.php:144 ../../include/dir_fns.php:145 -#: ../../boot.php:1630 ../../Zotlabs/Storage/Browser.php:405 +#: ../../boot.php:1629 ../../Zotlabs/Storage/Browser.php:405 #: ../../Zotlabs/Module/Defperms.php:197 ../../Zotlabs/Module/Profiles.php:681 -#: ../../Zotlabs/Module/Photos.php:699 ../../Zotlabs/Module/Api.php:98 +#: ../../Zotlabs/Module/Photos.php:712 ../../Zotlabs/Module/Api.php:98 #: ../../Zotlabs/Module/Events.php:472 ../../Zotlabs/Module/Events.php:473 #: ../../Zotlabs/Module/Sources.php:124 ../../Zotlabs/Module/Sources.php:159 #: ../../Zotlabs/Module/Settings/Display.php:89 @@ -242,7 +242,7 @@ msgstr "Нет" #: ../../Zotlabs/Module/Menu.php:221 ../../Zotlabs/Module/Mitem.php:176 #: ../../Zotlabs/Module/Mitem.php:177 ../../Zotlabs/Module/Mitem.php:256 #: ../../Zotlabs/Module/Mitem.php:257 ../../Zotlabs/Module/Admin/Site.php:257 -#: ../../Zotlabs/Module/Connedit.php:397 ../../Zotlabs/Module/Wiki.php:227 +#: ../../Zotlabs/Module/Connedit.php:398 ../../Zotlabs/Module/Wiki.php:227 #: ../../Zotlabs/Module/Wiki.php:228 ../../Zotlabs/Module/Import.php:554 #: ../../Zotlabs/Module/Import.php:558 ../../Zotlabs/Module/Import.php:559 #: ../../Zotlabs/Lib/Libzotdir.php:162 ../../Zotlabs/Lib/Libzotdir.php:163 @@ -268,8 +268,8 @@ msgstr "Нет" #: ../../extend/addon/hzaddons/pumpio/pumpio.php:227 #: ../../extend/addon/hzaddons/pumpio/pumpio.php:231 #: ../../extend/addon/hzaddons/nsabait/nsabait.php:157 -#: ../../extend/addon/hzaddons/ljpost/ljpost.php:70 -#: ../../extend/addon/hzaddons/ljpost/ljpost.php:82 +#: ../../extend/addon/hzaddons/ljpost/ljpost.php:73 +#: ../../extend/addon/hzaddons/ljpost/ljpost.php:85 #: ../../extend/addon/hzaddons/statusnet/statusnet.php:389 #: ../../extend/addon/hzaddons/statusnet/statusnet.php:411 #: ../../extend/addon/hzaddons/statusnet/statusnet.php:415 @@ -414,13 +414,13 @@ msgid "Monthly" msgstr "Ежемесячно" #: ../../include/selectors.php:60 ../../include/selectors.php:77 -#: ../../include/channel.php:1487 +#: ../../include/channel.php:1536 #: ../../extend/addon/hzaddons/openid/Mod_Id.php:85 msgid "Male" msgstr "Мужчина" #: ../../include/selectors.php:60 ../../include/selectors.php:77 -#: ../../include/channel.php:1485 +#: ../../include/channel.php:1534 #: ../../extend/addon/hzaddons/openid/Mod_Id.php:87 msgid "Female" msgstr "Женщина" @@ -457,20 +457,20 @@ msgstr "Транссексуал" msgid "Hermaphrodite" msgstr "Гермафродит" -#: ../../include/selectors.php:60 ../../include/channel.php:1491 +#: ../../include/selectors.php:60 ../../include/channel.php:1540 msgid "Neuter" msgstr "Среднего рода" -#: ../../include/selectors.php:60 ../../include/channel.php:1493 +#: ../../include/selectors.php:60 ../../include/channel.php:1542 msgid "Non-specific" msgstr "Неспецифический" #: ../../include/selectors.php:60 ../../include/selectors.php:77 #: ../../include/selectors.php:115 ../../include/selectors.php:151 #: ../../include/connections.php:703 ../../include/connections.php:710 -#: ../../include/event.php:1315 ../../include/event.php:1322 +#: ../../include/event.php:1318 ../../include/event.php:1325 #: ../../Zotlabs/Module/Cdav.php:1227 ../../Zotlabs/Module/Profiles.php:795 -#: ../../Zotlabs/Module/Connedit.php:919 +#: ../../Zotlabs/Module/Connedit.php:924 #: ../../Zotlabs/Access/PermissionRoles.php:306 msgid "Other" msgstr "Другой" @@ -567,14 +567,14 @@ msgstr "Неверный" msgid "Sex Addict" msgstr "Эротоман" -#: ../../include/selectors.php:134 ../../include/channel.php:444 -#: ../../include/channel.php:445 ../../include/channel.php:452 +#: ../../include/selectors.php:134 ../../include/channel.php:493 +#: ../../include/channel.php:494 ../../include/channel.php:501 #: ../../Zotlabs/Module/Settings/Channel.php:70 #: ../../Zotlabs/Module/Settings/Channel.php:74 #: ../../Zotlabs/Module/Settings/Channel.php:75 #: ../../Zotlabs/Module/Settings/Channel.php:78 #: ../../Zotlabs/Module/Settings/Channel.php:89 -#: ../../Zotlabs/Module/Connedit.php:712 ../../Zotlabs/Widget/Affinity.php:24 +#: ../../Zotlabs/Module/Connedit.php:717 ../../Zotlabs/Widget/Affinity.php:24 msgid "Friends" msgstr "Друзья" @@ -662,7 +662,7 @@ msgstr "Всё равно" msgid "Ask me" msgstr "Спроси меня" -#: ../../include/photos.php:27 ../../include/items.php:3675 +#: ../../include/photos.php:27 ../../include/items.php:3701 #: ../../include/attach.php:150 ../../include/attach.php:197 #: ../../include/attach.php:270 ../../include/attach.php:379 #: ../../include/attach.php:393 ../../include/attach.php:400 @@ -670,8 +670,8 @@ msgstr "Спроси меня" #: ../../include/attach.php:1116 ../../include/attach.php:1281 #: ../../Zotlabs/Module/Mail.php:146 ../../Zotlabs/Module/Defperms.php:181 #: ../../Zotlabs/Module/Network.php:17 ../../Zotlabs/Module/Common.php:38 -#: ../../Zotlabs/Module/Item.php:229 ../../Zotlabs/Module/Item.php:248 -#: ../../Zotlabs/Module/Item.php:258 ../../Zotlabs/Module/Item.php:1110 +#: ../../Zotlabs/Module/Item.php:231 ../../Zotlabs/Module/Item.php:250 +#: ../../Zotlabs/Module/Item.php:260 ../../Zotlabs/Module/Item.php:1136 #: ../../Zotlabs/Module/Achievements.php:34 #: ../../Zotlabs/Module/Display.php:448 ../../Zotlabs/Module/Poke.php:157 #: ../../Zotlabs/Module/Profile.php:85 ../../Zotlabs/Module/Profile.php:101 @@ -698,8 +698,8 @@ msgstr "Спроси меня" #: ../../Zotlabs/Module/Filestorage.php:140 #: ../../Zotlabs/Module/Editblock.php:67 #: ../../Zotlabs/Module/Service_limits.php:11 -#: ../../Zotlabs/Module/Message.php:18 ../../Zotlabs/Module/Channel.php:119 -#: ../../Zotlabs/Module/Channel.php:286 ../../Zotlabs/Module/Channel.php:325 +#: ../../Zotlabs/Module/Message.php:18 ../../Zotlabs/Module/Channel.php:163 +#: ../../Zotlabs/Module/Channel.php:330 ../../Zotlabs/Module/Channel.php:369 #: ../../Zotlabs/Module/Like.php:185 ../../Zotlabs/Module/Bookmarks.php:70 #: ../../Zotlabs/Module/Viewsrc.php:19 ../../Zotlabs/Module/Menu.php:129 #: ../../Zotlabs/Module/Menu.php:140 ../../Zotlabs/Module/Setup.php:209 @@ -713,9 +713,9 @@ msgstr "Спроси меня" #: ../../Zotlabs/Module/Moderate.php:13 ../../Zotlabs/Module/Webpages.php:133 #: ../../Zotlabs/Module/Profile_photo.php:302 #: ../../Zotlabs/Module/Profile_photo.php:315 -#: ../../Zotlabs/Module/Editpost.php:17 ../../Zotlabs/Module/Connedit.php:390 +#: ../../Zotlabs/Module/Editpost.php:17 ../../Zotlabs/Module/Connedit.php:391 #: ../../Zotlabs/Module/Group.php:14 ../../Zotlabs/Module/Group.php:30 -#: ../../Zotlabs/Module/Connections.php:32 ../../Zotlabs/Module/Mood.php:124 +#: ../../Zotlabs/Module/Connections.php:32 ../../Zotlabs/Module/Mood.php:126 #: ../../Zotlabs/Module/Card_edit.php:51 #: ../../Zotlabs/Module/Article_edit.php:51 ../../Zotlabs/Module/Blocks.php:73 #: ../../Zotlabs/Module/Blocks.php:80 ../../Zotlabs/Module/Invite.php:21 @@ -727,6 +727,7 @@ msgstr "Спроси меня" #: ../../Zotlabs/Module/Layouts.php:71 ../../Zotlabs/Module/Layouts.php:78 #: ../../Zotlabs/Module/Layouts.php:89 ../../Zotlabs/Web/WebServer.php:123 #: ../../Zotlabs/Lib/Chatroom.php:133 +#: ../../extend/addon/hzaddons/flashcards/Mod_Flashcards.php:167 #: ../../extend/addon/hzaddons/pumpio/pumpio.php:40 #: ../../extend/addon/hzaddons/openid/Mod_Id.php:53 #: ../../extend/addon/hzaddons/keepout/keepout.php:36 @@ -761,16 +762,16 @@ msgctxt "photo_upload" msgid "%1$s posted %2$s to %3$s" msgstr "%1$s опубликовал %2$s в %3$s" -#: ../../include/photos.php:667 ../../include/nav.php:417 +#: ../../include/photos.php:669 ../../include/nav.php:417 msgid "Photo Albums" msgstr "Фотоальбомы" -#: ../../include/photos.php:668 ../../Zotlabs/Module/Photos.php:1367 -#: ../../Zotlabs/Module/Photos.php:1380 ../../Zotlabs/Module/Photos.php:1381 +#: ../../include/photos.php:670 ../../Zotlabs/Module/Photos.php:1380 +#: ../../Zotlabs/Module/Photos.php:1393 ../../Zotlabs/Module/Photos.php:1394 msgid "Recent Photos" msgstr "Последние фотографии" -#: ../../include/photos.php:672 +#: ../../include/photos.php:674 msgid "Upload New Photos" msgstr "Загрузить новые фотографии" @@ -778,19 +779,19 @@ msgstr "Загрузить новые фотографии" msgid "View PDF" msgstr "Просмотреть PDF" -#: ../../include/oembed.php:347 +#: ../../include/oembed.php:352 msgid " by " msgstr " по " -#: ../../include/oembed.php:348 +#: ../../include/oembed.php:353 msgid " on " msgstr " на " -#: ../../include/oembed.php:377 +#: ../../include/oembed.php:382 msgid "Embedded content" msgstr "Встроенное содержимое" -#: ../../include/oembed.php:386 +#: ../../include/oembed.php:391 msgid "Embedding disabled" msgstr "Встраивание отключено" @@ -853,7 +854,7 @@ msgstr "Расширенный пример: name=ivan and country=russia" #: ../../include/contact_widgets.php:53 ../../include/features.php:325 #: ../../Zotlabs/Widget/Filer.php:28 -#: ../../Zotlabs/Widget/Activity_filter.php:136 +#: ../../Zotlabs/Widget/Activity_filter.php:137 msgid "Saved Folders" msgstr "Сохранённые каталоги" @@ -879,8 +880,8 @@ msgstr "Общие контакты" msgid "View all %d common connections" msgstr "Просмотреть все %d общих контактов" -#: ../../include/menu.php:118 ../../include/channel.php:1303 -#: ../../include/channel.php:1307 ../../Zotlabs/Storage/Browser.php:290 +#: ../../include/menu.php:118 ../../include/channel.php:1352 +#: ../../include/channel.php:1356 ../../Zotlabs/Storage/Browser.php:290 #: ../../Zotlabs/Module/Oauth.php:173 ../../Zotlabs/Module/Oauth2.php:194 #: ../../Zotlabs/Module/Editlayout.php:114 #: ../../Zotlabs/Module/Editblock.php:114 ../../Zotlabs/Module/Menu.php:175 @@ -899,55 +900,55 @@ msgstr "Просмотреть все %d общих контактов" msgid "Edit" msgstr "Изменить" -#: ../../include/channel.php:42 +#: ../../include/channel.php:43 msgid "Unable to obtain identity information from database" msgstr "Невозможно получить идентификационную информацию из базы данных" -#: ../../include/channel.php:75 +#: ../../include/channel.php:76 msgid "Empty name" msgstr "Пустое имя" -#: ../../include/channel.php:78 +#: ../../include/channel.php:79 msgid "Name too long" msgstr "Слишком длинное имя" -#: ../../include/channel.php:195 +#: ../../include/channel.php:196 msgid "No account identifier" msgstr "Идентификатор аккаунта отсутствует" -#: ../../include/channel.php:207 +#: ../../include/channel.php:208 msgid "Nickname is required." msgstr "Требуется псевдоним." -#: ../../include/channel.php:221 ../../include/channel.php:606 +#: ../../include/channel.php:222 ../../include/channel.php:655 #: ../../Zotlabs/Module/Changeaddr.php:46 msgid "Reserved nickname. Please choose another." msgstr "Зарезервированый псевдоним. Пожалуйста, выберите другой." -#: ../../include/channel.php:226 ../../include/channel.php:611 +#: ../../include/channel.php:227 ../../include/channel.php:660 #: ../../Zotlabs/Module/Changeaddr.php:51 msgid "" "Nickname has unsupported characters or is already being used on this site." msgstr "Псевдоним имеет недопустимые символы или уже используется на этом сайте." -#: ../../include/channel.php:284 +#: ../../include/channel.php:287 msgid "Unable to retrieve created identity" msgstr "Не удается получить созданный идентификатор" -#: ../../include/channel.php:380 +#: ../../include/channel.php:429 msgid "Default Profile" msgstr "Профиль по умолчанию" -#: ../../include/channel.php:539 ../../include/channel.php:628 +#: ../../include/channel.php:588 ../../include/channel.php:677 msgid "Unable to retrieve modified identity" msgstr "Не удается найти изменённый идентификатор" -#: ../../include/channel.php:1158 +#: ../../include/channel.php:1207 #: ../../extend/addon/hzaddons/chess/chess.php:486 msgid "Requested channel is not available." msgstr "Запрошенный канал не доступен." -#: ../../include/channel.php:1204 ../../Zotlabs/Module/Achievements.php:15 +#: ../../include/channel.php:1253 ../../Zotlabs/Module/Achievements.php:15 #: ../../Zotlabs/Module/Profile.php:20 ../../Zotlabs/Module/Editlayout.php:31 #: ../../Zotlabs/Module/Filestorage.php:51 #: ../../Zotlabs/Module/Editblock.php:31 ../../Zotlabs/Module/Menu.php:91 @@ -959,84 +960,84 @@ msgstr "Запрошенный канал не доступен." msgid "Requested profile is not available." msgstr "Запрашиваемый профиль не доступен." -#: ../../include/channel.php:1296 ../../Zotlabs/Module/Profiles.php:728 +#: ../../include/channel.php:1345 ../../Zotlabs/Module/Profiles.php:728 msgid "Change profile photo" msgstr "Изменить фотографию профиля" -#: ../../include/channel.php:1303 ../../include/nav.php:109 +#: ../../include/channel.php:1352 ../../include/nav.php:109 #: ../../Zotlabs/Module/Profiles.php:830 msgid "Edit Profiles" msgstr "Редактирование профилей" -#: ../../include/channel.php:1304 +#: ../../include/channel.php:1353 msgid "Create New Profile" msgstr "Создать новый профиль" -#: ../../include/channel.php:1307 ../../include/nav.php:111 +#: ../../include/channel.php:1356 ../../include/nav.php:111 #: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:58 msgid "Edit Profile" msgstr "Редактировать профиль" -#: ../../include/channel.php:1322 ../../Zotlabs/Module/Profiles.php:820 +#: ../../include/channel.php:1371 ../../Zotlabs/Module/Profiles.php:820 msgid "Profile Image" msgstr "Изображение профиля" -#: ../../include/channel.php:1325 +#: ../../include/channel.php:1374 msgid "Visible to everybody" msgstr "Видно всем" -#: ../../include/channel.php:1326 ../../Zotlabs/Module/Profiles.php:725 +#: ../../include/channel.php:1375 ../../Zotlabs/Module/Profiles.php:725 #: ../../Zotlabs/Module/Profiles.php:824 msgid "Edit visibility" msgstr "Редактировать видимость" -#: ../../include/channel.php:1383 ../../include/conversation.php:1058 +#: ../../include/channel.php:1432 ../../include/conversation.php:1058 #: ../../include/connections.php:110 ../../Zotlabs/Module/Directory.php:342 #: ../../Zotlabs/Module/Suggest.php:71 ../../Zotlabs/Widget/Suggestions.php:44 #: ../../Zotlabs/Widget/Follow.php:32 msgid "Connect" msgstr "Подключить" -#: ../../include/channel.php:1398 ../../include/event.php:54 +#: ../../include/channel.php:1447 ../../include/event.php:54 #: ../../include/event.php:86 ../../Zotlabs/Module/Directory.php:328 msgid "Location:" msgstr "Местоположение:" -#: ../../include/channel.php:1402 ../../include/channel.php:1530 +#: ../../include/channel.php:1451 ../../include/channel.php:1579 msgid "Gender:" msgstr "Пол:" -#: ../../include/channel.php:1403 ../../include/channel.php:1574 +#: ../../include/channel.php:1452 ../../include/channel.php:1623 #: ../../extend/addon/hzaddons/jappixmini/jappixmini.php:305 msgid "Status:" msgstr "Статус:" -#: ../../include/channel.php:1404 ../../include/channel.php:1598 +#: ../../include/channel.php:1453 ../../include/channel.php:1647 msgid "Homepage:" msgstr "Домашняя страница:" -#: ../../include/channel.php:1405 +#: ../../include/channel.php:1454 msgid "Online Now" msgstr "Сейчас в сети" -#: ../../include/channel.php:1458 +#: ../../include/channel.php:1507 msgid "Change your profile photo" msgstr "Изменить фотографию вашего профиля" -#: ../../include/channel.php:1489 +#: ../../include/channel.php:1538 msgid "Trans" msgstr "Трансексуал" -#: ../../include/channel.php:1528 ../../Zotlabs/Module/Settings/Channel.php:499 +#: ../../include/channel.php:1577 ../../Zotlabs/Module/Settings/Channel.php:499 msgid "Full Name:" msgstr "Полное имя:" -#: ../../include/channel.php:1535 +#: ../../include/channel.php:1584 msgid "Like this channel" msgstr "нравится этот канал" -#: ../../include/channel.php:1546 ../../include/conversation.php:1693 -#: ../../include/taxonomy.php:661 ../../Zotlabs/Module/Photos.php:1162 +#: ../../include/channel.php:1595 ../../include/conversation.php:1693 +#: ../../include/taxonomy.php:661 ../../Zotlabs/Module/Photos.php:1175 #: ../../Zotlabs/Lib/ThreadItem.php:218 msgctxt "noun" msgid "Like" @@ -1045,136 +1046,136 @@ msgstr[0] "Нравится" msgstr[1] "Нравится" msgstr[2] "Нравится" -#: ../../include/channel.php:1559 +#: ../../include/channel.php:1608 msgid "j F, Y" msgstr "" -#: ../../include/channel.php:1560 +#: ../../include/channel.php:1609 msgid "j F" msgstr "" -#: ../../include/channel.php:1567 +#: ../../include/channel.php:1616 msgid "Birthday:" msgstr "День рождения:" -#: ../../include/channel.php:1571 ../../Zotlabs/Module/Directory.php:323 +#: ../../include/channel.php:1620 ../../Zotlabs/Module/Directory.php:323 msgid "Age:" msgstr "Возраст:" -#: ../../include/channel.php:1580 +#: ../../include/channel.php:1629 #, php-format msgid "for %1$d %2$s" msgstr "для %1$d %2$s" -#: ../../include/channel.php:1592 +#: ../../include/channel.php:1641 msgid "Tags:" msgstr "Теги:" -#: ../../include/channel.php:1596 +#: ../../include/channel.php:1645 msgid "Sexual Preference:" msgstr "Сексуальные предпочтения:" -#: ../../include/channel.php:1600 ../../Zotlabs/Module/Directory.php:339 +#: ../../include/channel.php:1649 ../../Zotlabs/Module/Directory.php:339 msgid "Hometown:" msgstr "Родной город:" -#: ../../include/channel.php:1602 +#: ../../include/channel.php:1651 msgid "Political Views:" msgstr "Политические взгляды:" -#: ../../include/channel.php:1604 +#: ../../include/channel.php:1653 msgid "Religion:" msgstr "Религия:" -#: ../../include/channel.php:1606 ../../Zotlabs/Module/Directory.php:341 +#: ../../include/channel.php:1655 ../../Zotlabs/Module/Directory.php:341 msgid "About:" msgstr "О себе:" -#: ../../include/channel.php:1608 +#: ../../include/channel.php:1657 msgid "Hobbies/Interests:" msgstr "Хобби / интересы:" -#: ../../include/channel.php:1610 +#: ../../include/channel.php:1659 msgid "Likes:" msgstr "Что вам нравится:" -#: ../../include/channel.php:1612 +#: ../../include/channel.php:1661 msgid "Dislikes:" msgstr "Что вам не нравится:" -#: ../../include/channel.php:1614 +#: ../../include/channel.php:1663 msgid "Contact information and Social Networks:" msgstr "Контактная информация и социальные сети:" -#: ../../include/channel.php:1616 +#: ../../include/channel.php:1665 msgid "My other channels:" msgstr "Мои другие каналы:" -#: ../../include/channel.php:1618 +#: ../../include/channel.php:1667 msgid "Musical interests:" msgstr "Музыкальные интересы:" -#: ../../include/channel.php:1620 +#: ../../include/channel.php:1669 msgid "Books, literature:" msgstr "Книги, литература:" -#: ../../include/channel.php:1622 +#: ../../include/channel.php:1671 msgid "Television:" msgstr "Телевидение:" -#: ../../include/channel.php:1624 +#: ../../include/channel.php:1673 msgid "Film/dance/culture/entertainment:" msgstr "Кино / танцы / культура / развлечения:" -#: ../../include/channel.php:1626 +#: ../../include/channel.php:1675 msgid "Love/Romance:" msgstr "Любовь / романтика:" -#: ../../include/channel.php:1628 +#: ../../include/channel.php:1677 msgid "Work/employment:" msgstr "Работа / занятость:" -#: ../../include/channel.php:1630 +#: ../../include/channel.php:1679 msgid "School/education:" msgstr "Школа / образование:" -#: ../../include/channel.php:1651 ../../Zotlabs/Module/Profperm.php:113 +#: ../../include/channel.php:1700 ../../Zotlabs/Module/Profperm.php:113 #: ../../Zotlabs/Lib/Apps.php:337 msgid "Profile" msgstr "Профиль" -#: ../../include/channel.php:1653 +#: ../../include/channel.php:1702 msgid "Like this thing" msgstr "нравится этo" -#: ../../include/channel.php:1654 ../../Zotlabs/Module/Events.php:692 +#: ../../include/channel.php:1703 ../../Zotlabs/Module/Events.php:692 #: ../../Zotlabs/Module/Cal.php:340 msgid "Export" msgstr "Экспорт" -#: ../../include/channel.php:2088 ../../Zotlabs/Module/Cover_photo.php:276 +#: ../../include/channel.php:2137 ../../Zotlabs/Module/Cover_photo.php:276 msgid "cover photo" msgstr "фотография обложки" -#: ../../include/channel.php:2341 ../../boot.php:1626 +#: ../../include/channel.php:2390 ../../boot.php:1625 #: ../../Zotlabs/Module/Rmagic.php:75 msgid "Remote Authentication" msgstr "Удаленная аутентификация" -#: ../../include/channel.php:2342 ../../Zotlabs/Module/Rmagic.php:76 +#: ../../include/channel.php:2391 ../../Zotlabs/Module/Rmagic.php:76 msgid "Enter your channel address (e.g. channel@example.com)" msgstr "Введите адрес вашего канала (например: channel@example.com)" -#: ../../include/channel.php:2343 ../../Zotlabs/Module/Rmagic.php:77 +#: ../../include/channel.php:2392 ../../Zotlabs/Module/Rmagic.php:77 msgid "Authenticate" msgstr "Проверка подлинности" -#: ../../include/channel.php:2497 ../../Zotlabs/Module/Admin/Accounts.php:91 +#: ../../include/channel.php:2547 ../../Zotlabs/Module/Admin/Accounts.php:91 #, php-format msgid "Account '%s' deleted" msgstr "Аккаунт '%s' удален" -#: ../../include/message.php:13 ../../include/text.php:1709 +#: ../../include/message.php:13 ../../include/text.php:1708 msgid "Download binary/encrypted content" msgstr "Загрузить двоичное / зашифрованное содержимое" @@ -1205,7 +1206,7 @@ msgid "post" msgstr "публикация" #: ../../include/items.php:384 ../../Zotlabs/Module/Dreport.php:10 -#: ../../Zotlabs/Module/Dreport.php:68 ../../Zotlabs/Module/Profperm.php:28 +#: ../../Zotlabs/Module/Dreport.php:79 ../../Zotlabs/Module/Profperm.php:28 #: ../../Zotlabs/Module/Like.php:296 ../../Zotlabs/Module/Subthread.php:86 #: ../../Zotlabs/Module/Group.php:93 ../../Zotlabs/Module/Cloud.php:126 #: ../../Zotlabs/Module/Import_items.php:120 @@ -1217,44 +1218,44 @@ msgstr "публикация" msgid "Permission denied" msgstr "Доступ запрещен" -#: ../../include/items.php:911 ../../include/items.php:971 +#: ../../include/items.php:921 ../../include/items.php:981 msgid "(Unknown)" msgstr "(Неизвестный)" -#: ../../include/items.php:1157 +#: ../../include/items.php:1169 msgid "Visible to anybody on the internet." msgstr "Виден всем в интернете." -#: ../../include/items.php:1159 +#: ../../include/items.php:1171 msgid "Visible to you only." msgstr "Видно только вам." -#: ../../include/items.php:1161 +#: ../../include/items.php:1173 msgid "Visible to anybody in this network." msgstr "Видно всем в этой сети." -#: ../../include/items.php:1163 +#: ../../include/items.php:1175 msgid "Visible to anybody authenticated." msgstr "Видно всем аутентифицированным." -#: ../../include/items.php:1165 +#: ../../include/items.php:1177 #, php-format msgid "Visible to anybody on %s." msgstr "Видно всем в %s." -#: ../../include/items.php:1167 +#: ../../include/items.php:1179 msgid "Visible to all connections." msgstr "Видно всем контактам." -#: ../../include/items.php:1169 +#: ../../include/items.php:1181 msgid "Visible to approved connections." msgstr "Видно только одобренным контактам." -#: ../../include/items.php:1171 +#: ../../include/items.php:1183 msgid "Visible to specific connections." msgstr "Видно указанным контактам." -#: ../../include/items.php:3587 ../../Zotlabs/Module/Display.php:45 +#: ../../include/items.php:3613 ../../Zotlabs/Module/Display.php:45 #: ../../Zotlabs/Module/Display.php:452 ../../Zotlabs/Module/Admin.php:62 #: ../../Zotlabs/Module/Filestorage.php:24 ../../Zotlabs/Module/Viewsrc.php:25 #: ../../Zotlabs/Module/Admin/Addons.php:259 @@ -1262,90 +1263,90 @@ msgstr "Видно указанным контактам." msgid "Item not found." msgstr "Элемент не найден." -#: ../../include/items.php:4167 ../../Zotlabs/Module/Group.php:61 +#: ../../include/items.php:4193 ../../Zotlabs/Module/Group.php:61 #: ../../Zotlabs/Module/Group.php:200 msgid "Privacy group not found." msgstr "Группа безопасности не найдена." -#: ../../include/items.php:4183 +#: ../../include/items.php:4209 msgid "Privacy group is empty." msgstr "Группа безопасности пуста" -#: ../../include/items.php:4190 +#: ../../include/items.php:4216 #, php-format msgid "Privacy group: %s" msgstr "Группа безопасности: %s" -#: ../../include/items.php:4200 ../../Zotlabs/Module/Connedit.php:851 +#: ../../include/items.php:4226 ../../Zotlabs/Module/Connedit.php:856 #, php-format msgid "Connection: %s" msgstr "Контакт: %s" -#: ../../include/items.php:4202 +#: ../../include/items.php:4228 msgid "Connection not found." msgstr "Контакт не найден." -#: ../../include/items.php:4544 ../../Zotlabs/Module/Cover_photo.php:269 +#: ../../include/items.php:4570 ../../Zotlabs/Module/Cover_photo.php:269 msgid "female" msgstr "женщина" -#: ../../include/items.php:4545 ../../Zotlabs/Module/Cover_photo.php:270 +#: ../../include/items.php:4571 ../../Zotlabs/Module/Cover_photo.php:270 #, php-format msgid "%1$s updated her %2$s" msgstr "%1$s обновила её %2$s" -#: ../../include/items.php:4546 ../../Zotlabs/Module/Cover_photo.php:271 +#: ../../include/items.php:4572 ../../Zotlabs/Module/Cover_photo.php:271 msgid "male" msgstr "мужчина" -#: ../../include/items.php:4547 ../../Zotlabs/Module/Cover_photo.php:272 +#: ../../include/items.php:4573 ../../Zotlabs/Module/Cover_photo.php:272 #, php-format msgid "%1$s updated his %2$s" msgstr "%1$s обновил его %2$s" -#: ../../include/items.php:4549 ../../Zotlabs/Module/Cover_photo.php:274 +#: ../../include/items.php:4575 ../../Zotlabs/Module/Cover_photo.php:274 #, php-format msgid "%1$s updated their %2$s" msgstr "%1$s обновили их %2$s" -#: ../../include/items.php:4551 +#: ../../include/items.php:4577 msgid "profile photo" msgstr "Фотография профиля" -#: ../../include/items.php:4742 +#: ../../include/items.php:4769 #, php-format msgid "[Edited %s]" msgstr "[Отредактировано %s]" -#: ../../include/items.php:4742 +#: ../../include/items.php:4769 msgctxt "edit_activity" msgid "Post" msgstr "Публикация" -#: ../../include/items.php:4742 +#: ../../include/items.php:4769 msgctxt "edit_activity" msgid "Comment" msgstr "Комментарий" -#: ../../include/activities.php:41 +#: ../../include/activities.php:42 msgid " and " msgstr " и " -#: ../../include/activities.php:49 +#: ../../include/activities.php:50 msgid "public profile" msgstr "общедоступный профиль" -#: ../../include/activities.php:58 +#: ../../include/activities.php:59 #, php-format msgid "%1$s changed %2$s to “%3$s”" msgstr "%1$s изменил %2$s на “%3$s”" -#: ../../include/activities.php:59 +#: ../../include/activities.php:60 #, php-format msgid "Visit %1$s's %2$s" msgstr "Посетить %1$s %2$s" -#: ../../include/activities.php:62 +#: ../../include/activities.php:63 #, php-format msgid "%1$s has an updated %2$s, changing %3$s." msgstr "%1$s обновлено %2$s, изменено %3$s." @@ -1402,7 +1403,7 @@ msgstr "Использовать режим блога / списка" msgid "Comments will be displayed separately" msgstr "Комментарии будут отображаться отдельно" -#: ../../include/features.php:125 ../../include/text.php:981 +#: ../../include/features.php:125 ../../include/text.php:980 #: ../../Zotlabs/Module/Connections.php:334 ../../Zotlabs/Lib/Apps.php:308 msgid "Connections" msgstr "Контакты" @@ -1687,53 +1688,53 @@ msgstr "Несколько профилей" msgid "Ability to create multiple profiles" msgstr "Возможность создания нескольких профилей" -#: ../../include/text.php:498 +#: ../../include/text.php:501 msgid "prev" msgstr "предыдущий" -#: ../../include/text.php:500 +#: ../../include/text.php:503 msgid "first" msgstr "первый" -#: ../../include/text.php:529 +#: ../../include/text.php:532 msgid "last" msgstr "последний" -#: ../../include/text.php:532 +#: ../../include/text.php:535 msgid "next" msgstr "следующий" -#: ../../include/text.php:543 +#: ../../include/text.php:546 msgid "older" msgstr "старше" -#: ../../include/text.php:545 +#: ../../include/text.php:548 msgid "newer" msgstr "новее" -#: ../../include/text.php:969 +#: ../../include/text.php:968 msgid "No connections" msgstr "Нет контактов" -#: ../../include/text.php:1001 +#: ../../include/text.php:1000 #, php-format msgid "View all %s connections" msgstr "Просмотреть все %s контактов" -#: ../../include/text.php:1057 +#: ../../include/text.php:1056 #, php-format msgid "Network: %s" msgstr "Сеть: %s" -#: ../../include/text.php:1068 ../../include/text.php:1080 +#: ../../include/text.php:1067 ../../include/text.php:1079 #: ../../include/acl_selectors.php:118 ../../include/nav.php:183 #: ../../Zotlabs/Module/Search.php:44 ../../Zotlabs/Module/Connections.php:338 #: ../../Zotlabs/Widget/Sitesearch.php:31 -#: ../../Zotlabs/Widget/Activity_filter.php:150 ../../Zotlabs/Lib/Apps.php:328 +#: ../../Zotlabs/Widget/Activity_filter.php:151 ../../Zotlabs/Lib/Apps.php:328 msgid "Search" msgstr "Поиск" -#: ../../include/text.php:1069 ../../include/text.php:1081 +#: ../../include/text.php:1068 ../../include/text.php:1080 #: ../../Zotlabs/Module/Admin/Profs.php:94 #: ../../Zotlabs/Module/Admin/Profs.php:114 ../../Zotlabs/Module/Rbmark.php:32 #: ../../Zotlabs/Module/Rbmark.php:104 ../../Zotlabs/Module/Filer.php:53 @@ -1741,409 +1742,409 @@ msgstr "Поиск" msgid "Save" msgstr "Запомнить" -#: ../../include/text.php:1146 ../../include/text.php:1150 +#: ../../include/text.php:1145 ../../include/text.php:1149 msgid "poke" msgstr "Ткнуть" -#: ../../include/text.php:1146 ../../include/text.php:1150 +#: ../../include/text.php:1145 ../../include/text.php:1149 #: ../../include/conversation.php:251 msgid "poked" msgstr "ткнут" -#: ../../include/text.php:1151 +#: ../../include/text.php:1150 msgid "ping" msgstr "Пингануть" -#: ../../include/text.php:1151 +#: ../../include/text.php:1150 msgid "pinged" msgstr "Отпингован" -#: ../../include/text.php:1152 +#: ../../include/text.php:1151 msgid "prod" msgstr "Подтолкнуть" -#: ../../include/text.php:1152 +#: ../../include/text.php:1151 msgid "prodded" msgstr "Подтолкнут" -#: ../../include/text.php:1153 +#: ../../include/text.php:1152 msgid "slap" msgstr "Шлёпнуть" -#: ../../include/text.php:1153 +#: ../../include/text.php:1152 msgid "slapped" msgstr "Шлёпнут" -#: ../../include/text.php:1154 +#: ../../include/text.php:1153 msgid "finger" msgstr "Указать" -#: ../../include/text.php:1154 +#: ../../include/text.php:1153 msgid "fingered" msgstr "Указан" -#: ../../include/text.php:1155 +#: ../../include/text.php:1154 msgid "rebuff" msgstr "Дать отпор" -#: ../../include/text.php:1155 +#: ../../include/text.php:1154 msgid "rebuffed" msgstr "Дан отпор" -#: ../../include/text.php:1178 +#: ../../include/text.php:1177 msgid "happy" msgstr "счастливый" -#: ../../include/text.php:1179 +#: ../../include/text.php:1178 msgid "sad" msgstr "грустный" -#: ../../include/text.php:1180 +#: ../../include/text.php:1179 msgid "mellow" msgstr "спокойный" -#: ../../include/text.php:1181 +#: ../../include/text.php:1180 msgid "tired" msgstr "усталый" -#: ../../include/text.php:1182 +#: ../../include/text.php:1181 msgid "perky" msgstr "весёлый" -#: ../../include/text.php:1183 +#: ../../include/text.php:1182 msgid "angry" msgstr "сердитый" -#: ../../include/text.php:1184 +#: ../../include/text.php:1183 msgid "stupefied" msgstr "отупевший" -#: ../../include/text.php:1185 +#: ../../include/text.php:1184 msgid "puzzled" msgstr "недоумевающий" -#: ../../include/text.php:1186 +#: ../../include/text.php:1185 msgid "interested" msgstr "заинтересованный" -#: ../../include/text.php:1187 +#: ../../include/text.php:1186 msgid "bitter" msgstr "едкий" -#: ../../include/text.php:1188 +#: ../../include/text.php:1187 msgid "cheerful" msgstr "бодрый" -#: ../../include/text.php:1189 +#: ../../include/text.php:1188 msgid "alive" msgstr "энергичный" -#: ../../include/text.php:1190 +#: ../../include/text.php:1189 msgid "annoyed" msgstr "раздражённый" -#: ../../include/text.php:1191 +#: ../../include/text.php:1190 msgid "anxious" msgstr "обеспокоенный" -#: ../../include/text.php:1192 +#: ../../include/text.php:1191 msgid "cranky" msgstr "капризный" -#: ../../include/text.php:1193 +#: ../../include/text.php:1192 msgid "disturbed" msgstr "встревоженный" -#: ../../include/text.php:1194 +#: ../../include/text.php:1193 msgid "frustrated" msgstr "разочарованный" -#: ../../include/text.php:1195 +#: ../../include/text.php:1194 msgid "depressed" msgstr "подавленный" -#: ../../include/text.php:1196 +#: ../../include/text.php:1195 msgid "motivated" msgstr "мотивированный" -#: ../../include/text.php:1197 +#: ../../include/text.php:1196 msgid "relaxed" msgstr "расслабленный" -#: ../../include/text.php:1198 +#: ../../include/text.php:1197 msgid "surprised" msgstr "удивленный" -#: ../../include/text.php:1377 ../../include/js_strings.php:95 +#: ../../include/text.php:1376 ../../include/js_strings.php:95 msgid "Monday" msgstr "Понедельник" -#: ../../include/text.php:1377 ../../include/js_strings.php:96 +#: ../../include/text.php:1376 ../../include/js_strings.php:96 msgid "Tuesday" msgstr "Вторник" -#: ../../include/text.php:1377 ../../include/js_strings.php:97 +#: ../../include/text.php:1376 ../../include/js_strings.php:97 msgid "Wednesday" msgstr "Среда" -#: ../../include/text.php:1377 ../../include/js_strings.php:98 +#: ../../include/text.php:1376 ../../include/js_strings.php:98 msgid "Thursday" msgstr "Четверг" -#: ../../include/text.php:1377 ../../include/js_strings.php:99 +#: ../../include/text.php:1376 ../../include/js_strings.php:99 msgid "Friday" msgstr "Пятница" -#: ../../include/text.php:1377 ../../include/js_strings.php:100 +#: ../../include/text.php:1376 ../../include/js_strings.php:100 msgid "Saturday" msgstr "Суббота" -#: ../../include/text.php:1377 ../../include/js_strings.php:94 +#: ../../include/text.php:1376 ../../include/js_strings.php:94 msgid "Sunday" msgstr "Воскресенье" -#: ../../include/text.php:1381 ../../include/js_strings.php:70 +#: ../../include/text.php:1380 ../../include/js_strings.php:70 msgid "January" msgstr "Январь" -#: ../../include/text.php:1381 ../../include/js_strings.php:71 +#: ../../include/text.php:1380 ../../include/js_strings.php:71 msgid "February" msgstr "Февраль" -#: ../../include/text.php:1381 ../../include/js_strings.php:72 +#: ../../include/text.php:1380 ../../include/js_strings.php:72 msgid "March" msgstr "Март" -#: ../../include/text.php:1381 ../../include/js_strings.php:73 +#: ../../include/text.php:1380 ../../include/js_strings.php:73 msgid "April" msgstr "Апрель" -#: ../../include/text.php:1381 +#: ../../include/text.php:1380 msgid "May" msgstr "Май" -#: ../../include/text.php:1381 ../../include/js_strings.php:75 +#: ../../include/text.php:1380 ../../include/js_strings.php:75 msgid "June" msgstr "Июнь" -#: ../../include/text.php:1381 ../../include/js_strings.php:76 +#: ../../include/text.php:1380 ../../include/js_strings.php:76 msgid "July" msgstr "Июль" -#: ../../include/text.php:1381 ../../include/js_strings.php:77 +#: ../../include/text.php:1380 ../../include/js_strings.php:77 msgid "August" msgstr "Август" -#: ../../include/text.php:1381 ../../include/js_strings.php:78 +#: ../../include/text.php:1380 ../../include/js_strings.php:78 msgid "September" msgstr "Сентябрь" -#: ../../include/text.php:1381 ../../include/js_strings.php:79 +#: ../../include/text.php:1380 ../../include/js_strings.php:79 msgid "October" msgstr "Октябрь" -#: ../../include/text.php:1381 ../../include/js_strings.php:80 +#: ../../include/text.php:1380 ../../include/js_strings.php:80 msgid "November" msgstr "Ноябрь" -#: ../../include/text.php:1381 ../../include/js_strings.php:81 +#: ../../include/text.php:1380 ../../include/js_strings.php:81 msgid "December" msgstr "Декабрь" -#: ../../include/text.php:1455 +#: ../../include/text.php:1454 msgid "Unknown Attachment" msgstr "Неизвестное вложение" -#: ../../include/text.php:1457 ../../Zotlabs/Storage/Browser.php:287 +#: ../../include/text.php:1456 ../../Zotlabs/Storage/Browser.php:287 #: ../../Zotlabs/Module/Sharedwithme.php:106 msgid "Size" msgstr "Размер" -#: ../../include/text.php:1457 ../../include/feedutils.php:860 +#: ../../include/text.php:1456 ../../include/feedutils.php:860 msgid "unknown" msgstr "неизвестный" -#: ../../include/text.php:1493 +#: ../../include/text.php:1492 msgid "remove category" msgstr "удалить категорию" -#: ../../include/text.php:1567 +#: ../../include/text.php:1566 msgid "remove from file" msgstr "удалить из файла" -#: ../../include/text.php:1850 ../../Zotlabs/Module/Events.php:663 +#: ../../include/text.php:1849 ../../Zotlabs/Module/Events.php:663 #: ../../Zotlabs/Module/Cal.php:314 msgid "Link to Source" msgstr "Ссылка на источник" -#: ../../include/text.php:1872 ../../include/language.php:423 +#: ../../include/text.php:1871 ../../include/language.php:423 msgid "default" msgstr "по умолчанию" -#: ../../include/text.php:1880 +#: ../../include/text.php:1879 msgid "Page layout" msgstr "Шаблон страницы" -#: ../../include/text.php:1880 +#: ../../include/text.php:1879 msgid "You can create your own with the layouts tool" msgstr "Вы можете создать свой собственный с помощью инструмента шаблонов" -#: ../../include/text.php:1890 ../../Zotlabs/Module/Wiki.php:217 +#: ../../include/text.php:1889 ../../Zotlabs/Module/Wiki.php:217 #: ../../Zotlabs/Module/Wiki.php:371 ../../Zotlabs/Widget/Wiki_pages.php:38 #: ../../Zotlabs/Widget/Wiki_pages.php:95 msgid "BBcode" msgstr "" -#: ../../include/text.php:1891 +#: ../../include/text.php:1890 msgid "HTML" msgstr "" -#: ../../include/text.php:1892 ../../Zotlabs/Module/Wiki.php:217 +#: ../../include/text.php:1891 ../../Zotlabs/Module/Wiki.php:217 #: ../../Zotlabs/Module/Wiki.php:371 ../../Zotlabs/Widget/Wiki_pages.php:38 #: ../../Zotlabs/Widget/Wiki_pages.php:95 #: ../../extend/addon/hzaddons/mdpost/mdpost.php:41 msgid "Markdown" msgstr "Разметка Markdown" -#: ../../include/text.php:1893 ../../Zotlabs/Module/Wiki.php:217 +#: ../../include/text.php:1892 ../../Zotlabs/Module/Wiki.php:217 #: ../../Zotlabs/Widget/Wiki_pages.php:38 #: ../../Zotlabs/Widget/Wiki_pages.php:95 msgid "Text" msgstr "Текст" -#: ../../include/text.php:1894 +#: ../../include/text.php:1893 msgid "Comanche Layout" msgstr "Шаблон Comanche" -#: ../../include/text.php:1899 +#: ../../include/text.php:1898 msgid "PHP" msgstr "" -#: ../../include/text.php:1908 +#: ../../include/text.php:1907 msgid "Page content type" msgstr "Тип содержимого страницы" -#: ../../include/text.php:2028 ../../include/conversation.php:116 -#: ../../Zotlabs/Module/Tagger.php:69 ../../Zotlabs/Module/Like.php:384 -#: ../../Zotlabs/Module/Subthread.php:111 ../../Zotlabs/Lib/Activity.php:1570 +#: ../../include/text.php:2027 ../../include/conversation.php:116 +#: ../../Zotlabs/Module/Tagger.php:69 ../../Zotlabs/Module/Like.php:387 +#: ../../Zotlabs/Module/Subthread.php:112 ../../Zotlabs/Lib/Activity.php:1570 #: ../../extend/addon/hzaddons/redphotos/redphotohelper.php:71 -#: ../../extend/addon/hzaddons/pubcrawl/as.php:1512 -#: ../../extend/addon/hzaddons/diaspora/Receiver.php:1539 +#: ../../extend/addon/hzaddons/pubcrawl/as.php:1494 +#: ../../extend/addon/hzaddons/diaspora/Receiver.php:1541 msgid "photo" msgstr "фото" -#: ../../include/text.php:2031 ../../include/conversation.php:119 -#: ../../include/event.php:1153 ../../Zotlabs/Module/Tagger.php:73 -#: ../../Zotlabs/Module/Events.php:260 ../../Zotlabs/Module/Like.php:386 +#: ../../include/text.php:2030 ../../include/conversation.php:119 +#: ../../include/event.php:1156 ../../Zotlabs/Module/Tagger.php:73 +#: ../../Zotlabs/Module/Events.php:260 ../../Zotlabs/Module/Like.php:389 msgid "event" msgstr "событие" -#: ../../include/text.php:2034 ../../include/conversation.php:144 -#: ../../Zotlabs/Module/Like.php:384 ../../Zotlabs/Module/Subthread.php:111 +#: ../../include/text.php:2033 ../../include/conversation.php:144 +#: ../../Zotlabs/Module/Like.php:387 ../../Zotlabs/Module/Subthread.php:112 #: ../../Zotlabs/Lib/Activity.php:1570 -#: ../../extend/addon/hzaddons/pubcrawl/as.php:1512 -#: ../../extend/addon/hzaddons/diaspora/Receiver.php:1539 +#: ../../extend/addon/hzaddons/pubcrawl/as.php:1494 +#: ../../extend/addon/hzaddons/diaspora/Receiver.php:1541 msgid "status" msgstr "статус" -#: ../../include/text.php:2036 ../../include/conversation.php:146 +#: ../../include/text.php:2035 ../../include/conversation.php:146 #: ../../Zotlabs/Module/Tagger.php:79 msgid "comment" msgstr "комментарий" -#: ../../include/text.php:2041 +#: ../../include/text.php:2040 msgid "activity" msgstr "активность" -#: ../../include/text.php:2142 +#: ../../include/text.php:2141 msgid "a-z, 0-9, -, and _ only" msgstr "Только a-z, 0-9, -, и _" -#: ../../include/text.php:2462 +#: ../../include/text.php:2461 msgid "Design Tools" msgstr "Инструменты дизайна" -#: ../../include/text.php:2465 ../../Zotlabs/Module/Blocks.php:154 +#: ../../include/text.php:2464 ../../Zotlabs/Module/Blocks.php:154 msgid "Blocks" msgstr "Блокировки" -#: ../../include/text.php:2466 ../../Zotlabs/Module/Menu.php:170 +#: ../../include/text.php:2465 ../../Zotlabs/Module/Menu.php:170 msgid "Menus" msgstr "Меню" -#: ../../include/text.php:2467 ../../Zotlabs/Module/Layouts.php:184 +#: ../../include/text.php:2466 ../../Zotlabs/Module/Layouts.php:184 msgid "Layouts" msgstr "Шаблоны" -#: ../../include/text.php:2468 +#: ../../include/text.php:2467 msgid "Pages" msgstr "Страницы" -#: ../../include/text.php:2489 ../../Zotlabs/Module/Cal.php:343 +#: ../../include/text.php:2488 ../../Zotlabs/Module/Cal.php:343 msgid "Import" msgstr "Импортировать" -#: ../../include/text.php:2490 +#: ../../include/text.php:2489 msgid "Import website..." msgstr "Импорт веб-сайта..." -#: ../../include/text.php:2491 +#: ../../include/text.php:2490 msgid "Select folder to import" msgstr "Выбрать каталог для импорта" -#: ../../include/text.php:2492 +#: ../../include/text.php:2491 msgid "Import from a zipped folder:" msgstr "Импортировать из каталога в zip-архиве:" -#: ../../include/text.php:2493 +#: ../../include/text.php:2492 msgid "Import from cloud files:" msgstr "Импортировать из сетевых файлов:" -#: ../../include/text.php:2494 +#: ../../include/text.php:2493 msgid "/cloud/channel/path/to/folder" msgstr "" -#: ../../include/text.php:2495 +#: ../../include/text.php:2494 msgid "Enter path to website files" msgstr "Введите путь к файлам веб-сайта" -#: ../../include/text.php:2496 +#: ../../include/text.php:2495 msgid "Select folder" msgstr "Выбрать каталог" -#: ../../include/text.php:2497 +#: ../../include/text.php:2496 msgid "Export website..." msgstr "Экспорт веб-сайта..." -#: ../../include/text.php:2498 +#: ../../include/text.php:2497 msgid "Export to a zip file" msgstr "Экспортировать в ZIP файл." -#: ../../include/text.php:2499 +#: ../../include/text.php:2498 msgid "website.zip" msgstr "" -#: ../../include/text.php:2500 +#: ../../include/text.php:2499 msgid "Enter a name for the zip file." msgstr "Введите имя для ZIP файла." -#: ../../include/text.php:2501 +#: ../../include/text.php:2500 msgid "Export to cloud files" msgstr "Эскпортировать в сетевые файлы:" -#: ../../include/text.php:2502 +#: ../../include/text.php:2501 msgid "/path/to/export/folder" msgstr "" -#: ../../include/text.php:2503 +#: ../../include/text.php:2502 msgid "Enter a path to a cloud files destination." msgstr "Введите путь к расположению сетевых файлов." -#: ../../include/text.php:2504 +#: ../../include/text.php:2503 msgid "Specify folder" msgstr "Указать каталог" -#: ../../include/text.php:2824 ../../Zotlabs/Storage/Browser.php:131 +#: ../../include/text.php:2823 ../../Zotlabs/Storage/Browser.php:131 msgid "Collection" msgstr "Коллекция" @@ -2161,7 +2162,7 @@ msgstr "Не удалось создать дублирующийся идент msgid "Unable to create a unique channel address. Import failed." msgstr "Не удалось создать уникальный адрес канала. Импорт не завершен." -#: ../../include/import.php:117 +#: ../../include/import.php:116 msgid "Cloned channel not found. Import failed." msgstr "Клон канала не найден. Импорт невозможен." @@ -2182,7 +2183,7 @@ msgstr "редактировать" #: ../../include/group.php:320 ../../include/nav.php:95 #: ../../Zotlabs/Module/Group.php:132 ../../Zotlabs/Module/Group.php:143 -#: ../../Zotlabs/Widget/Activity_filter.php:70 ../../Zotlabs/Lib/Group.php:324 +#: ../../Zotlabs/Widget/Activity_filter.php:41 ../../Zotlabs/Lib/Group.php:324 #: ../../Zotlabs/Lib/Apps.php:339 msgid "Privacy Groups" msgstr "Группы безопасности" @@ -2272,20 +2273,20 @@ msgstr "Это действие превышает ограничения, ус msgid "This action is not available under your subscription plan." msgstr "Это действие невозможно из-за ограничений в вашем плане." -#: ../../include/zot.php:773 +#: ../../include/zot.php:775 msgid "Invalid data packet" msgstr "Неверный пакет данных" -#: ../../include/zot.php:800 ../../Zotlabs/Lib/Libzot.php:663 +#: ../../include/zot.php:802 ../../Zotlabs/Lib/Libzot.php:667 msgid "Unable to verify channel signature" msgstr "Невозможно проверить подпись канала" -#: ../../include/zot.php:2571 ../../Zotlabs/Lib/Libsync.php:733 +#: ../../include/zot.php:2575 ../../Zotlabs/Lib/Libsync.php:733 #, php-format msgid "Unable to verify site signature for %s" msgstr "Невозможно проверить подпись сайта %s" -#: ../../include/zot.php:4235 +#: ../../include/zot.php:4272 msgid "invalid target signature" msgstr "недопустимая целевая подпись" @@ -2346,11 +2347,6 @@ msgstr "Не найдено" msgid "Page not found." msgstr "Страница не найдена." -#: ../../include/dba/dba_driver.php:178 -#, php-format -msgid "Cannot locate DNS info for database server '%s'" -msgstr "Не удается найти DNS информацию для сервера базы данных '%s'" - #: ../../include/bbcode.php:200 ../../include/bbcode.php:1201 #: ../../include/bbcode.php:1204 ../../include/bbcode.php:1209 #: ../../include/bbcode.php:1212 ../../include/bbcode.php:1215 @@ -2430,17 +2426,17 @@ msgstr "$1 писал:" msgid "channel" msgstr "канал" -#: ../../include/conversation.php:160 ../../Zotlabs/Module/Like.php:438 +#: ../../include/conversation.php:160 ../../Zotlabs/Module/Like.php:441 #: ../../Zotlabs/Lib/Activity.php:1605 -#: ../../extend/addon/hzaddons/pubcrawl/as.php:1547 -#: ../../extend/addon/hzaddons/diaspora/Receiver.php:1568 +#: ../../extend/addon/hzaddons/pubcrawl/as.php:1529 +#: ../../extend/addon/hzaddons/diaspora/Receiver.php:1570 #, php-format msgid "%1$s likes %2$s's %3$s" msgstr "%1$s нравится %3$s %2$s" -#: ../../include/conversation.php:163 ../../Zotlabs/Module/Like.php:440 +#: ../../include/conversation.php:163 ../../Zotlabs/Module/Like.php:443 #: ../../Zotlabs/Lib/Activity.php:1607 -#: ../../extend/addon/hzaddons/pubcrawl/as.php:1549 +#: ../../extend/addon/hzaddons/pubcrawl/as.php:1531 #, php-format msgid "%1$s doesn't like %2$s's %3$s" msgstr "%1$s не нравится %2$s %3$s" @@ -2465,52 +2461,52 @@ msgstr "%1$s теперь в контакте с %2$s" msgid "%1$s poked %2$s" msgstr "%1$s ткнул %2$s" -#: ../../include/conversation.php:268 ../../Zotlabs/Module/Mood.php:75 +#: ../../include/conversation.php:268 ../../Zotlabs/Module/Mood.php:76 #, php-format msgctxt "mood" msgid "%1$s is %2$s" msgstr "%1$s в %2$s" -#: ../../include/conversation.php:483 ../../Zotlabs/Lib/ThreadItem.php:440 +#: ../../include/conversation.php:483 ../../Zotlabs/Lib/ThreadItem.php:443 msgid "This is an unsaved preview" msgstr "Это несохранённый просмотр" -#: ../../include/conversation.php:619 ../../Zotlabs/Module/Photos.php:1139 +#: ../../include/conversation.php:619 ../../Zotlabs/Module/Photos.php:1152 msgctxt "title" msgid "Likes" msgstr "Нравится" -#: ../../include/conversation.php:619 ../../Zotlabs/Module/Photos.php:1139 +#: ../../include/conversation.php:619 ../../Zotlabs/Module/Photos.php:1152 msgctxt "title" msgid "Dislikes" msgstr "Не нравится" -#: ../../include/conversation.php:620 ../../Zotlabs/Module/Photos.php:1140 +#: ../../include/conversation.php:620 ../../Zotlabs/Module/Photos.php:1153 msgctxt "title" msgid "Agree" msgstr "Согласен" -#: ../../include/conversation.php:620 ../../Zotlabs/Module/Photos.php:1140 +#: ../../include/conversation.php:620 ../../Zotlabs/Module/Photos.php:1153 msgctxt "title" msgid "Disagree" msgstr "Не согласен" -#: ../../include/conversation.php:620 ../../Zotlabs/Module/Photos.php:1140 +#: ../../include/conversation.php:620 ../../Zotlabs/Module/Photos.php:1153 msgctxt "title" msgid "Abstain" msgstr "Воздержался" -#: ../../include/conversation.php:621 ../../Zotlabs/Module/Photos.php:1141 +#: ../../include/conversation.php:621 ../../Zotlabs/Module/Photos.php:1154 msgctxt "title" msgid "Attending" msgstr "Посещаю" -#: ../../include/conversation.php:621 ../../Zotlabs/Module/Photos.php:1141 +#: ../../include/conversation.php:621 ../../Zotlabs/Module/Photos.php:1154 msgctxt "title" msgid "Not attending" msgstr "Не посещаю" -#: ../../include/conversation.php:621 ../../Zotlabs/Module/Photos.php:1141 +#: ../../include/conversation.php:621 ../../Zotlabs/Module/Photos.php:1154 msgctxt "title" msgid "Might attend" msgstr "Возможно посещу" @@ -2522,15 +2518,15 @@ msgstr "Выбрать" #: ../../include/conversation.php:691 ../../include/conversation.php:736 #: ../../Zotlabs/Storage/Browser.php:291 ../../Zotlabs/Module/Cdav.php:942 #: ../../Zotlabs/Module/Cdav.php:1232 ../../Zotlabs/Module/Profiles.php:800 -#: ../../Zotlabs/Module/Photos.php:1205 ../../Zotlabs/Module/Oauth.php:174 +#: ../../Zotlabs/Module/Photos.php:1218 ../../Zotlabs/Module/Oauth.php:174 #: ../../Zotlabs/Module/Oauth2.php:195 ../../Zotlabs/Module/Editlayout.php:138 #: ../../Zotlabs/Module/Editblock.php:139 #: ../../Zotlabs/Module/Admin/Channels.php:149 #: ../../Zotlabs/Module/Admin/Profs.php:176 #: ../../Zotlabs/Module/Admin/Accounts.php:175 #: ../../Zotlabs/Module/Editwebpage.php:167 ../../Zotlabs/Module/Thing.php:267 -#: ../../Zotlabs/Module/Webpages.php:257 ../../Zotlabs/Module/Connedit.php:655 -#: ../../Zotlabs/Module/Connedit.php:924 +#: ../../Zotlabs/Module/Webpages.php:257 ../../Zotlabs/Module/Connedit.php:660 +#: ../../Zotlabs/Module/Connedit.php:929 #: ../../Zotlabs/Module/Connections.php:292 #: ../../Zotlabs/Module/Card_edit.php:129 #: ../../Zotlabs/Module/Article_edit.php:129 @@ -2574,17 +2570,17 @@ msgstr "Категории:" msgid "Filed under:" msgstr "Хранить под:" -#: ../../include/conversation.php:766 ../../Zotlabs/Lib/ThreadItem.php:375 +#: ../../include/conversation.php:766 ../../Zotlabs/Lib/ThreadItem.php:378 #, php-format msgid "from %s" msgstr "от %s" -#: ../../include/conversation.php:769 ../../Zotlabs/Lib/ThreadItem.php:378 +#: ../../include/conversation.php:769 ../../Zotlabs/Lib/ThreadItem.php:381 #, php-format msgid "last edited: %s" msgstr "последнее редактирование: %s" -#: ../../include/conversation.php:770 ../../Zotlabs/Lib/ThreadItem.php:379 +#: ../../include/conversation.php:770 ../../Zotlabs/Lib/ThreadItem.php:382 #, php-format msgid "Expires: %s" msgstr "Срок действия: %s" @@ -2593,8 +2589,8 @@ msgstr "Срок действия: %s" msgid "View in context" msgstr "Показать в контексте" -#: ../../include/conversation.php:787 ../../Zotlabs/Module/Photos.php:1105 -#: ../../Zotlabs/Lib/ThreadItem.php:441 +#: ../../include/conversation.php:787 ../../Zotlabs/Module/Photos.php:1118 +#: ../../Zotlabs/Lib/ThreadItem.php:444 msgid "Please wait" msgstr "Подождите пожалуйста" @@ -2627,12 +2623,12 @@ msgid "Unfollow Thread" msgstr "Прекратить отслеживать тему" #: ../../include/conversation.php:1038 ../../include/nav.php:106 -#: ../../Zotlabs/Module/Connedit.php:595 ../../Zotlabs/Lib/Apps.php:319 +#: ../../Zotlabs/Module/Connedit.php:600 ../../Zotlabs/Lib/Apps.php:319 #: ../../extend/addon/hzaddons/openclipatar/openclipatar.php:57 msgid "View Profile" msgstr "Просмотреть профиль" -#: ../../include/conversation.php:1048 ../../Zotlabs/Module/Connedit.php:616 +#: ../../include/conversation.php:1048 ../../Zotlabs/Module/Connedit.php:621 msgid "Recent Activity" msgstr "Последние действия" @@ -2656,13 +2652,13 @@ msgstr "Ткнуть" #: ../../include/conversation.php:1166 ../../Zotlabs/Storage/Browser.php:164 #: ../../Zotlabs/Module/Cdav.php:811 ../../Zotlabs/Module/Cdav.php:812 -#: ../../Zotlabs/Module/Cdav.php:819 ../../Zotlabs/Module/Photos.php:819 -#: ../../Zotlabs/Module/Photos.php:1275 +#: ../../Zotlabs/Module/Cdav.php:819 ../../Zotlabs/Module/Photos.php:832 +#: ../../Zotlabs/Module/Photos.php:1288 #: ../../Zotlabs/Module/Embedphotos.php:146 #: ../../Zotlabs/Widget/Portfolio.php:95 ../../Zotlabs/Widget/Album.php:84 #: ../../Zotlabs/Lib/Apps.php:994 ../../Zotlabs/Lib/Apps.php:1078 #: ../../Zotlabs/Lib/Activity.php:858 -#: ../../extend/addon/hzaddons/pubcrawl/as.php:964 +#: ../../extend/addon/hzaddons/pubcrawl/as.php:949 msgid "Unknown" msgstr "Неизвестный" @@ -2800,14 +2796,14 @@ msgstr "Комментарии включены" msgid "Comments disabled" msgstr "Комментарии отключены" -#: ../../include/conversation.php:1356 ../../Zotlabs/Module/Photos.php:1125 +#: ../../include/conversation.php:1356 ../../Zotlabs/Module/Photos.php:1138 #: ../../Zotlabs/Module/Events.php:480 ../../Zotlabs/Module/Webpages.php:262 -#: ../../Zotlabs/Lib/ThreadItem.php:777 +#: ../../Zotlabs/Lib/ThreadItem.php:780 #: ../../extend/addon/hzaddons/hsse/hsse.php:153 msgid "Preview" msgstr "Предварительный просмотр" -#: ../../include/conversation.php:1389 ../../Zotlabs/Module/Photos.php:1104 +#: ../../include/conversation.php:1389 ../../Zotlabs/Module/Photos.php:1117 #: ../../Zotlabs/Module/Webpages.php:256 ../../Zotlabs/Module/Blocks.php:161 #: ../../Zotlabs/Module/Wiki.php:301 ../../Zotlabs/Module/Layouts.php:194 #: ../../Zotlabs/Widget/Cdav.php:124 @@ -2825,32 +2821,32 @@ msgstr "Название ссылки на страницу " msgid "Post as" msgstr "Опубликовать как" -#: ../../include/conversation.php:1403 ../../Zotlabs/Lib/ThreadItem.php:768 +#: ../../include/conversation.php:1403 ../../Zotlabs/Lib/ThreadItem.php:771 #: ../../extend/addon/hzaddons/hsse/hsse.php:200 msgid "Bold" msgstr "Жирный" -#: ../../include/conversation.php:1404 ../../Zotlabs/Lib/ThreadItem.php:769 +#: ../../include/conversation.php:1404 ../../Zotlabs/Lib/ThreadItem.php:772 #: ../../extend/addon/hzaddons/hsse/hsse.php:201 msgid "Italic" msgstr "Курсив" -#: ../../include/conversation.php:1405 ../../Zotlabs/Lib/ThreadItem.php:770 +#: ../../include/conversation.php:1405 ../../Zotlabs/Lib/ThreadItem.php:773 #: ../../extend/addon/hzaddons/hsse/hsse.php:202 msgid "Underline" msgstr "Подчеркнутый" -#: ../../include/conversation.php:1406 ../../Zotlabs/Lib/ThreadItem.php:771 +#: ../../include/conversation.php:1406 ../../Zotlabs/Lib/ThreadItem.php:774 #: ../../extend/addon/hzaddons/hsse/hsse.php:203 msgid "Quote" msgstr "Цитата" -#: ../../include/conversation.php:1407 ../../Zotlabs/Lib/ThreadItem.php:772 +#: ../../include/conversation.php:1407 ../../Zotlabs/Lib/ThreadItem.php:775 #: ../../extend/addon/hzaddons/hsse/hsse.php:204 msgid "Code" msgstr "Код" -#: ../../include/conversation.php:1408 ../../Zotlabs/Lib/ThreadItem.php:774 +#: ../../include/conversation.php:1408 ../../Zotlabs/Lib/ThreadItem.php:777 #: ../../extend/addon/hzaddons/hsse/hsse.php:205 msgid "Attach/Upload file" msgstr "Прикрепить/загрузить файл" @@ -2872,7 +2868,7 @@ msgstr "Встроить изображение из ваших альбомов #: ../../Zotlabs/Module/Admin/Addons.php:423 #: ../../Zotlabs/Module/Editwebpage.php:169 #: ../../Zotlabs/Module/Profile_photo.php:465 -#: ../../Zotlabs/Module/Editpost.php:109 ../../Zotlabs/Module/Connedit.php:925 +#: ../../Zotlabs/Module/Editpost.php:109 ../../Zotlabs/Module/Connedit.php:930 #: ../../Zotlabs/Module/Card_edit.php:131 #: ../../Zotlabs/Module/Article_edit.php:131 ../../Zotlabs/Module/Wiki.php:368 #: ../../Zotlabs/Module/Wiki.php:401 ../../Zotlabs/Module/Filer.php:55 @@ -2904,8 +2900,8 @@ msgstr "Отключить комментарии" msgid "Toggle comments" msgstr "Переключить комментарии" -#: ../../include/conversation.php:1424 ../../Zotlabs/Module/Photos.php:700 -#: ../../Zotlabs/Module/Photos.php:1070 ../../Zotlabs/Module/Editblock.php:129 +#: ../../include/conversation.php:1424 ../../Zotlabs/Module/Photos.php:713 +#: ../../Zotlabs/Module/Photos.php:1083 ../../Zotlabs/Module/Editblock.php:129 #: ../../Zotlabs/Module/Card_edit.php:117 #: ../../Zotlabs/Module/Article_edit.php:117 #: ../../extend/addon/hzaddons/hsse/hsse.php:221 @@ -2940,12 +2936,12 @@ msgstr "Установить дату публикации" #: ../../include/conversation.php:1458 ../../Zotlabs/Module/Mail.php:294 #: ../../Zotlabs/Module/Mail.php:436 ../../Zotlabs/Module/Chat.php:221 -#: ../../Zotlabs/Lib/ThreadItem.php:781 +#: ../../Zotlabs/Lib/ThreadItem.php:784 #: ../../extend/addon/hzaddons/hsse/hsse.php:255 msgid "Encrypt text" msgstr "Зашифровать текст" -#: ../../include/conversation.php:1696 ../../Zotlabs/Module/Photos.php:1167 +#: ../../include/conversation.php:1696 ../../Zotlabs/Module/Photos.php:1180 #: ../../Zotlabs/Lib/ThreadItem.php:223 msgctxt "noun" msgid "Dislike" @@ -3053,12 +3049,12 @@ msgstr "Выбор дополнительного языка" msgid "Delete this item?" msgstr "Удалить этот элемент?" -#: ../../include/js_strings.php:6 ../../Zotlabs/Module/Photos.php:1123 -#: ../../Zotlabs/Module/Photos.php:1241 ../../Zotlabs/Lib/ThreadItem.php:766 +#: ../../include/js_strings.php:6 ../../Zotlabs/Module/Photos.php:1136 +#: ../../Zotlabs/Module/Photos.php:1254 ../../Zotlabs/Lib/ThreadItem.php:769 msgid "Comment" msgstr "Комментарий" -#: ../../include/js_strings.php:7 ../../Zotlabs/Lib/ThreadItem.php:473 +#: ../../include/js_strings.php:7 ../../Zotlabs/Lib/ThreadItem.php:476 #, php-format msgid "%s show all" msgstr "%s показать всё" @@ -3115,7 +3111,7 @@ msgid "Rate This Channel (this is public)" msgstr "Оценкa этoго канала (общедоступно)" #: ../../include/js_strings.php:20 ../../Zotlabs/Module/Rate.php:155 -#: ../../Zotlabs/Module/Connedit.php:871 +#: ../../Zotlabs/Module/Connedit.php:876 msgid "Rating" msgstr "Оценка" @@ -3413,9 +3409,9 @@ msgstr "" #: ../../include/network.php:1778 ../../Zotlabs/Lib/Activity.php:1417 #: ../../Zotlabs/Lib/Activity.php:1614 -#: ../../extend/addon/hzaddons/pubcrawl/as.php:1222 -#: ../../extend/addon/hzaddons/pubcrawl/as.php:1377 -#: ../../extend/addon/hzaddons/pubcrawl/as.php:1556 +#: ../../extend/addon/hzaddons/pubcrawl/as.php:1204 +#: ../../extend/addon/hzaddons/pubcrawl/as.php:1359 +#: ../../extend/addon/hzaddons/pubcrawl/as.php:1538 msgid "ActivityPub" msgstr "" @@ -3423,7 +3419,7 @@ msgstr "" #: ../../Zotlabs/Module/Profiles.php:787 #: ../../Zotlabs/Module/Admin/Accounts.php:171 #: ../../Zotlabs/Module/Admin/Accounts.php:183 -#: ../../Zotlabs/Module/Connedit.php:911 +#: ../../Zotlabs/Module/Connedit.php:916 #: ../../extend/addon/hzaddons/rtof/rtof.php:93 #: ../../extend/addon/hzaddons/openid/MysqlProvider.php:56 #: ../../extend/addon/hzaddons/openid/MysqlProvider.php:57 @@ -3479,7 +3475,7 @@ msgstr "YYYY-MM-DD или MM-DD" msgid "Required" msgstr "Требуется" -#: ../../include/datetime.php:238 ../../boot.php:2558 +#: ../../include/datetime.php:238 ../../boot.php:2557 msgid "never" msgstr "никогда" @@ -3564,7 +3560,7 @@ msgstr "С Днем рождения %1$s !" msgid "Visible to your default audience" msgstr "Видно вашей аудитории по умолчанию." -#: ../../include/acl_selectors.php:88 ../../Zotlabs/Module/Acl.php:120 +#: ../../include/acl_selectors.php:88 ../../Zotlabs/Module/Acl.php:121 #: ../../Zotlabs/Module/Lockview.php:117 ../../Zotlabs/Module/Lockview.php:153 msgctxt "acl" msgid "Profile" @@ -3597,15 +3593,15 @@ msgstr "Показать" msgid "Don't show" msgstr "Не показывать" -#: ../../include/acl_selectors.php:123 ../../Zotlabs/Module/Photos.php:704 -#: ../../Zotlabs/Module/Photos.php:1073 ../../Zotlabs/Module/Chat.php:243 +#: ../../include/acl_selectors.php:123 ../../Zotlabs/Module/Photos.php:717 +#: ../../Zotlabs/Module/Photos.php:1086 ../../Zotlabs/Module/Chat.php:243 #: ../../Zotlabs/Module/Filestorage.php:170 ../../Zotlabs/Module/Thing.php:319 -#: ../../Zotlabs/Module/Thing.php:372 ../../Zotlabs/Module/Connedit.php:677 +#: ../../Zotlabs/Module/Thing.php:372 ../../Zotlabs/Module/Connedit.php:682 msgid "Permissions" msgstr "Разрешения" -#: ../../include/acl_selectors.php:125 ../../Zotlabs/Module/Photos.php:1295 -#: ../../Zotlabs/Lib/ThreadItem.php:435 +#: ../../include/acl_selectors.php:125 ../../Zotlabs/Module/Photos.php:1308 +#: ../../Zotlabs/Lib/ThreadItem.php:438 msgid "Close" msgstr "Закрыть" @@ -3629,37 +3625,37 @@ msgstr "Новое окно" msgid "Open the selected location in a different window or browser tab" msgstr "Открыть выбранное местоположение в другом окне или вкладке браузера" -#: ../../include/connections.php:696 ../../include/event.php:1308 +#: ../../include/connections.php:696 ../../include/event.php:1311 #: ../../Zotlabs/Module/Cdav.php:1224 ../../Zotlabs/Module/Profiles.php:792 -#: ../../Zotlabs/Module/Connedit.php:916 +#: ../../Zotlabs/Module/Connedit.php:921 msgid "Mobile" msgstr "Мобильный" -#: ../../include/connections.php:697 ../../include/event.php:1309 +#: ../../include/connections.php:697 ../../include/event.php:1312 #: ../../Zotlabs/Module/Cdav.php:1225 ../../Zotlabs/Module/Profiles.php:793 -#: ../../Zotlabs/Module/Connedit.php:917 +#: ../../Zotlabs/Module/Connedit.php:922 msgid "Home" msgstr "Домашний" -#: ../../include/connections.php:698 ../../include/event.php:1310 +#: ../../include/connections.php:698 ../../include/event.php:1313 msgid "Home, Voice" msgstr "Дом, голос" -#: ../../include/connections.php:699 ../../include/event.php:1311 +#: ../../include/connections.php:699 ../../include/event.php:1314 msgid "Home, Fax" msgstr "Дом, факс" -#: ../../include/connections.php:700 ../../include/event.php:1312 +#: ../../include/connections.php:700 ../../include/event.php:1315 #: ../../Zotlabs/Module/Cdav.php:1226 ../../Zotlabs/Module/Profiles.php:794 -#: ../../Zotlabs/Module/Connedit.php:918 +#: ../../Zotlabs/Module/Connedit.php:923 msgid "Work" msgstr "Рабочий" -#: ../../include/connections.php:701 ../../include/event.php:1313 +#: ../../include/connections.php:701 ../../include/event.php:1316 msgid "Work, Voice" msgstr "Работа, голос" -#: ../../include/connections.php:702 ../../include/event.php:1314 +#: ../../include/connections.php:702 ../../include/event.php:1317 msgid "Work, Fax" msgstr "Работа, факс" @@ -3679,23 +3675,23 @@ msgstr "Окончание:" msgid "This event has been added to your calendar." msgstr "Это событие было добавлено в ваш календарь." -#: ../../include/event.php:1227 +#: ../../include/event.php:1230 msgid "Not specified" msgstr "Не указано" -#: ../../include/event.php:1228 +#: ../../include/event.php:1231 msgid "Needs Action" msgstr "Требует действия" -#: ../../include/event.php:1229 +#: ../../include/event.php:1232 msgid "Completed" msgstr "Завершено" -#: ../../include/event.php:1230 +#: ../../include/event.php:1233 msgid "In Process" msgstr "В процессе" -#: ../../include/event.php:1231 +#: ../../include/event.php:1234 msgid "Cancelled" msgstr "Отменено" @@ -3753,7 +3749,7 @@ msgid "Account/Channel Settings" msgstr "Настройки аккаунта / канала" #: ../../include/nav.php:103 ../../include/nav.php:132 -#: ../../include/nav.php:151 ../../boot.php:1624 +#: ../../include/nav.php:151 ../../boot.php:1623 msgid "Logout" msgstr "Выход" @@ -3773,7 +3769,7 @@ msgstr "Управление / редактирование профилей" msgid "Edit your profile" msgstr "Редактировать профиль" -#: ../../include/nav.php:118 ../../include/nav.php:122 ../../boot.php:1625 +#: ../../include/nav.php:118 ../../include/nav.php:122 ../../boot.php:1624 #: ../../Zotlabs/Lib/Apps.php:311 msgid "Login" msgstr "Войти" @@ -3790,7 +3786,7 @@ msgstr "Домой" msgid "Log me out of this site" msgstr "Выйти с этого сайта" -#: ../../include/nav.php:156 ../../boot.php:1605 +#: ../../include/nav.php:156 ../../boot.php:1604 #: ../../Zotlabs/Module/Register.php:289 msgid "Register" msgstr "Регистрация" @@ -3818,7 +3814,7 @@ msgstr "Установка и конфигурация сайта" #: ../../include/nav.php:293 ../../Zotlabs/Module/Defperms.php:256 #: ../../Zotlabs/Module/New_channel.php:157 #: ../../Zotlabs/Module/New_channel.php:164 -#: ../../Zotlabs/Module/Connedit.php:853 +#: ../../Zotlabs/Module/Connedit.php:858 #: ../../Zotlabs/Widget/Notifications.php:162 msgid "Loading" msgstr "Загрузка" @@ -3914,7 +3910,7 @@ msgid "View Webpages" msgstr "Просмотр веб-страниц" #: ../../include/nav.php:506 ../../Zotlabs/Module/Wiki.php:206 -#: ../../Zotlabs/Widget/Wiki_list.php:19 +#: ../../Zotlabs/Widget/Wiki_list.php:15 msgid "Wikis" msgstr "" @@ -3993,51 +3989,51 @@ msgstr "ошибка при записи базы данных." msgid "Empty path" msgstr "Пустое имя пути" -#: ../../include/photo/photo_driver.php:741 +#: ../../include/photo/photo_driver.php:774 #: ../../Zotlabs/Module/Profile_photo.php:120 #: ../../Zotlabs/Module/Profile_photo.php:248 msgid "Profile Photos" msgstr "Фотографии профиля" -#: ../../boot.php:1604 +#: ../../boot.php:1603 msgid "Create an account to access services and applications" msgstr "Создайте аккаунт для доступа к службам и приложениям" -#: ../../boot.php:1628 +#: ../../boot.php:1627 msgid "Login/Email" msgstr "Пользователь / email" -#: ../../boot.php:1629 +#: ../../boot.php:1628 msgid "Password" msgstr "Пароль" -#: ../../boot.php:1630 +#: ../../boot.php:1629 msgid "Remember me" msgstr "Запомнить меня" -#: ../../boot.php:1633 +#: ../../boot.php:1632 msgid "Forgot your password?" msgstr "Забыли пароль или логин?" -#: ../../boot.php:1634 ../../Zotlabs/Module/Lostpass.php:91 +#: ../../boot.php:1633 ../../Zotlabs/Module/Lostpass.php:91 msgid "Password Reset" msgstr "Сбросить пароль" -#: ../../boot.php:2431 +#: ../../boot.php:2430 #, php-format msgid "[$Projectname] Website SSL error for %s" msgstr "[$Projectname] Ошибка SSL/TLS веб-сайта для %s" -#: ../../boot.php:2436 +#: ../../boot.php:2435 msgid "Website SSL certificate is not valid. Please correct." msgstr "SSL/TLS сертификат веб-сайт недействителен. Исправьте это." -#: ../../boot.php:2552 +#: ../../boot.php:2551 #, php-format msgid "[$Projectname] Cron tasks not running on %s" msgstr "[$Projectname] Задания Cron не запущены на %s" -#: ../../boot.php:2557 +#: ../../boot.php:2556 msgid "Cron/Scheduled tasks not running." msgstr "Задания Cron / планировщика не запущены." @@ -4072,7 +4068,7 @@ msgstr "Общие" #: ../../Zotlabs/Storage/Browser.php:276 ../../Zotlabs/Storage/Browser.php:390 #: ../../Zotlabs/Module/Cdav.php:1230 ../../Zotlabs/Module/Profiles.php:798 #: ../../Zotlabs/Module/New_channel.php:189 ../../Zotlabs/Module/Menu.php:181 -#: ../../Zotlabs/Module/Webpages.php:254 ../../Zotlabs/Module/Connedit.php:922 +#: ../../Zotlabs/Module/Webpages.php:254 ../../Zotlabs/Module/Connedit.php:927 #: ../../Zotlabs/Module/Blocks.php:159 ../../Zotlabs/Module/Articles.php:108 #: ../../Zotlabs/Module/Cards.php:109 ../../Zotlabs/Module/Layouts.php:185 #: ../../Zotlabs/Widget/Cdav.php:128 ../../Zotlabs/Widget/Cdav.php:165 @@ -4092,7 +4088,7 @@ msgstr "Удалено администратором" #: ../../Zotlabs/Module/Sharedwithme.php:104 ../../Zotlabs/Module/Chat.php:259 #: ../../Zotlabs/Module/Oauth2.php:118 ../../Zotlabs/Module/Oauth2.php:146 #: ../../Zotlabs/Module/Admin/Channels.php:159 -#: ../../Zotlabs/Module/Connedit.php:907 ../../Zotlabs/Module/Group.php:144 +#: ../../Zotlabs/Module/Connedit.php:912 ../../Zotlabs/Module/Group.php:144 #: ../../Zotlabs/Module/Wiki.php:218 #: ../../Zotlabs/Widget/Wiki_page_history.php:22 #: ../../Zotlabs/Lib/NativeWikiPage.php:561 @@ -4131,7 +4127,7 @@ msgstr "Создать новую папку" msgid "Upload file" msgstr "Загрузить файл" -#: ../../Zotlabs/Storage/Browser.php:392 ../../Zotlabs/Module/Photos.php:714 +#: ../../Zotlabs/Storage/Browser.php:392 ../../Zotlabs/Module/Photos.php:727 #: ../../Zotlabs/Module/Cover_photo.php:395 #: ../../Zotlabs/Module/Embedphotos.php:158 #: ../../Zotlabs/Module/Profile_photo.php:459 @@ -4280,7 +4276,7 @@ msgid "" "to correctly use this feature." msgstr "Предупреждение. Изменение некоторых настроек может привести к неработоспособности вашего канала. Пожалуйста, покиньте эту страницу, если вы точно не значете, как правильно использовать эту функцию." -#: ../../Zotlabs/Module/Defperms.php:67 ../../Zotlabs/Module/Connedit.php:80 +#: ../../Zotlabs/Module/Defperms.php:67 ../../Zotlabs/Module/Connedit.php:81 msgid "Could not access contact record." msgstr "Не удалось получить доступ к записи контакта." @@ -4308,7 +4304,7 @@ msgstr "Приложение \"Разрешения по умолчанию\"" #: ../../Zotlabs/Module/Uexport.php:61 ../../Zotlabs/Module/Bookmarks.php:78 #: ../../Zotlabs/Module/Probe.php:18 ../../Zotlabs/Module/Tokens.php:99 #: ../../Zotlabs/Module/Notes.php:55 ../../Zotlabs/Module/Webpages.php:48 -#: ../../Zotlabs/Module/Group.php:101 ../../Zotlabs/Module/Mood.php:132 +#: ../../Zotlabs/Module/Group.php:101 ../../Zotlabs/Module/Mood.php:134 #: ../../Zotlabs/Module/Lang.php:17 ../../Zotlabs/Module/Randprof.php:29 #: ../../Zotlabs/Module/Invite.php:110 ../../Zotlabs/Module/Articles.php:43 #: ../../Zotlabs/Module/Connect.php:104 ../../Zotlabs/Module/Pdledit.php:42 @@ -4321,11 +4317,11 @@ msgstr "не установлено" msgid "Set custom default permissions for new connections" msgstr "Настройка пользовательских разрешений по умолчанию для новых подключений " -#: ../../Zotlabs/Module/Defperms.php:254 ../../Zotlabs/Module/Connedit.php:851 +#: ../../Zotlabs/Module/Defperms.php:254 ../../Zotlabs/Module/Connedit.php:856 msgid "Connection Default Permissions" msgstr "Разрешения по умолчанию для контакта" -#: ../../Zotlabs/Module/Defperms.php:255 ../../Zotlabs/Module/Connedit.php:852 +#: ../../Zotlabs/Module/Defperms.php:255 ../../Zotlabs/Module/Connedit.php:857 msgid "Apply these permissions automatically" msgstr "Применить эти разрешения автоматически" @@ -4335,15 +4331,15 @@ msgid "" "If enabled, connection requests will be approved without your interaction" msgstr "Если включено, запросы контактов будут одобрены без вашего участия" -#: ../../Zotlabs/Module/Defperms.php:256 ../../Zotlabs/Module/Connedit.php:853 +#: ../../Zotlabs/Module/Defperms.php:256 ../../Zotlabs/Module/Connedit.php:858 msgid "Permission role" msgstr "Роль разрешения" -#: ../../Zotlabs/Module/Defperms.php:257 ../../Zotlabs/Module/Connedit.php:854 +#: ../../Zotlabs/Module/Defperms.php:257 ../../Zotlabs/Module/Connedit.php:859 msgid "Add permission role" msgstr "Добавить роль разрешения" -#: ../../Zotlabs/Module/Defperms.php:261 ../../Zotlabs/Module/Connedit.php:867 +#: ../../Zotlabs/Module/Defperms.php:261 ../../Zotlabs/Module/Connedit.php:872 msgid "" "The permissions indicated on this page will be applied to all new " "connections." @@ -4354,17 +4350,17 @@ msgid "Automatic approval settings" msgstr "Настройки автоматического одобрения" #: ../../Zotlabs/Module/Defperms.php:264 ../../Zotlabs/Module/Permcats.php:123 -#: ../../Zotlabs/Module/Tokens.php:183 ../../Zotlabs/Module/Connedit.php:887 +#: ../../Zotlabs/Module/Tokens.php:183 ../../Zotlabs/Module/Connedit.php:892 msgid "inherited" msgstr "наследуется" #: ../../Zotlabs/Module/Defperms.php:266 ../../Zotlabs/Module/Permcats.php:121 -#: ../../Zotlabs/Module/Tokens.php:181 ../../Zotlabs/Module/Connedit.php:892 +#: ../../Zotlabs/Module/Tokens.php:181 ../../Zotlabs/Module/Connedit.php:897 msgid "My Settings" msgstr "Мои настройки" #: ../../Zotlabs/Module/Defperms.php:269 ../../Zotlabs/Module/Permcats.php:126 -#: ../../Zotlabs/Module/Tokens.php:186 ../../Zotlabs/Module/Connedit.php:894 +#: ../../Zotlabs/Module/Tokens.php:186 ../../Zotlabs/Module/Connedit.php:899 msgid "Individual Permissions" msgstr "Индивидуальные разрешения" @@ -4405,7 +4401,7 @@ msgid "Permission category name" msgstr "Наименование категории разрешений" #: ../../Zotlabs/Module/Permcats.php:127 ../../Zotlabs/Module/Tokens.php:187 -#: ../../Zotlabs/Module/Connedit.php:895 +#: ../../Zotlabs/Module/Connedit.php:900 msgid "" "Some permissions may be inherited from your channel's <a href=\"settings" "\"><strong>privacy settings</strong></a>, which have higher priority than " @@ -4425,69 +4421,69 @@ msgstr "Запрос Xchan начинается с (или webbie):" msgid "Not found." msgstr "Не найдено." -#: ../../Zotlabs/Module/Dreport.php:45 +#: ../../Zotlabs/Module/Dreport.php:56 msgid "Invalid message" msgstr "Неверное сообщение" -#: ../../Zotlabs/Module/Dreport.php:78 +#: ../../Zotlabs/Module/Dreport.php:89 msgid "no results" msgstr "Ничего не найдено." -#: ../../Zotlabs/Module/Dreport.php:93 +#: ../../Zotlabs/Module/Dreport.php:103 msgid "channel sync processed" msgstr "синхронизация канала завершена" -#: ../../Zotlabs/Module/Dreport.php:97 +#: ../../Zotlabs/Module/Dreport.php:107 msgid "queued" msgstr "в очереди" -#: ../../Zotlabs/Module/Dreport.php:101 +#: ../../Zotlabs/Module/Dreport.php:111 msgid "posted" msgstr "опубликовано" -#: ../../Zotlabs/Module/Dreport.php:105 +#: ../../Zotlabs/Module/Dreport.php:115 msgid "accepted for delivery" msgstr "принято к доставке" -#: ../../Zotlabs/Module/Dreport.php:109 +#: ../../Zotlabs/Module/Dreport.php:119 msgid "updated" msgstr "обновлено" -#: ../../Zotlabs/Module/Dreport.php:112 +#: ../../Zotlabs/Module/Dreport.php:122 msgid "update ignored" msgstr "обновление игнорируется" -#: ../../Zotlabs/Module/Dreport.php:115 +#: ../../Zotlabs/Module/Dreport.php:125 msgid "permission denied" msgstr "доступ запрещен" -#: ../../Zotlabs/Module/Dreport.php:119 +#: ../../Zotlabs/Module/Dreport.php:129 msgid "recipient not found" msgstr "получатель не найден" -#: ../../Zotlabs/Module/Dreport.php:122 +#: ../../Zotlabs/Module/Dreport.php:132 msgid "mail recalled" msgstr "почта отозвана" -#: ../../Zotlabs/Module/Dreport.php:125 +#: ../../Zotlabs/Module/Dreport.php:135 msgid "duplicate mail received" msgstr "получено дублирующее сообщение" -#: ../../Zotlabs/Module/Dreport.php:128 +#: ../../Zotlabs/Module/Dreport.php:138 msgid "mail delivered" msgstr "почта доставлен" -#: ../../Zotlabs/Module/Dreport.php:148 +#: ../../Zotlabs/Module/Dreport.php:158 #, php-format msgid "Delivery report for %1$s" msgstr "Отчёт о доставке для %1$s" -#: ../../Zotlabs/Module/Dreport.php:151 ../../Zotlabs/Widget/Wiki_pages.php:41 +#: ../../Zotlabs/Module/Dreport.php:161 ../../Zotlabs/Widget/Wiki_pages.php:41 #: ../../Zotlabs/Widget/Wiki_pages.php:98 msgid "Options" msgstr "Параметры" -#: ../../Zotlabs/Module/Dreport.php:152 +#: ../../Zotlabs/Module/Dreport.php:162 msgid "Redeliver" msgstr "Доставить повторно" @@ -4495,29 +4491,29 @@ msgstr "Доставить повторно" msgid "No such group" msgstr "Нет такой группы" -#: ../../Zotlabs/Module/Network.php:148 +#: ../../Zotlabs/Module/Network.php:149 msgid "No such channel" msgstr "Нет такого канала" -#: ../../Zotlabs/Module/Network.php:163 ../../Zotlabs/Module/Channel.php:133 +#: ../../Zotlabs/Module/Network.php:164 ../../Zotlabs/Module/Channel.php:177 msgid "Search Results For:" msgstr "Результаты поиска для:" -#: ../../Zotlabs/Module/Network.php:193 ../../Zotlabs/Module/Display.php:80 -#: ../../Zotlabs/Module/Pubstream.php:94 ../../Zotlabs/Module/Channel.php:168 +#: ../../Zotlabs/Module/Network.php:194 ../../Zotlabs/Module/Display.php:80 +#: ../../Zotlabs/Module/Pubstream.php:94 ../../Zotlabs/Module/Channel.php:212 #: ../../Zotlabs/Module/Hq.php:134 msgid "Reset form" msgstr "Очистить форму" -#: ../../Zotlabs/Module/Network.php:231 +#: ../../Zotlabs/Module/Network.php:233 msgid "Privacy group is empty" msgstr "Группа безопасности пуста" -#: ../../Zotlabs/Module/Network.php:242 +#: ../../Zotlabs/Module/Network.php:243 msgid "Privacy group: " msgstr "Группа безопасности: " -#: ../../Zotlabs/Module/Network.php:291 +#: ../../Zotlabs/Module/Network.php:316 #: ../../extend/addon/hzaddons/redred/redred.php:65 msgid "Invalid channel." msgstr "Недействительный канал." @@ -4559,40 +4555,40 @@ msgstr "Общих контактов нет." msgid "View Common Connections" msgstr "Просмотр общий контактов" -#: ../../Zotlabs/Module/Acl.php:359 +#: ../../Zotlabs/Module/Acl.php:360 msgid "network" msgstr "сеть" -#: ../../Zotlabs/Module/Item.php:194 +#: ../../Zotlabs/Module/Item.php:196 msgid "Unable to locate original post." msgstr "Не удалось найти оригинальную публикацию." -#: ../../Zotlabs/Module/Item.php:479 +#: ../../Zotlabs/Module/Item.php:483 msgid "Empty post discarded." msgstr "Пустая публикация отклонена." -#: ../../Zotlabs/Module/Item.php:866 +#: ../../Zotlabs/Module/Item.php:892 msgid "Duplicate post suppressed." msgstr "Подавлена дублирующаяся публикация." -#: ../../Zotlabs/Module/Item.php:1011 +#: ../../Zotlabs/Module/Item.php:1037 msgid "System error. Post not saved." msgstr "Системная ошибка. Публикация не сохранена." -#: ../../Zotlabs/Module/Item.php:1047 +#: ../../Zotlabs/Module/Item.php:1073 msgid "Your comment is awaiting approval." msgstr "Ваш комментарий ожидает одобрения." -#: ../../Zotlabs/Module/Item.php:1164 +#: ../../Zotlabs/Module/Item.php:1190 msgid "Unable to obtain post information from database." msgstr "Невозможно получить информацию о публикации из базы данных" -#: ../../Zotlabs/Module/Item.php:1171 +#: ../../Zotlabs/Module/Item.php:1197 #, php-format msgid "You have reached your limit of %1$.0f top level posts." msgstr "Вы достигли вашего ограничения в %1$.0f публикаций высокого уровня." -#: ../../Zotlabs/Module/Item.php:1178 +#: ../../Zotlabs/Module/Item.php:1204 #, php-format msgid "You have reached your limit of %1$.0f webpages." msgstr "Вы достигли вашего ограничения в %1$.0f страниц." @@ -4602,13 +4598,13 @@ msgid "Some blurb about what to do when you're new here" msgstr "Некоторые предложения о том, что делать, если вы здесь новичок " #: ../../Zotlabs/Module/Display.php:29 ../../Zotlabs/Module/Directory.php:67 -#: ../../Zotlabs/Module/Directory.php:72 ../../Zotlabs/Module/Photos.php:545 +#: ../../Zotlabs/Module/Directory.php:72 ../../Zotlabs/Module/Photos.php:558 #: ../../Zotlabs/Module/Viewconnections.php:23 #: ../../Zotlabs/Module/Ratings.php:83 ../../Zotlabs/Module/Search.php:17 msgid "Public access denied." msgstr "Публичный доступ запрещен." -#: ../../Zotlabs/Module/Display.php:374 ../../Zotlabs/Module/Channel.php:424 +#: ../../Zotlabs/Module/Display.php:374 ../../Zotlabs/Module/Channel.php:468 msgid "" "You must enable javascript for your browser to be able to view this content." msgstr "Для просмотра этого содержимого в вашем браузере должен быть включён JavaScript" @@ -4649,11 +4645,11 @@ msgstr "событие опубликовано" msgid "shared a file with you" msgstr "с вами поделились файлом" -#: ../../Zotlabs/Module/Ping.php:659 +#: ../../Zotlabs/Module/Ping.php:665 msgid "Private forum" msgstr "Частный форум" -#: ../../Zotlabs/Module/Ping.php:659 +#: ../../Zotlabs/Module/Ping.php:665 msgid "Public forum" msgstr "Публичный форум" @@ -4858,13 +4854,13 @@ msgstr "Дата и время окончания" msgid "Description" msgstr "Описание" -#: ../../Zotlabs/Module/Cdav.php:924 ../../Zotlabs/Module/Photos.php:973 +#: ../../Zotlabs/Module/Cdav.php:924 ../../Zotlabs/Module/Photos.php:986 #: ../../Zotlabs/Module/Events.php:690 ../../Zotlabs/Module/Events.php:699 #: ../../Zotlabs/Module/Cal.php:338 ../../Zotlabs/Module/Cal.php:345 msgid "Previous" msgstr "Предыдущая" -#: ../../Zotlabs/Module/Cdav.php:925 ../../Zotlabs/Module/Photos.php:982 +#: ../../Zotlabs/Module/Cdav.php:925 ../../Zotlabs/Module/Photos.php:995 #: ../../Zotlabs/Module/Events.php:691 ../../Zotlabs/Module/Events.php:700 #: ../../Zotlabs/Module/Cal.php:339 ../../Zotlabs/Module/Cal.php:346 #: ../../Zotlabs/Module/Setup.php:263 @@ -4920,49 +4916,49 @@ msgstr "Удалить всё" msgid "Sorry! Editing of recurrent events is not yet implemented." msgstr "Простите, но редактирование повторяющихся событий пока не реализовано." -#: ../../Zotlabs/Module/Cdav.php:1216 ../../Zotlabs/Module/Connedit.php:908 +#: ../../Zotlabs/Module/Cdav.php:1216 ../../Zotlabs/Module/Connedit.php:913 msgid "Organisation" msgstr "Организация" -#: ../../Zotlabs/Module/Cdav.php:1217 ../../Zotlabs/Module/Connedit.php:909 +#: ../../Zotlabs/Module/Cdav.php:1217 ../../Zotlabs/Module/Connedit.php:914 msgid "Title" msgstr "Наименование" #: ../../Zotlabs/Module/Cdav.php:1218 ../../Zotlabs/Module/Profiles.php:786 -#: ../../Zotlabs/Module/Connedit.php:910 +#: ../../Zotlabs/Module/Connedit.php:915 msgid "Phone" msgstr "Телефон" #: ../../Zotlabs/Module/Cdav.php:1220 ../../Zotlabs/Module/Profiles.php:788 -#: ../../Zotlabs/Module/Connedit.php:912 +#: ../../Zotlabs/Module/Connedit.php:917 msgid "Instant messenger" msgstr "Мессенджер" #: ../../Zotlabs/Module/Cdav.php:1221 ../../Zotlabs/Module/Profiles.php:789 -#: ../../Zotlabs/Module/Connedit.php:913 +#: ../../Zotlabs/Module/Connedit.php:918 msgid "Website" msgstr "Веб-сайт" #: ../../Zotlabs/Module/Cdav.php:1222 ../../Zotlabs/Module/Profiles.php:502 #: ../../Zotlabs/Module/Profiles.php:790 ../../Zotlabs/Module/Locs.php:118 #: ../../Zotlabs/Module/Admin/Channels.php:160 -#: ../../Zotlabs/Module/Connedit.php:914 +#: ../../Zotlabs/Module/Connedit.php:919 msgid "Address" msgstr "Адрес" #: ../../Zotlabs/Module/Cdav.php:1223 ../../Zotlabs/Module/Profiles.php:791 -#: ../../Zotlabs/Module/Connedit.php:915 +#: ../../Zotlabs/Module/Connedit.php:920 msgid "Note" msgstr "Заметка" #: ../../Zotlabs/Module/Cdav.php:1228 ../../Zotlabs/Module/Profiles.php:796 -#: ../../Zotlabs/Module/Connedit.php:920 +#: ../../Zotlabs/Module/Connedit.php:925 #: ../../extend/addon/hzaddons/jappixmini/jappixmini.php:368 msgid "Add Contact" msgstr "Добавить контакт" #: ../../Zotlabs/Module/Cdav.php:1229 ../../Zotlabs/Module/Profiles.php:797 -#: ../../Zotlabs/Module/Connedit.php:921 +#: ../../Zotlabs/Module/Connedit.php:926 msgid "Add Field" msgstr "Добавить поле" @@ -4970,36 +4966,36 @@ msgstr "Добавить поле" #: ../../Zotlabs/Module/Oauth.php:53 ../../Zotlabs/Module/Oauth.php:137 #: ../../Zotlabs/Module/Oauth2.php:58 ../../Zotlabs/Module/Oauth2.php:144 #: ../../Zotlabs/Module/Admin/Addons.php:453 -#: ../../Zotlabs/Module/Connedit.php:923 ../../Zotlabs/Lib/Apps.php:513 +#: ../../Zotlabs/Module/Connedit.php:928 ../../Zotlabs/Lib/Apps.php:513 msgid "Update" msgstr "Обновить" -#: ../../Zotlabs/Module/Cdav.php:1234 ../../Zotlabs/Module/Connedit.php:926 +#: ../../Zotlabs/Module/Cdav.php:1234 ../../Zotlabs/Module/Connedit.php:931 msgid "P.O. Box" msgstr "абонентский ящик" -#: ../../Zotlabs/Module/Cdav.php:1235 ../../Zotlabs/Module/Connedit.php:927 +#: ../../Zotlabs/Module/Cdav.php:1235 ../../Zotlabs/Module/Connedit.php:932 msgid "Additional" msgstr "Дополнительно" -#: ../../Zotlabs/Module/Cdav.php:1236 ../../Zotlabs/Module/Connedit.php:928 +#: ../../Zotlabs/Module/Cdav.php:1236 ../../Zotlabs/Module/Connedit.php:933 msgid "Street" msgstr "Улица" -#: ../../Zotlabs/Module/Cdav.php:1237 ../../Zotlabs/Module/Connedit.php:929 +#: ../../Zotlabs/Module/Cdav.php:1237 ../../Zotlabs/Module/Connedit.php:934 msgid "Locality" msgstr "Населённый пункт" -#: ../../Zotlabs/Module/Cdav.php:1238 ../../Zotlabs/Module/Connedit.php:930 +#: ../../Zotlabs/Module/Cdav.php:1238 ../../Zotlabs/Module/Connedit.php:935 msgid "Region" msgstr "Регион" -#: ../../Zotlabs/Module/Cdav.php:1239 ../../Zotlabs/Module/Connedit.php:931 +#: ../../Zotlabs/Module/Cdav.php:1239 ../../Zotlabs/Module/Connedit.php:936 msgid "ZIP Code" msgstr "Индекс" #: ../../Zotlabs/Module/Cdav.php:1240 ../../Zotlabs/Module/Profiles.php:757 -#: ../../Zotlabs/Module/Connedit.php:932 +#: ../../Zotlabs/Module/Connedit.php:937 msgid "Country" msgstr "Страна" @@ -5011,12 +5007,12 @@ msgstr "Календарь по умолчанию" msgid "Default Addressbook" msgstr "Адресная книга по умолчанию" -#: ../../Zotlabs/Module/Profile.php:45 ../../Zotlabs/Module/Channel.php:54 +#: ../../Zotlabs/Module/Profile.php:45 ../../Zotlabs/Module/Channel.php:98 #: ../../Zotlabs/Module/Hcard.php:37 msgid "Posts and comments" msgstr "Публикации и комментарии" -#: ../../Zotlabs/Module/Profile.php:52 ../../Zotlabs/Module/Channel.php:61 +#: ../../Zotlabs/Module/Profile.php:52 ../../Zotlabs/Module/Channel.php:105 #: ../../Zotlabs/Module/Hcard.php:44 msgid "Only posts" msgstr "Только публикации" @@ -5026,7 +5022,7 @@ msgid "vcard" msgstr "vCard" #: ../../Zotlabs/Module/Ochannel.php:32 ../../Zotlabs/Module/Chat.php:31 -#: ../../Zotlabs/Module/Channel.php:39 +#: ../../Zotlabs/Module/Channel.php:41 #: ../../extend/addon/hzaddons/chess/chess.php:508 msgid "You must be logged in to see this page." msgstr "Вы должны авторизоваться, чтобы увидеть эту страницу." @@ -5039,12 +5035,12 @@ msgstr "Нет новых оповещений системы." msgid "System Notifications" msgstr "Системные оповещения " -#: ../../Zotlabs/Module/Impel.php:183 +#: ../../Zotlabs/Module/Impel.php:185 #, php-format msgid "%s element installed" msgstr "%s элемент установлен" -#: ../../Zotlabs/Module/Impel.php:186 +#: ../../Zotlabs/Module/Impel.php:188 #, php-format msgid "%s element installation failed" msgstr "%sустановка элемента неудачна." @@ -5179,23 +5175,15 @@ msgstr "Близкие к просрочке аккаунты" msgid "Channels" msgstr "Каналы" -#: ../../Zotlabs/Module/Admin.php:115 ../../Zotlabs/Module/Locs.php:119 -msgid "Primary" -msgstr "Основной" - -#: ../../Zotlabs/Module/Admin.php:116 -msgid "Clones" -msgstr "Клоны" - -#: ../../Zotlabs/Module/Admin.php:122 +#: ../../Zotlabs/Module/Admin.php:120 msgid "Message queues" msgstr "Очередь сообщений" -#: ../../Zotlabs/Module/Admin.php:136 +#: ../../Zotlabs/Module/Admin.php:134 msgid "Your software should be updated" msgstr "Ваше программное обеспечение должно быть обновлено" -#: ../../Zotlabs/Module/Admin.php:140 ../../Zotlabs/Module/Admin/Logs.php:82 +#: ../../Zotlabs/Module/Admin.php:138 ../../Zotlabs/Module/Admin/Logs.php:82 #: ../../Zotlabs/Module/Admin/Channels.php:145 #: ../../Zotlabs/Module/Admin/Security.php:92 #: ../../Zotlabs/Module/Admin/Addons.php:341 @@ -5207,35 +5195,35 @@ msgstr "Ваше программное обеспечение должно бы msgid "Administration" msgstr "Администрирование" -#: ../../Zotlabs/Module/Admin.php:141 +#: ../../Zotlabs/Module/Admin.php:139 msgid "Summary" msgstr "Резюме" -#: ../../Zotlabs/Module/Admin.php:144 +#: ../../Zotlabs/Module/Admin.php:142 msgid "Registered accounts" msgstr "Зарегистрированные аккаунты" -#: ../../Zotlabs/Module/Admin.php:145 +#: ../../Zotlabs/Module/Admin.php:143 msgid "Pending registrations" msgstr "Ждут утверждения" -#: ../../Zotlabs/Module/Admin.php:146 +#: ../../Zotlabs/Module/Admin.php:144 msgid "Registered channels" msgstr "Зарегистрированные каналы" -#: ../../Zotlabs/Module/Admin.php:147 +#: ../../Zotlabs/Module/Admin.php:145 msgid "Active addons" msgstr "Активные расширения" -#: ../../Zotlabs/Module/Admin.php:148 +#: ../../Zotlabs/Module/Admin.php:146 msgid "Version" msgstr "Версия системы" -#: ../../Zotlabs/Module/Admin.php:149 +#: ../../Zotlabs/Module/Admin.php:147 msgid "Repository version (master)" msgstr "Версия репозитория (master)" -#: ../../Zotlabs/Module/Admin.php:150 +#: ../../Zotlabs/Module/Admin.php:148 msgid "Repository version (dev)" msgstr "Версия репозитория (dev)" @@ -5511,173 +5499,173 @@ msgstr "Альбом не найден." msgid "Delete Album" msgstr "Удалить альбом" -#: ../../Zotlabs/Module/Photos.php:174 ../../Zotlabs/Module/Photos.php:1085 +#: ../../Zotlabs/Module/Photos.php:174 ../../Zotlabs/Module/Photos.php:1098 msgid "Delete Photo" msgstr "Удалить фотографию" -#: ../../Zotlabs/Module/Photos.php:556 +#: ../../Zotlabs/Module/Photos.php:569 msgid "No photos selected" msgstr "Никакие фотографии не выбраны" -#: ../../Zotlabs/Module/Photos.php:605 +#: ../../Zotlabs/Module/Photos.php:618 msgid "Access to this item is restricted." msgstr "Доступ к этому элементу ограничен." -#: ../../Zotlabs/Module/Photos.php:648 +#: ../../Zotlabs/Module/Photos.php:661 #, php-format msgid "%1$.2f MB of %2$.2f MB photo storage used." msgstr "Вы использовали %1$.2f мегабайт из %2$.2f для хранения фото." -#: ../../Zotlabs/Module/Photos.php:651 +#: ../../Zotlabs/Module/Photos.php:664 #, php-format msgid "%1$.2f MB photo storage used." msgstr "Вы использовали %1$.2f мегабайт для хранения фото." -#: ../../Zotlabs/Module/Photos.php:693 +#: ../../Zotlabs/Module/Photos.php:706 msgid "Upload Photos" msgstr "Загрузить фотографии" -#: ../../Zotlabs/Module/Photos.php:697 +#: ../../Zotlabs/Module/Photos.php:710 msgid "Enter an album name" msgstr "Введите название альбома" -#: ../../Zotlabs/Module/Photos.php:698 +#: ../../Zotlabs/Module/Photos.php:711 msgid "or select an existing album (doubleclick)" msgstr "или выберите существующий альбом (двойной щелчок)" -#: ../../Zotlabs/Module/Photos.php:699 +#: ../../Zotlabs/Module/Photos.php:712 msgid "Create a status post for this upload" msgstr "Сделать публикацию о статусе для этой загрузки" -#: ../../Zotlabs/Module/Photos.php:701 +#: ../../Zotlabs/Module/Photos.php:714 msgid "Description (optional)" msgstr "Описание (необязательно)" -#: ../../Zotlabs/Module/Photos.php:787 +#: ../../Zotlabs/Module/Photos.php:800 msgid "Show Newest First" msgstr "Показать новые первыми" -#: ../../Zotlabs/Module/Photos.php:789 +#: ../../Zotlabs/Module/Photos.php:802 msgid "Show Oldest First" msgstr "Показать старые первыми" -#: ../../Zotlabs/Module/Photos.php:813 ../../Zotlabs/Module/Photos.php:1352 +#: ../../Zotlabs/Module/Photos.php:826 ../../Zotlabs/Module/Photos.php:1365 #: ../../Zotlabs/Module/Embedphotos.php:140 #: ../../Zotlabs/Widget/Portfolio.php:87 ../../Zotlabs/Widget/Album.php:78 msgid "View Photo" msgstr "Посмотреть фотографию" -#: ../../Zotlabs/Module/Photos.php:844 ../../Zotlabs/Module/Embedphotos.php:156 +#: ../../Zotlabs/Module/Photos.php:857 ../../Zotlabs/Module/Embedphotos.php:156 #: ../../Zotlabs/Widget/Portfolio.php:108 ../../Zotlabs/Widget/Album.php:95 msgid "Edit Album" msgstr "Редактировать Фотоальбом" -#: ../../Zotlabs/Module/Photos.php:846 ../../Zotlabs/Module/Photos.php:1383 +#: ../../Zotlabs/Module/Photos.php:859 ../../Zotlabs/Module/Photos.php:1396 msgid "Add Photos" msgstr "Добавить фотографии" -#: ../../Zotlabs/Module/Photos.php:894 +#: ../../Zotlabs/Module/Photos.php:907 msgid "Permission denied. Access to this item may be restricted." msgstr "Доступ запрещен. Доступ к этому элементу может быть ограничен." -#: ../../Zotlabs/Module/Photos.php:896 +#: ../../Zotlabs/Module/Photos.php:909 msgid "Photo not available" msgstr "Фотография не доступна" -#: ../../Zotlabs/Module/Photos.php:954 +#: ../../Zotlabs/Module/Photos.php:967 msgid "Use as profile photo" msgstr "Использовать в качестве фотографии профиля" -#: ../../Zotlabs/Module/Photos.php:955 +#: ../../Zotlabs/Module/Photos.php:968 msgid "Use as cover photo" msgstr "Использовать в качестве фотографии обложки" -#: ../../Zotlabs/Module/Photos.php:962 +#: ../../Zotlabs/Module/Photos.php:975 msgid "Private Photo" msgstr "Личная фотография" -#: ../../Zotlabs/Module/Photos.php:977 +#: ../../Zotlabs/Module/Photos.php:990 msgid "View Full Size" msgstr "Посмотреть в полный размер" -#: ../../Zotlabs/Module/Photos.php:1022 ../../Zotlabs/Module/Tagrm.php:137 +#: ../../Zotlabs/Module/Photos.php:1035 ../../Zotlabs/Module/Tagrm.php:137 #: ../../Zotlabs/Module/Admin/Addons.php:455 #: ../../extend/addon/hzaddons/superblock/Mod_Superblock.php:91 msgid "Remove" msgstr "Удалить" -#: ../../Zotlabs/Module/Photos.php:1059 +#: ../../Zotlabs/Module/Photos.php:1072 msgid "Edit photo" msgstr "Редактировать фотографию" -#: ../../Zotlabs/Module/Photos.php:1061 +#: ../../Zotlabs/Module/Photos.php:1074 msgid "Rotate CW (right)" msgstr "Повернуть CW (направо)" -#: ../../Zotlabs/Module/Photos.php:1062 +#: ../../Zotlabs/Module/Photos.php:1075 msgid "Rotate CCW (left)" msgstr "Повернуть CCW (налево)" -#: ../../Zotlabs/Module/Photos.php:1065 +#: ../../Zotlabs/Module/Photos.php:1078 msgid "Move photo to album" msgstr "Переместить фотографию в альбом" -#: ../../Zotlabs/Module/Photos.php:1066 +#: ../../Zotlabs/Module/Photos.php:1079 msgid "Enter a new album name" msgstr "Введите новое название альбома" -#: ../../Zotlabs/Module/Photos.php:1067 +#: ../../Zotlabs/Module/Photos.php:1080 msgid "or select an existing one (doubleclick)" msgstr "или выбрать существующую (двойной щелчок)" -#: ../../Zotlabs/Module/Photos.php:1072 +#: ../../Zotlabs/Module/Photos.php:1085 msgid "Add a Tag" msgstr "Добавить тег" -#: ../../Zotlabs/Module/Photos.php:1080 +#: ../../Zotlabs/Module/Photos.php:1093 msgid "Example: @bob, @Barbara_Jensen, @jim@example.com" msgstr "Пример: @bob, @Barbara_Jensen, @jim@example.com" -#: ../../Zotlabs/Module/Photos.php:1083 +#: ../../Zotlabs/Module/Photos.php:1096 msgid "Flag as adult in album view" msgstr "Пометить как альбом \"для взрослых\"" -#: ../../Zotlabs/Module/Photos.php:1102 ../../Zotlabs/Lib/ThreadItem.php:289 +#: ../../Zotlabs/Module/Photos.php:1115 ../../Zotlabs/Lib/ThreadItem.php:289 msgid "I like this (toggle)" msgstr "мне это нравится (переключение)" -#: ../../Zotlabs/Module/Photos.php:1103 ../../Zotlabs/Lib/ThreadItem.php:290 +#: ../../Zotlabs/Module/Photos.php:1116 ../../Zotlabs/Lib/ThreadItem.php:290 msgid "I don't like this (toggle)" msgstr "мне это не нравится (переключение)" -#: ../../Zotlabs/Module/Photos.php:1121 ../../Zotlabs/Module/Photos.php:1239 -#: ../../Zotlabs/Lib/ThreadItem.php:764 +#: ../../Zotlabs/Module/Photos.php:1134 ../../Zotlabs/Module/Photos.php:1252 +#: ../../Zotlabs/Lib/ThreadItem.php:767 msgid "This is you" msgstr "Это вы" -#: ../../Zotlabs/Module/Photos.php:1158 ../../Zotlabs/Module/Photos.php:1170 +#: ../../Zotlabs/Module/Photos.php:1171 ../../Zotlabs/Module/Photos.php:1183 #: ../../Zotlabs/Lib/ThreadItem.php:214 ../../Zotlabs/Lib/ThreadItem.php:226 msgid "View all" msgstr "Просмотреть все" -#: ../../Zotlabs/Module/Photos.php:1267 +#: ../../Zotlabs/Module/Photos.php:1280 msgid "Photo Tools" msgstr "Фото-Инструменты" -#: ../../Zotlabs/Module/Photos.php:1276 +#: ../../Zotlabs/Module/Photos.php:1289 msgid "In This Photo:" msgstr "На этой фотографии:" -#: ../../Zotlabs/Module/Photos.php:1281 +#: ../../Zotlabs/Module/Photos.php:1294 msgid "Map" msgstr "Карта" -#: ../../Zotlabs/Module/Photos.php:1289 ../../Zotlabs/Lib/ThreadItem.php:429 +#: ../../Zotlabs/Module/Photos.php:1302 ../../Zotlabs/Lib/ThreadItem.php:432 msgctxt "noun" msgid "Likes" msgstr "Нравится" -#: ../../Zotlabs/Module/Photos.php:1290 ../../Zotlabs/Lib/ThreadItem.php:430 +#: ../../Zotlabs/Module/Photos.php:1303 ../../Zotlabs/Lib/ThreadItem.php:433 msgctxt "noun" msgid "Dislikes" msgstr "Не нравится" @@ -6444,6 +6432,10 @@ msgstr "Местоположений не найдено" msgid "Manage Channel Locations" msgstr "Управление местоположением канала" +#: ../../Zotlabs/Module/Locs.php:119 +msgid "Primary" +msgstr "Основной" + #: ../../Zotlabs/Module/Locs.php:120 ../../Zotlabs/Module/Menu.php:176 msgid "Drop" msgstr "Удалить" @@ -7410,7 +7402,7 @@ msgstr "Редактировать блок" msgid "No service class restrictions found." msgstr "Ограничений класса обслуживание не найдено." -#: ../../Zotlabs/Module/Channel.php:116 +#: ../../Zotlabs/Module/Channel.php:160 msgid "Insufficient permissions. Request redirected to profile page." msgstr "Недостаточно прав. Запрос перенаправлен на страницу профиля." @@ -7519,44 +7511,44 @@ msgstr "Канал недоступен." msgid "Previous action reversed." msgstr "Предыдущее действие отменено." -#: ../../Zotlabs/Module/Like.php:442 +#: ../../Zotlabs/Module/Like.php:445 #, php-format msgid "%1$s agrees with %2$s's %3$s" msgstr "%1$s согласен с %2$s %3$s" -#: ../../Zotlabs/Module/Like.php:444 +#: ../../Zotlabs/Module/Like.php:447 #, php-format msgid "%1$s doesn't agree with %2$s's %3$s" msgstr "%1$s не согласен с %2$s %3$s" -#: ../../Zotlabs/Module/Like.php:446 +#: ../../Zotlabs/Module/Like.php:449 #, php-format msgid "%1$s abstains from a decision on %2$s's %3$s" msgstr "%1$s воздерживается от решения по %2$s%3$s" -#: ../../Zotlabs/Module/Like.php:448 -#: ../../extend/addon/hzaddons/diaspora/Receiver.php:2111 +#: ../../Zotlabs/Module/Like.php:451 +#: ../../extend/addon/hzaddons/diaspora/Receiver.php:2120 #, php-format msgid "%1$s is attending %2$s's %3$s" msgstr "%1$s посещает %2$s%3$s" -#: ../../Zotlabs/Module/Like.php:450 -#: ../../extend/addon/hzaddons/diaspora/Receiver.php:2113 +#: ../../Zotlabs/Module/Like.php:453 +#: ../../extend/addon/hzaddons/diaspora/Receiver.php:2122 #, php-format msgid "%1$s is not attending %2$s's %3$s" msgstr "%1$s не посещает %2$s%3$s" -#: ../../Zotlabs/Module/Like.php:452 -#: ../../extend/addon/hzaddons/diaspora/Receiver.php:2115 +#: ../../Zotlabs/Module/Like.php:455 +#: ../../extend/addon/hzaddons/diaspora/Receiver.php:2124 #, php-format msgid "%1$s may attend %2$s's %3$s" msgstr "%1$s может посетить %2$s%3$s" -#: ../../Zotlabs/Module/Like.php:564 +#: ../../Zotlabs/Module/Like.php:566 msgid "Action completed." msgstr "Действие завершено." -#: ../../Zotlabs/Module/Like.php:565 +#: ../../Zotlabs/Module/Like.php:567 msgid "Thank you." msgstr "Спасибо." @@ -8148,14 +8140,14 @@ msgstr "хранилище доступно для записи" msgid "" "SSL certificate cannot be validated. Fix certificate or disable https access " "to this site." -msgstr "" +msgstr "SSL certificate cannot be validated. Замените его или отключите https доступ к этому сайту." #: ../../Zotlabs/Module/Setup.php:659 msgid "" "If you have https access to your website or allow connections to TCP port " "443 (the https: port), you MUST use a browser-valid certificate. You MUST " "NOT use self-signed certificates!" -msgstr "" +msgstr "Если у вас есть https-доступ к вашему сайту или разрешено подключение к TCP-порту 443 (порт https), вы ДОЛЖНЫ использовать сертификат, действительный для браузера. Вы НЕ ДОЛЖНЫ использовать самоподписанные сертификаты!" #: ../../Zotlabs/Module/Setup.php:660 msgid "" @@ -8168,18 +8160,18 @@ msgid "" "If your certificate is not recognized, members of other sites (who may " "themselves have valid certificates) will get a warning message on their own " "site complaining about security issues." -msgstr "" +msgstr "Если ваш сертификат не признан, пользователи других сайтов (которые могут сами иметь действительные сертификаты) получат предупреждающее сообщение о проблемах с безопасностью." #: ../../Zotlabs/Module/Setup.php:662 msgid "" "This can cause usability issues elsewhere (not just on your own site) so we " "must insist on this requirement." -msgstr "" +msgstr "Это может привести к проблемам удобства использования из других мест (не только на вашем собственном сайте), поэтому мы настаиваем на этом требовании." #: ../../Zotlabs/Module/Setup.php:663 msgid "" "Providers are available that issue free certificates which are browser-valid." -msgstr "" +msgstr "Доступны поставщики, которые выдают действительные для браузера бесплатные сертификаты." #: ../../Zotlabs/Module/Setup.php:665 msgid "" @@ -8187,17 +8179,17 @@ msgid "" "authority, check to see if you have failed to install an intermediate cert. " "These are not normally required by browsers, but are required for server-to-" "server communications." -msgstr "" +msgstr "Если вы уверены, что сертификат действителен и подписан доверенным органом, проверьте, установлен ли промежуточные сертификаты. Обычно они не требуются браузерами, но бывают необходимы для связи между серверами." #: ../../Zotlabs/Module/Setup.php:667 msgid "SSL certificate validation" -msgstr "" +msgstr "Проверка SSL сертификата" #: ../../Zotlabs/Module/Setup.php:673 msgid "" "Url rewrite in .htaccess is not working. Check your server configuration." "Test: " -msgstr "" +msgstr "Перезапись URL в .htaccess не работает. Проверьте настройки вашего сервера." #: ../../Zotlabs/Module/Setup.php:676 msgid "Url rewrite is working" @@ -8208,7 +8200,7 @@ msgid "" "The database configuration file \".htconfig.php\" could not be written. " "Please use the enclosed text to create a configuration file in your web " "server root." -msgstr "" +msgstr "Файл конфигурации базы данных \".htconfig.php\" не может быть записан. Используйте прилагаемый текст для создания файла конфигурации в корневом каталоге веб-сервера." #: ../../Zotlabs/Module/Setup.php:714 #: ../../extend/addon/hzaddons/rendezvous/rendezvous.php:401 @@ -8953,7 +8945,7 @@ msgstr "Импортировать только публичные потоки #: ../../Zotlabs/Module/Admin/Site.php:323 #: ../../Zotlabs/Module/Admin/Site.php:324 -#: ../../Zotlabs/Module/Connedit.php:876 ../../Zotlabs/Module/Connedit.php:877 +#: ../../Zotlabs/Module/Connedit.php:881 ../../Zotlabs/Module/Connedit.php:882 msgid "" "words one per line or #tags or /patterns/ or lang=xx, leave blank to import " "all posts" @@ -9298,12 +9290,12 @@ msgid "No registrations." msgstr "Нет новых регистраций." #: ../../Zotlabs/Module/Admin/Accounts.php:176 -#: ../../Zotlabs/Module/Connedit.php:623 +#: ../../Zotlabs/Module/Connedit.php:628 msgid "Block" msgstr "Блокировать" #: ../../Zotlabs/Module/Admin/Accounts.php:177 -#: ../../Zotlabs/Module/Connedit.php:623 +#: ../../Zotlabs/Module/Connedit.php:628 msgid "Unblock" msgstr "Разблокировать" @@ -9467,21 +9459,21 @@ msgstr "Пароль" msgid "Expires (yyyy-mm-dd)" msgstr "Срок действия (yyyy-mm-dd)" -#: ../../Zotlabs/Module/Tokens.php:180 ../../Zotlabs/Module/Connedit.php:891 +#: ../../Zotlabs/Module/Tokens.php:180 ../../Zotlabs/Module/Connedit.php:896 msgid "Their Settings" msgstr "Их настройки" #: ../../Zotlabs/Module/Notifications.php:60 -#: ../../Zotlabs/Lib/ThreadItem.php:422 +#: ../../Zotlabs/Lib/ThreadItem.php:425 msgid "Mark all seen" msgstr "Отметить как просмотренное" -#: ../../Zotlabs/Module/Subthread.php:142 +#: ../../Zotlabs/Module/Subthread.php:143 #, php-format msgid "%1$s is following %2$s's %3$s" msgstr "%1$s отслеживает %2$s's %3$s" -#: ../../Zotlabs/Module/Subthread.php:144 +#: ../../Zotlabs/Module/Subthread.php:145 #, php-format msgid "%1$s stopped following %2$s's %3$s" msgstr "%1$s прекратил отслеживать %2$s's %3$s" @@ -9711,268 +9703,268 @@ msgstr "Контакт добавлен." msgid "Item is not editable" msgstr "Элемент нельзя редактировать" -#: ../../Zotlabs/Module/Connedit.php:110 +#: ../../Zotlabs/Module/Connedit.php:111 msgid "Could not locate selected profile." msgstr "Не удалось обнаружить выбранный профиль." -#: ../../Zotlabs/Module/Connedit.php:247 +#: ../../Zotlabs/Module/Connedit.php:248 msgid "Connection updated." msgstr "Контакты обновлены." -#: ../../Zotlabs/Module/Connedit.php:249 +#: ../../Zotlabs/Module/Connedit.php:250 msgid "Failed to update connection record." msgstr "Не удалось обновить запись контакта." -#: ../../Zotlabs/Module/Connedit.php:303 +#: ../../Zotlabs/Module/Connedit.php:304 msgid "is now connected to" msgstr "теперь подключён к" -#: ../../Zotlabs/Module/Connedit.php:428 +#: ../../Zotlabs/Module/Connedit.php:429 msgid "Could not access address book record." msgstr "Не удалось получить доступ к записи адресной книги." -#: ../../Zotlabs/Module/Connedit.php:476 +#: ../../Zotlabs/Module/Connedit.php:477 ../../Zotlabs/Module/Connedit.php:481 msgid "Refresh failed - channel is currently unavailable." msgstr "Обновление невозможно - в настоящее время канал недоступен." -#: ../../Zotlabs/Module/Connedit.php:491 ../../Zotlabs/Module/Connedit.php:500 -#: ../../Zotlabs/Module/Connedit.php:509 ../../Zotlabs/Module/Connedit.php:518 -#: ../../Zotlabs/Module/Connedit.php:531 +#: ../../Zotlabs/Module/Connedit.php:496 ../../Zotlabs/Module/Connedit.php:505 +#: ../../Zotlabs/Module/Connedit.php:514 ../../Zotlabs/Module/Connedit.php:523 +#: ../../Zotlabs/Module/Connedit.php:536 msgid "Unable to set address book parameters." msgstr "Не удалось получить доступ к параметрам адресной книги." -#: ../../Zotlabs/Module/Connedit.php:555 +#: ../../Zotlabs/Module/Connedit.php:560 msgid "Connection has been removed." msgstr "Контакт был удалён." -#: ../../Zotlabs/Module/Connedit.php:598 +#: ../../Zotlabs/Module/Connedit.php:603 #, php-format msgid "View %s's profile" msgstr "Просмотр %s профиля" -#: ../../Zotlabs/Module/Connedit.php:602 +#: ../../Zotlabs/Module/Connedit.php:607 msgid "Refresh Permissions" msgstr "Обновить разрешения" -#: ../../Zotlabs/Module/Connedit.php:605 +#: ../../Zotlabs/Module/Connedit.php:610 msgid "Fetch updated permissions" msgstr "Получить обновлённые разрешения" -#: ../../Zotlabs/Module/Connedit.php:609 +#: ../../Zotlabs/Module/Connedit.php:614 msgid "Refresh Photo" msgstr "Обновить фотографию" -#: ../../Zotlabs/Module/Connedit.php:612 +#: ../../Zotlabs/Module/Connedit.php:617 msgid "Fetch updated photo" msgstr "Получить обновлённую фотографию" -#: ../../Zotlabs/Module/Connedit.php:619 +#: ../../Zotlabs/Module/Connedit.php:624 msgid "View recent posts and comments" msgstr "Просмотреть последние публикации и комментарии" -#: ../../Zotlabs/Module/Connedit.php:626 +#: ../../Zotlabs/Module/Connedit.php:631 msgid "Block (or Unblock) all communications with this connection" msgstr "Блокировать (или разблокировать) связи с этим контактом" -#: ../../Zotlabs/Module/Connedit.php:627 +#: ../../Zotlabs/Module/Connedit.php:632 msgid "This connection is blocked!" msgstr "Этот контакт заблокирован!" -#: ../../Zotlabs/Module/Connedit.php:631 +#: ../../Zotlabs/Module/Connedit.php:636 msgid "Unignore" msgstr "Не игнорировать" -#: ../../Zotlabs/Module/Connedit.php:631 +#: ../../Zotlabs/Module/Connedit.php:636 #: ../../Zotlabs/Module/Connections.php:308 msgid "Ignore" msgstr "Игнорировать" -#: ../../Zotlabs/Module/Connedit.php:634 +#: ../../Zotlabs/Module/Connedit.php:639 msgid "Ignore (or Unignore) all inbound communications from this connection" msgstr "Игнорировать (или не игнорировать) все связи для этого контакта" -#: ../../Zotlabs/Module/Connedit.php:635 +#: ../../Zotlabs/Module/Connedit.php:640 msgid "This connection is ignored!" msgstr "Этот контакт игнорируется!" -#: ../../Zotlabs/Module/Connedit.php:639 +#: ../../Zotlabs/Module/Connedit.php:644 msgid "Unarchive" msgstr "Разархивировать" -#: ../../Zotlabs/Module/Connedit.php:639 +#: ../../Zotlabs/Module/Connedit.php:644 msgid "Archive" msgstr "Заархивировать" -#: ../../Zotlabs/Module/Connedit.php:642 +#: ../../Zotlabs/Module/Connedit.php:647 msgid "" "Archive (or Unarchive) this connection - mark channel dead but keep content" msgstr "Заархивировать (или разархивировать) этот контакт - пометить канал отключённым но сохранить содержимое" -#: ../../Zotlabs/Module/Connedit.php:643 +#: ../../Zotlabs/Module/Connedit.php:648 msgid "This connection is archived!" msgstr "Этот контакт заархивирован!" -#: ../../Zotlabs/Module/Connedit.php:647 +#: ../../Zotlabs/Module/Connedit.php:652 msgid "Unhide" msgstr "Показать" -#: ../../Zotlabs/Module/Connedit.php:647 +#: ../../Zotlabs/Module/Connedit.php:652 msgid "Hide" msgstr "Скрыть" -#: ../../Zotlabs/Module/Connedit.php:650 +#: ../../Zotlabs/Module/Connedit.php:655 msgid "Hide or Unhide this connection from your other connections" msgstr "Скрыть или показать этот контакт от / для остальных" -#: ../../Zotlabs/Module/Connedit.php:651 +#: ../../Zotlabs/Module/Connedit.php:656 msgid "This connection is hidden!" msgstr "Этот контакт скрыт!" -#: ../../Zotlabs/Module/Connedit.php:658 +#: ../../Zotlabs/Module/Connedit.php:663 msgid "Delete this connection" msgstr "Удалить этот контакт" -#: ../../Zotlabs/Module/Connedit.php:666 +#: ../../Zotlabs/Module/Connedit.php:671 msgid "Fetch Vcard" msgstr "Получить vCard" -#: ../../Zotlabs/Module/Connedit.php:669 +#: ../../Zotlabs/Module/Connedit.php:674 msgid "Fetch electronic calling card for this connection" msgstr "Получить электронную телефонную карточку для этого контакта" -#: ../../Zotlabs/Module/Connedit.php:680 +#: ../../Zotlabs/Module/Connedit.php:685 msgid "Open Individual Permissions section by default" msgstr "Открывать раздел \"Индивидуальные разрешения\" по умолчанию" -#: ../../Zotlabs/Module/Connedit.php:703 +#: ../../Zotlabs/Module/Connedit.php:708 msgid "Affinity" msgstr "Сходство" -#: ../../Zotlabs/Module/Connedit.php:706 +#: ../../Zotlabs/Module/Connedit.php:711 msgid "Open Set Affinity section by default" msgstr "Открыть секцию установления сходства по умолчанию" -#: ../../Zotlabs/Module/Connedit.php:710 ../../Zotlabs/Widget/Affinity.php:22 +#: ../../Zotlabs/Module/Connedit.php:715 ../../Zotlabs/Widget/Affinity.php:22 msgid "Me" msgstr "Я" -#: ../../Zotlabs/Module/Connedit.php:711 ../../Zotlabs/Widget/Affinity.php:23 +#: ../../Zotlabs/Module/Connedit.php:716 ../../Zotlabs/Widget/Affinity.php:23 msgid "Family" msgstr "Семья" -#: ../../Zotlabs/Module/Connedit.php:713 ../../Zotlabs/Widget/Affinity.php:25 +#: ../../Zotlabs/Module/Connedit.php:718 ../../Zotlabs/Widget/Affinity.php:25 msgid "Acquaintances" msgstr "Знакомые" -#: ../../Zotlabs/Module/Connedit.php:714 +#: ../../Zotlabs/Module/Connedit.php:719 #: ../../Zotlabs/Module/Connections.php:97 #: ../../Zotlabs/Module/Connections.php:111 #: ../../Zotlabs/Widget/Affinity.php:26 msgid "All" msgstr "Все" -#: ../../Zotlabs/Module/Connedit.php:740 +#: ../../Zotlabs/Module/Connedit.php:745 msgid "Filter" msgstr "Фильтр" -#: ../../Zotlabs/Module/Connedit.php:743 +#: ../../Zotlabs/Module/Connedit.php:748 msgid "Open Custom Filter section by default" msgstr "Открывать секцию \"Настраиваемый фильтр\" по умолчанию" -#: ../../Zotlabs/Module/Connedit.php:780 +#: ../../Zotlabs/Module/Connedit.php:785 msgid "Approve this connection" msgstr "Утвердить этот контакт" -#: ../../Zotlabs/Module/Connedit.php:780 +#: ../../Zotlabs/Module/Connedit.php:785 msgid "Accept connection to allow communication" msgstr "Принять контакт чтобы разрешить связь" -#: ../../Zotlabs/Module/Connedit.php:785 +#: ../../Zotlabs/Module/Connedit.php:790 msgid "Set Affinity" msgstr "Установить сходство" -#: ../../Zotlabs/Module/Connedit.php:788 +#: ../../Zotlabs/Module/Connedit.php:793 msgid "Set Profile" msgstr "Установить профиль" -#: ../../Zotlabs/Module/Connedit.php:791 +#: ../../Zotlabs/Module/Connedit.php:796 msgid "Set Affinity & Profile" msgstr "Установить сходство и профиль" -#: ../../Zotlabs/Module/Connedit.php:839 +#: ../../Zotlabs/Module/Connedit.php:844 msgid "This connection is unreachable from this location." msgstr "Этот контакт недоступен для данного местоположения" -#: ../../Zotlabs/Module/Connedit.php:840 +#: ../../Zotlabs/Module/Connedit.php:845 msgid "This connection may be unreachable from other channel locations." msgstr "Этот контакт может быть недоступен из других мест размещения канала" -#: ../../Zotlabs/Module/Connedit.php:842 +#: ../../Zotlabs/Module/Connedit.php:847 msgid "Location independence is not supported by their network." msgstr "Независимое местоположение не поддерживается их сетью." -#: ../../Zotlabs/Module/Connedit.php:848 +#: ../../Zotlabs/Module/Connedit.php:853 msgid "" "This connection is unreachable from this location. Location independence is " "not supported by their network." msgstr "Этот контакт недоступен из данного местоположения. Независимое местоположение не поддерживается их сетью." -#: ../../Zotlabs/Module/Connedit.php:852 +#: ../../Zotlabs/Module/Connedit.php:857 msgid "Connection requests will be approved without your interaction" msgstr "Запросы контактов будут одобрены без вашего участия" -#: ../../Zotlabs/Module/Connedit.php:861 +#: ../../Zotlabs/Module/Connedit.php:866 msgid "This connection's primary address is" msgstr "Главный адрес это контакта" -#: ../../Zotlabs/Module/Connedit.php:862 +#: ../../Zotlabs/Module/Connedit.php:867 msgid "Available locations:" msgstr "Доступные расположения:" -#: ../../Zotlabs/Module/Connedit.php:868 +#: ../../Zotlabs/Module/Connedit.php:873 msgid "Connection Tools" msgstr "Инструменты контактов" -#: ../../Zotlabs/Module/Connedit.php:870 +#: ../../Zotlabs/Module/Connedit.php:875 msgid "Slide to adjust your degree of friendship" msgstr "Прокрутить для настройки степени дружбы" -#: ../../Zotlabs/Module/Connedit.php:872 +#: ../../Zotlabs/Module/Connedit.php:877 msgid "Slide to adjust your rating" msgstr "Прокрутить для настройки оценки" -#: ../../Zotlabs/Module/Connedit.php:873 ../../Zotlabs/Module/Connedit.php:878 +#: ../../Zotlabs/Module/Connedit.php:878 ../../Zotlabs/Module/Connedit.php:883 msgid "Optionally explain your rating" msgstr "Объясните свою оценку (не обязательно)" -#: ../../Zotlabs/Module/Connedit.php:875 +#: ../../Zotlabs/Module/Connedit.php:880 msgid "Custom Filter" msgstr "Настраиваемый фильтр" -#: ../../Zotlabs/Module/Connedit.php:876 +#: ../../Zotlabs/Module/Connedit.php:881 msgid "Only import posts with this text" msgstr "Импортировать публикации только с этим текстом" -#: ../../Zotlabs/Module/Connedit.php:877 +#: ../../Zotlabs/Module/Connedit.php:882 msgid "Do not import posts with this text" msgstr "Не импортировать публикации с этим текстом" -#: ../../Zotlabs/Module/Connedit.php:879 +#: ../../Zotlabs/Module/Connedit.php:884 msgid "This information is public!" msgstr "Эта информация общедоступна!" -#: ../../Zotlabs/Module/Connedit.php:884 +#: ../../Zotlabs/Module/Connedit.php:889 msgid "Connection Pending Approval" msgstr "Ожидающие подтверждения контактов" -#: ../../Zotlabs/Module/Connedit.php:889 +#: ../../Zotlabs/Module/Connedit.php:894 #, php-format msgid "" "Please choose the profile you would like to display to %s when viewing your " "profile securely." msgstr "Пожалуйста, выберите профиль который вы хотит показывать в %s при безопасном просмотре." -#: ../../Zotlabs/Module/Connedit.php:896 +#: ../../Zotlabs/Module/Connedit.php:901 msgid "" "Some permissions may be inherited from your channel's <a href=\"settings" "\"><strong>privacy settings</strong></a>, which have higher priority than " @@ -9980,11 +9972,11 @@ msgid "" "any impact unless the inherited setting changes." msgstr "Некоторые разрешения могут быть унаследованы из <a href=\"settings\"><strong>настроек приватности</strong></a> вашего канала, которые могут иметь более высокий приоритет чем индивидуальные. Вы можете изменить эти настройки, однако они не будут применены до изменения переданных по наследству настроек." -#: ../../Zotlabs/Module/Connedit.php:897 +#: ../../Zotlabs/Module/Connedit.php:902 msgid "Last update:" msgstr "Последнее обновление:" -#: ../../Zotlabs/Module/Connedit.php:905 +#: ../../Zotlabs/Module/Connedit.php:910 msgid "Details" msgstr "Сведения" @@ -10180,15 +10172,15 @@ msgstr "Поиск ваших контактов" msgid "Connections search" msgstr "Поиск контаков" -#: ../../Zotlabs/Module/Mood.php:132 +#: ../../Zotlabs/Module/Mood.php:134 msgid "Mood App" msgstr "Приложение \"Настроение\"" -#: ../../Zotlabs/Module/Mood.php:133 ../../Zotlabs/Module/Mood.php:153 +#: ../../Zotlabs/Module/Mood.php:135 ../../Zotlabs/Module/Mood.php:155 msgid "Set your current mood and tell your friends" msgstr "Установить текущее настроение и рассказать друзьям" -#: ../../Zotlabs/Module/Mood.php:152 ../../Zotlabs/Lib/Apps.php:325 +#: ../../Zotlabs/Module/Mood.php:154 ../../Zotlabs/Lib/Apps.php:325 msgid "Mood" msgstr "Настроение" @@ -10413,6 +10405,7 @@ msgid "System layout" msgstr "Системный шаблон" #: ../../Zotlabs/Module/Wiki.php:35 +#: ../../extend/addon/hzaddons/flashcards/Mod_Flashcards.php:34 #: ../../extend/addon/hzaddons/cart/cart.php:1297 msgid "Profile Unavailable." msgstr "Профиль недоступен." @@ -10429,7 +10422,7 @@ msgstr "Предоставьте Wiki для вашего канала" #: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:456 #: ../../extend/addon/hzaddons/cart/myshop.php:37 #: ../../extend/addon/hzaddons/cart/manual_payments.php:93 -#: ../../extend/addon/hzaddons/cart/cart.php:1440 +#: ../../extend/addon/hzaddons/cart/cart.php:1443 msgid "Invalid channel" msgstr "Недействительный канал" @@ -10937,7 +10930,7 @@ msgstr "Просмотр публичного потока. Предупрежд #: ../../Zotlabs/Widget/Forums.php:100 #: ../../Zotlabs/Widget/Notifications.php:119 #: ../../Zotlabs/Widget/Notifications.php:120 -#: ../../Zotlabs/Widget/Activity_filter.php:102 +#: ../../Zotlabs/Widget/Activity_filter.php:73 msgid "Forums" msgstr "Форумы" @@ -10979,7 +10972,7 @@ msgstr "Показывать только новые публикации" #: ../../Zotlabs/Widget/Notifications.php:46 #: ../../Zotlabs/Widget/Notifications.php:122 #: ../../Zotlabs/Widget/Notifications.php:153 -#: ../../Zotlabs/Widget/Activity_filter.php:164 +#: ../../Zotlabs/Widget/Activity_filter.php:165 msgid "Filter by name" msgstr "Отфильтровать по имени" @@ -11372,57 +11365,57 @@ msgstr "Установленные приложения" msgid "Remove term" msgstr "Удалить термин" -#: ../../Zotlabs/Widget/Activity_filter.php:26 -msgid "Personal Posts" -msgstr "Личные публикации" - -#: ../../Zotlabs/Widget/Activity_filter.php:30 -msgid "Show posts that mention or involve me" -msgstr "Показывать публикации где вы были упомянуты или привлечены" - -#: ../../Zotlabs/Widget/Activity_filter.php:41 -msgid "Starred Posts" -msgstr "Отмеченные публикации" - -#: ../../Zotlabs/Widget/Activity_filter.php:45 -msgid "Show posts that I have starred" -msgstr "Показывать публикации которые я отметил" - -#: ../../Zotlabs/Widget/Activity_filter.php:65 +#: ../../Zotlabs/Widget/Activity_filter.php:36 #, php-format msgid "Show posts related to the %s privacy group" msgstr "Показывать публикации относящиеся к группе безопасности %s" -#: ../../Zotlabs/Widget/Activity_filter.php:74 +#: ../../Zotlabs/Widget/Activity_filter.php:45 msgid "Show my privacy groups" msgstr "Показывать мои группы безопасности" -#: ../../Zotlabs/Widget/Activity_filter.php:95 +#: ../../Zotlabs/Widget/Activity_filter.php:66 msgid "Show posts to this forum" msgstr "Показывать публикации этого форума" -#: ../../Zotlabs/Widget/Activity_filter.php:106 +#: ../../Zotlabs/Widget/Activity_filter.php:77 msgid "Show forums" msgstr "Показывать форумы" -#: ../../Zotlabs/Widget/Activity_filter.php:130 +#: ../../Zotlabs/Widget/Activity_filter.php:91 +msgid "Starred Posts" +msgstr "Отмеченные публикации" + +#: ../../Zotlabs/Widget/Activity_filter.php:95 +msgid "Show posts that I have starred" +msgstr "Показывать публикации которые я отметил" + +#: ../../Zotlabs/Widget/Activity_filter.php:106 +msgid "Personal Posts" +msgstr "Личные публикации" + +#: ../../Zotlabs/Widget/Activity_filter.php:110 +msgid "Show posts that mention or involve me" +msgstr "Показывать публикации где вы были упомянуты или привлечены" + +#: ../../Zotlabs/Widget/Activity_filter.php:131 #, php-format msgid "Show posts that I have filed to %s" msgstr "Показывать публикации которые я добавил в %s" -#: ../../Zotlabs/Widget/Activity_filter.php:140 +#: ../../Zotlabs/Widget/Activity_filter.php:141 msgid "Show filed post categories" msgstr "Показывать категории добавленных публикаций" -#: ../../Zotlabs/Widget/Activity_filter.php:154 +#: ../../Zotlabs/Widget/Activity_filter.php:155 msgid "Panel search" msgstr "Панель поиска" -#: ../../Zotlabs/Widget/Activity_filter.php:179 +#: ../../Zotlabs/Widget/Activity_filter.php:180 msgid "Remove active filter" msgstr "Удалить активный фильтр" -#: ../../Zotlabs/Widget/Activity_filter.php:195 +#: ../../Zotlabs/Widget/Activity_filter.php:196 msgid "Stream Filters" msgstr "Фильтры потока" @@ -12164,7 +12157,7 @@ msgstr "поделиться" msgid "Delivery Report" msgstr "Отчёт о доставке" -#: ../../Zotlabs/Lib/ThreadItem.php:321 +#: ../../Zotlabs/Lib/ThreadItem.php:323 #, php-format msgid "%d comment" msgid_plural "%d comments" @@ -12172,73 +12165,73 @@ msgstr[0] "%d комментарий" msgstr[1] "%d комментария" msgstr[2] "%d комментариев" -#: ../../Zotlabs/Lib/ThreadItem.php:355 ../../Zotlabs/Lib/ThreadItem.php:356 +#: ../../Zotlabs/Lib/ThreadItem.php:357 ../../Zotlabs/Lib/ThreadItem.php:358 #, php-format msgid "View %s's profile - %s" msgstr "Просмотр %s профиля - %s" -#: ../../Zotlabs/Lib/ThreadItem.php:359 +#: ../../Zotlabs/Lib/ThreadItem.php:361 msgid "to" msgstr "к" -#: ../../Zotlabs/Lib/ThreadItem.php:360 +#: ../../Zotlabs/Lib/ThreadItem.php:362 msgid "via" msgstr "через" -#: ../../Zotlabs/Lib/ThreadItem.php:361 +#: ../../Zotlabs/Lib/ThreadItem.php:363 msgid "Wall-to-Wall" msgstr "Стена-к-Стене" -#: ../../Zotlabs/Lib/ThreadItem.php:362 +#: ../../Zotlabs/Lib/ThreadItem.php:364 msgid "via Wall-To-Wall:" msgstr "через Стена-к-Стене:" -#: ../../Zotlabs/Lib/ThreadItem.php:387 +#: ../../Zotlabs/Lib/ThreadItem.php:390 msgid "Attend" msgstr "Посетить" -#: ../../Zotlabs/Lib/ThreadItem.php:388 +#: ../../Zotlabs/Lib/ThreadItem.php:391 msgid "Attendance Options" msgstr "Параметры посещаемости" -#: ../../Zotlabs/Lib/ThreadItem.php:389 +#: ../../Zotlabs/Lib/ThreadItem.php:392 msgid "Vote" msgstr "Голосовать" -#: ../../Zotlabs/Lib/ThreadItem.php:390 +#: ../../Zotlabs/Lib/ThreadItem.php:393 msgid "Voting Options" msgstr "Параметры голосования" -#: ../../Zotlabs/Lib/ThreadItem.php:411 +#: ../../Zotlabs/Lib/ThreadItem.php:414 #: ../../extend/addon/hzaddons/bookmarker/bookmarker.php:38 msgid "Save Bookmarks" msgstr "Сохранить закладки" -#: ../../Zotlabs/Lib/ThreadItem.php:412 +#: ../../Zotlabs/Lib/ThreadItem.php:415 msgid "Add to Calendar" msgstr "Добавить в календарь" -#: ../../Zotlabs/Lib/ThreadItem.php:773 +#: ../../Zotlabs/Lib/ThreadItem.php:776 msgid "Image" msgstr "Изображение" -#: ../../Zotlabs/Lib/ThreadItem.php:775 +#: ../../Zotlabs/Lib/ThreadItem.php:778 msgid "Insert Link" msgstr "Вставить ссылку" -#: ../../Zotlabs/Lib/ThreadItem.php:776 +#: ../../Zotlabs/Lib/ThreadItem.php:779 msgid "Video" msgstr "Видео" -#: ../../Zotlabs/Lib/ThreadItem.php:786 +#: ../../Zotlabs/Lib/ThreadItem.php:789 msgid "Your full name (required)" msgstr "Ваше полное имя (требуется)" -#: ../../Zotlabs/Lib/ThreadItem.php:787 +#: ../../Zotlabs/Lib/ThreadItem.php:790 msgid "Your email address (required)" msgstr "Ваш адрес электронной почты (требуется)" -#: ../../Zotlabs/Lib/ThreadItem.php:788 +#: ../../Zotlabs/Lib/ThreadItem.php:791 msgid "Your website URL (optional)" msgstr "URL вашего вебсайта (необязательно)" @@ -12339,11 +12332,11 @@ msgstr "4. Эксперт - я умею программировать" msgid "5. Wizard - I probably know more than you do" msgstr "5. Волшебник - возможно я знаю больше чем ты" -#: ../../Zotlabs/Lib/NativeWiki.php:152 +#: ../../Zotlabs/Lib/NativeWiki.php:143 msgid "Wiki updated successfully" msgstr "Wiki успешно обновлена" -#: ../../Zotlabs/Lib/NativeWiki.php:206 +#: ../../Zotlabs/Lib/NativeWiki.php:197 msgid "Wiki files deleted successfully" msgstr "Wiki успешно удалена" @@ -12383,72 +12376,68 @@ msgstr "Серверы и ресурсы проекта" msgid "Project Creator and Tech Lead" msgstr "Создатель проекта и технический руководитель" -#: ../../extend/addon/hzaddons/donate/donate.php:23 -msgid "Admin, developer, directorymin, support bloke" -msgstr "Администратор, разработчик, администратор каталога, поддержка" - -#: ../../extend/addon/hzaddons/donate/donate.php:50 +#: ../../extend/addon/hzaddons/donate/donate.php:49 msgid "" "And the hundreds of other people and organisations who helped make the " "Hubzilla possible." msgstr "И сотни других людей и организаций которые помогали в создании Hubzilla." -#: ../../extend/addon/hzaddons/donate/donate.php:53 +#: ../../extend/addon/hzaddons/donate/donate.php:52 msgid "" "The Redmatrix/Hubzilla projects are provided primarily by volunteers giving " "their time and expertise - and often paying out of pocket for services they " "share with others." msgstr "Проекты Redmatrix / Hubzilla предоставляются, в основном, добровольцами, которые предоставляют свое время и опыт и, часто, оплачивают из своего кармана услуги, которыми они делятся с другими." -#: ../../extend/addon/hzaddons/donate/donate.php:54 +#: ../../extend/addon/hzaddons/donate/donate.php:53 msgid "" "There is no corporate funding and no ads, and we do not collect and sell " "your personal information. (We don't control your personal information - " "<strong>you do</strong>.)" msgstr "Здесь нет корпоративного финансирования и рекламы, мы не собираем и не продаем вашу личную информацию. (Мы не контролируем вашу личную информацию - <strong>это делаете вы</strong>.)" -#: ../../extend/addon/hzaddons/donate/donate.php:55 +#: ../../extend/addon/hzaddons/donate/donate.php:54 msgid "" "Help support our ground-breaking work in decentralisation, web identity, and " "privacy." msgstr "Помогите поддержать нашу новаторскую работу в областях децентрализации, веб-идентификации и конфиденциальности." -#: ../../extend/addon/hzaddons/donate/donate.php:57 +#: ../../extend/addon/hzaddons/donate/donate.php:56 msgid "" "Your donations keep servers and services running and also helps us to " "provide innovative new features and continued development." msgstr "В ваших пожертвованиях поддерживают серверы и службы, а также помогают нам предоставлять новые возможности и продолжать развитие." -#: ../../extend/addon/hzaddons/donate/donate.php:60 +#: ../../extend/addon/hzaddons/donate/donate.php:59 msgid "Donate" msgstr "Пожертвовать" -#: ../../extend/addon/hzaddons/donate/donate.php:62 +#: ../../extend/addon/hzaddons/donate/donate.php:61 msgid "" "Choose a project, developer, or public hub to support with a one-time " "donation" msgstr "Выберите проект, разработчика или общедоступный узел для поддержки в форме единоразового пожертвования" -#: ../../extend/addon/hzaddons/donate/donate.php:63 +#: ../../extend/addon/hzaddons/donate/donate.php:62 msgid "Donate Now" msgstr "Пожертвовать сейчас" -#: ../../extend/addon/hzaddons/donate/donate.php:64 +#: ../../extend/addon/hzaddons/donate/donate.php:63 msgid "" "<strong><em>Or</em></strong> become a project sponsor (Hubzilla Project only)" msgstr "<strong><em>или</em></strong> станьте спонсором проекта (только для Hubzilla)" -#: ../../extend/addon/hzaddons/donate/donate.php:65 +#: ../../extend/addon/hzaddons/donate/donate.php:64 msgid "" "Please indicate if you would like your first name or full name (or nothing) " "to appear in our sponsor listing" msgstr "Пожалуйста, если желаете, укажите ваше имя для отображения в списке спонсоров." -#: ../../extend/addon/hzaddons/donate/donate.php:66 +#: ../../extend/addon/hzaddons/donate/donate.php:65 msgid "Sponsor" msgstr "Спонсор" -#: ../../extend/addon/hzaddons/donate/donate.php:69 +#: ../../extend/addon/hzaddons/donate/donate.php:68 msgid "Special thanks to: " msgstr "Особые благодарности:" @@ -12535,11 +12524,11 @@ msgid "A simple gallery for your photo albums" msgstr "Простая галлерея для ваших фотоальбомов" #: ../../extend/addon/hzaddons/gallery/Mod_Gallery.php:115 -#: ../../extend/addon/hzaddons/gallery/gallery.php:47 +#: ../../extend/addon/hzaddons/gallery/gallery.php:28 msgid "Gallery" msgstr "Галерея" -#: ../../extend/addon/hzaddons/gallery/gallery.php:50 +#: ../../extend/addon/hzaddons/gallery/gallery.php:31 msgid "Photo Gallery" msgstr "Фотогалерея" @@ -12881,7 +12870,7 @@ msgid "" "return key" msgstr "Добро пожаловать в Hubzilla! Желаете получить обзор пользовательского интерфейса?</p> <p>Вы можете его приостановаить и в любое время перезагрузив страницу или перейдя на другую.</p><p>Также вы можете нажать клавишу \"Назад\"" -#: ../../extend/addon/hzaddons/superblock/superblock.php:318 +#: ../../extend/addon/hzaddons/superblock/superblock.php:337 msgid "Block Completely" msgstr "Заблокировать полностью" @@ -13599,32 +13588,28 @@ msgid "Until modified date yyyy-mm-dd" msgstr "Заканчивая датой изменений yyyy-mm-dd" #: ../../extend/addon/hzaddons/ljpost/ljpost.php:42 -msgid "Post to LiveJournal" -msgstr "Опубликовать в LiveJournal" - -#: ../../extend/addon/hzaddons/ljpost/ljpost.php:70 -msgid "Enable LiveJournal Post Plugin" -msgstr "Включить плагин публикаций LiveJournal" +msgid "Post to Livejournal" +msgstr "Опубликовать в Livejournal" -#: ../../extend/addon/hzaddons/ljpost/ljpost.php:74 -msgid "LiveJournal username" -msgstr "Имя пользователя LiveJournal" +#: ../../extend/addon/hzaddons/ljpost/ljpost.php:73 +msgid "Enable Livejournal Post Plugin" +msgstr "Включить раширение публикаций в Livejournal" -#: ../../extend/addon/hzaddons/ljpost/ljpost.php:78 -msgid "LiveJournal password" -msgstr "Пароль LiveJournal" +#: ../../extend/addon/hzaddons/ljpost/ljpost.php:77 +msgid "Livejournal username" +msgstr "Имя пользователя Livejournal" -#: ../../extend/addon/hzaddons/ljpost/ljpost.php:82 -msgid "Post to LiveJournal by default" -msgstr "Публиковать в LiveJournal по умолчанию" +#: ../../extend/addon/hzaddons/ljpost/ljpost.php:81 +msgid "Livejournal password" +msgstr "Пароль Livejournal" -#: ../../extend/addon/hzaddons/ljpost/ljpost.php:86 -msgid "LiveJournal Post Settings" -msgstr "Настройки публикаций в LiveJournal" +#: ../../extend/addon/hzaddons/ljpost/ljpost.php:85 +msgid "Post to Livejournal by default" +msgstr "Публиковать в Livejournal по умолчанию" -#: ../../extend/addon/hzaddons/ljpost/ljpost.php:101 -msgid "LiveJournal Settings saved." -msgstr "Настройки LiveJournal сохранены." +#: ../../extend/addon/hzaddons/ljpost/ljpost.php:89 +msgid "Livejournal Post Settings" +msgstr "Настройки публикации в Livejournal" #: ../../extend/addon/hzaddons/statusnet/statusnet.php:143 msgid "Post to GNU social" @@ -13825,8 +13810,8 @@ msgstr "Настройки модерирования сообщества" msgid "Can moderate reputation on my channel." msgstr "Может модерировать репутацию на моём канале" -#: ../../extend/addon/hzaddons/channelreputation/channelreputation.php:544 -#: ../../extend/addon/hzaddons/channelreputation/channelreputation.php:547 +#: ../../extend/addon/hzaddons/channelreputation/channelreputation.php:542 +#: ../../extend/addon/hzaddons/channelreputation/channelreputation.php:545 msgid "Channel Reputation" msgstr "Репутация канала" @@ -14160,7 +14145,7 @@ msgstr "Кнопка Paypal для платежей настроена непр #: ../../extend/addon/hzaddons/cart/submodules/paypalbutton.php:392 #: ../../extend/addon/hzaddons/cart/manual_payments.php:68 -#: ../../extend/addon/hzaddons/cart/cart.php:1462 +#: ../../extend/addon/hzaddons/cart/cart.php:1465 msgid "Order not found." msgstr "Заказ не найден." @@ -14173,7 +14158,7 @@ msgid "Access Denied." msgstr "Доступ запрещён." #: ../../extend/addon/hzaddons/cart/myshop.php:111 -#: ../../extend/addon/hzaddons/cart/cart.php:1330 +#: ../../extend/addon/hzaddons/cart/cart.php:1333 msgid "Order Not Found" msgstr "Заказ не найден" @@ -14217,32 +14202,32 @@ msgstr "Сбросить таблицы базы данных при деинс msgid "Shop" msgstr "Магазин" -#: ../../extend/addon/hzaddons/cart/cart.php:1391 +#: ../../extend/addon/hzaddons/cart/cart.php:1394 msgid "Cart utilities for orders and payments" msgstr "Утилиты карточек для заказов и платежей" -#: ../../extend/addon/hzaddons/cart/cart.php:1429 +#: ../../extend/addon/hzaddons/cart/cart.php:1432 msgid "You must be logged into the Grid to shop." msgstr "Вы должны быть в сети для доступа к магазину" -#: ../../extend/addon/hzaddons/cart/cart.php:1470 +#: ../../extend/addon/hzaddons/cart/cart.php:1473 msgid "Access denied." msgstr "Доступ запрещён." -#: ../../extend/addon/hzaddons/cart/cart.php:1522 -#: ../../extend/addon/hzaddons/cart/cart.php:1665 +#: ../../extend/addon/hzaddons/cart/cart.php:1525 +#: ../../extend/addon/hzaddons/cart/cart.php:1668 msgid "No Order Found" msgstr "Нет найденных заказов" -#: ../../extend/addon/hzaddons/cart/cart.php:1531 +#: ../../extend/addon/hzaddons/cart/cart.php:1534 msgid "An unknown error has occurred Please start again." msgstr "Произошла неизвестная ошибка. Пожалуйста, начните снова." -#: ../../extend/addon/hzaddons/cart/cart.php:1698 +#: ../../extend/addon/hzaddons/cart/cart.php:1701 msgid "Invalid Payment Type. Please start again." msgstr "Недействительный тип платежа. Пожалуйста, начните снова." -#: ../../extend/addon/hzaddons/cart/cart.php:1705 +#: ../../extend/addon/hzaddons/cart/cart.php:1708 msgid "Order not found" msgstr "Заказ не найден" @@ -14415,7 +14400,7 @@ msgstr "Ошибка создания новой игры." msgid "You must select a local channel /chess/channelname" msgstr "Вы должны выбрать локальный канал /chess/channelname" -#: ../../extend/addon/hzaddons/chess/chess.php:1066 +#: ../../extend/addon/hzaddons/chess/chess.php:1071 msgid "Enable notifications" msgstr "Включить оповещения" diff --git a/view/ru/hstrings.php b/view/ru/hstrings.php index 598d02718..02c88dde3 100644 --- a/view/ru/hstrings.php +++ b/view/ru/hstrings.php @@ -470,7 +470,6 @@ App::$strings["Help:"] = "Помощь:"; App::$strings["Help"] = "Помощь"; App::$strings["Not Found"] = "Не найдено"; App::$strings["Page not found."] = "Страница не найдена."; -App::$strings["Cannot locate DNS info for database server '%s'"] = "Не удается найти DNS информацию для сервера базы данных '%s'"; App::$strings["Image/photo"] = "Изображение / фотография"; App::$strings["Encrypted content"] = "Зашифрованное содержание"; App::$strings["Install %1\$s element %2\$s"] = "Установить %1\$s элемент %2\$s"; @@ -1152,8 +1151,6 @@ App::$strings["Blocked accounts"] = "Заблокированные аккаун App::$strings["Expired accounts"] = "Просроченные аккаунты"; App::$strings["Expiring accounts"] = "Близкие к просрочке аккаунты"; App::$strings["Channels"] = "Каналы"; -App::$strings["Primary"] = "Основной"; -App::$strings["Clones"] = "Клоны"; App::$strings["Message queues"] = "Очередь сообщений"; App::$strings["Your software should be updated"] = "Ваше программное обеспечение должно быть обновлено"; App::$strings["Administration"] = "Администрирование"; @@ -1439,6 +1436,7 @@ App::$strings["Please select another location to become primary before removing App::$strings["Syncing locations"] = "Синхронизировать местоположение"; App::$strings["No locations found."] = "Местоположений не найдено"; App::$strings["Manage Channel Locations"] = "Управление местоположением канала"; +App::$strings["Primary"] = "Основной"; App::$strings["Drop"] = "Удалить"; App::$strings["Sync Now"] = "Синхронизировать"; App::$strings["Please wait several minutes between consecutive operations."] = "Пожалуйста, подождите несколько минут между последовательными операциями."; @@ -1828,17 +1826,17 @@ App::$strings["Note: as a security measure, you should give the web server write App::$strings["%s is writable"] = "%s доступен для записи"; App::$strings["This software uses the store directory to save uploaded files. The web server needs to have write access to the store directory under the top level web folder"] = "Эта программа использует каталог хранения для загруженных файлов. Для веб-сервера требуется доступ на запись начиная с верхнего уровня каталога хранения."; App::$strings["store is writable"] = "хранилище доступно для записи"; -App::$strings["SSL certificate cannot be validated. Fix certificate or disable https access to this site."] = ""; -App::$strings["If you have https access to your website or allow connections to TCP port 443 (the https: port), you MUST use a browser-valid certificate. You MUST NOT use self-signed certificates!"] = ""; +App::$strings["SSL certificate cannot be validated. Fix certificate or disable https access to this site."] = "SSL certificate cannot be validated. Замените его или отключите https доступ к этому сайту."; +App::$strings["If you have https access to your website or allow connections to TCP port 443 (the https: port), you MUST use a browser-valid certificate. You MUST NOT use self-signed certificates!"] = "Если у вас есть https-доступ к вашему сайту или разрешено подключение к TCP-порту 443 (порт https), вы ДОЛЖНЫ использовать сертификат, действительный для браузера. Вы НЕ ДОЛЖНЫ использовать самоподписанные сертификаты!"; App::$strings["This restriction is incorporated because public posts from you may for example contain references to images on your own hub."] = "Эти ограничения приняты поскольку ваши общедоступные публикации могут, например, содержать ссылки на изображения на вашем собственном хабе."; -App::$strings["If your certificate is not recognized, members of other sites (who may themselves have valid certificates) will get a warning message on their own site complaining about security issues."] = ""; -App::$strings["This can cause usability issues elsewhere (not just on your own site) so we must insist on this requirement."] = ""; -App::$strings["Providers are available that issue free certificates which are browser-valid."] = ""; -App::$strings["If you are confident that the certificate is valid and signed by a trusted authority, check to see if you have failed to install an intermediate cert. These are not normally required by browsers, but are required for server-to-server communications."] = ""; -App::$strings["SSL certificate validation"] = ""; -App::$strings["Url rewrite in .htaccess is not working. Check your server configuration.Test: "] = ""; +App::$strings["If your certificate is not recognized, members of other sites (who may themselves have valid certificates) will get a warning message on their own site complaining about security issues."] = "Если ваш сертификат не признан, пользователи других сайтов (которые могут сами иметь действительные сертификаты) получат предупреждающее сообщение о проблемах с безопасностью."; +App::$strings["This can cause usability issues elsewhere (not just on your own site) so we must insist on this requirement."] = "Это может привести к проблемам удобства использования из других мест (не только на вашем собственном сайте), поэтому мы настаиваем на этом требовании."; +App::$strings["Providers are available that issue free certificates which are browser-valid."] = "Доступны поставщики, которые выдают действительные для браузера бесплатные сертификаты."; +App::$strings["If you are confident that the certificate is valid and signed by a trusted authority, check to see if you have failed to install an intermediate cert. These are not normally required by browsers, but are required for server-to-server communications."] = "Если вы уверены, что сертификат действителен и подписан доверенным органом, проверьте, установлен ли промежуточные сертификаты. Обычно они не требуются браузерами, но бывают необходимы для связи между серверами."; +App::$strings["SSL certificate validation"] = "Проверка SSL сертификата"; +App::$strings["Url rewrite in .htaccess is not working. Check your server configuration.Test: "] = "Перезапись URL в .htaccess не работает. Проверьте настройки вашего сервера."; App::$strings["Url rewrite is working"] = "Перезапись URL работает"; -App::$strings["The database configuration file \".htconfig.php\" could not be written. Please use the enclosed text to create a configuration file in your web server root."] = ""; +App::$strings["The database configuration file \".htconfig.php\" could not be written. Please use the enclosed text to create a configuration file in your web server root."] = "Файл конфигурации базы данных \".htconfig.php\" не может быть записан. Используйте прилагаемый текст для создания файла конфигурации в корневом каталоге веб-сервера."; App::$strings["Errors encountered creating database tables."] = "При создании базы данных возникли ошибки."; App::$strings["<h1>What next?</h1>"] = "<h1>Что дальше? </h1>"; App::$strings["IMPORTANT: You will need to [manually] setup a scheduled task for the poller."] = "Вам понадобится [вручную] настроить запланированную задачу для опрашивателя."; @@ -2588,14 +2586,14 @@ App::$strings["Addon Features"] = "Настройки расширений"; App::$strings["App Collections"] = "Коллекции приложений"; App::$strings["Installed apps"] = "Установленные приложения"; App::$strings["Remove term"] = "Удалить термин"; -App::$strings["Personal Posts"] = "Личные публикации"; -App::$strings["Show posts that mention or involve me"] = "Показывать публикации где вы были упомянуты или привлечены"; -App::$strings["Starred Posts"] = "Отмеченные публикации"; -App::$strings["Show posts that I have starred"] = "Показывать публикации которые я отметил"; App::$strings["Show posts related to the %s privacy group"] = "Показывать публикации относящиеся к группе безопасности %s"; App::$strings["Show my privacy groups"] = "Показывать мои группы безопасности"; App::$strings["Show posts to this forum"] = "Показывать публикации этого форума"; App::$strings["Show forums"] = "Показывать форумы"; +App::$strings["Starred Posts"] = "Отмеченные публикации"; +App::$strings["Show posts that I have starred"] = "Показывать публикации которые я отметил"; +App::$strings["Personal Posts"] = "Личные публикации"; +App::$strings["Show posts that mention or involve me"] = "Показывать публикации где вы были упомянуты или привлечены"; App::$strings["Show posts that I have filed to %s"] = "Показывать публикации которые я добавил в %s"; App::$strings["Show filed post categories"] = "Показывать категории добавленных публикаций"; App::$strings["Panel search"] = "Панель поиска"; @@ -2824,7 +2822,6 @@ App::$strings["Post to Dreamwidth by default"] = "Публиковать в Drea App::$strings["Dreamwidth Post Settings"] = "Настройки публикаций в Dreamwidth"; App::$strings["Project Servers and Resources"] = "Серверы и ресурсы проекта"; App::$strings["Project Creator and Tech Lead"] = "Создатель проекта и технический руководитель"; -App::$strings["Admin, developer, directorymin, support bloke"] = "Администратор, разработчик, администратор каталога, поддержка"; App::$strings["And the hundreds of other people and organisations who helped make the Hubzilla possible."] = "И сотни других людей и организаций которые помогали в создании Hubzilla."; App::$strings["The Redmatrix/Hubzilla projects are provided primarily by volunteers giving their time and expertise - and often paying out of pocket for services they share with others."] = "Проекты Redmatrix / Hubzilla предоставляются, в основном, добровольцами, которые предоставляют свое время и опыт и, часто, оплачивают из своего кармана услуги, которыми они делятся с другими."; App::$strings["There is no corporate funding and no ads, and we do not collect and sell your personal information. (We don't control your personal information - <strong>you do</strong>.)"] = "Здесь нет корпоративного финансирования и рекламы, мы не собираем и не продаем вашу личную информацию. (Мы не контролируем вашу личную информацию - <strong>это делаете вы</strong>.)"; @@ -3102,13 +3099,12 @@ App::$strings["This will import all your cloud files from another server."] = " App::$strings["Hubzilla Server base URL"] = "Базовый URL сервера Hubzilla"; App::$strings["Since modified date yyyy-mm-dd"] = "Начиная с даты изменений yyyy-mm-dd"; App::$strings["Until modified date yyyy-mm-dd"] = "Заканчивая датой изменений yyyy-mm-dd"; -App::$strings["Post to LiveJournal"] = "Опубликовать в LiveJournal"; -App::$strings["Enable LiveJournal Post Plugin"] = "Включить плагин публикаций LiveJournal"; -App::$strings["LiveJournal username"] = "Имя пользователя LiveJournal"; -App::$strings["LiveJournal password"] = "Пароль LiveJournal"; -App::$strings["Post to LiveJournal by default"] = "Публиковать в LiveJournal по умолчанию"; -App::$strings["LiveJournal Post Settings"] = "Настройки публикаций в LiveJournal"; -App::$strings["LiveJournal Settings saved."] = "Настройки LiveJournal сохранены."; +App::$strings["Post to Livejournal"] = "Опубликовать в Livejournal"; +App::$strings["Enable Livejournal Post Plugin"] = "Включить раширение публикаций в Livejournal"; +App::$strings["Livejournal username"] = "Имя пользователя Livejournal"; +App::$strings["Livejournal password"] = "Пароль Livejournal"; +App::$strings["Post to Livejournal by default"] = "Публиковать в Livejournal по умолчанию"; +App::$strings["Livejournal Post Settings"] = "Настройки публикации в Livejournal"; App::$strings["Post to GNU social"] = "Опубликовать в GNU Social"; App::$strings["Please contact your site administrator.<br />The provided API URL is not valid."] = "Пожалуйста свяжитесь с администратором сайта. <br />Предоставленный URL API недействителен."; App::$strings["We could not contact the GNU social API with the Path you entered."] = "Нам не удалось установить контакт с GNU Social API по введённому вами пути"; diff --git a/view/theme/redbasic/js/redbasic.js b/view/theme/redbasic/js/redbasic.js index 688e92148..8d3b795cc 100644 --- a/view/theme/redbasic/js/redbasic.js +++ b/view/theme/redbasic/js/redbasic.js @@ -121,9 +121,9 @@ function toggleAside() { $('main').addClass('region_1-on') $('<div id="overlay"></div>').appendTo('section'); $('#left_aside_wrapper').stick_in_parent({ - offset_top: $('nav').outerHeight(true) + 10, - parent: '#region_1', - spacer: '#left_aside_spacer' + offset_top: parseInt($('aside').css('padding-top')), + parent: 'main', + spacer: '.aside_spacer' }); } } diff --git a/view/tpl/notifications_widget.tpl b/view/tpl/notifications_widget.tpl index e38356597..98047f1d9 100644 --- a/view/tpl/notifications_widget.tpl +++ b/view/tpl/notifications_widget.tpl @@ -135,14 +135,14 @@ {{$no_notifications}}<span class="jumping-dots"><span class="dot-1">.</span><span class="dot-2">.</span><span class="dot-3">.</span></span> </div> <div id="nav-notifications-template" rel="template"> - <a class="list-group-item clearfix notification {6}" href="{0}" title="{2}" data-b64mid="{7}" data-notify_id="{8}" data-thread_top="{9}" data-contact_name="{2}" data-contact_addr="{3}"> + <a class="list-group-item clearfix notification {6}" href="{0}" title="{3}" data-b64mid="{7}" data-notify_id="{8}" data-thread_top="{9}" data-contact_name="{2}" data-contact_addr="{3}"> <img class="menu-img-3" data-src="{1}"> <span class="contactname">{2}</span> <span class="dropdown-sub-text">{4}<br>{5}</span> </a> </div> <div id="nav-notifications-forums-template" rel="template"> - <a class="list-group-item clearfix notification notification-forum" href="{0}" title="{4}" data-b64mid="{7}" data-notify_id="{8}" data-thread_top="{9}" data-contact_name="{2}" data-contact_addr="{3}"> + <a class="list-group-item clearfix notification notification-forum" href="{0}" title="{4} - {3}" data-b64mid="{7}" data-notify_id="{8}" data-thread_top="{9}" data-contact_name="{2}" data-contact_addr="{3}"> <span class="float-right badge badge-{{$notification.severity}}">{10}</span> <img class="menu-img-1" data-src="{1}"> <span class="">{2}</span> |