Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add comment highlight when target from url #9047

Merged
merged 18 commits into from
Nov 25, 2019
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions public/css/index.css
Original file line number Diff line number Diff line change
Expand Up @@ -591,6 +591,7 @@ i.icon.centerlock{top:1.5em}
.repository.view.issue .comment-list .comment .content>.bottom.segment .ui.image{max-height:100%;width:auto;margin:0;vertical-align:middle}
.repository.view.issue .comment-list .comment .content>.bottom.segment span.ui.image{font-size:128px;color:#000}
.repository.view.issue .comment-list .comment .content>.bottom.segment span.ui.image:hover{color:#000}
.repository.view.issue .comment-list .comment:target>.content{box-shadow:0 0 10px #8c8c8c}
.repository.view.issue .comment-list .comment .ui.form .field:first-child{clear:none}
.repository.view.issue .comment-list .comment .ui.form .tab.segment{border:0;padding:10px 0 0}
.repository.view.issue .comment-list .comment .ui.form textarea{height:200px;font-family:'SF Mono',Consolas,Menlo,'Liberation Mono',Monaco,'Lucida Console',monospace}
Expand Down
2 changes: 1 addition & 1 deletion public/js/index.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/js/index.js.map

Large diffs are not rendered by default.

22 changes: 22 additions & 0 deletions web_src/js/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -582,6 +582,25 @@ function initInstall() {
});
}

function initIssueComments() {
if ($('.repository.view.issue .comments').length === 0) return;

$(document).click((event) => {
jaqra marked this conversation as resolved.
Show resolved Hide resolved
const $target = $(event.target);

if ($target.closest('.comment').length === 0) {
if (window.location.hash.length > 0) {
const i = window.location.toString().indexOf('#');

if (i >= 0) {
Copy link
Member

@silverwind silverwind Nov 19, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Instead of nesting if so deeply, I'd suggest the pattern if (cond) return; to keep the code flat.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I removed some checks. I think they are unnecessary because if there is an element with :target selected they should be. Am i wrong?

window.history.pushState({}, '', window.location.toString().substr(0, i));
window.location.reload();
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Instead of reload could you just modify CSS class?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ha ha, I guess <a href="#...."></a> is out of fashion. 😄

Copy link
Contributor Author

@jaqra jaqra Nov 17, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@techknowlogick and it does not refresh page if not highlighted.

Still i should change this behavior?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, please get rid of the reload. If you want to scroll to the anchor, use element.scrollIntoView()

Copy link
Member

@silverwind silverwind Nov 18, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Something like this:

document.documentElement.addEventListener('click', (e) => {
  if (!window.location.hash) return;
  const target == document.querySelector(':target');
  if (!target || e.target.contains(target) || !target.classList.contains('comment')) return;
  const scrollY = document.documentElement.scrollTop;
  window.history.replaceState(null, null, ' ');
  document.documentElement.scrollTop = scrollY;
});

This preserves scroll location on hash reset and does not push useless history entries.

Edit: refined it a bit.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@guillep2k i tried it first then changed because it reset scroll position to 0. But works well if we set scrollposition again?

@jolheiser history.pushState(.. change url but does not affect anything :/

Copy link
Contributor Author

@jaqra jaqra Nov 18, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@silverwind ooh i saw late your comment. What i did lastly is acceptable for your? or i can change as you suggested

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would prefer if you can try my version. It may need a bit more refining, but doing it without jQuery would be quite nice.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@silverwind

  • replaceState does not remove :target affect
  • we must handle click only outside of 'targetted comment'

I fnished. It is working. If you suggest raw js, i can change code

}
}
}
});
}

function initRepository() {
if ($('.repository').length === 0) {
return;
Expand Down Expand Up @@ -729,6 +748,9 @@ function initRepository() {
return false;
});

// Issue Comments
initIssueComments();

// Edit issue or comment content
$('.edit-content').click(function () {
const $segment = $(this).parent().parent().parent()
Expand Down
4 changes: 4 additions & 0 deletions web_src/less/_repository.less
Original file line number Diff line number Diff line change
Expand Up @@ -841,6 +841,10 @@
}
}

&:target > .content {
box-shadow: 0 0 10px #8c8c8c;
jaqra marked this conversation as resolved.
Show resolved Hide resolved
}

.ui.form {
.field:first-child {
clear: none;
Expand Down