Hide the Iframe scrollbars but still can scroll - html

Actually, I know that this question has been a lot even just in stackoverflow, but still, the answers I found does not work for me - lots of them are asked long ago. But however, I'm trying to put an iframe inside a web page, and it's from the same origin. The problem is, every time I scroll, these annoying scrollbars came out. I've tried to make changes like adding overflow: hidden (which makes it worse - it disables scrolling!), scrolling="no" (same as overflow, disables scrolling), and more. Is there a simple way that I can remove the scrollbar on the iframe but still can scroll it? CSS are better, but if it can be done in JavaScript at someways, it's also OK. Thanks a lot!!
Update: My code:
the parent page: (things in {%%} and {{}} are jinja templates, I use them to render the template)
<!--
#Author: Sam Zhang
#Date: 2020-04-10 20:05:53
#Last Modified by: Sam Zhang
#Last Modified time: 2020-05-06 17:01:45
-->
{% extends 'base.html' %}
{% block title %}{{ keyword }}{% endblock %}
{% block top %}{% endblock %}
{% block content %}
<nav class="navbar navbar-dark bg-primary fixed-top">
<a class="navbar-brand" href="/">Guangdu <small class="text-light">Baidu</small></a>
<form method="post" class="container-fluid" style="max-width: 60%; margin-left: 0"
action="{{ url_for('baidu.index') }}">
<div class="input-group">
<input class="form-control" name="query" value="{{ keyword }}" id="search" autocomplete="off" type="search">
<button class="btn btn-success" type="submit">Guangdu</button>
</div>
</form>
<a onclick="changeTheme()" href="" class="text-white" title="Change theme"><i class="fa fa-adjust"></i></a>
</nav>
<br><br><br><br>
<div class="iframe-wrap">
<iframe id="iframe iframe-real" onload="$(this).fadeIn(500); show()" seamless="seamless" src="{{ url_for('baidu.search_s', q=keyword, page=cur) }}" class="iframe"></iframe>
</div>
<div class="d-flex justify-content-center" id="load-container">
<div class="spinner-grow text-primary" role="status" id="load">
<span class="sr-only" id="load-sr">Loading</span>
</div>
</div>
</div>
<script>
function hide() {
$("#iframe").hide();
$("#load-container").fadeIn(500);
$("#load").fadeIn(500);
$("#load-sr").fadeIn(500);
}
function show() {
$("#load-container").fadeOut(500);
$("#load").fadeOut(500);
$("#load-sr").fadeOut(500);
}
window.onload = hide();
</script>
{% endblock %}
And my web page in the iframe:
<!--
#Author: Sam Zhang
#Date: 2020-04-10 20:05:53
#Last Modified by: Sam Zhang
#Last Modified time: 2020-05-06 17:26:20
-->
{% extends 'base.html' %}
{% block title %}{{ keyword }}{% endblock %}
{% block top %}{% endblock %}
{% block body %}id="body" style="overflow:auto;height:100%" onload="document.getElementById('body').style.width=document.body.offsetWidth+20+'px'"{% endblock %}
{% block content %}
<style>
</style>
<script>
function change(pn) {
this.parent.location.href = "{{ url_for('baidu.search') }}?q={{ keyword }}&page=" + pn;
}
</script>
{% if results %}
{% for result in results %}
{% if result.title and result.link %}
<div class="container">
{% if result.domain %}
<p class="text-success">
{{ result.domain }}
{% if result.path %}
›
{% for loc in result.path %}
{% if loop.index != result.path | length %}
{{ loc }}
›
{% else %}
{{ loc }}
{% endif %}
{% endfor %}
{% endif %}
</p>
{% endif %}
<h5 id="{{ loop.index }}h5">{{ result.title }}</h5>
{% if result.time %}<p class="d-inline text-muted">{{ result.time }} · </p>{% endif %}<p class="d-inline text-secondary text-wrap" id="{{ loop.index }}">{% if result.des %}{{ result.des }}{% else %}No description{% endif %}</p>
<hr>
</div>
{% endif %}
{% endfor %}
{% else %}
<div class="container">
<p>Keyword {{ keyword }} has np search results</p>
</div>
{% endif %}
<div class="container">
<nav>
<ul class="pagination justify-content-center">
{% if cur != 0 and cur != 10 %}
{% set url = "javascript:change(pn='" + (cur - 1) | string + "')" %}
{% else %}
{% set url = '#' %}
{% endif %}
<li class="page-item{% if cur == 0 %} disabled{% endif %}">
<a class="page-link" href="{{ url }}" aria-label="Previous">
<span aria-hidden="true">«</span>
</a>
</li>
{% if pages | length <= 10 %}
{% for i in pages %}
<li class="page-item{% if i == cur %} active{% endif %}"><a class="page-link" href="javascript:change(pn='{{ i }}')">{{ i + 1 }}</a></li>
{% endfor %}
{% endif %}
{% if cur < pages | length %}
{% set url = "javascript:change(pn='" + (cur + 1) | string + "')" %}
{% else %}
{% set url = '#' %}
{% endif %}
<li class="page-item{% if cur == pages | length - 1 or cur == 9 %} disabled{% endif %}"{% if cur == 9 %} data-toggle="tooltip" data-placement="top"{% endif %}>
<a class="page-link" href="{{ url }}" aria-label="Next">
<span aria-hidden="true">»</span>
</a>
</li>
</ul>
</nav>
</div>
{% endblock %}

