Eigene Plugins schreiben

Begonnen von drhirn, 07 Februar 2018, 15:41:36

Vorheriges Thema - Nächstes Thema

drhirn

Hallo,

es kam, wie es kommen musste: Hier der wahrscheinlich erwartete Post mit der Frage, wie man jetzt eigentlich eigene Plugins für ein FTUI-Widget (oder FTUI generell) erstellt. ;)

Hab schon ein paar Mal angemerkt, dass ich mir das ansehen werde, stecke aber fest.

Ich weiß, ich kann mit

function depends_myWidget() {
    var deps = [];
    deps.push('<bestehendesWidget>');
    return deps;
}
...
var me = $.extend(new Modul_spinner(), {
    widgetname: 'mywidget';
});
return me;

den Code eines bestehenden Widgets in meinem neuen verwenden. Und dann natürlich neue Funktionen hinzufügen bzw. bestehende überschreiben.

Aber, wie könnte ich z.B. bestehenden Funktionen etwas hinzufügen? Oder etwas ändern?

Anders gefragt: Gab's mal irgendwo Hinweise, wie man sowas macht? Eine Suche danach blieb leider erfolglos, auch wenn ich mir einbilde, mal etwas darüber gelesen zu haben.

Danke!
Stefan


drhirn

#2
Kenn ich, danke! Ich möchte aber kein komplett neues Widget schreiben, sondern einem bestehenden Widget Funktionen hinzufügen. Ohne, dass das bei einem Update von FTUI wieder überschrieben wird.

Konkret: Mir geht's noch immer um's Vibrieren. Und zwar bei einem Spinner. Ich will also weder die Vibrier-Funktion in die Original-Widget-Datei einbauen, noch die unter anderem Namen kopieren und das dort dann einbauen. Kann ja sein, dass es Updates für die Datei von dir gibt, die würden mir dann fehlen. Deswegen suche ich die Möglichkeit, ein Plugin für ein Plugin zu basteln ;).

pula

Hi,

da hast Du meiner Ansicht nach zwei Möglichkeiten:

1) das fhem-update entsprechend anpassen, damit nichts überschrieben wird (sh hier https://forum.fhem.de/index.php?topic=53861.0)

2) das widget-File auf einen neuen Namen kopieren und entsprechend anpassen. Dann musst Dir halt den JS-Code ansehen und zb den Widget-Namen entsprechend ändern, damit das funktioniert. Ist aber keine Hexerei.... (allerdings bekommst Du für dieses von Dir modifizierte Plugin natürlich keine Updates mehr)...
Cheers,

Pula
fhem (debian auf proxmox), HM-LAN und wired, MySensors, FritzBoxes, Kodi, vdr, Onkyo, squeezeplayers, nanoCUL, wifilight (Ethernet-Bridge), Heizungssteuerung (python/vncdotool), doorpi, ESP/Arduinos/MQTT, Alexa, HomeConnect, Sonoff/Tasmota, espRGBWW, esphome, Telegram

setstate

Hier ein kleines Beispiel zur Inspiration


/* FTUI Plugin
* Copyright (c) 2018 Mario Stephan <mstephan@shared-files.de>
* Under MIT License (http://www.opensource.org/licenses/mit-license.php)
*/

/* global ftui:true, Modul_switch:true */

"use strict";

function depends_newbutton() {
    var deps = [];
   
    if(typeof window["Modul_switch"] === 'undefined'){
        deps.push('switch');
    }
   
    if (!$.fn.DoSomething) {
        deps.push(ftui.config.basedir + "lib/dosomething.js");
    }
    return deps;
}

var Modul_newbutton = function () {

    function init_ui(elem) {

        base.init_ui.call(me, elem);
       
        // init extra jquery plugin
        elem.DoSomething();
       
        elem.on('clicked', function() {
           console.log('clicked:');
        });
    }

    // public
    // inherit all public members from base class
    var parent = new Modul_switch();
    var base = {
        init_ui: parent.init_ui
    };
    var me = $.extend(parent, {
        //override or own public members
        widgetname: 'newbutton',
        init_ui: init_ui,
    });

    return me;
};

drhirn

Danke Mario, sehr hilfreich!
Dann mach ich mich mal ans Werk.