[PATCH v2] blame: css: make blame highlight div absolute and top left

Andy Green andy at warmcat.com
Wed Jun 20 02:50:26 CEST 2018



On 06/20/2018 03:59 AM, John Keeping wrote:
> On Tue, Jun 19, 2018 at 03:11:52AM +0800, Andy Green wrote:
>> On June 19, 2018 2:57:47 AM GMT+08:00, John Keeping <john at keeping.me.uk> wrote:
>>> On Mon, Jun 18, 2018 at 02:02:54PM +0800, Andy Green wrote:
>>>> Normal operation of blame view requires div.highlight to
>>>> have absolute position and set to its parent's top left
>>>> for me.
>>>>
>>>> Otherwise the grey background boxes indicating the extent of
>>>> the patch in the lines td displace the highlit sources, they
>>>> start at the bottom of the td.
>>>>
>>>> This patch makes the blame highlight div start back up the top of
>>>> its parent area and render on top of the grey boxes.
>>>>
>>>> Checked on Linux Firefox 60 and Linux Chrome 69.
>>>
>>> Which browser is this broken in?  I tried Linux Firefox 60 and
>>> Chromium 67 and it looks ok without this patch.  (I'm not opposed to
>>> the patch in principle, indeed it seems like a sensible change, but
>>> I'm curious why I can't reproduce the problem.)
>>
>> It's not caused in the browser, I checked the cgit site blame and that
>> doesn't have the problem.  I also went back to check just master
>> without anything on top, and it's still broken on my box.  I confirmed
>> I'm using the latest css, and that snipping the div with the boxes in
>> the lines td (using developer tools / inspector in ffox) is also
>> enough to have it display correctly.
>>
>> Md2html seems to issue inline css style related to "highlight" as part
>> of its processing, I think as it is, that may put the actual rendering
>> behaviour at the mercy of pygments version or whatever actually
>> generates that.  So separating the css to a different name is likely
>> needed for robustness anyway.
> 
> Sounds sensible.  It looks like we use the same get_style_defs() call in
> both syntax-hightlighing.py and md2html.  In syntax-hightlighing.py
> the class name is generated by pygments [1] but in md2html we actually
> specify the class as a parameter to the codehilite extension.
> 
> Your patch series allows these filters to run in the same page for the
> first time, so I think what we should do is rename the highlight class
> in md2html.  Does that also fix the problem?

Yes, it also resolves the naming conflict and it can display correctly.

I'll switch to this method then.

-Andy

> [1] It may be possible to override it, I haven't checked the API docs
> 
>> My box is fedora 28.
>>
>> python3-pygments-2.2.0-10.fc28.noarch
>>
>>>> "highlight" div class name is also used in md2html rendering
>>>> output.  So this patch solves it by introducing a wrapper
>>>> div and new "blame_highlight" css class.
>>>>
>>>> Signed-off-by: Andy Green <andy at warmcat.com>
>>>> ---
>>>>   cgit.css   |    2 ++
>>>>   ui-blame.c |    4 ++--
>>>>   2 files changed, 4 insertions(+), 2 deletions(-)
>>>>
>>>> diff --git a/cgit.css b/cgit.css
>>>> index da8d9b0..5a85ceb 100644
>>>> --- a/cgit.css
>>>> +++ b/cgit.css
>>>> @@ -162,6 +162,8 @@ div#cgit table.list
>>> tr.nohover-highlight:hover:nth-child(odd) {
>>>>   	background: white;
>>>>   }
>>>>   
>>>> +div#cgit div.blame_highlight { position: absolute; top: 0; left: 0;
>>> }
>>>
>>> Is the "left" needed here?  I don't see any problem with setting the
>>> position and top attributes, but setting left:0 moves the content right
>>> up against the cell boundary where before we had a slight gap.
>>
>> OK... it was not offset horizontally anyway so this is overkill.  I'll remove it.
>>
>> -Andy
>>
>>>> +
>>>>   div#cgit table.list th {
>>>>   	font-weight: bold;
>>>>   	/* color: #888;
>>>> diff --git a/ui-blame.c b/ui-blame.c
>>>> index 6e23f0b..ab44e3f 100644
>>>> --- a/ui-blame.c
>>>> +++ b/ui-blame.c
>>>> @@ -196,7 +196,7 @@ static void print_object(const struct object_id
>>> *oid, const char *path,
>>>>   	free((void *)sb.final_buf);
>>>>   
>>>>   	/* Lines */
>>>> -	html("<pre><code>");
>>>> +	html("<div class=\"blame_highlight\"> <pre><code>");
>>>
>>> No need for a space before <pre> here.
>>>
>>>>   	if (ctx.repo->source_filter) {
>>>>   		char *filter_arg = xstrdup(basename);
>>>>   		cgit_open_filter(ctx.repo->source_filter, filter_arg);
>>>> @@ -207,7 +207,7 @@ static void print_object(const struct object_id
>>> *oid, const char *path,
>>>>   		html_txt(buf);
>>>>   	}
>>>>   
>>>> -	html("</code></pre>");
>>>> +	html("</code></pre></div>");
>>>>   
>>>>   	html("</div></td>\n");
>>>>   
>> _______________________________________________
>> CGit mailing list
>> CGit at lists.zx2c4.com
>> https://lists.zx2c4.com/mailman/listinfo/cgit


More information about the CGit mailing list