1
mirror of https://invent.kde.org/network/falkon.git synced 2024-09-21 09:42:10 +02:00

Speed Dial: Fixed issues with ' and " characters in input fields

closes #455
This commit is contained in:
nowrep 2012-07-14 16:19:33 +02:00
parent 86c58ff9a2
commit 2396f55068
4 changed files with 52 additions and 15 deletions

View File

@ -2,6 +2,7 @@ Version 1.3.1
* not yet released * not yet released
* Ctrl+= shortcut for + zoom in webview * Ctrl+= shortcut for + zoom in webview
* Ctrl+Enter shortcut in PIM plugin now also works with enter on numpad * Ctrl+Enter shortcut in PIM plugin now also works with enter on numpad
* fixed ' and " chars in speed dial's input fields
* fixed zooming with Ctrl+Wheel for some users * fixed zooming with Ctrl+Wheel for some users
* fixed issues with cookies filtering * fixed issues with cookies filtering
* fixed $subdocument matching in AdBlock * fixed $subdocument matching in AdBlock

View File

@ -3,7 +3,7 @@
<title>%SITE-TITLE%</title> <title>%SITE-TITLE%</title>
<link rel="icon" href="%FAVICON%" type="image/x-icon" /> <link rel="icon" href="%FAVICON%" type="image/x-icon" />
<style type="text/css" media="screen"> <style type="text/css" media="screen">
body {background: #eeeeee url('%IMG_BACKGROUND%') no-repeat center center;background-size: %B_SIZE%;font: 13px/22px "Helvetica Neue", Helvetica, Arial, sans-serif;color: #525c66;} body {background: #eeeeee url("%IMG_BACKGROUND%") no-repeat center center;background-size: %B_SIZE%;font: 13px/22px "Helvetica Neue", Helvetica, Arial, sans-serif;color: #525c66;}
body * {-webkit-user-select: none;font-size: 100%;line-height: 1.6;margin: 0px;} body * {-webkit-user-select: none;font-size: 100%;line-height: 1.6;margin: 0px;}
.add {position: absolute;right:10px;top:10px;width: 24px;height: 24px;background: url(%IMG_PLUS%); cursor: pointer;} .add {position: absolute;right:10px;top:10px;width: 24px;height: 24px;background: url(%IMG_PLUS%); cursor: pointer;}
@ -35,7 +35,7 @@ span.reload:hover {border-color: grey; border-radius: 4px;}
#settingsBox {margin-left:auto;margin-right: auto;margin-top: 100px;width: 350px;height: auto;padding:0 8px;-webkit-border-image: url(%BOX-BORDER%) 25;-webkit-box-shadow: 0px 5px 80px #505050;border-radius:10px;border-width: 20px;} #settingsBox {margin-left:auto;margin-right: auto;margin-top: 100px;width: 350px;height: auto;padding:0 8px;-webkit-border-image: url(%BOX-BORDER%) 25;-webkit-box-shadow: 0px 5px 80px #505050;border-radius:10px;border-width: 20px;}
#settingsBox .content {margin-left:auto;margin-right:auto;padding-bottom:2px;border-bottom: 1px solid #888;} #settingsBox .content {margin-left:auto;margin-right:auto;padding-bottom:2px;border-bottom: 1px solid #888;}
#settingsBox .thumbhold {margin-left:auto;margin-right:auto;margin-bottom: 5px;padding: 1px;border-radius: 10px;text-align:center;width:180px;height:100px;background: #AAA;} #settingsBox .thumbhold {margin-left:auto;margin-right:auto;margin-bottom: 5px;padding: 1px;border-radius: 10px;text-align:center;width:180px;height:100px;background: #AAA;}
#settingsBox .thumbhold p {padding: 0;background: #eeeeee url('%IMG_BACKGROUND%') no-repeat center center;background-size: %B_SIZE%;width: 178px;height:98px;border-radius: 10px;position: relative;left: 1px;top: 1px;line-height:98px;cursor:default;} #settingsBox .thumbhold p {padding: 0;background: #eeeeee url("%IMG_BACKGROUND%") no-repeat center center;background-size: %B_SIZE%;width: 178px;height:98px;border-radius: 10px;position: relative;left: 1px;top: 1px;line-height:98px;cursor:default;}
#settingsBox p label {margin: 2px;padding: 1px;text-align: center;} #settingsBox p label {margin: 2px;padding: 1px;text-align: center;}
#settingsBox p select {margin: 2px;padding: 1px;text-align: center;width: auto;} #settingsBox p select {margin: 2px;padding: 1px;text-align: center;width: auto;}
#settingsBox p select option {text-align: center;} #settingsBox p select option {text-align: center;}
@ -65,6 +65,24 @@ var DIAL_WIDTH = %SD-SIZE%;
var editingId = -1; var editingId = -1;
function escapeTitle(title) {
title = title.replace(/"/g, '&quot;');
title = title.replace(/'/g, '&apos;');
return title;
}
function unescapeTitle(title) {
title = title.replace(/&quot;/g, '"');
title = title.replace(/&apos;/g, '\'');
return title;
}
function escapeUrl(url) {
url = url.replace(/"/g, '');
url = url.replace(/'/g, '');
return url;
}
function onRemoveClick(box) { function onRemoveClick(box) {
removeBox($(box).index()); removeBox($(box).index());
} }
@ -94,7 +112,7 @@ function hideEditBox() {
function onEditClick(box) { function onEditClick(box) {
editingId = $(box).index(); editingId = $(box).index();
var boxUrl = $(box).children('a').first().attr('href'); var boxUrl = $(box).children('a').first().attr('href');
var boxTitle = $(box).children('span').first().text(); var boxTitle = escapeTitle($(box).children('span').first().text());
if (boxUrl === '') if (boxUrl === '')
boxUrl = 'http://'; boxUrl = 'http://';
@ -160,9 +178,10 @@ function allPages() {
var titles = $('span[class="boxTitle"]'); var titles = $('span[class="boxTitle"]');
var value = ""; var value = "";
$('div.entry').each(function(i) { $('div.entry').each(function(i) {
var url = $(this).children('a').first().attr('href').replace('"', '').replace(';',''); var url = $(this).children('a').first().attr('href');
var title = $(this).children('span[class="boxTitle"]').first().text().replace('"', '').replace(';',''); var title = $(this).children('span[class="boxTitle"]').first().text();
value += 'url:"' + url + '"|title:"' + title + '";';
value += 'url:"' + escapeUrl(url) + '"|title:"' + escapeTitle(title) + '";';
}); });
return value; return value;
@ -178,7 +197,7 @@ function addBox(url, title, img_source) {
a.setAttribute('class', 'boxUrl'); a.setAttribute('class', 'boxUrl');
var span1 = document.createElement('span'); var span1 = document.createElement('span');
span1.setAttribute('class', 'boxTitle'); span1.setAttribute('class', 'boxTitle');
span1.appendChild( document.createTextNode(title) ); span1.innerText = unescapeTitle(title);
var span2 = document.createElement('span'); var span2 = document.createElement('span');
span2.setAttribute('class', 'edit'); span2.setAttribute('class', 'edit');
span2.setAttribute('onClick', 'onEditClick(parentNode)'); span2.setAttribute('onClick', 'onEditClick(parentNode)');
@ -331,7 +350,7 @@ function bgImgToggle() {
BgImgSel.disabled = (check.checked ? false : true); BgImgSel.disabled = (check.checked ? false : true);
BgImgHold.disabled = (check.checked ? false : true); BgImgHold.disabled = (check.checked ? false : true);
BgImgSz.disabled = (check.checked ? false : true); BgImgSz.disabled = (check.checked ? false : true);
BgImgHold.value = (check.checked ? '%IMG_BACKGROUND%' : ''); BgImgHold.value = (check.checked ? "%IMG_BACKGROUND%" : '');
} }
function sdSizeToggle() { function sdSizeToggle() {
@ -359,7 +378,7 @@ function bgImgUpdate() {
$(document).ready(function () { $(document).ready(function () {
$('#BgImgSelSiz').val('%B_SIZE%').attr('selected','selected'); $('#BgImgSelSiz').val('%B_SIZE%').attr('selected','selected');
var bgImg = '%IMG_BACKGROUND%'; var bgImg = "%IMG_BACKGROUND%";
var sdSize = 'DIAL_WIDTH'; var sdSize = 'DIAL_WIDTH';
bgImg == '' ? $('#BgImgToggle').prop('checked', false) : $('#BgImgToggle').prop('checked', true) bgImg == '' ? $('#BgImgToggle').prop('checked', false) : $('#BgImgToggle').prop('checked', true)
sdSize == '231' ? $('#SdSizeToggle').prop('checked', false) : $('#SdSizeToggle').prop('checked', true) sdSize == '231' ? $('#SdSizeToggle').prop('checked', false) : $('#SdSizeToggle').prop('checked', true)

View File

@ -129,8 +129,8 @@ void SpeedDial::addPage(const QUrl &url, const QString &title)
} }
Page page; Page page;
page.title = title; page.title = escapeTitle(title);
page.url = url.toString(); page.url = escapeUrl(url.toString());
m_webPages.append(page); m_webPages.append(page);
m_regenerateScript = true; m_regenerateScript = true;
@ -283,12 +283,12 @@ QString SpeedDial::getOpenFileName()
return image; return image;
} }
return QUrl::fromLocalFile(image).toString(); return QUrl::fromLocalFile(image).toEncoded();
} }
QString SpeedDial::urlFromUserInput(const QString &url) QString SpeedDial::urlFromUserInput(const QString &url)
{ {
return QUrl::fromUserInput(url).toString().remove('\''); return QUrl::fromUserInput(url).toString();
} }
void SpeedDial::setBackgroundImage(const QString &image) void SpeedDial::setBackgroundImage(const QString &image)
@ -340,15 +340,29 @@ void SpeedDial::thumbnailCreated(const QPixmap &pixmap)
cleanFrames(); cleanFrames();
foreach(QWebFrame * frame, cleanFrames()) { foreach(QWebFrame * frame, cleanFrames()) {
frame->evaluateJavaScript(QString("setImageToUrl('%1', '%2');").arg(url, fileName)); frame->evaluateJavaScript(QString("setImageToUrl('%1', '%2');").arg(escapeUrl(url), escapeTitle(fileName)));
if (loadTitle) { if (loadTitle) {
frame->evaluateJavaScript(QString("setTitleToUrl('%1', '%2');").arg(url, title)); frame->evaluateJavaScript(QString("setTitleToUrl('%1', '%2');").arg(escapeUrl(url), escapeTitle(title)));
} }
} }
thumbnailer->deleteLater(); thumbnailer->deleteLater();
} }
QString SpeedDial::escapeTitle(QString title) const
{
title.replace('"', "&quot;");
title.replace('\'', "&apos;");
return title;
}
QString SpeedDial::escapeUrl(QString url) const
{
url.remove('"');
url.remove('\'');
return url;
}
QList<QWebFrame*> SpeedDial::cleanFrames() QList<QWebFrame*> SpeedDial::cleanFrames()
{ {
QList<QWebFrame*> list; QList<QWebFrame*> list;

View File

@ -80,6 +80,9 @@ private slots:
void thumbnailCreated(const QPixmap &pixmap); void thumbnailCreated(const QPixmap &pixmap);
private: private:
QString escapeTitle(QString string) const;
QString escapeUrl(QString url) const;
QList<QWebFrame*> cleanFrames(); QList<QWebFrame*> cleanFrames();
QString generateAllPages(); QString generateAllPages();