mirror of
https://github.com/searxng/searxng.git
synced 2024-12-22 09:16:29 +00:00
Merge pull request #882 from return42/fix-873
[fix] replace embedded HTML by data_src
This commit is contained in:
commit
bf2a2ed48f
25 changed files with 135 additions and 132 deletions
|
@ -4,7 +4,7 @@ Bandcamp (Music)
|
|||
@website https://bandcamp.com/
|
||||
@provide-api no
|
||||
@results HTML
|
||||
@parse url, title, content, publishedDate, embedded, thumbnail
|
||||
@parse url, title, content, publishedDate, iframe_src, thumbnail
|
||||
"""
|
||||
|
||||
from urllib.parse import urlencode, urlparse, parse_qs
|
||||
|
@ -27,10 +27,7 @@ paging = True
|
|||
|
||||
base_url = "https://bandcamp.com/"
|
||||
search_string = search_string = 'search?{query}&page={page}'
|
||||
embedded_url = '''<iframe width="100%" height="166"
|
||||
scrolling="no" frameborder="no"
|
||||
data-src="https://bandcamp.com/EmbeddedPlayer/{type}={result_id}/size=large/bgcol=ffffff/linkcol=0687f5/tracklist=false/artwork=small/transparent=true/"
|
||||
></iframe>'''
|
||||
iframe_src = "https://bandcamp.com/EmbeddedPlayer/{type}={result_id}/size=large/bgcol=ffffff/linkcol=0687f5/tracklist=false/artwork=small/transparent=true/"
|
||||
|
||||
|
||||
def request(query, params):
|
||||
|
@ -74,8 +71,9 @@ def response(resp):
|
|||
if thumbnail:
|
||||
new_result['thumbnail'] = thumbnail[0]
|
||||
if "album" in result.classes:
|
||||
new_result["embedded"] = embedded_url.format(type='album', result_id=result_id)
|
||||
new_result["iframe_src"] = iframe_src.format(type='album', result_id=result_id)
|
||||
elif "track" in result.classes:
|
||||
new_result["embedded"] = embedded_url.format(type='track', result_id=result_id)
|
||||
new_result["iframe_src"] = iframe_src.format(type='track', result_id=result_id)
|
||||
|
||||
results.append(new_result)
|
||||
return results
|
||||
|
|
|
@ -25,11 +25,6 @@ paging = True
|
|||
# search-url
|
||||
# see http://www.dailymotion.com/doc/api/obj-video.html
|
||||
search_url = 'https://api.dailymotion.com/videos?fields=created_time,title,description,duration,url,thumbnail_360_url,id&sort=relevance&limit=5&page={pageno}&{query}' # noqa
|
||||
embedded_url = (
|
||||
'<iframe frameborder="0" width="540" height="304" '
|
||||
+ 'data-src="https://www.dailymotion.com/embed/video/{videoid}" allowfullscreen></iframe>'
|
||||
)
|
||||
|
||||
supported_languages_url = 'https://api.dailymotion.com/languages'
|
||||
|
||||
|
||||
|
@ -64,7 +59,6 @@ def response(resp):
|
|||
content = html_to_text(res['description'])
|
||||
thumbnail = res['thumbnail_360_url']
|
||||
publishedDate = datetime.fromtimestamp(res['created_time'], None)
|
||||
embedded = embedded_url.format(videoid=res['id'])
|
||||
|
||||
# http to https
|
||||
thumbnail = thumbnail.replace("http://", "https://")
|
||||
|
@ -76,7 +70,7 @@ def response(resp):
|
|||
'title': title,
|
||||
'content': content,
|
||||
'publishedDate': publishedDate,
|
||||
'embedded': embedded,
|
||||
'iframe_src': "https://www.dailymotion.com/embed/video/" + res['id'],
|
||||
'thumbnail': thumbnail,
|
||||
}
|
||||
)
|
||||
|
|
|
@ -23,13 +23,7 @@ paging = True
|
|||
# search-url
|
||||
url = 'https://api.deezer.com/'
|
||||
search_url = url + 'search?{query}&index={offset}'
|
||||
|
||||
embedded_url = (
|
||||
'<iframe scrolling="no" frameborder="0" allowTransparency="true" '
|
||||
+ 'data-src="https://www.deezer.com/plugins/player?type=tracks&id={audioid}" '
|
||||
+ 'width="540" height="80"></iframe>'
|
||||
)
|
||||
|
||||
iframe_src = "https://www.deezer.com/plugins/player?type=tracks&id={audioid}"
|
||||
|
||||
# do search-request
|
||||
def request(query, params):
|
||||
|
@ -57,10 +51,10 @@ def response(resp):
|
|||
|
||||
content = '{} - {} - {}'.format(result['artist']['name'], result['album']['title'], result['title'])
|
||||
|
||||
embedded = embedded_url.format(audioid=result['id'])
|
||||
|
||||
# append result
|
||||
results.append({'url': url, 'title': title, 'embedded': embedded, 'content': content})
|
||||
results.append(
|
||||
{'url': url, 'title': title, 'iframe_src': iframe_src.format(audioid=result['id']), 'content': content}
|
||||
)
|
||||
|
||||
# return results
|
||||
return results
|
||||
|
|
|
@ -29,9 +29,6 @@ search_url = (
|
|||
url + "search/text/?query={query}&page={page}&fields=name,url,download,created,description,type&token={api_key}"
|
||||
)
|
||||
|
||||
embedded_url = '<audio controls><source src="{uri}" type="audio/{ftype}"></audio>'
|
||||
|
||||
|
||||
# search request
|
||||
def request(query, params):
|
||||
params["url"] = search_url.format(
|
||||
|
@ -52,7 +49,6 @@ def response(resp):
|
|||
content = result["description"][:128]
|
||||
publishedDate = datetime.fromisoformat(result["created"])
|
||||
uri = result["download"]
|
||||
embedded = embedded_url.format(uri=uri, ftype=result["type"])
|
||||
|
||||
# append result
|
||||
results.append(
|
||||
|
@ -60,7 +56,7 @@ def response(resp):
|
|||
"url": result["url"],
|
||||
"title": title,
|
||||
"publishedDate": publishedDate,
|
||||
"embedded": embedded,
|
||||
"audio_src": uri,
|
||||
"content": content,
|
||||
}
|
||||
)
|
||||
|
|
|
@ -58,14 +58,6 @@ def response(resp):
|
|||
results = []
|
||||
|
||||
search_results = resp.json()
|
||||
embedded_url = (
|
||||
'<iframe width="540" height="304" '
|
||||
+ 'data-src="'
|
||||
+ resp.search_params['base_url']
|
||||
+ '/embed/{videoid}" '
|
||||
+ 'frameborder="0" allowfullscreen></iframe>'
|
||||
)
|
||||
|
||||
base_invidious_url = resp.search_params['base_url'] + "/watch?v="
|
||||
|
||||
for result in search_results:
|
||||
|
@ -76,7 +68,6 @@ def response(resp):
|
|||
continue
|
||||
|
||||
url = base_invidious_url + videoid
|
||||
embedded = embedded_url.format(videoid=videoid)
|
||||
thumbs = result.get("videoThumbnails", [])
|
||||
thumb = next((th for th in thumbs if th["quality"] == "sddefault"), None)
|
||||
if thumb:
|
||||
|
@ -100,7 +91,7 @@ def response(resp):
|
|||
"template": "videos.html",
|
||||
"author": result.get("author"),
|
||||
"publishedDate": publishedDate,
|
||||
"embedded": embedded,
|
||||
"iframe_src": resp.search_params['base_url'] + '/embed/' + videoid,
|
||||
"thumbnail": thumbnail,
|
||||
}
|
||||
)
|
||||
|
|
|
@ -24,12 +24,7 @@ paging = True
|
|||
# search-url
|
||||
url = 'https://api.mixcloud.com/'
|
||||
search_url = url + 'search/?{query}&type=cloudcast&limit=10&offset={offset}'
|
||||
|
||||
embedded_url = (
|
||||
'<iframe scrolling="no" frameborder="0" allowTransparency="true" '
|
||||
+ 'data-src="https://www.mixcloud.com/widget/iframe/?feed={url}" width="300" height="300"></iframe>'
|
||||
)
|
||||
|
||||
iframe_src = "https://www.mixcloud.com/widget/iframe/?feed={url}"
|
||||
|
||||
# do search-request
|
||||
def request(query, params):
|
||||
|
@ -51,12 +46,17 @@ def response(resp):
|
|||
title = result['name']
|
||||
url = result['url']
|
||||
content = result['user']['name']
|
||||
embedded = embedded_url.format(url=url)
|
||||
publishedDate = parser.parse(result['created_time'])
|
||||
|
||||
# append result
|
||||
results.append(
|
||||
{'url': url, 'title': title, 'embedded': embedded, 'publishedDate': publishedDate, 'content': content}
|
||||
{
|
||||
'url': url,
|
||||
'title': title,
|
||||
'iframe_src': iframe_src.format(url=url),
|
||||
'publishedDate': publishedDate,
|
||||
'content': content,
|
||||
}
|
||||
)
|
||||
|
||||
# return results
|
||||
|
|
|
@ -51,12 +51,6 @@ def response(resp):
|
|||
|
||||
search_res = loads(resp.text)
|
||||
|
||||
embedded_url = (
|
||||
'<iframe width="560" height="315" sandbox="allow-same-origin allow-scripts allow-popups" '
|
||||
+ 'src="'
|
||||
+ sanitized_url
|
||||
+ '{embed_path}" frameborder="0" allowfullscreen></iframe>'
|
||||
)
|
||||
# return empty array if there are no results
|
||||
if "data" not in search_res:
|
||||
return []
|
||||
|
@ -72,7 +66,6 @@ def response(resp):
|
|||
content = ""
|
||||
thumbnail = sanitized_url + res["thumbnailPath"]
|
||||
publishedDate = datetime.strptime(res["publishedAt"], "%Y-%m-%dT%H:%M:%S.%fZ")
|
||||
embedded = embedded_url.format(embed_path=res["embedPath"])
|
||||
|
||||
results.append(
|
||||
{
|
||||
|
@ -81,7 +74,7 @@ def response(resp):
|
|||
"title": title,
|
||||
"content": content,
|
||||
"publishedDate": publishedDate,
|
||||
"embedded": embedded,
|
||||
"iframe_src": sanitized_url + res["embedPath"],
|
||||
"thumbnail": thumbnail,
|
||||
}
|
||||
)
|
||||
|
|
|
@ -41,9 +41,6 @@ time_range_table = {
|
|||
}
|
||||
|
||||
|
||||
embedded_url = '<iframe width="540" height="304" src="{url}" frameborder="0" allowfullscreen></iframe>'
|
||||
|
||||
|
||||
def minute_to_hm(minute):
|
||||
if isinstance(minute, int):
|
||||
return "%d:%02d" % (divmod(minute, 60))
|
||||
|
@ -88,7 +85,6 @@ def response(resp):
|
|||
content = result['description']
|
||||
thumbnail = result['thumbnailUrl']
|
||||
publishedDate = parser.parse(result['publishedAt'])
|
||||
embedded = embedded_url.format(url=result.get('embedUrl'))
|
||||
author = result.get('account', {}).get('displayName')
|
||||
length = minute_to_hm(result.get('duration'))
|
||||
url = result['url']
|
||||
|
@ -102,7 +98,7 @@ def response(resp):
|
|||
'length': length,
|
||||
'template': 'videos.html',
|
||||
'publishedDate': publishedDate,
|
||||
'embedded': embedded,
|
||||
'iframe_src': result.get('embedUrl'),
|
||||
'thumbnail': thumbnail,
|
||||
}
|
||||
)
|
||||
|
|
|
@ -37,12 +37,6 @@ search_url = (
|
|||
'&client_id={client_id}'
|
||||
) # noqa
|
||||
|
||||
embedded_url = (
|
||||
'<iframe width="100%" height="166" '
|
||||
+ 'scrolling="no" frameborder="no" '
|
||||
+ 'data-src="https://w.soundcloud.com/player/?url={uri}"></iframe>'
|
||||
)
|
||||
|
||||
cid_re = re.compile(r'client_id:"([^"]*)"', re.I | re.U)
|
||||
guest_client_id = ''
|
||||
|
||||
|
@ -97,7 +91,6 @@ def response(resp):
|
|||
content = result['description'] or ''
|
||||
publishedDate = parser.parse(result['last_modified'])
|
||||
uri = quote_plus(result['uri'])
|
||||
embedded = embedded_url.format(uri=uri)
|
||||
|
||||
# append result
|
||||
results.append(
|
||||
|
@ -105,7 +98,7 @@ def response(resp):
|
|||
'url': result['permalink_url'],
|
||||
'title': title,
|
||||
'publishedDate': publishedDate,
|
||||
'embedded': embedded,
|
||||
'iframe_src': "https://w.soundcloud.com/player/?url=" + uri,
|
||||
'content': content,
|
||||
}
|
||||
)
|
||||
|
|
|
@ -29,10 +29,6 @@ api_client_secret = None
|
|||
url = 'https://api.spotify.com/'
|
||||
search_url = url + 'v1/search?{query}&type=track&offset={offset}'
|
||||
|
||||
embedded_url = '<iframe data-src="https://embed.spotify.com/?uri=spotify:track:{audioid}"\
|
||||
width="300" height="80" frameborder="0" allowtransparency="true"></iframe>'
|
||||
|
||||
|
||||
# do search-request
|
||||
def request(query, params):
|
||||
offset = (params['pageno'] - 1) * 20
|
||||
|
@ -66,10 +62,15 @@ def response(resp):
|
|||
url = result['external_urls']['spotify']
|
||||
content = '{} - {} - {}'.format(result['artists'][0]['name'], result['album']['name'], result['name'])
|
||||
|
||||
embedded = embedded_url.format(audioid=result['id'])
|
||||
|
||||
# append result
|
||||
results.append({'url': url, 'title': title, 'embedded': embedded, 'content': content})
|
||||
results.append(
|
||||
{
|
||||
'url': url,
|
||||
'title': title,
|
||||
'iframe_src': "https://embed.spotify.com/?uri=spotify:track:" + result['id'],
|
||||
'content': content,
|
||||
}
|
||||
)
|
||||
|
||||
# return results
|
||||
return results
|
||||
|
|
|
@ -25,12 +25,6 @@ paging = True
|
|||
base_url = 'https://vimeo.com/'
|
||||
search_url = base_url + '/search/page:{pageno}?{query}'
|
||||
|
||||
embedded_url = (
|
||||
'<iframe data-src="https://player.vimeo.com/video/{videoid}" '
|
||||
+ 'width="540" height="304" frameborder="0" '
|
||||
+ 'webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>'
|
||||
)
|
||||
|
||||
|
||||
# do search-request
|
||||
def request(query, params):
|
||||
|
@ -54,7 +48,6 @@ def response(resp):
|
|||
title = result['name']
|
||||
thumbnail = result['pictures']['sizes'][-1]['link']
|
||||
publishedDate = parser.parse(result['created_time'])
|
||||
embedded = embedded_url.format(videoid=videoid)
|
||||
|
||||
# append result
|
||||
results.append(
|
||||
|
@ -64,7 +57,7 @@ def response(resp):
|
|||
'content': '',
|
||||
'template': 'videos.html',
|
||||
'publishedDate': publishedDate,
|
||||
'embedded': embedded,
|
||||
'iframe_src': "https://player.vimeo.com/video/" + videoid,
|
||||
'thumbnail': thumbnail,
|
||||
}
|
||||
)
|
||||
|
|
|
@ -26,13 +26,6 @@ api_key = None
|
|||
# search-url
|
||||
base_url = 'https://www.googleapis.com/youtube/v3/search'
|
||||
search_url = base_url + '?part=snippet&{query}&maxResults=20&key={api_key}'
|
||||
|
||||
embedded_url = (
|
||||
'<iframe width="540" height="304" '
|
||||
+ 'data-src="https://www.youtube-nocookie.com/embed/{videoid}" '
|
||||
+ 'frameborder="0" allowfullscreen></iframe>'
|
||||
)
|
||||
|
||||
base_youtube_url = 'https://www.youtube.com/watch?v='
|
||||
|
||||
|
||||
|
@ -77,8 +70,6 @@ def response(resp):
|
|||
|
||||
url = base_youtube_url + videoid
|
||||
|
||||
embedded = embedded_url.format(videoid=videoid)
|
||||
|
||||
# append result
|
||||
results.append(
|
||||
{
|
||||
|
@ -87,7 +78,7 @@ def response(resp):
|
|||
'content': content,
|
||||
'template': 'videos.html',
|
||||
'publishedDate': publishedDate,
|
||||
'embedded': embedded,
|
||||
'iframe_src': "https://www.youtube-nocookie.com/embed/" + videoid,
|
||||
'thumbnail': thumbnail,
|
||||
}
|
||||
)
|
||||
|
|
|
@ -32,12 +32,6 @@ time_range_url = '&sp=EgII{time_range}%253D%253D'
|
|||
next_page_url = 'https://www.youtube.com/youtubei/v1/search?key=AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8'
|
||||
time_range_dict = {'day': 'Ag', 'week': 'Aw', 'month': 'BA', 'year': 'BQ'}
|
||||
|
||||
embedded_url = (
|
||||
'<iframe width="540" height="304" '
|
||||
+ 'data-src="https://www.youtube-nocookie.com/embed/{videoid}" '
|
||||
+ 'frameborder="0" allowfullscreen></iframe>'
|
||||
)
|
||||
|
||||
base_youtube_url = 'https://www.youtube.com/watch?v='
|
||||
|
||||
|
||||
|
@ -91,7 +85,7 @@ def parse_next_page_response(response_text):
|
|||
'author': section['ownerText']['runs'][0]['text'],
|
||||
'length': section['lengthText']['simpleText'],
|
||||
'template': 'videos.html',
|
||||
'embedded': embedded_url.format(videoid=section['videoId']),
|
||||
'iframe_src': 'https://www.youtube-nocookie.com/embed/' + section['videoId'],
|
||||
'thumbnail': section['thumbnail']['thumbnails'][-1]['url'],
|
||||
}
|
||||
)
|
||||
|
@ -150,7 +144,6 @@ def parse_first_page_response(response_text):
|
|||
thumbnail = 'https://i.ytimg.com/vi/' + videoid + '/hqdefault.jpg'
|
||||
title = get_text_from_json(video.get('title', {}))
|
||||
content = get_text_from_json(video.get('descriptionSnippet', {}))
|
||||
embedded = embedded_url.format(videoid=videoid)
|
||||
author = get_text_from_json(video.get('ownerText', {}))
|
||||
length = get_text_from_json(video.get('lengthText', {}))
|
||||
|
||||
|
@ -163,7 +156,7 @@ def parse_first_page_response(response_text):
|
|||
'author': author,
|
||||
'length': length,
|
||||
'template': 'videos.html',
|
||||
'embedded': embedded,
|
||||
'iframe_src': 'https://www.youtube-nocookie.com/embed/' + videoid,
|
||||
'thumbnail': thumbnail,
|
||||
}
|
||||
)
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import re
|
||||
from urllib.parse import urlunparse
|
||||
from urllib.parse import urlunparse, urlparse
|
||||
from searx import settings
|
||||
from searx.plugins import logger
|
||||
from flask_babel import gettext
|
||||
|
@ -17,16 +17,30 @@ replacements = {re.compile(p): r for (p, r) in settings[plugin_id].items()} if p
|
|||
|
||||
logger = logger.getChild(plugin_id)
|
||||
parsed = 'parsed_url'
|
||||
_url_fields = ['iframe_src', 'audio_src']
|
||||
|
||||
|
||||
def on_result(request, search, result):
|
||||
if parsed not in result:
|
||||
return True
|
||||
|
||||
for (pattern, replacement) in replacements.items():
|
||||
if pattern.search(result[parsed].netloc):
|
||||
if not replacement:
|
||||
return False
|
||||
result[parsed] = result[parsed]._replace(netloc=pattern.sub(replacement, result[parsed].netloc))
|
||||
result['url'] = urlunparse(result[parsed])
|
||||
|
||||
if parsed in result:
|
||||
if pattern.search(result[parsed].netloc):
|
||||
# to keep or remove this result from the result list depends
|
||||
# (only) on the 'parsed_url'
|
||||
if not replacement:
|
||||
return False
|
||||
result[parsed] = result[parsed]._replace(netloc=pattern.sub(replacement, result[parsed].netloc))
|
||||
result['url'] = urlunparse(result[parsed])
|
||||
|
||||
for url_field in _url_fields:
|
||||
if result.get(url_field):
|
||||
url_src = urlparse(result[url_field])
|
||||
if pattern.search(url_src.netloc):
|
||||
if not replacement:
|
||||
del result[url_field]
|
||||
else:
|
||||
url_src = url_src._replace(netloc=pattern.sub(replacement, url_src.netloc))
|
||||
result[url_field] = urlunparse(url_src)
|
||||
|
||||
return True
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
19
searx/static/themes/simple/src/less/embedded.less
Normal file
19
searx/static/themes/simple/src/less/embedded.less
Normal file
|
@ -0,0 +1,19 @@
|
|||
iframe[src^="https://w.soundcloud.com"] {
|
||||
height: 120px;
|
||||
}
|
||||
|
||||
iframe[src^="https://www.deezer.com"] {
|
||||
// The real size is 92px, but 94px are needed to avoid an inner scrollbar of
|
||||
// the embedded HTML.
|
||||
height: 94px;
|
||||
}
|
||||
|
||||
iframe[src^="https://www.mixcloud.com"] {
|
||||
// the embedded player from mixcloud has some quirks: initial there is an
|
||||
// issue with an image URL that is blocked since it is an a Cross-Origin
|
||||
// request. The alternative text (<img alt='Mixcloud Logo'> then cause an
|
||||
// scrollbar in the inner of the iframe we can't avoid. Another quirk comes
|
||||
// when pressing the play button, somtimes the shown player has an height of
|
||||
// 200px, somtimes 250px.
|
||||
height: 250px;
|
||||
}
|
|
@ -17,6 +17,7 @@
|
|||
@import "autocomplete.less";
|
||||
@import "detail.less";
|
||||
@import "animations.less";
|
||||
@import "embedded.less";
|
||||
|
||||
// for index.html template
|
||||
@import "index.less";
|
||||
|
@ -296,10 +297,34 @@ article[data-vim-selected].category-social {
|
|||
padding: 0 5px 25px 0 !important;
|
||||
}
|
||||
|
||||
.audio-control audio {
|
||||
width: 100%;
|
||||
padding: 10px 0 0 0;
|
||||
}
|
||||
|
||||
.embedded-content iframe {
|
||||
width: 100%;
|
||||
padding: 10px 0 0 0;
|
||||
}
|
||||
|
||||
.result-videos .content {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.result-videos .embedded-video iframe {
|
||||
width: 100%;
|
||||
aspect-ratio: 16 / 9;
|
||||
padding: 10px 0 0 0;
|
||||
}
|
||||
|
||||
@supports not (aspect-ratio: 1 / 1) {
|
||||
// support older browsers which do not have aspect-ratio
|
||||
// https://caniuse.com/?search=aspect-ratio
|
||||
.result-videos .embedded-video iframe {
|
||||
height: calc(@results-width * 9 / 16);
|
||||
}
|
||||
}
|
||||
|
||||
.engines {
|
||||
.ltr-float-right();
|
||||
color: var(--color-result-engines-font);
|
||||
|
|
|
@ -3,13 +3,13 @@
|
|||
{{- result_header(result, favicons, loop.index) -}}
|
||||
{{- result_sub_header(result, loop.index) -}}
|
||||
|
||||
{%- if result.embedded -%}
|
||||
{%- if result.iframe_src -%}
|
||||
<small> • <a class="text-info btn-collapse collapsed cursor-pointer media-loader disabled_if_nojs" data-toggle="collapse" data-target="#result-media-{{ index }}" data-btn-text-collapsed="{{ _('show media') }}" data-btn-text-not-collapsed="{{ _('hide media') }}" aria-labelledby="result-{{loop.index}}">{{ icon('music') }} {{ _('show media') }}</a></small>
|
||||
{%- endif -%}
|
||||
|
||||
{%- if result.embedded -%}
|
||||
<div id="result-media-{{ index }}" class="collapse">
|
||||
{{- result.embedded|safe -}}
|
||||
{% if result.iframe_src -%}
|
||||
<div id="result-media-{{ index }}" class="embedded-content invisible">
|
||||
<iframe data-src="{{result.iframe_src}}" frameborder="0" scrolling="no" allowfullscreen></iframe>
|
||||
</div>
|
||||
{%- endif -%}
|
||||
|
||||
|
@ -24,6 +24,13 @@
|
|||
{%- if result.content %}<p class="result-content">{{ result.content|safe }}</p>{% endif -%}
|
||||
{%- endif -%}
|
||||
|
||||
{% if result.audio_src -%}
|
||||
<div id="result-media-{{ index }}" class="audio-control">
|
||||
<audio controls><source src="{{result.audio_src}}"></audio>
|
||||
</div>
|
||||
{%- endif %}
|
||||
|
||||
|
||||
{%- if rtl -%}
|
||||
{{ result_footer_rtl(result, loop.index) }}
|
||||
{%- else -%}
|
||||
|
|
|
@ -3,15 +3,15 @@
|
|||
{{- result_header(result, favicons, loop.index) -}}
|
||||
{{- result_sub_header(result, loop.index) -}}
|
||||
|
||||
{%- if result.embedded -%}
|
||||
{%- if result.iframe_src -%}
|
||||
<small> • <a class="text-info btn-collapse collapsed cursor-pointer media-loader disabled_if_nojs" data-toggle="collapse" data-target="#result-video-{{ index }}" data-btn-text-collapsed="{{ _('show video') }}" data-btn-text-not-collapsed="{{ _('hide video') }}" aria-labelledby="result-{{loop.index}}">{{ icon('film') }} {{ _('show video') }}</a></small>
|
||||
{%- endif -%}
|
||||
|
||||
{%- if result.embedded -%}
|
||||
<div id="result-video-{{ index }}" class="collapse">
|
||||
{{- result.embedded|safe -}}
|
||||
{% if result.iframe_src -%}
|
||||
<div id="result-video-{{ index }}" class="embedded-video collapse">
|
||||
<iframe data-src="{{result.iframe_src}}" width="540" height="304" frameborder="0" scrolling="no" allowfullscreen></iframe>
|
||||
</div>
|
||||
{%- endif -%}
|
||||
{%- endif %}
|
||||
|
||||
<div class="container-fluid">{{- "" -}}
|
||||
<div class="row">{{- "" -}}
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
{{ result_header(result, favicons, image_proxify) -}}
|
||||
{{- result_sub_header(result) -}}
|
||||
{% if result.embedded -%}
|
||||
{% if result.iframe_src -%}
|
||||
<p class="altlink"> • <a class="btn-collapse collapsed media-loader disabled_if_nojs" data-target="#result-media-{{ index }}" data-btn-text-collapsed="{{ _('show media') }}" data-btn-text-not-collapsed="{{ _('hide media') }}">{{ icon('music-note') }} {{ _('show media') }}</a></p>
|
||||
{%- endif %}
|
||||
{%- if result.content %}
|
||||
|
@ -15,9 +15,14 @@
|
|||
</p>
|
||||
{% endif -%}
|
||||
{{- result_sub_footer(result, proxify) -}}
|
||||
{% if result.embedded -%}
|
||||
<div id="result-media-{{ index }}" class="invisible">
|
||||
{{- result.embedded|safe -}}
|
||||
{% if result.iframe_src -%}
|
||||
<div id="result-media-{{ index }}" class="embedded-content invisible">
|
||||
<iframe data-src="{{result.iframe_src}}" frameborder="0" allowfullscreen></iframe>
|
||||
</div>
|
||||
{%- endif %}
|
||||
{% if result.audio_src -%}
|
||||
<div id="result-media-{{ index }}" class="audio-control">
|
||||
<audio controls><source src="{{result.audio_src}}"></audio>
|
||||
</div>
|
||||
{%- endif %}
|
||||
{{- result_footer(result) }}
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
{{ result_header(result, favicons, image_proxify) }}
|
||||
{{ result_sub_header(result) }}
|
||||
{% if result.embedded -%}
|
||||
{% if result.iframe_src -%}
|
||||
<p class="altlink"> • <a class="btn-collapse collapsed media-loader disabled_if_nojs" data-target="#result-video-{{ index }}" data-btn-text-collapsed="{{ _('show video') }}" data-btn-text-not-collapsed="{{ _('hide video') }}">{{ icon('film-outline') }} {{ _('show video') }}</a></p>
|
||||
{%- endif %}
|
||||
{%- if result.content %}
|
||||
|
@ -16,9 +16,9 @@
|
|||
{% endif -%}
|
||||
</p>
|
||||
{{- result_sub_footer(result, proxify) -}}
|
||||
{% if result.embedded -%}
|
||||
<div id="result-video-{{ index }}" class="invisible">
|
||||
{{- result.embedded|safe -}}
|
||||
{% if result.iframe_src -%}
|
||||
<div id="result-video-{{ index }}" class="embedded-video invisible">
|
||||
<iframe data-src="{{result.iframe_src}}" frameborder="0" allowfullscreen></iframe>
|
||||
</div>
|
||||
{%- endif %}
|
||||
{{ result_footer(result) }}
|
||||
|
|
Loading…
Reference in a new issue