summaryrefslogtreecommitdiffstats
path: root/kcontrol/konqhtml/jspolicies.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kcontrol/konqhtml/jspolicies.cpp')
-rw-r--r--kcontrol/konqhtml/jspolicies.cpp407
1 files changed, 407 insertions, 0 deletions
diff --git a/kcontrol/konqhtml/jspolicies.cpp b/kcontrol/konqhtml/jspolicies.cpp
new file mode 100644
index 000000000..d4afbbd1d
--- /dev/null
+++ b/kcontrol/konqhtml/jspolicies.cpp
@@ -0,0 +1,407 @@
+/*
+ Copyright (c) 2002 Leo Savernik <l.savernik@aon.at>
+ Derived from jsopt.cpp, code copied from there is copyrighted to its
+ respective owners.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+*/
+
+#include <qbuttongroup.h>
+#include <qlabel.h>
+#include <qlayout.h>
+#include <qradiobutton.h>
+#include <qwhatsthis.h>
+
+#include <kconfig.h>
+#include <kdebug.h>
+#include <klocale.h>
+
+#include "jspolicies.h"
+
+// == class JSPolicies ==
+
+JSPolicies::JSPolicies(KConfig* config,const QString &group,
+ bool global,const QString &domain) :
+ Policies(config,group,global,domain,"javascript.","EnableJavaScript") {
+}
+
+JSPolicies::JSPolicies() : Policies(0,QString::null,false,
+ QString::null,QString::null,QString::null) {
+}
+
+JSPolicies::~JSPolicies() {
+}
+
+void JSPolicies::load() {
+ Policies::load();
+
+ QString key;
+
+// enableJavaScriptDebugCB->setChecked( m_pConfig->readBoolEntry("EnableJavaScriptDebug",false));
+// enableDebugOutputCB->setChecked( m_pConfig->readBoolEntry("EnableJSDebugOutput") );
+ key = prefix + "WindowOpenPolicy";
+ window_open = config->readUnsignedNumEntry(key,
+ is_global ? KHTMLSettings::KJSWindowOpenSmart : INHERIT_POLICY);
+
+ key = prefix + "WindowResizePolicy";
+ window_resize = config->readUnsignedNumEntry(key,
+ is_global ? KHTMLSettings::KJSWindowResizeAllow : INHERIT_POLICY);
+
+ key = prefix + "WindowMovePolicy";
+ window_move = config->readUnsignedNumEntry(key,
+ is_global ? KHTMLSettings::KJSWindowMoveAllow : INHERIT_POLICY);
+
+ key = prefix + "WindowFocusPolicy";
+ window_focus = config->readUnsignedNumEntry(key,
+ is_global ? KHTMLSettings::KJSWindowFocusAllow : INHERIT_POLICY);
+
+ key = prefix + "WindowStatusPolicy";
+ window_status = config->readUnsignedNumEntry(key,
+ is_global ? KHTMLSettings::KJSWindowStatusAllow : INHERIT_POLICY);
+}
+
+void JSPolicies::defaults() {
+ Policies::defaults();
+// enableJavaScriptGloballyCB->setChecked( true );
+// enableJavaScriptDebugCB->setChecked( false );
+// js_popup->setButton(0);
+ // enableDebugOutputCB->setChecked( false );
+ window_open = is_global ? KHTMLSettings::KJSWindowOpenSmart : INHERIT_POLICY;
+ window_resize = is_global ? KHTMLSettings::KJSWindowResizeAllow : INHERIT_POLICY;
+ window_move = is_global ? KHTMLSettings::KJSWindowMoveAllow : INHERIT_POLICY;
+ window_focus = is_global ? KHTMLSettings::KJSWindowFocusAllow : INHERIT_POLICY;
+ window_status = is_global ? KHTMLSettings::KJSWindowStatusAllow : INHERIT_POLICY;
+}
+
+void JSPolicies::save() {
+ Policies::save();
+
+ QString key;
+ key = prefix + "WindowOpenPolicy";
+ if (window_open != INHERIT_POLICY)
+ config->writeEntry(key, window_open);
+ else
+ config->deleteEntry(key);
+
+ key = prefix + "WindowResizePolicy";
+ if (window_resize != INHERIT_POLICY)
+ config->writeEntry(key, window_resize);
+ else
+ config->deleteEntry(key);
+
+ key = prefix + "WindowMovePolicy";
+ if (window_move != INHERIT_POLICY)
+ config->writeEntry(key, window_move);
+ else
+ config->deleteEntry(key);
+
+ key = prefix + "WindowFocusPolicy";
+ if (window_focus != INHERIT_POLICY)
+ config->writeEntry(key, window_focus);
+ else
+ config->deleteEntry(key);
+
+ key = prefix + "WindowStatusPolicy";
+ if (window_status != INHERIT_POLICY)
+ config->writeEntry(key, window_status);
+ else
+ config->deleteEntry(key);
+
+ // don't do a config->sync() here for sake of efficiency
+}
+
+// == class JSPoliciesFrame ==
+
+JSPoliciesFrame::JSPoliciesFrame(JSPolicies *policies, const QString &title,
+ QWidget* parent) :
+ QGroupBox(title, parent, "jspoliciesframe"),
+ policies(policies) {
+
+ bool is_per_domain = !policies->isGlobal();
+
+ setColumnLayout(0, Qt::Vertical);
+ layout()->setSpacing(0);
+ layout()->setMargin(0);
+ QGridLayout *this_layout = new QGridLayout(layout(),5,10+is_per_domain*2);
+ this_layout->setAlignment(Qt::AlignTop);
+ this_layout->setSpacing(3);
+ this_layout->setMargin(11);
+
+ QString wtstr; // what's this description
+ int colIdx; // column index
+
+ // === window.open ================================
+ colIdx = 0;
+ QLabel *label = new QLabel(i18n("Open new windows:"),this);
+ this_layout->addWidget(label,0,colIdx++);
+
+ js_popup = new QButtonGroup(this);
+ js_popup->setExclusive(true);
+ js_popup->setHidden(true);
+
+ QRadioButton* policy_btn;
+ if (is_per_domain) {
+ policy_btn = new QRadioButton(i18n("Use global"), this);
+ QWhatsThis::add(policy_btn,i18n("Use setting from global policy."));
+ js_popup->insert(policy_btn,INHERIT_POLICY);
+ this_layout->addWidget(policy_btn,0,colIdx++);
+ this_layout->addItem(new QSpacerItem(10,0),0,colIdx++);
+ }/*end if*/
+
+ policy_btn = new QRadioButton(i18n("Allow"), this);
+ QWhatsThis::add(policy_btn,i18n("Accept all popup window requests."));
+ js_popup->insert(policy_btn,KHTMLSettings::KJSWindowOpenAllow);
+ this_layout->addWidget(policy_btn,0,colIdx++);
+ this_layout->addItem(new QSpacerItem(10,0),0,colIdx++);
+
+ policy_btn = new QRadioButton(i18n("Ask"), this);
+ QWhatsThis::add(policy_btn,i18n("Prompt every time a popup window is requested."));
+ js_popup->insert(policy_btn,KHTMLSettings::KJSWindowOpenAsk);
+ this_layout->addWidget(policy_btn,0,colIdx++);
+ this_layout->addItem(new QSpacerItem(10,0),0,colIdx++);
+
+ policy_btn = new QRadioButton(i18n("Deny"), this);
+ QWhatsThis::add(policy_btn,i18n("Reject all popup window requests."));
+ js_popup->insert(policy_btn,KHTMLSettings::KJSWindowOpenDeny);
+ this_layout->addWidget(policy_btn,0,colIdx++);
+ this_layout->addItem(new QSpacerItem(10,0),0,colIdx++);
+
+ policy_btn = new QRadioButton(i18n("Smart"), this);
+ QWhatsThis::add(policy_btn, i18n("Accept popup window requests only when "
+ "links are activated through an explicit "
+ "mouse click or keyboard operation."));
+ js_popup->insert(policy_btn,KHTMLSettings::KJSWindowOpenSmart);
+ this_layout->addWidget(policy_btn,0,colIdx++);
+ this_layout->addItem(new QSpacerItem(10,0),0,colIdx++);
+
+ wtstr = i18n("If you disable this, Konqueror will stop "
+ "interpreting the <i>window.open()</i> "
+ "JavaScript command. This is useful if you "
+ "regularly visit sites that make extensive use "
+ "of this command to pop up ad banners.<br>"
+ "<br><b>Note:</b> Disabling this option might "
+ "also break certain sites that require <i>"
+ "window.open()</i> for proper operation. Use "
+ "this feature carefully.");
+ QWhatsThis::add(label, wtstr);
+ connect(js_popup, SIGNAL(clicked(int)), SLOT(setWindowOpenPolicy(int)));
+
+ // === window.resizeBy/resizeTo ================================
+ colIdx = 0;
+ label = new QLabel(i18n("Resize window:"),this);
+ this_layout->addWidget(label,1,colIdx++);
+
+ js_resize = new QButtonGroup(this);
+ js_resize->setExclusive(true);
+ js_resize->setHidden(true);
+
+ if (is_per_domain) {
+ policy_btn = new QRadioButton(i18n("Use global"), this);
+ QWhatsThis::add(policy_btn,i18n("Use setting from global policy."));
+ js_resize->insert(policy_btn,INHERIT_POLICY);
+ this_layout->addWidget(policy_btn,1,colIdx++);
+ this_layout->addItem(new QSpacerItem(10,0),0,colIdx++);
+ }/*end if*/
+
+ policy_btn = new QRadioButton(i18n("Allow"), this);
+ QWhatsThis::add(policy_btn,i18n("Allow scripts to change the window size."));
+ js_resize->insert(policy_btn,KHTMLSettings::KJSWindowResizeAllow);
+ this_layout->addWidget(policy_btn,1,colIdx++);
+ this_layout->addItem(new QSpacerItem(10,0),0,colIdx++);
+
+ policy_btn = new QRadioButton(i18n("Ignore"), this);
+ QWhatsThis::add( policy_btn,i18n("Ignore attempts of scripts to change the window size. "
+ "The web page will <i>think</i> it changed the "
+ "size but the actual window is not affected."));
+ js_resize->insert(policy_btn,KHTMLSettings::KJSWindowResizeIgnore);
+ this_layout->addWidget(policy_btn,1,colIdx++);
+ this_layout->addItem(new QSpacerItem(10,0),0,colIdx++);
+
+ wtstr = i18n("Some websites change the window size on their own by using "
+ "<i>window.resizeBy()</i> or <i>window.resizeTo()</i>. "
+ "This option specifies the treatment of such "
+ "attempts.");
+ QWhatsThis::add(label, wtstr);
+ connect(js_resize, SIGNAL(clicked(int)), SLOT(setWindowResizePolicy(int)));
+
+ // === window.moveBy/moveTo ================================
+ colIdx = 0;
+ label = new QLabel(i18n("Move window:"),this);
+ this_layout->addWidget(label,2,colIdx++);
+
+ js_move = new QButtonGroup(this);
+ js_move->setExclusive(true);
+ js_move->setHidden(true);
+
+ if (is_per_domain) {
+ policy_btn = new QRadioButton(i18n("Use global"), this);
+ QWhatsThis::add(policy_btn,i18n("Use setting from global policy."));
+ js_move->insert(policy_btn,INHERIT_POLICY);
+ this_layout->addWidget(policy_btn,2,colIdx++);
+ this_layout->addItem(new QSpacerItem(10,0),0,colIdx++);
+ }/*end if*/
+
+ policy_btn = new QRadioButton(i18n("Allow"), this);
+ QWhatsThis::add(policy_btn,i18n("Allow scripts to change the window position."));
+ js_move->insert(policy_btn,KHTMLSettings::KJSWindowMoveAllow);
+ this_layout->addWidget(policy_btn,2,colIdx++);
+ this_layout->addItem(new QSpacerItem(10,0),0,colIdx++);
+
+ policy_btn = new QRadioButton(i18n("Ignore"), this);
+ QWhatsThis::add(policy_btn,i18n("Ignore attempts of scripts to change the window position. "
+ "The web page will <i>think</i> it moved the "
+ "window but the actual position is not affected."));
+ js_move->insert(policy_btn,KHTMLSettings::KJSWindowMoveIgnore);
+ this_layout->addWidget(policy_btn,2,colIdx++);
+ this_layout->addItem(new QSpacerItem(10,0),0,colIdx++);
+
+ wtstr = i18n("Some websites change the window position on their own by using "
+ "<i>window.moveBy()</i> or <i>window.moveTo()</i>. "
+ "This option specifies the treatment of such "
+ "attempts.");
+ QWhatsThis::add(label, wtstr);
+ connect(js_move, SIGNAL(clicked(int)), SLOT(setWindowMovePolicy(int)));
+
+ // === window.focus ================================
+ colIdx = 0;
+ label = new QLabel(i18n("Focus window:"),this);
+ this_layout->addWidget(label,3,colIdx++);
+
+ js_focus = new QButtonGroup(this);
+ js_focus->setExclusive(true);
+ js_focus->setHidden(true);
+
+ if (is_per_domain) {
+ policy_btn = new QRadioButton(i18n("Use global"), this);
+ QWhatsThis::add(policy_btn,i18n("Use setting from global policy."));
+ js_focus->insert(policy_btn,INHERIT_POLICY);
+ this_layout->addWidget(policy_btn,3,colIdx++);
+ this_layout->addItem(new QSpacerItem(10,0),0,colIdx++);
+ }/*end if*/
+
+ policy_btn = new QRadioButton(i18n("Allow"), this);
+ QWhatsThis::add( policy_btn,i18n("Allow scripts to focus the window.") );
+ js_focus->insert(policy_btn,KHTMLSettings::KJSWindowFocusAllow);
+ this_layout->addWidget(policy_btn,3,colIdx++);
+ this_layout->addItem(new QSpacerItem(10,0),0,colIdx++);
+
+ policy_btn = new QRadioButton(i18n("Ignore"), this);
+ QWhatsThis::add( policy_btn,i18n("Ignore attempts of scripts to focus the window. "
+ "The web page will <i>think</i> it brought "
+ "the focus to the window but the actual "
+ "focus will remain unchanged.") );
+ js_focus->insert(policy_btn,KHTMLSettings::KJSWindowFocusIgnore);
+ this_layout->addWidget(policy_btn,3,colIdx++);
+ this_layout->addItem(new QSpacerItem(10,0),0,colIdx++);
+
+ wtstr = i18n("Some websites set the focus to their browser window on their "
+ "own by using <i>window.focus()</i>. This usually leads to "
+ "the window being moved to the front interrupting whatever "
+ "action the user was dedicated to at that time. "
+ "This option specifies the treatment of such "
+ "attempts.");
+ QWhatsThis::add(label, wtstr);
+ connect(js_focus, SIGNAL(clicked(int)), SLOT(setWindowFocusPolicy(int)));
+
+ // === window.status ================================
+ colIdx = 0;
+ label = new QLabel(i18n("Modify status bar text:"),this);
+ this_layout->addWidget(label,4,colIdx++);
+
+ js_statusbar = new QButtonGroup(this);
+ js_statusbar->setExclusive(true);
+ js_statusbar->setHidden(true);
+
+ if (is_per_domain) {
+ policy_btn = new QRadioButton(i18n("Use global"), this);
+ QWhatsThis::add(policy_btn,i18n("Use setting from global policy."));
+ js_statusbar->insert(policy_btn,INHERIT_POLICY);
+ this_layout->addWidget(policy_btn,4,colIdx++);
+ this_layout->addItem(new QSpacerItem(10,0),0,colIdx++);
+ }/*end if*/
+
+ policy_btn = new QRadioButton(i18n("Allow"), this);
+ QWhatsThis::add(policy_btn,i18n("Allow scripts to change the text of the status bar."));
+ js_statusbar->insert(policy_btn,KHTMLSettings::KJSWindowStatusAllow);
+ this_layout->addWidget(policy_btn,4,colIdx++);
+ this_layout->addItem(new QSpacerItem(10,0),0,colIdx++);
+
+ policy_btn = new QRadioButton(i18n("Ignore"), this);
+ QWhatsThis::add( policy_btn,i18n("Ignore attempts of scripts to change the status bar text. "
+ "The web page will <i>think</i> it changed "
+ "the text but the actual text will remain "
+ "unchanged.") );
+ js_statusbar->insert(policy_btn,KHTMLSettings::KJSWindowStatusIgnore);
+ this_layout->addWidget(policy_btn,4,colIdx++);
+ this_layout->addItem(new QSpacerItem(10,0),0,colIdx++);
+
+ wtstr = i18n("Some websites change the status bar text by setting "
+ "<i>window.status</i> or <i>window.defaultStatus</i>, "
+ "thus sometimes preventing displaying the real URLs of hyperlinks. "
+ "This option specifies the treatment of such "
+ "attempts.");
+ QWhatsThis::add(label, wtstr);
+ connect(js_statusbar, SIGNAL(clicked(int)), SLOT(setWindowStatusPolicy(int)));
+}
+
+JSPoliciesFrame::~JSPoliciesFrame() {
+}
+
+void JSPoliciesFrame::refresh() {
+ QRadioButton *button;
+ button = static_cast<QRadioButton *>(js_popup->find(
+ policies->window_open));
+ if (button != 0) button->setChecked(true);
+ button = static_cast<QRadioButton *>(js_resize->find(
+ policies->window_resize));
+ if (button != 0) button->setChecked(true);
+ button = static_cast<QRadioButton *>(js_move->find(
+ policies->window_move));
+ if (button != 0) button->setChecked(true);
+ button = static_cast<QRadioButton *>(js_focus->find(
+ policies->window_focus));
+ if (button != 0) button->setChecked(true);
+ button = static_cast<QRadioButton *>(js_statusbar->find(
+ policies->window_status));
+ if (button != 0) button->setChecked(true);
+}
+
+void JSPoliciesFrame::setWindowOpenPolicy(int id) {
+ policies->window_open = id;
+ emit changed();
+}
+
+void JSPoliciesFrame::setWindowResizePolicy(int id) {
+ policies->window_resize = id;
+ emit changed();
+}
+
+void JSPoliciesFrame::setWindowMovePolicy(int id) {
+ policies->window_move = id;
+ emit changed();
+}
+
+void JSPoliciesFrame::setWindowFocusPolicy(int id) {
+ policies->window_focus = id;
+ emit changed();
+}
+
+void JSPoliciesFrame::setWindowStatusPolicy(int id) {
+ policies->window_status = id;
+ emit changed();
+}
+
+#include "jspolicies.moc"