Commit 1c96784c authored by yPhil's avatar yPhil
Browse files

v1.5.5

parents 3d4d9994 e953fb39
Pipeline #494950 passed with stage
in 34 seconds
image: node:latest
image: node:17.6.0
stages:
- build
......@@ -8,4 +8,4 @@ job1:
script:
- npm install
- npm start
- npm run coverage
- npm test
# Changelog
## v1.5.0
- Hardened security #1e3a51a
- More data (img, video & audio) types managed #1325ab5
- Intro.js is now installed with NPM and linked directly, since the Bower archive is missing files ; Considering doing this for all client-side (normally managed by Bower, w/ their own dir / route) deps #04033dca
- The search input text field is now un-focused on pressing escape #e36feb4c
- All dependancies are now installed & managed with NPM #90af60e
- New "Insecure items in this feed were not loaded" notification #1e3a51a
- Default feeds update #4da8bdf
### Bugfixes
- Complex URLs containing query strings were mistakingly ignored #1325ab5
- The custom name of the feed was sometimes overriden with the default one #38f99386
- The feed was deleted when closing the feedPrefs dialog by clicking on the overlay #38f9938/#ee1fe05
- Complex URLs containing query strings are now properly handled #1325ab5
- The custom name of the feed is no longer overriden with the default one #38f99386
- The feed was sometimes deleted when closing the feedPrefs dialog by clicking on the overlay #38f9938/#ee1fe05
- The return key misbehaved in the feedPrefs dialog #f6e7f06
- Feed timestamp: `substr()` is now deprecated (?) so heck, full timestamp for now #83a22f6
## v1.4.0
......
{
"name": "petrolette",
"version": "1",
"description": "Fly by night RSS feed reader",
"main": "",
"authors": [
"yPhil <xaccrocheur@gmail.com>"
],
"license": "GPLv3",
"keywords": [
"rss"
],
"homepage": "https://framagit.org/yphil/petrolette",
"ignore": [
"**/.*",
"node_modules",
"bower_components",
"test",
"tests"
],
"dependencies": {
"jquery-ui": "^1.12.1",
"fancybox": "^3.5.7",
"remotestorage": "rs#1.2.3",
"rs-widget": "^1.3.0",
"DOMPurify": "dompurify#^2.2.6",
"responsively-lazy": "^2.0.2",
"mousetrap": "^1.6.5"
}
}
This diff is collapsed.
{
"name": "petrolette",
"description": "The news page that doesn't know you",
"version": "v1.5.2",
"version": "v1.5.5",
"private": true,
"license": "GPL-3.0-only",
"HTTP_PORT": 8000,
......@@ -22,25 +22,30 @@
"logs": "pm2 logs petrolette --timestamp=HH:mm:ss",
"errors": "pm2 logs petrolette --err --timestamp=HH:mm:ss",
"test": "mocha --timeout 30s",
"coverage": "nyc npm test",
"postinstall": "bower install --allow-root"
"coverage": "nyc npm test"
},
"dependencies": {
"@fancyapps/fancybox": "3.5.7",
"body-parser": "^1.19.0",
"bower": "^1.8.12",
"compression": "^1.7.4",
"dompurify": "2.3.6",
"ejs": "^3.1.5",
"express": "^4.17.1",
"favrat": "latest",
"favrat": "0.4.3",
"feedparser": "^2.2.10",
"feedrat": "latest",
"helmet": "^4.4.1",
"feedrat": "0.4.11",
"helmet": "5.0.2",
"iconv-lite": "^0.6.2",
"intro.js": "5.0.0",
"jquery-ui-dist": "1.13.1",
"morgan": "^1.10.0",
"mousetrap": "1.6.5",
"node-fetch": "^2.6.1",
"npm": "^7.0.0",
"pm2": "^5.1.0",
"remotestorage-widget": "1.5.4",
"remotestoragejs": "2.0.0-beta.3",
"responsively-lazy": "2.0.2",
"sanitize": "^2.1.0"
},
"devDependencies": {
......
const express = require('express'),
path = require('path'),
router = require('./routes/router'),
fs = require('fs'),
pjson = require('./package.json'),
bodyParser = require('body-parser'),
app = express(),
helmet = require("helmet"),
compression = require('compression');
path = require('path'),
router = require('./routes/router'),
fs = require('fs'),
pjson = require('./package.json'),
bodyParser = require('body-parser'),
app = express(),
helmet = require("helmet"),
compression = require('compression');
fs.mkdir(path.join(__dirname, pjson.FAVICONS_CACHE_DIR), {
recursive: true
recursive: true
}, (err) => {
if (err) {
return console.error(err);
}
console.log('Directory created successfully!');
return true;
if (err) {
return console.error(err);
}
return true;
});
app.set('views', path.join(__dirname, 'views'));
......@@ -26,16 +25,43 @@ app.use(compression());
app.use(helmet({contentSecurityPolicy: false, crossOriginEmbedderPolicy: false}));
// app.use(helmet({contentSecurityPolicy: false, crossOriginEmbedderPolicy: false}));
// app.use(
// helmet.contentSecurityPolicy({
// directives: {
// defaultSrc: ["'self'", "https://www.googleapis.com", "https://api.dropboxapi.com", "https://content.dropboxapi.com", "https:"],
// imgSrc: ["'self'", "'unsafe-inline'", "https:", "data:"],
// styleSrc: ["'self'", "'unsafe-inline'"],
// scriptSrc: ["'self'", "'unsafe-inline'", "'unsafe-eval'"],
// scriptSrcAttr: null,
// },
// })
// );
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}));
app.use(bodyParser.urlencoded({ extended: false }));
// Comment out for cert renewal, then back in
// app.use(express.static(__dirname + '/public', { dotfiles: 'allow' }));
app.use('/favicons', express.static(path.join(__dirname, pjson.FAVICONS_CACHE_DIR)));
app.use('/static', express.static(path.join(__dirname, 'public')));
app.use('/bower', express.static(path.join(__dirname, 'bower_components')));
app.use('/introjs', express.static(path.join(__dirname, 'node_modules', 'intro.js', 'minified')));
app.use('/introjs', express.static(path.join(__dirname, 'node_modules', 'intro.js')));
app.use('/jquery', express.static(path.join(__dirname, 'node_modules', 'jquery', 'dist')));
app.use('/jquery-ui', express.static(path.join(__dirname, 'node_modules', 'jquery-ui-dist')));
app.use('/fancybox', express.static(path.join(__dirname, 'node_modules', '@fancyapps', 'fancybox', 'dist')));
app.use('/responsively-lazy', express.static(path.join(__dirname, 'node_modules', 'responsively-lazy')));
app.use('/rs', express.static(path.join(__dirname, 'node_modules', 'remotestoragejs', 'release')));
app.use('/rs-widget', express.static(path.join(__dirname, 'node_modules', 'remotestorage-widget', 'build')));
app.use('/dompurify', express.static(path.join(__dirname, 'node_modules', 'dompurify', 'dist')));
app.use('/mousetrap', express.static(path.join(__dirname, 'node_modules', 'mousetrap')));
app.use('/', router);
module.exports = app;
@font-face {
font-family: 'fontello';
src: url('../font/fontello.eot?77559127');
src: url('../font/fontello.eot?77559127#iefix') format('embedded-opentype'),
url('../font/fontello.woff2?77559127') format('woff2'),
url('../font/fontello.woff?77559127') format('woff'),
url('../font/fontello.ttf?77559127') format('truetype'),
url('../font/fontello.svg?77559127#fontello') format('svg');
src: url('../font/fontello.eot?1393632');
src: url('../font/fontello.eot?1393632#iefix') format('embedded-opentype'),
url('../font/fontello.woff2?1393632') format('woff2'),
url('../font/fontello.woff?1393632') format('woff'),
url('../font/fontello.ttf?1393632') format('truetype'),
url('../font/fontello.svg?1393632#fontello') format('svg');
font-weight: normal;
font-style: normal;
}
......@@ -15,7 +15,7 @@
@media screen and (-webkit-min-device-pixel-ratio:0) {
@font-face {
font-family: 'fontello';
src: url('../font/fontello.svg?77559127#fontello') format('svg');
src: url('../font/fontello.svg?1393632#fontello') format('svg');
}
}
*/
......@@ -59,8 +59,10 @@
.icon-search-circled:before { content: '\e802'; } /* '' */
.icon-upload:before { content: '\e803'; } /* '' */
.icon-up:before { content: '\e804'; } /* '' */
.icon-lock:before { content: '\e805'; } /* '' */
.icon-right:before { content: '\e806'; } /* '' */
.icon-rss:before { content: '\e807'; } /* '' */
.icon-warning:before { content: '\e808'; } /* '' */
.icon-petrolette:before { content: '\e80a'; } /* '' */
.icon-download:before { content: '\e80b'; } /* '' */
.icon-checked:before { content: '\e80f'; } /* '' */
......
......@@ -130,7 +130,7 @@ a:active {
}
.warning {
color: var(--color-ui-warning);
color: var(--color-ui-warning);
}
/* .fancybox-caption a, */
......@@ -185,6 +185,10 @@ li.ui-tabs-active > a:visited {
flex: 0 0 0;
}
body#js {
color: #FFFFFF;
}
table#jsLicenseTable td a:link {
text-decoration: underline;
}
......@@ -225,7 +229,7 @@ i.tabIcon,
margin: 0 5px;
}
p.dangerous {
.dangerous {
color: var(--color-ui-danger);
}
......@@ -447,9 +451,9 @@ i.tabCloser:hover {
text-transform: capitalize;
font-variant: small-caps;
margin-left: var(--title-margin-left);
overflow: hidden;
text-overflow: ellipsis;
color: var(--color-feed-title);
overflow: hidden;
width: 100px;
white-space: nowrap;
}
......@@ -653,11 +657,6 @@ select {
font-size: 1em;
}
fieldset {
border: 0;
/* padding-top: 0.1em; */
}
.sideMenuTitleToggleDiv {
color: var(--color-ui-pri);
}
......@@ -684,11 +683,6 @@ nav#sideMenu {
z-index: 11;
overflow: auto;
scrollbar-width: thin;
scrollbar-color: var(--color-scrollbar) var(--color-dialog-border);
}
nav#sideMenu:hover {
scrollbar-color: var(--color-link-hover) var(--color-dialog-border);
}
div#topNav {
......@@ -1108,7 +1102,6 @@ li.feed div.feedBody {
margin: 0;
overflow-y: auto;
scrollbar-width: thin;
scrollbar-color: var(--color-scrollbar) var(--color-dialog-border);
}
li.feed div.feedBody::-webkit-scrollbar {
......@@ -1124,10 +1117,6 @@ li.feed div.feedBody::-webkit-scrollbar-thumb {
background-color: var(--color-fg4);
}
li.feed div.feedBody:hover {
scrollbar-color: var(--color-link-hover) var(--color-dialog-border);
}
.folded {
height: 0 !important;
border-bottom: var(--color-background) !important;
......@@ -1210,9 +1199,13 @@ div.fancybox-caption a.ui-button.ui-corner-all:hover {
padding: 0.3em;
}
.ui-dialog span.messageTitle {
color: var(--color-danger);
}
/* .ui-dialog span.messageTitle { */
/* color: var(--color-link-hover); */
/* } */
/* .ui-dialog span.messageTitleErrorCode { */
/* color: var(--color-link-hover); */
/* } */
.ui-state-error {
background-color: var(--color-danger) !important;
......@@ -1298,6 +1291,16 @@ video {
/* UI SHIT */
.feedsListIcon {
margin: 0 .2em 0 0;
font-size: 1.2em;
flex: 0 1;
}
.feedsListDiv {
align-items: center;
}
#tabs {
overflow: hidden;
white-space: nowrap;
......@@ -1307,7 +1310,6 @@ video {
overflow-x: auto;
overflow-y: hidden;
scrollbar-width: thin;
scrollbar-color: var(--color-fg4) var(--color-bg1);
}
#tabs > ul > li {
......@@ -1376,9 +1378,31 @@ li.ui-tabs-tab {
border: 1px solid var(--color-dialog-border);
}
/* button:focus { */
/* background-color: red !important; */
/* } */
/* .feedsAddDivName { */
/* white-space: nowrap; */
/* overflow: hidden; */
/* /\* "overflow" value must be different from "visible" *\/ */
/* text-overflow: ellipsis; */
/* direction: rtl; */
/* text-align: left; */
/* } */
/* .feedsAddDivName { */
/* overflow: hidden; */
/* text-overflow: ellipsis; */
/* white-space: nowrap; */
/* } */
.introjs-button,
.introjs-button:focus,
.ui-button {
.ui-button-icon-only,
.ui-button-icon-only:focus,
.ui-button,
.ui-button:focus {
background: var(--color-button-bg);
color: var(--color-button-text) !important;
border: unset !important;
......@@ -1446,12 +1470,16 @@ select#gallerySlideTransition {
background-color: var(--color-button-bg-active);
}
/* .ui-widget-content, */
.ui-widget textarea,
.ui-widget-content,
.ui-widget-header {
border: none !important;
}
.ui-widget-content {
border: 1px solid #0b4f6f;
}
.ui-progressbar .ui-progressbar-value {
background-color: var(--color-button-bg-active);
margin: 0;
......@@ -1523,6 +1551,12 @@ input[type="text"] {
fieldset {
margin: 0;
border: 0;
}
fieldset {
margin: 0;
border: 0;
}
div#nagBar {
......
......@@ -3,7 +3,7 @@
--color-dim: #CCC;
--color-background: #202b38;
--color-dialog-bg: #1F262E;
--color-dialog-border: #1F262E;
--color-dialog-border: #19B5FE;
--color-scrollbar: #555;
--color-border: #1F262E;
--color-button-bg: #F6F6F6;
......
......@@ -223,6 +223,18 @@
"css": "search-circled",
"code": 59394,
"src": "elusive"
},
{
"uid": "95c84da411a955a12baff8b0859c9276",
"css": "lock",
"code": 59397,
"src": "websymbols"
},
{
"uid": "97ac1a82370ae58f02e4ff1bdc58ee86",
"css": "warning",
"code": 59400,
"src": "websymbols"
}
]
}
\ No newline at end of file
No preview for this file type
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>Copyright (C) 2021 by original authors @ fontello.com</metadata>
<metadata>Copyright (C) 2022 by original authors @ fontello.com</metadata>
<defs>
<font id="fontello" horiz-adv-x="1000" >
<font-face font-family="fontello" font-weight="400" font-stretch="normal" units-per-em="1000" ascent="850" descent="-150" />
......@@ -16,10 +16,14 @@
<glyph glyph-name="up" unicode="&#xe804;" d="M366 790l334-334q31-31 31-73t-31-74-74-31-73 31l-83 82 0-377q0-44-31-74t-73-30q-43 0-74 31t-31 73l0 377-82-82q-31-31-74-31t-74 31-31 74 31 73z" horiz-adv-x="731" />
<glyph glyph-name="lock" unicode="&#xe805;" d="M582 437v-356q0-32-32-32h-518q-32 0-32 32v356q0 10 3 17t7 10 12 5 13 2 16 0 14-1v127h1q9 87 74 141t153 53 151-62 71-152h1l2-107q4 0 15 1t15 0 13-2 12-5 6-10 3-17z m-161 162q0 51-37 74t-91 23q-53 0-92-25t-39-77v-124h259v129z" horiz-adv-x="582" />
<glyph glyph-name="right" unicode="&#xe806;" d="M0-2l352 352-352 352 148 148 352-351 148-149-148-148-352-352z" horiz-adv-x="648" />
<glyph glyph-name="rss" unicode="&#xe807;" d="M286 136q0 29-21 50t-51 21-50-21-21-50 21-51 50-21 51 21 21 51z m196-53q-8 130-99 222t-221 98q-8 1-14-5t-5-13v-71q0-7 5-12t12-6q86-6 147-68t67-147q1-7 6-12t12-5h72q7 0 13 6t5 13z m214 0q-3 86-31 166t-78 145-115 114-145 78-166 31q-7 1-13-5-5-5-5-13v-71q0-7 5-12t12-6q114-4 211-62t156-155 62-211q0-8 5-13t13-5h71q7 0 13 6 6 5 5 13z m161 535v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
<glyph glyph-name="warning" unicode="&#xe808;" d="M1113-70q0-39-27-60t-68-20h-923q-40 0-67 21t-28 59q0 30 18 61l461 804q33 55 78 55t76-55l462-805q18-32 18-60z m-487 511v146h-139v-146q0-14 2-26t6-28 5-27l26-162h59l27 162q2 10 6 26t6 29 2 26z m0-387q0 29-20 49t-50 20q-28 0-48-20t-21-49 21-49 48-21q29 0 50 21t20 49z" horiz-adv-x="1113" />
<glyph glyph-name="petrolette" unicode="&#xe80a;" d="M54 850c-18 0-36-10-46-27l0 0c-16-26-7-60 19-75l252-149 0-432c0-30 24-55 55-55 30 0 55 25 55 55l0 463c0 17-8 32-21 42-3 3-5 5-9 7l-276 163c-9 6-19 8-29 8z m892 0c-10 0-20-2-29-8l-276-163c-3-2-6-4-9-7-13-10-20-25-20-42l0-463c0-30 24-55 54-55 31 0 55 25 55 55l0 432 252 149c26 15 35 49 19 75l0 0c-10 17-28 27-46 27z m-446-48c-30 0-55-24-55-55l0-842c0-31 25-55 55-55 30 0 55 24 55 55l0 842c0 31-25 55-55 55z" horiz-adv-x="1000" />
<glyph glyph-name="download" unicode="&#xe80b;" d="M0 84v73q0 33 24 56t57 24 56-24 24-56v-73q0-17 12-29t30-13h531q18 0 30 13t12 29v73q0 33 24 56t56 24 57-24 24-56v-73q0-84-59-143t-144-60h-531q-84 0-144 60t-59 143z m155 359q0 33 24 57 23 23 56 23t57-23l105-106v344q0 33 24 57t56 23 57-23 24-57v-344l110 110q24 24 57 24t56-24q24-23 24-56t-24-57l-247-247q-24-25-57-25-32 0-56 25l-242 242q-24 24-24 57z" horiz-adv-x="937.5" />
......
No preview for this file type
......@@ -19,7 +19,7 @@ PTL.col = {
});
},
add: function(colIndex, newCol) {
add: function(colIndex) {
const $colButtons = $('<div>')
.attr('class', 'colButtons flexBox');
......@@ -30,29 +30,16 @@ PTL.col = {
.data('content', 'Column')
.text(PTL.tr('Column'));
const $srcLegend = $('<legend>')
.data('title', 'Feed')
.data('content', 'Feed')
.attr('class', 'colLegend unique translate')
.text(PTL.tr('Feed'));
const $column = $('<ul>')
.attr('class', 'column')
.append($colButtons);
const $srcNewButton = $('<button>')
.attr('title', PTL.tr('Add a feed to this column'))
.data('title', 'Add a feed to this column')
.attr('class', 'icon-plus unique translate newFeedButton button-column last')
.button()
.data('colIndex', colIndex);
const $colNewButton = $('<button>')
.attr('title', PTL.tr('Add a column'))
.data('title', 'Add a column')
.attr('class', 'icon-plus twin translate last')
.button()
.data('colIndex', colIndex);
.data('colIndex', colIndex)
.button();
const $colDelButton = $('<button>')
.attr('title', PTL.tr('Remove this column'))
......@@ -133,9 +120,7 @@ PTL.col = {
$colButtons
.append($colLegend,
$colDelButton,
$colNewButton,
$srcLegend,
$srcNewButton)
$colNewButton)
.addClass('ui-state-disabled');
return $column;
......
This diff is collapsed.
This diff is collapsed.
......@@ -84,7 +84,7 @@ PTL.i18n.translations = {
"A list of words" : { fr: "Une liste de mots", ja: "単語のリスト", es: "Una lista de palabras" },
"Pétrolette will build a search feed (using the configured search engine) that will display the last news about those words" : { fr: "Pétrolette construira un flux de recherche (en utilisant le moteur de recherche configuré) qui affichera les dernières nouvelles à propos de ces mots", ja: "Pétrolette は検索フィード (設定された検索エンジンを使用して) をビルドします。これらの単語に関する最後のニュースが表示されます。", es: "Pétrolette construirá una feed de búsqueda (utilizando el motor de búsqueda configurado) que mostrará las últimas noticias sobre esas palabras" },
"Pétrolette will build a search feed (using the configured search engine) that will display the last news about those words." : { fr: "Pétrolette construira un flux de recherche (en utilisant le moteur de recherche configuré) qui affichera les dernières nouvelles à propos de ces mots.", ja: "Pétrolette は検索フィード (設定された検索エンジンを使用して) をビルドします。これらの単語に関する最後のニュースが表示されます。", es: "Pétrolette construirá una feed de búsqueda (utilizando el motor de búsqueda configurado) que mostrará las últimas noticias sobre esas palabras." },
"Bookmark to quickly add a website\'s feed to Pétrolette" : { fr: "Marque-page pour ajouter le flux d'un site dans Pétrolette", ja: "ブックマークして、PétroletteにWebサイトのフィードを追加します", es: "Marcador para agregar el feed de un sitio web en Pétrolette" },
......@@ -198,6 +198,8 @@ PTL.i18n.translations = {
"This field cannot be empty" : { fr: "Ce champ ne peut pas être vide" , ja: "このフィールドを空にすることはできません", es: "Esta entrada de texto no puede estar vacía" },
"Some linked elements (image, audio or video) within this feed's items could not be loaded because they were served insecurely" : { fr: "Certains éléments liés (image, audio ou vidéo) dans les articles de ce flux n'ont pas pu être chargés, car ils sont diffusés de manière non sécurisée" , ja: "このフィードのアイテム内の一部のリンクされた要素(画像、音声、または動画)は、安全に提供されなかったため、読み込むことができませんでした", es: "Algunos elementos vinculados (imagen, audio o video) dentro de los elementos de este feed no se pudieron cargar porque se publicaron de manera insegura." },
"Add a feed to this column" : { fr: "Ajouter un flux à cette colonne" , ja: "この列にソースを追加する", es: "Agregar una feed a esta columna" },
"Keyboard shortcuts" : { fr: "Raccourcis clavier" , ja: "キーボードショートカット", es: "Atajos de teclado" },
......@@ -439,8 +441,6 @@ PTL.i18n.translations = {
"There was a problem writing to remote storage: [%1]" : { fr: "Un problème est survenu lors de l'écriture sur le stockage distant: [%1]" , ja: "リモートストレージへの書き込みに問題がありました:[%1]", es: "Hubo un problema al escribir en el almacenamiento remoto: [%1]" },
"Problem reading feed [%1] Error type [%2]" : { fr: "Problème lecture flux [%1] Type d'erreur [%2]", ja: "問題の読書の問題[%1]エラータイプ[%2]", es: "Problema al leer la feed [%1] Tipo de error [%2]" },
"Error type" : { fr: "Type d'erreur", ja: "エラータイプ", es: "Tipo de error" },
"Bad server response" : { fr: "Mauvaise réponse du serveur", ja: "バッドサーバーレスポンス", es: "Respuesta de servidor mala" },
......@@ -449,6 +449,8 @@ PTL.i18n.translations = {
"No feed found at this URL" : { fr: "Aucun flux trouvé à cette URL", ja: "このアドレスで見つかったソースなし", es: "No hay feed encontrada en esta URL" },
"Pétrolette found %1 feeds at this URL" : { fr: "Pétrolette a trouvé %1 flux à cette URL", ja: "PétroletteはこのURLで%1つのフィードを見つけました", es: "Pétrolette encontró %1 feeds en esta URL" },
"Main menu" : { fr: "Menu principal", ja: "メインメニュー", es: "Menú principal" },
// Dialogues
......@@ -484,10 +486,7 @@ PTL.i18n.translations = {
"Explore!" : { fr: "Exploration !", ja: "探査!", es: "¡Exploración!" },
"Enter a website address/URL and click search, then OK, or simply enter the URL of the feed and click OK" : { fr: "Entrer l'adresse / URL d'un site Web, puis cliquer sur Rechercher et valider, ou directement l'adresse d'un flux et valider", ja: "ウェブサイトのアドレス/ URLを入力して[検索]をクリックし、次に[OK]をクリックするか、フィードの場所", es: "Ingrese la dirección / URL de un sitio web y haga clic en buscar, luego en Aceptar o ingrese directamente la ubicación del feed" },
"Enter a website address/URL and click search, then OK, or simply enter the URL of the" : { fr: "Entrez une adresse / URL de site Web et cliquez sur Rechercher, puis sur OK, ou entrez simplement l'URL du", ja: "ウェブサイトのアドレス/ URLを入力して[検索]、[OK]の順にクリックするか、単にURLを入力します", es: "Ingrese la dirección / URL de un sitio web y haga clic en buscar, luego OK, o simplemente ingrese la URL del" },
"URL or search terms" : { fr: "URL ou termes de recherche", ja: "URLまたは検索用語", es: "URL o términos de búsqueda" },
"If what you enter is not a regular URL (an internet location in the form of \"http...\") Pétrolette will build a search feed using the words" : { fr: "Si ce que vous entrez n'est pas une URL (une adresse Internet commençant par \"http ...\"), Pétrolette construira un flux de recherche en utilisant les mots", ja: "入力したものが通常のURLではない場合( \"HTTP ...\"の形のインターネットの場所)Pétroletteは単語を使って検索フィードを作成します", es: "Si lo que ingresa no es una URL regular (una ubicación en Internet en forma de \"http ...\"), Pétrolette construirá un feed de búsqueda con las palabras" },
......
This diff is collapsed.
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment