diff options
author | Michele Calgaro <michele.calgaro@yahoo.it> | 2025-08-28 22:44:34 +0900 |
---|---|---|
committer | Michele Calgaro <michele.calgaro@yahoo.it> | 2025-08-31 23:30:34 +0900 |
commit | f9abd9d505434c9244c03eac708e29a0ca042f6b (patch) | |
tree | 30a197ab4c413849188bc131ff859212e636c821 /src/app/KrJS/krjs.cpp | |
parent | 14d42d284de233f9937becf3fc9ee0dabede3b21 (diff) | |
download | krusader-r14.1.x.tar.gz krusader-r14.1.x.zip |
Restructure source foldersr14.1.x
Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it>
(cherry picked from commit 086012dcad8a976a0dabbb7cbc20c9cb612cdfa9)
Diffstat (limited to 'src/app/KrJS/krjs.cpp')
-rw-r--r-- | src/app/KrJS/krjs.cpp | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/src/app/KrJS/krjs.cpp b/src/app/KrJS/krjs.cpp new file mode 100644 index 0000000..8d1cffb --- /dev/null +++ b/src/app/KrJS/krjs.cpp @@ -0,0 +1,89 @@ +// Implementation of our JavaScript-Interpreter +// +// Author: Jonas B�r (C) 2005 +// +// Copyright: See COPYING file that comes with this distribution +// + +#include "krjs.h" + +#include "../krusader.h" +#include "../krusaderview.h" +#include "../panelmanager.h" + +#include <tdemessagebox.h> + +KrJS::KrJS() : KJSEmbed::KJSEmbedPart() { + + // make this object, the object Krusader, available for scripting as "Krusader": + addObject( krApp, "Krusader" ); + + // make this object available for scripting + addObject( ACTIVE_MNG, "PanelManager" ); +} + +bool KrJS::runFile(const TQString & filename) { + + KJS::ExecState *exec = globalExec(); + + // set up the variable scriptDir with the directory of the current script + putValue( "scriptDir", KJSEmbed::convertToValue(exec, KURL(filename).directory(false) ) ); + + bool ok = KJSEmbedPart::runFile(filename); + + KJS::Completion jsres = completion(); + + // this is based on this example-code http://webcvs.kde.org/tdebindings/kjsembed/kjscmd.cpp?rev=1.28&view=auto + if ( jsres.complType() != KJS::Normal) { + switch ( jsres.complType() ) { + case KJS::Break: + case KJS::Continue: + // TODO: find out what this means + krOut << "JavaScript: " << jsres.value().toString(exec).qstring() << endl; + break; + case KJS::ReturnValue: + // that's only needed when a specific function is called + //someString = jsres.value().toString(exec).qstring(); + break; + case KJS::Throw: + /* + This is the interesting part: If the JS throws an exception which is not handled inside the script, + we can catch it here and handle it with c++ + */ + { +#if KDE_IS_VERSION(3,4,0) + KJS::Object exception = jsres.value().toObject(exec); + int line = int( exception.get( exec, KJS::Identifier("line") ).toNumber(exec) ); + TQString type = exception.get( exec, KJS::Identifier("name") ).toString(exec).qstring(); + TQString message = exception.get( exec, KJS::Identifier("message") ).toString(exec).qstring(); + + krOut << "JavaScript: Uncaught " << type << " exception at line " << line << " in " << filename << endl; + krOut << message << endl; + + KMessageBox::error ( 0, //parent + ( line < 0 ? + TQString( i18n("In %1:\nUncaught JavaScript exception '%2'\n%3") ).arg(filename).arg(type).arg(message) : + TQString( i18n("In %1:\nUncaught JavaScript exception '%2' at line %3\n%4") ).arg(filename).arg(type).arg(line).arg(message) + ), //text + i18n("JavaScript error"), //caption + KMessageBox::Dangerous) ; +#else + KMessageBox::error ( 0, //parent + TQString(i18n("In %1:\nThere is an error in the JavaScript")).arg(filename), //text + i18n("JavaScript error"), //caption + KMessageBox::Dangerous) ; +#endif + break; + } + default: + krOut << "JavaScript: Unknown error." << endl; + break; + } // switch + } // if + + + krOut << "JS: done" << endl; + + return ok; +} + |