diff options
author | zotlabs <mike@macgirvin.com> | 2017-11-12 16:07:04 -0800 |
---|---|---|
committer | zotlabs <mike@macgirvin.com> | 2017-11-12 16:07:04 -0800 |
commit | 59caf141d1e271ee4a6e7ab8b66f4070835dde95 (patch) | |
tree | 44056bdac329f6356fa75ed3566c88568677d89f | |
parent | 71a30cd9a5f5c749e3b76e961876afbd0afa87f9 (diff) | |
parent | 6ea7ef43e0a0a99f81986c8e1fe5955800bfa496 (diff) | |
download | volse-hubzilla-59caf141d1e271ee4a6e7ab8b66f4070835dde95.tar.gz volse-hubzilla-59caf141d1e271ee4a6e7ab8b66f4070835dde95.tar.bz2 volse-hubzilla-59caf141d1e271ee4a6e7ab8b66f4070835dde95.zip |
Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge
-rw-r--r-- | CHANGELOG | 35 | ||||
-rw-r--r-- | Zotlabs/Lib/Enotify.php | 3 | ||||
-rw-r--r-- | Zotlabs/Storage/File.php | 9 | ||||
-rw-r--r-- | Zotlabs/Widget/Wiki_pages.php | 2 | ||||
-rw-r--r-- | include/activities.php | 2 | ||||
-rw-r--r-- | include/bbcode.php | 6 | ||||
-rw-r--r-- | include/conversation.php | 3 | ||||
-rw-r--r-- | include/markdown.php | 4 | ||||
-rw-r--r-- | include/text.php | 14 | ||||
-rw-r--r-- | view/css/mod_photos.css | 26 | ||||
-rw-r--r-- | view/js/main.js | 4 | ||||
-rw-r--r-- | view/js/mod_photos.js | 210 | ||||
-rw-r--r-- | view/theme/redbasic/schema/dark.css | 6 | ||||
-rw-r--r-- | view/theme/redbasic/schema/simple_black_on_white.css | 6 | ||||
-rw-r--r-- | view/theme/redbasic/schema/simple_green_on_black.css | 6 | ||||
-rw-r--r-- | view/theme/redbasic/schema/simple_white_on_black.css | 6 | ||||
-rwxr-xr-x | view/tpl/cover_photo_widget.tpl | 5 | ||||
-rw-r--r-- | view/tpl/notifications_widget.tpl | 8 | ||||
-rwxr-xr-x | view/tpl/photos_upload.tpl | 3 |
19 files changed, 326 insertions, 32 deletions
@@ -1,4 +1,37 @@ -Hubzilla 2.8 (????-??-??) +Hubzilla 2.8.1 (2017-11-11) + - Rename channel app events to calendar and add nav_set_selected() to /cal + - Load notifications links to /display via ajax if we are already in /display + - Add location info to the navbar for remote visitors + - Bring back tabindex to submit comments + - Add spanish translations for context help + - Added mode to portfolio widget + + Bugfixes + - Fix os_syspath in DAV file put operation so that photos will scale correctly + - Fix unicode characters in urls tripping up url regexes - github issue #901 + - Fix wiki pages not updating after creating new page + - Fix notifications covered by cover photo on medium size screens - github issue #906 + - Fix unable to change permissions on wiki with space in name + - Fix only show nav app link if we have a selected app + - Fix unable to mark all messages read + - Fix imagedata not set correctly if large photo and imagick is not installed + - Fix issues with diaspora xchans + - Fix profile photo issue triggered by a previous bug + + Plugins/Addon + N-S-F-W: improve the undocumented n-s-f-w author::word feature + Diaspora: update the import_diaspora tool for the version 2.0 account export files + Diaspora: fix comments are partly containing "diaspora_handle" instead of "author" - github issue #69 + Pubcrawl: provide feature setting for downgrade_media option + Pubcrawl: fix issue where replies to replies did not find its parent + Diaspora: fix friendica likes on comments + Diaspora: fix private mail + Diaspora: fix third party deletes/retractions not propagating + Diaspora: likes not working - github issue #895 in core + Diaspora: fix comments from unknown persons not accepted if allow public comments is enabled - github issue #68 + XMPP: fix php warning + +Hubzilla 2.8 (2017-10-25) - Redirect to be moderated items to /moderate - Update notifications if notifications area remains open - Create an actual logout module instead of relying on internal variables diff --git a/Zotlabs/Lib/Enotify.php b/Zotlabs/Lib/Enotify.php index d5798e671..697b57b6a 100644 --- a/Zotlabs/Lib/Enotify.php +++ b/Zotlabs/Lib/Enotify.php @@ -802,7 +802,8 @@ class Enotify { 'url' => $item['author']['xchan_url'], 'photo' => $item['author']['xchan_photo_s'], 'when' => relative_date($item['created']), - 'class' => (intval($item['item_unseen']) ? 'notify-unseen' : 'notify-seen'), + 'class' => (intval($item['item_unseen']) ? 'notify-unseen' : 'notify-seen'), + 'b64mid' => ((in_array($item['verb'], [ACTIVITY_LIKE, ACTIVITY_DISLIKE])) ? 'b64.' . base64url_encode($item['thr_parent']) : 'b64.' . base64url_encode($item['mid'])), 'message' => strip_tags(bbcode($itemem_text)) ); diff --git a/Zotlabs/Storage/File.php b/Zotlabs/Storage/File.php index 332bf6896..947a9fde3 100644 --- a/Zotlabs/Storage/File.php +++ b/Zotlabs/Storage/File.php @@ -127,12 +127,15 @@ class File extends DAV\Node implements DAV\IFile { $is_photo = false; $album = ''; + $os_path = ''; - $r = q("SELECT flags, folder, os_storage, filename, is_photo FROM attach WHERE hash = '%s' AND uid = %d LIMIT 1", + $r = q("SELECT flags, folder, os_storage, os_path, filename, is_photo FROM attach WHERE hash = '%s' AND uid = %d LIMIT 1", dbesc($this->data['hash']), intval($c[0]['channel_id']) ); if ($r) { + $os_path = $r[0]['os_path']; + if (intval($r[0]['os_storage'])) { $d = q("select folder, content from attach where hash = '%s' and uid = %d limit 1", dbesc($this->data['hash']), @@ -150,7 +153,7 @@ class File extends DAV\Node implements DAV\IFile { } } $fname = dbunescbin($d[0]['content']); - if(strpos($fname,'store') === false) + if(strpos($fname,'store/') === false) $f = 'store/' . $this->auth->owner_nick . '/' . $fname ; else $f = $fname; @@ -196,7 +199,7 @@ class File extends DAV\Node implements DAV\IFile { if($is_photo) { require_once('include/photos.php'); - $args = array( 'resource_id' => $this->data['hash'], 'album' => $album, 'os_path' => $f, 'filename' => $r[0]['filename'], 'getimagesize' => $gis, 'directory' => $direct ); + $args = array( 'resource_id' => $this->data['hash'], 'album' => $album, 'os_syspath' => $f, 'os_path' => $os_path, 'filename' => $r[0]['filename'], 'getimagesize' => $gis, 'directory' => $direct ); $p = photo_upload($c[0],\App::get_observer(),$args); } diff --git a/Zotlabs/Widget/Wiki_pages.php b/Zotlabs/Widget/Wiki_pages.php index ac44b8d88..39d4b1717 100644 --- a/Zotlabs/Widget/Wiki_pages.php +++ b/Zotlabs/Widget/Wiki_pages.php @@ -12,7 +12,7 @@ class Wiki_pages { if(! $arr['resource_id']) { $c = channelx_by_nick(argv(1)); - $w = \Zotlabs\Lib\NativeWiki::exists_by_name($c['channel_id'],argv(2)); + $w = \Zotlabs\Lib\NativeWiki::exists_by_name($c['channel_id'],urldecode(argv(2))); $arr = array( 'resource_id' => $w['resource_id'], 'channel_id' => $c['channel_id'], diff --git a/include/activities.php b/include/activities.php index 2671e668c..9b83f7a5c 100644 --- a/include/activities.php +++ b/include/activities.php @@ -50,7 +50,7 @@ function profile_activity($changed, $value) { if($t == 1 && strlen($value)) { // if it's a url, the HTML quotes will mess it up, so link it and don't try and zidify it because we don't know what it points to. - $value = preg_replace_callback("/([^\]\='".'"'."]|^|\#\^)(https?\:\/\/[a-zA-Z0-9\:\/\-\?\&\;\.\=\@\_\~\#\%\$\!\+\,]+)/ism", 'red_zrl_callback', $value); + $value = preg_replace_callback("/([^\]\='".'"'."]|^|\#\^)(https?\:\/\/[a-zA-Z0-9\pL\:\/\-\?\&\;\.\=\@\_\~\#\%\$\!\+\,]+)/ismu", 'red_zrl_callback', $value); // take out the bookmark indicator if(substr($value,0,2) === '#^') $value = str_replace('#^','',$value); diff --git a/include/bbcode.php b/include/bbcode.php index 9a2a6eb9b..050ab2d29 100644 --- a/include/bbcode.php +++ b/include/bbcode.php @@ -838,13 +838,13 @@ function bbcode($Text, $preserve_nl = false, $tryoembed = true, $cache = false) // Perform URL Search - $urlchars = '[a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,\@\(\)]'; + $urlchars = '[a-zA-Z0-9\pL\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,\@\(\)]'; if (strpos($Text,'http') !== false) { if($tryoembed) { - $Text = preg_replace_callback("/([^\]\='".'"'."\/]|^|\#\^)(https?\:\/\/$urlchars+)/ism", 'tryoembed', $Text); + $Text = preg_replace_callback("/([^\]\='".'"'."\/]|^|\#\^)(https?\:\/\/$urlchars+)/ismu", 'tryoembed', $Text); } - $Text = preg_replace("/([^\]\='".'"'."\/]|^|\#\^)(https?\:\/\/$urlchars+)/ism", '$1<a href="$2" target="_blank" rel="nofollow noopener">$2</a>', $Text); + $Text = preg_replace("/([^\]\='".'"'."\/]|^|\#\^)(https?\:\/\/$urlchars+)/ismu", '$1<a href="$2" target="_blank" rel="nofollow noopener">$2</a>', $Text); } if (strpos($Text,'[/share]') !== false) { diff --git a/include/conversation.php b/include/conversation.php index 2ce4dacef..0b9df5acd 100644 --- a/include/conversation.php +++ b/include/conversation.php @@ -581,6 +581,9 @@ function conversation($items, $mode, $update, $page_mode = 'traditional', $prepa || $owner_channel['channel_deny_cid'] || $owner_channel['channel_deny_gid']) { $uploading = false; } + if(\Zotlabs\Access\PermissionLimits::Get($profile_owner,'view_storage') !== PERMS_PUBLIC) { + $uploading = false; + } } else { $uploading = false; diff --git a/include/markdown.php b/include/markdown.php index 865727b20..f398d279e 100644 --- a/include/markdown.php +++ b/include/markdown.php @@ -75,10 +75,10 @@ function markdown_to_bb($s, $use_zrl = false, $options = []) { // Convert everything that looks like a link to a link if($use_zrl) { $s = str_replace(['[img', '/img]'], ['[zmg', '/zmg]'], $s); - $s = preg_replace("/([^\]\=]|^)(https?\:\/\/)([a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,\@\(\)]+)/ism", '$1[zrl=$2$3]$2$3[/zrl]',$s); + $s = preg_replace("/([^\]\=]|^)(https?\:\/\/)([a-zA-Z0-9\pL\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,\@\(\)]+)/ismu", '$1[zrl=$2$3]$2$3[/zrl]',$s); } else { - $s = preg_replace("/([^\]\=]|^)(https?\:\/\/)([a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,\@\(\)]+)/ism", '$1[url=$2$3]$2$3[/url]',$s); + $s = preg_replace("/([^\]\=]|^)(https?\:\/\/)([a-zA-Z0-9\pL\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,\@\(\)]+)/ismu", '$1[url=$2$3]$2$3[/url]',$s); } // remove duplicate adjacent code tags diff --git a/include/text.php b/include/text.php index 746c35679..c74e515d2 100644 --- a/include/text.php +++ b/include/text.php @@ -819,7 +819,7 @@ function get_tags($s) { // added ; to single word tags to allow emojis and other unicode character constructs in bbcode // (this would actually be &#xnnnnn; but the ampersand will have been escaped to & by the time we see it.) - if(preg_match_all('/(?<![a-zA-Z0-9=\/\?])(@[^ \x0D\x0A,:?\[]+ [^ \x0D\x0A@,:?\[]+)/',$s,$match)) { + if(preg_match_all('/(?<![a-zA-Z0-9=\pL\/\?])(@[^ \x0D\x0A,:?\[]+ [^ \x0D\x0A@,:?\[]+)/u',$s,$match)) { foreach($match[1] as $mtch) { if(substr($mtch,-1,1) === '.') $ret[] = substr($mtch,0,-1); @@ -831,7 +831,7 @@ function get_tags($s) { // Otherwise pull out single word tags. These can be @nickname, @first_last // and #hash tags. - if(preg_match_all('/(?<![a-zA-Z0-9=\/\?\;])([@#\!][^ \x0D\x0A,;:?\[]+)/',$s,$match)) { + if(preg_match_all('/(?<![a-zA-Z0-9=\pL\/\?\;])([@#\!][^ \x0D\x0A,;:?\[]+)/u',$s,$match)) { foreach($match[1] as $mtch) { if(substr($mtch,-1,1) === '.') $mtch = substr($mtch,0,-1); @@ -1052,7 +1052,7 @@ function searchbox($s,$id='search-box',$url='/search',$save = false) { * @return string */ function linkify($s, $me = false) { - $s = preg_replace("/(https?\:\/\/[a-zA-Z0-9\:\/\-\?\&\;\.\=\_\@\~\#\'\%\$\!\+\,\@]*)/", (($me) ? ' <a href="$1" rel="me" >$1</a>' : ' <a href="$1" >$1</a>'), $s); + $s = preg_replace("/(https?\:\/\/[a-zA-Z0-9\pL\:\/\-\?\&\;\.\=\_\@\~\#\'\%\$\!\+\,\@]*)/u", (($me) ? ' <a href="$1" rel="me" >$1</a>' : ' <a href="$1" >$1</a>'), $s); $s = preg_replace("/\<(.*?)(src|href)=(.*?)\&\;(.*?)\>/ism",'<$1$2=$3&$4>',$s); return($s); @@ -3099,10 +3099,10 @@ function cleanup_bbcode($body) { $body = preg_replace_callback('/\[zrl(.*?)\[\/(zrl)\]/ism','\red_escape_codeblock',$body); - $body = preg_replace_callback("/([^\]\='".'"'."\/]|^|\#\^)(https?\:\/\/[a-zA-Z0-9\:\/\-\?\&\;\.\=\@\_\~\#\%\$\!\\ -+\,\(\)]+)/ism", '\nakedoembed', $body); - $body = preg_replace_callback("/([^\]\='".'"'."\/]|^|\#\^)(https?\:\/\/[a-zA-Z0-9\:\/\-\?\&\;\.\=\@\_\~\#\%\$\!\\ -+\,\(\)]+)/ism", '\red_zrl_callback', $body); + $body = preg_replace_callback("/([^\]\='".'"'."\/]|^|\#\^)(https?\:\/\/[a-zA-Z0-9\pL\:\/\-\?\&\;\.\=\@\_\~\#\%\$\!\\ ++\,\(\)]+)/ismu", '\nakedoembed', $body); + $body = preg_replace_callback("/([^\]\='".'"'."\/]|^|\#\^)(https?\:\/\/[a-zA-Z0-9\pL\:\/\-\?\&\;\.\=\@\_\~\#\%\$\!\\ ++\,\(\)]+)/ismu", '\red_zrl_callback', $body); $body = preg_replace_callback('/\[\$b64zrl(.*?)\[\/(zrl)\]/ism','\red_unescape_codeblock',$body); $body = preg_replace_callback('/\[\$b64url(.*?)\[\/(url)\]/ism','\red_unescape_codeblock',$body); diff --git a/view/css/mod_photos.css b/view/css/mod_photos.css index 72dd7ffe7..8a189e9e5 100644 --- a/view/css/mod_photos.css +++ b/view/css/mod_photos.css @@ -34,3 +34,29 @@ left: -9999px; top: -9999px; } + +#upload-index { + width: 100%; +} + +#upload-index td:nth-child(1){ + padding: 7px 3px 7px 10px; +} + +#upload-index td:nth-child(4){ + padding: 7px 10px 7px 3px; + white-space: nowrap; +} + +#photos-upload-form.hover { + background-color: aliceblue; + opacity: 0.5; + box-shadow: inset 0 0px 7px #5cb85c; +} + +.upload-progress-bar { + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mOM2RFTDwAE2QHxFMHIIwAAAABJRU5ErkJggg==') repeat-y; + background-size: 0px; + padding: 0px !important; + height: 3px; +} diff --git a/view/js/main.js b/view/js/main.js index ffea1b75c..e231dac60 100644 --- a/view/js/main.js +++ b/view/js/main.js @@ -959,9 +959,9 @@ function notify_popup_loader(notifyType) { $("." + notifyType + "-update").html(data.notify.length); $(data.notify).each(function() { - html = navbar_notifications_tpl.format(this.notify_link,this.photo,this.name,this.message,this.when,this.hclass); + html = navbar_notifications_tpl.format(this.notify_link,this.photo,this.name,this.message,this.when,this.hclass,this.b64mid); $("#navbar-" + notifyType + "-menu").append(html); - html = notifications_tpl.format(this.notify_link,this.photo,this.name,this.message,this.when,this.hclass); + html = notifications_tpl.format(this.notify_link,this.photo,this.name,this.message,this.when,this.hclass,this.b64mid); $("#nav-" + notifyType + "-menu").append(html); }); diff --git a/view/js/mod_photos.js b/view/js/mod_photos.js index cbc1d8fa1..267b51531 100644 --- a/view/js/mod_photos.js +++ b/view/js/mod_photos.js @@ -3,6 +3,11 @@ */ $(document).ready(function() { + // call initialization file + if (window.File && window.FileList && window.FileReader) { + UploadInit(); + } + $("#photo-edit-newtag").contact_autocomplete(baseurl + '/acl', 'a', false, function(data) { $("#photo-edit-newtag").val('@' + data.name); }); @@ -18,3 +23,208 @@ function showHideBodyTextarea() { else $('#body-textarea').slideUp(); } + +// initialize +function UploadInit() { + + var fileselect = $("#photos-upload-choose"); + var filedrag = $("#photos-upload-form"); + var submit = $("#dbtn-submit"); + + // is XHR2 available? + var xhr = new XMLHttpRequest(); + if (xhr.upload) { + + // file select + fileselect.attr("multiple", 'multiple'); + fileselect.on("change", UploadFileSelectHandler); + + // file submit + submit.on("click", fileselect, UploadFileSelectHandler); + + // file drop + filedrag.on("dragover", DragDropUploadFileHover); + filedrag.on("dragleave", DragDropUploadFileHover); + filedrag.on("drop", DragDropUploadFileSelectHandler); + } + + window.filesToUpload = 0; + window.fileUploadsCompleted = 0; +} + +// file drag hover +function DragDropUploadFileHover(e) { + e.stopPropagation(); + e.preventDefault(); + e.currentTarget.className = (e.type == "dragover" ? "hover" : ""); +} + +// file selection via drag/drop +function DragDropUploadFileSelectHandler(e) { + // cancel event and hover styling + DragDropUploadFileHover(e); + + // fetch FileList object + var files = e.target.files || e.originalEvent.dataTransfer.files; + + $('.new-upload').remove(); + + // process all File objects + for (var i = 0, f; f = files[i]; i++) { + prepareHtml(f, i); + UploadFile(f, i); + } +} + +// file selection via input +function UploadFileSelectHandler(e) { + // fetch FileList object + if(e.target.id === 'dbtn-submit') { + e.preventDefault(); + var files = e.data[0].files; + } + if(e.target.id === 'photos-upload-choose') { + $('.new-upload').remove(); + var files = e.target.files; + } + + // process all File objects + for (var i = 0, f; f = files[i]; i++) { + if(e.target.id === 'photos-upload-choose') + prepareHtml(f, i); + if(e.target.id === 'dbtn-submit') { + UploadFile(f, i); + } + } +} + +function prepareHtml(f, i) { + var num = i - 1; + $('#upload-index #new-upload-progress-bar-' + num.toString()).after( + '<tr id="new-upload-' + i + '" class="new-upload">' + + '<td width="1%"><i class="fa ' + getIconFromType(f.type) + '" title="' + f.type + '"></i></td>' + + '<td width="96%">' + f.name + '</td>' + + '<td id="upload-progress-' + i + '" width="1%"></td>' + + '<td class="d-none d-md-table-cell" width="1%">' + formatSizeUnits(f.size) + '</td>' + + '</tr>' + + '<tr id="new-upload-progress-bar-' + i + '" class="new-upload">' + + '<td id="upload-progress-bar-' + i + '" colspan="4" class="upload-progress-bar"></td>' + + '</tr>' + ); +} + +function formatSizeUnits(bytes){ + if (bytes>=1000000000) {bytes=(bytes/1000000000).toFixed(2)+' GB';} + else if (bytes>=1000000) {bytes=(bytes/1000000).toFixed(2)+' MB';} + else if (bytes>=1000) {bytes=(bytes/1000).toFixed(2)+' KB';} + else if (bytes>1) {bytes=bytes+' bytes';} + else if (bytes==1) {bytes=bytes+' byte';} + else {bytes='0 byte';} + return bytes; +} + +// this is basically a js port of include/text.php getIconFromType() function +function getIconFromType(type) { + var map = { + //Common file + 'application/octet-stream': 'fa-file-o', + //Text + 'text/plain': 'fa-file-text-o', + 'application/msword': 'fa-file-word-o', + 'application/pdf': 'fa-file-pdf-o', + 'application/vnd.oasis.opendocument.text': 'fa-file-word-o', + 'application/epub+zip': 'fa-book', + //Spreadsheet + 'application/vnd.oasis.opendocument.spreadsheet': 'fa-file-excel-o', + 'application/vnd.ms-excel': 'fa-file-excel-o', + //Image + 'image/jpeg': 'fa-picture-o', + 'image/png': 'fa-picture-o', + 'image/gif': 'fa-picture-o', + 'image/svg+xml': 'fa-picture-o', + //Archive + 'application/zip': 'fa-file-archive-o', + 'application/x-rar-compressed': 'fa-file-archive-o', + //Audio + 'audio/mpeg': 'fa-file-audio-o', + 'audio/mp3': 'fa-file-audio-o', //webkit browsers need that + 'audio/wav': 'fa-file-audio-o', + 'application/ogg': 'fa-file-audio-o', + 'audio/ogg': 'fa-file-audio-o', + 'audio/webm': 'fa-file-audio-o', + 'audio/mp4': 'fa-file-audio-o', + //Video + 'video/quicktime': 'fa-file-video-o', + 'video/webm': 'fa-file-video-o', + 'video/mp4': 'fa-file-video-o', + 'video/x-matroska': 'fa-file-video-o' + }; + + var iconFromType = 'fa-file-o'; + + if (type in map) { + iconFromType = map[type]; + } + + return iconFromType; +} + +// upload files +function UploadFile(file, idx) { + + window.filesToUpload = window.filesToUpload + 1; + + var xhr = new XMLHttpRequest(); + + xhr.withCredentials = true; // Include the SESSION cookie info for authentication + + (xhr.upload || xhr).addEventListener('progress', function (e) { + + var done = e.position || e.loaded; + var total = e.totalSize || e.total; + // Dynamically update the percentage complete displayed in the file upload list + $('#upload-progress-' + idx).html(Math.round(done / total * 100) + '%'); + $('#upload-progress-bar-' + idx).css('background-size', Math.round(done / total * 100) + '%'); + + if(done == total) { + $('#upload-progress-' + idx).html('Processing...'); + } + + }); + + + xhr.addEventListener('load', function (e) { + //we could possibly turn the filenames to real links here and add the delete and edit buttons to avoid page reload... + $('#upload-progress-' + idx).html('Ready!'); + + //console.log('xhr upload complete', e); + window.fileUploadsCompleted = window.fileUploadsCompleted + 1; + + // When all the uploads have completed, refresh the page + if (window.filesToUpload > 0 && window.fileUploadsCompleted === window.filesToUpload) { + + window.fileUploadsCompleted = window.filesToUpload = 0; + + // After uploads complete, refresh browser window to display new files + window.location.href = window.location.href; + } + }); + + + xhr.addEventListener('error', function (e) { + $('#upload-progress-' + idx).html('<span style="color: red;">ERROR</span>'); + }); + + // POST to the entire cloud path + xhr.open('post', $('#photos-upload-form').attr( 'action' ), true); + + var formfields = $("#photos-upload-form").serializeArray(); + + var data = new FormData(); + $.each(formfields, function(i, field) { + data.append(field.name, field.value); + }); + data.append('userfile', file); + + xhr.send(data); +} diff --git a/view/theme/redbasic/schema/dark.css b/view/theme/redbasic/schema/dark.css index b1aa5e07a..a921f42af 100644 --- a/view/theme/redbasic/schema/dark.css +++ b/view/theme/redbasic/schema/dark.css @@ -301,7 +301,11 @@ a, a:visited, a:link, .fakelink, .fakelink:visited, .fakelink:link { font-weight: bold; } -.group-selected, .fileas-selected, .categories-selected, .search-selected, .active { +.list-group-item { + background-color: #222; +} + +.group-selected, .fileas-selected, .categories-selected, .search-selected, a.active { color: #fff !important; text-decoration: underline !important; } diff --git a/view/theme/redbasic/schema/simple_black_on_white.css b/view/theme/redbasic/schema/simple_black_on_white.css index 915cc4e18..ab819d774 100644 --- a/view/theme/redbasic/schema/simple_black_on_white.css +++ b/view/theme/redbasic/schema/simple_black_on_white.css @@ -198,11 +198,15 @@ aside .nav > li > a:hover, aside .nav > li > a:focus { background-color: #F5F5F5; } +.list-group-item { + background-color: #F5F5F5; +} + a, a:visited, a:link, .fakelink, .fakelink:visited, .fakelink:link { font-weight: bold; } -.group-selected, .fileas-selected, .categories-selected, .search-selected, .active { +.group-selected, .fileas-selected, .categories-selected, .search-selected, a.active { color: #000 !important; text-decoration: underline !important; } diff --git a/view/theme/redbasic/schema/simple_green_on_black.css b/view/theme/redbasic/schema/simple_green_on_black.css index 7f3f99fce..c8ea87050 100644 --- a/view/theme/redbasic/schema/simple_green_on_black.css +++ b/view/theme/redbasic/schema/simple_green_on_black.css @@ -259,11 +259,15 @@ aside .nav > li > a:hover, aside .nav > li > a:focus { background-color: #143D12; } +.list-group-item { + background-color: #143D12; +} + a, a:visited, a:link, .fakelink, .fakelink:visited, .fakelink:link { font-weight: bold; } -.group-selected, .fileas-selected, .categories-selected, .search-selected, .active { +.group-selected, .fileas-selected, .categories-selected, .search-selected, a.active { color: #50f148 !important; text-decoration: underline !important; } diff --git a/view/theme/redbasic/schema/simple_white_on_black.css b/view/theme/redbasic/schema/simple_white_on_black.css index 7e7f80f2f..ea04d4d9e 100644 --- a/view/theme/redbasic/schema/simple_white_on_black.css +++ b/view/theme/redbasic/schema/simple_white_on_black.css @@ -237,11 +237,15 @@ aside .nav > li > a:hover, aside .nav > li > a:focus { background-color: #030303; } +.list-group-item { + background-color: #030303; +} + a, a:visited, a:link, .fakelink, .fakelink:visited, .fakelink:link { font-weight: bold; } -.group-selected, .fileas-selected, .categories-selected, .search-selected, .active { +.group-selected, .fileas-selected, .categories-selected, .search-selected, a.active { color: #fff !important; text-decoration: underline !important; } diff --git a/view/tpl/cover_photo_widget.tpl b/view/tpl/cover_photo_widget.tpl index 7404a740c..3aaad5ae5 100755 --- a/view/tpl/cover_photo_widget.tpl +++ b/view/tpl/cover_photo_widget.tpl @@ -8,8 +8,7 @@ aside_padding_top = parseInt($('aside').css('padding-top')); section_padding_top = parseInt($('section').css('padding-top')); - $('#cover-photo').on('click', slideUpCover); - $('#cover-photo').on('keyup', slideUpCover); + $(document).on('click mouseup keyup', slideUpCover); if($('#cover-photo').length && $(window).width() > 755) { if($(window).scrollTop() < $('#cover-photo').height()) { @@ -63,7 +62,7 @@ if(coverSlid) { return; } - $('html, body').animate({scrollTop: Math.ceil($('#cover-photo').height()) + 'px' }); + $('html, body').animate({scrollTop: Math.ceil($('#cover-photo').height()) + 'px' }, 'fast'); return; } </script> diff --git a/view/tpl/notifications_widget.tpl b/view/tpl/notifications_widget.tpl index 1e752c313..0ece84891 100644 --- a/view/tpl/notifications_widget.tpl +++ b/view/tpl/notifications_widget.tpl @@ -29,16 +29,16 @@ {{if $module == 'display'}} <script> $(document).on('click', '.notification', function(e) { - var mid = $(this)[0].pathname.substr(9); + var b64mid = $(this).data('b64mid'); var path = $(this)[0].pathname.substr(1,7); - if(path === 'display' && mid) { + if(path === 'display' && b64mid) { e.preventDefault(); e.stopPropagation(); $('.thread-wrapper').remove(); $(this).fadeOut(); - bParam_mid = mid; + bParam_mid = b64mid; mode = 'replace'; page_load = true; liveUpdate(); @@ -54,7 +54,7 @@ <div id="notifications_wrapper"> <div id="notifications" class="navbar-nav" data-children=".nav-item"> <div id="nav-notifications-template" rel="template"> - <a class="list-group-item clearfix notification {5}" href="{0}" title="{2} {3}"> + <a class="list-group-item clearfix notification {5}" href="{0}" title="{2} {3}" data-b64mid="{6}"> <img class="menu-img-3" data-src="{1}"> <span class="contactname">{2}</span> <span class="dropdown-sub-text">{3}<br>{4}</span> diff --git a/view/tpl/photos_upload.tpl b/view/tpl/photos_upload.tpl index d52bad5a2..46b1d3fd0 100755 --- a/view/tpl/photos_upload.tpl +++ b/view/tpl/photos_upload.tpl @@ -56,6 +56,9 @@ {{/if}} </form> </div> + <table id="upload-index"> + <tr id="new-upload-progress-bar--1"></tr> {{* this is needed to append the upload files in the right order *}} + </table> {{$aclselect}} <div id="photos-upload-end" class="clear"></div> </div> |