Kind of a hacky solution, but this will hide the scrollbars by making the frame bigger than the container.
.outer {
width: 500px;
height: 150px;
overflow: hidden;
}
.outer iframe {
width: 520px;
height: 170px;
overflow: auto;
}
<div class="outer">
<iframe src="/"></iframe>
</div>

Related

How to avoid "a lot of {%include%} gives a lot of <footer>"?

When I need to use a lot of {%include%} (content) in html templates - do unnecessary extensions appear for each content inclusion? Effects are also applied to each subsequent inclusion of content...
When I can add content inclusion to the first html template expander, everything is fine.
But when I use "pagination" I need to send "page=posts" to paginator.html. I can't find a way to send this variable to blog.html from layout.html...
And I think that in the future I will have the same problems, and therefore it should be solved.
layout.html
<div class="container body-content">
<div id="content">
{% block content %}
{% endblock %}
</div>
</div>
<div class="container body-content">
<footer>
<hr/>
<p>© {{ year }}. Сайт</p>
</footer>
</div>
blog.html
{% extends "app/layout.html" %}
<!--♕-->
{% block content %}
<h2>{{ title }}</h2><br>
{% for post in posts %}
<hr>
<div class="">
<h2> {{post.title}} </h2>
<p> {{post.posted}} </p>
</div>
<p>
{{ post.description }}
</p>
{% endfor %}
{% include "app/pagination.html" with page=posts %}
{% endblock %}
pagination.html
{% extends "app/blog.html" %}
<!--♕-->
{% block content %}
<div class="pagination">
<span class="step-links">
{% if page.has_previous %}
Предыдущая
{% endif %}
<span class="current">
Страница {{ page.number }} из {{ page.paginator.num_pages }}
</span>
{% if page.has_next %}
Следующая
{% endif %}
</span>
</div>
{% endblock %}
The pagination should be a file that only renders pagination content, not the template around this.
This thus means that you implement the pagination without the {% extends "app/layout.html" %}, so:
{# pagination.html, no extends or block #}
<div class="pagination">
<span class="step-links">
{% if page.has_previous %}
Предыдущая
{% endif %}
<span class="current">
Страница {{ page.number }} из {{ page.paginator.num_pages }}
</span>
{% if page.has_next %}
Следующая
{% endif %}
</span>
</div>
This will prevent the pagination.html to render headers, footers, and other content. You can then simply import the pagination as a utility template.

Add ellipses to pagination using Jekyll-Paginate-v2

I'm using Jekyll-Paginate-v2 and their Pagination Trails to create pagination for my blog. I have everything working but wanted to add some ellipses to indicate more pages. When you're on the first page, the last page should show at the end with ellipses in front, and after passing a certain number of pages, the first page should show with ellipses as well. If you get to the last page the ellipses should disappear.
Example:
< 1 2 3 4 5 6 7 8 8 10 ... 50 >
< 1... 5 6 7 8 9 10 ... 50>
Pagination w/ Trails
{% if paginator.total_pages > 1 %}
<div class="pagination">
{% if paginator.previous_page %}
<a href='{{ paginator.previous_page_path | prepend: site.baseurl }}' class='prev'>Previous</a>
{% endif %}
{% if paginator.page_trail %}
{% for trail in paginator.page_trail %}
<a href="{{ trail.path | prepend: site.baseurl | replace: '//', '/' | remove: "index.html" }}" class='{% if page.url == trail.path %}current{% endif %}'>{{ trail.num }}</a>
{% endfor %}
{% endif %}
{% if paginator.next_page %}
<a href='{{ paginator.next_page_path | prepend: site.baseurl }}' class='next'>Next</a>
{% endif %}
</div>
{% endif %}
You'll need to add some conditionals for where you want those ellipses. This is untested, but it might get you started:
<div class="pagination">
{% if paginator.total_pages > 1 %}
<ul>
{% if paginator.previous_page %}
<li><</li>
{% endif %}
{% for page in (1..paginator.total_pages) %}
{% assign last_five = forloop.length | minus: 4 %}
{% assign last_page = forloop.length %}
{% if forloop.length > 5 %}
{% if paginator.page <= 5 %}
{% if forloop.index <= 5 %}
{% if forloop.first and page == paginator.page %}
<li class="current-page"><span>{{ page }}</span></li>
{% elsif forloop.first %}
<li>1</li>
{% elsif page == paginator.page %}
<li class="current-page"><span>{{ page }}</span></li>
{% else %}
<li>{{ page }}</li>
{% endif %}
{% else %}
{% if paginator.page == 5 %}
<li>6</li>
{% endif %}
<li>…</li>
<li>{{ last_page }}</li>
{% break %}
{% endif %}
{% elsif paginator.page >= last_five %}
{% if forloop.index >= last_five %}
{% if forloop.index == last_five %}
<li>1</li>
<li>…</li>
{% if page == last_five %}
<li>{{ page | minus: 1 }}</li>
{% endif %}
{% if page == paginator.page %}
<li class="current-page"><span>{{ page }}</span></li>
{% else %}
<li>{{ page }}</li>
{% endif %}
{% elsif forloop.last and page == paginator.page %}
<li class="current-page"><span>{{ page }}</span></li>
{% elsif page == paginator.page %}
<li class="current-page"><span>{{ page }}</span></li>
{% else %}
<li>{{ page }}</li>
{% endif %}
{% endif %}
{% else %}
{% if forloop.first %}
<li>1</li>
{% endif %}
{% if forloop.index == paginator.page | minus: 2 %}
<li>…</li>
<li>{{ page | minus: 2 }}</li>
{% endif %}
{% if forloop.index == paginator.page | minus: 1 %}
<li>{{ page | minus: 1 }}</li>
{% endif %}
{% if page == paginator.page %}
<li class="current-page"><span>{{ page }}</span></li>
{% endif %}
{% if forloop.index == paginator.page | plus: 1 %}
<li>{{ page | plus: 1 }}</li>
{% endif %}
{% if forloop.index == paginator.page | plus: 2 %}
<li>{{ page | plus: 2 }}</li>
<li>…</li>
{% endif %}
{% if forloop.last %}
<li>{{ forloop.index }}</li>
{% endif %}
{% endif %}
{% else %}
{% if page == paginator.page %}
<li class="current-page"><span>{{ page }}</span></li>
{% elsif page == 1 %}
<li>{{ page }}</li>
{% else %}
<li>{{ page }}</li>
{% endif %}
{% endif %}
{% endfor %}
{% if paginator.next_page %}
<li>></li>
{% endif %}
</ul>
{% endif %}
</div>
First I'd like to thank Brad West who provided the base, thank you.
Attention: Tested only on standard github pages dependency, not tested
on v2, not tested outside of github pages dependency.
The code below is working perfectly on gitgub pages (Jekyll v3.9.2), so far I have not found bugs.
I could have spent more time and improved the code, but it's already working as it should, so I'm not going to waste any more time on it.
Result: before and after.
_config.yml
paginate: 10
paginate_path: /page/:num/
.pagination {
display: flex;
justify-content: center;
align-items: center;
margin-bottom: 3rem;
}
.pagination a,
.pagination span {
display: flex;
justify-content: center;
align-items: center;
width: 40px;
height: 40px;
border: 1px solid #efefef;
border-left: 0;
}
.pagination .active {
background: #f3f3f3;
pointer-events: none;
}
.pagination .active svg {
opacity: .3;
}
.pagination a:hover {
background: #f3f3f3;
cursor: pointer;
}
.pagination a:first-child,
.pagination span:first-child {
border-left: 1px solid #efefef;
border-top-left-radius: 3px;
border-bottom-left-radius: 3px;
}
.pagination a:last-child,
.pagination span:last-child {
border-top-right-radius: 3px;
border-bottom-right-radius: 3px;
}
{% if paginator.total_pages > 1 %}
<div class="pagination">
{% if paginator.previous_page %}
<a href="{{ paginator.previous_page_path | prepend: site.baseurl | replace: '//', '/' }}">
<svg width="8" height="16" viewBox="0 0 8 13">
<g fill="none" stroke="none" stroke-width="1" fill-rule="evenodd">
<g transform="translate(1.000000, 1.000000)" stroke="currentColor" stroke-width="2">
<polyline transform="translate(3.500000, 5.507797) rotate(90.000000) translate(-3.500000, -5.507797)" points="-1.5 3 3.5155939 8.0155939 8.5 3.0311879"></polyline>
</g>
</g>
</svg>
</a>
{% else %}
<span class="active">
<svg width="8" height="16" viewBox="0 0 8 13">
<g fill="none" stroke="none" stroke-width="1" fill-rule="evenodd">
<g transform="translate(1.000000, 1.000000)" stroke="currentColor" stroke-width="2">
<polyline transform="translate(3.500000, 5.507797) rotate(90.000000) translate(-3.500000, -5.507797)" points="-1.5 3 3.5155939 8.0155939 8.5 3.0311879"></polyline>
</g>
</g>
</svg>
</span>
{% endif %}
{% for page in (1..paginator.total_pages) %}
{% assign last_five = forloop.length | minus: 4 %}
{% assign last_page = forloop.length %}
{% if forloop.length > 5 %}
{% if paginator.page <= 5 %}
{% if forloop.index <= 5 %}
{% if forloop.first and page == paginator.page %}
<span class="active">{{ page }}</span>
{% elsif forloop.first %}
1
{% elsif page == paginator.page %}
<span class="active">{{ page }}</span>
{% else %}
{{ page }}
{% endif %}
{% else %}
{% if paginator.page == 5 %}
{{ page }}
{% endif %}
<span>...</span>
{{ last_page }}
{% break %}
{% endif %}
{% elsif paginator.page >= last_five %}
{% if forloop.index >= last_five %}
{% if forloop.index == last_five %}
1
<span>...</span>
{% if page == last_five %}
{{ page | minus: 1 }}
{% endif %}
{% if page == paginator.page %}
<span class="active">{{ page }}</span>
{% else %}
{{ page }}
{% endif %}
{% elsif forloop.last and page == paginator.page %}
<span class="active">{{ page }}</span>
{% elsif page == paginator.page %}
<span class="active">{{ page }}</span>
{% else %}
{{ page }}
{% endif %}
{% endif %}
{% else %}
{% if forloop.first %}
1
{% endif %}
{% if forloop.index == paginator.page | minus: 2 %}
<span>...</span>
{{ page | minus: 2 }}
{% endif %}
{% if forloop.index == paginator.page | minus: 1 %}
{{ page | minus: 1 }}
{% endif %}
{% if page == paginator.page %}
<span class="active">{{ page }}</span>
{% endif %}
{% if forloop.index == paginator.page | plus: 1 %}
{{ page | plus: 1 }}
{% endif %}
{% if forloop.index == paginator.page | plus: 2 %}
{{ page | plus: 2 }}
<span>...</span>
{% endif %}
{% if forloop.last %}
{{ forloop.index }}
{% endif %}
{% endif %}
{% else %}
{% if page == paginator.page %}
<span class="active">{{ page }}</span>
{% elsif page == 1 %}
{{ page }}
{% else %}
{{ page }}
{% endif %}
{% endif %}
{% endfor %}
{% if paginator.next_page %}
<a href="{{ paginator.next_page_path | prepend: site.baseurl | replace: '//', '/' }}">
<svg width="8" height="16" viewBox="0 0 8 13">
<g fill="none" stroke="none" stroke-width="1" fill-rule="evenodd">
<g transform="translate(-2.000000, 4.000000)" stroke="currentColor" stroke-width="2">
<polyline transform="translate(5.500000, 2.500000) rotate(90.000000) translate(-5.500000, -2.500000)" points="10.5 5 5.5 6.66133815e-16 0.5 5"></polyline>
</g>
</g>
</svg>
</a>
{% else %}
<span class="active">
<svg width="8" height="16" viewBox="0 0 8 13">
<g fill="none" stroke="none" stroke-width="1" fill-rule="evenodd">
<g transform="translate(-2.000000, 4.000000)" stroke="currentColor" stroke-width="2">
<polyline transform="translate(5.500000, 2.500000) rotate(90.000000) translate(-5.500000, -2.500000)" points="10.5 5 5.5 6.66133815e-16 0.5 5"></polyline>
</g>
</g>
</svg>
</span>
{% endif %}
</div>
{% endif %}

Extra <p>s been generated at Shopify frontend

I'm using liquid to add content for two <p> inside the column-right <div>:
<div class="page-width">
{% capture image_layout %}
<div class="feature-row__item feature-row__image-wrapper">
{% if block.settings.image != blank %}
<div class="feature-row__image feature-row__image--{{ block.id }} lazyload" data-sizes="auto" data-bgset="{% render 'bgset', image: block.settings.image %}"></div>
<noscript>
<div class="feature-row__image feature-row__image--{{ block.id }}" style="background-image: {{ block.settings.image | img_url: 'master' }}"></div>
</noscript>
{% else %}
<div class="feature-row__image feature-row__image--{{ block.id }}">{{ 'image' | placeholder_svg_tag: 'placeholder-svg' }}</div>
{% endif %}
<div class="column-right">
{%- if block.settings.text != blank -%}
<p class="column-right__text">{{- block.settings.text -}}</p>
{%- endif -%}
{%- if block.settings.smalltext != blank -%}
<p class="column-right__smalltex">{{- block.settings.smalltext -}}</p>
{%- endif -%}
</div>
</div>
{% endcapture %}
But, at the frontend, I get four <p>:
<div class="column-right">
<p class="column-right__text"></p>
<p>We are a bunch of passionate people</p>
<p></p>
<p class="column-right__smalltex"> you can focus on what really matters, potato chips</p>
</div>
Screenshot here
Anybody knows why this happened??
Finally I found out that it was an id problem. It seems that other block had the same id, so it would render one <p> for each block!

remove empty div and parent

Hello I have a HTML that shows all the artworks based on their collections as bellow:now, the collection "No_COLLECTION" is empty but it shows it's collection name and an empty space. I tried to remove it but i couldn't. Please help me to remove all the collections that doesn't have artworks in them.
{% extends "base.html" %}
{% load static %}
{% block content %}
<div id="main" style='min-height:800px;'>
{% with 'No_COLLECTION woodtest Test-2 Culture KASHAN HUMAN mine' as list %}
{% for i in list.split %}
<script>
var level = 0;
</script>
<div class="row" style="position: relative;margin-bottom: 30px;">
<div>{{i}}</div>
<div class="workSeriesThumbnailStrip">
{% for obj in object_list %}
{% if obj.collection == i %}
<script>
var level = level+1;
</script>
<a href="{{ obj.get_absolute_url }}"><img src="{{ obj.image.url }}"
style="float:left;width:67px;height:87px;margin:10px;" ></a>
{% endif %}
{% endfor %}
</div>
<script>
document.write(level);
</script>
</div>
{% endfor %}
<script>
if ($('.workSeriesThumbnailStrip').is(':empty')) {
$('.row').remove();
}
</script>
{% endwith %}
</div>
<div class="clear"></div>
{% endblock content %}
Add if statement. If the list is not empty, put your div inside that if statement body. else just div an empty div.

Changing the background color of the title block of an extended twig template

I have a twig template used for Bootstrap popovers. The code is:
span class="popover-wrapper {% block wrapper_class %}{% endblock %}">
<button
type="button"
class="btn-link popover-link {% block link_class %}{% endblock %}"
tabindex="0"
role="button"
data-toggle="popover"
data-placement="bottom"
data-title="{% block title %}{% endblock %}"
>{% block link_text %}{% endblock %}</button>
<div class="popover-inner-content {% block content_class %}{% endblock %}">
{% block content %}{% endblock %}
</div>
</span>
when extending this template into another html.twig view,
{% embed 'fragments/popover.html.twig' %}
{% block link_class %}more-sections{% endblock %}
{% block link_text %}
<span class="fa fa-info-circle"></span>
{% endblock %}
{% block title %}<div>Contact Info</div>{% endblock %}
{% block content %} .......
When adding style="background-color: blue;" to the title div, it disables the popover appear/disappear functionality. How can I alter the backgrond color of the popover Title section>
You are breaking the HTML by using double quotes inside your title tag.
<button data-title="<div style="background-color: blue;">Contact Info</div>">...</button>
You could solve this by using single quotes
{% block title %}<div style='background-color: blue;'>Contact Info</div>{% endblock %}