Development/Tutorials/Plasma4/JavaScript/CheatSheet

    From KDE TechBase
    The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

    Basics

    • Everything but the metadata.desktop file goes in a directory named contents
    • X-Plasma-MainScript in the metadata.desktop file should point to the main script, relative to the contents directory
    • X-Plasma-DefaultSize in the metadata.desktop file specifies the default widget size in width,height format (eg: 200,100)
    • The plasmoid variable contains all the main plasmoid functionality and represents the main plasmoid widget, and corresponds to the Applet class in C++
    • plasmoidviewer is an immensely useful tool
    • To connect to a signal use object.signalName.connect(function() {});
    • Enumeration values can be used like

    if (plasmoid.formFactor() == Vertical) {

       layout.setOrientation(QtVertical);
    

    } else {

       layout.setOrientation(QtHorizontal);
    

    }

    Languages

    • The Name and Comment fields in the metadata.desktop file can be translated like Name[nl]=Hallo JavaScript
    • plasmoid.i18n() takes a string (in English) as the first argument, and substitutes in the following arguments to replace %1, %2, %3 etc. Eg: plasmoid.i18n("The file is called %1", fileName);
    • plasmoid.i18nc() works just the same, but has an extra argument at the start that provides some context for translators. Eg: plasmoid.i18nc("Player name - score", "%1 - %2", playerName, score);
    • plasmoid.i18np() is for cases where plural forms might be important. Eg: plasmoid.i18np("One image in album %2", "%1 images in album %2", imageCount, albumName);
    • plasmoid.i18ncp() is a combination of the previous two. Eg: plasmoid.i18ncp("Personal file", "One file", "%1 files", numFiles);


    DataEngines

    • Add a dataUpdate method to plasmoid to receive updates: plasmoid.dataUpdate = function(name, data) { /* ... */ } - data contains an object mapping keys to values
    • plasmoid.dataEngine("engine name").connectSource("source name", plasmoid, 500); updates every half second
    • plasmoid.dataEngine("engine name").connectSource("source name", plasmoid); updates when new data is available
    • plasmaengineexplorer is your friend


    Services

    • DO NOT use plasmoid.dataEngine("engine name").serviceForSource("source name") - you will get a dummy engine back (in 4.2 at least).
    • Instead, use plasmoid.service("engine name", "source name")