148 lines
5.0 KiB
JavaScript
148 lines
5.0 KiB
JavaScript
/*
|
|
* example UI plugin for OpenWebRx+
|
|
*/
|
|
|
|
// Disable CSS loading for this plugin
|
|
Plugins.example.no_css = true;
|
|
|
|
// Init function of the plugin
|
|
Plugins.example.init = function () {
|
|
|
|
// Check if utils plugin is loaded
|
|
if (!Plugins.isLoaded('utils', 0.1)) {
|
|
console.error('Example plugin depends on "utils >= 0.1".');
|
|
return false;
|
|
}
|
|
|
|
// Listen to profile change and print the new profile name to console.
|
|
// NOTE: you cannot manipulate the data in events, you will need to wrap the original
|
|
// function if you want to manipulate data.
|
|
$(document).on('event:profile_changed', function (e, data) {
|
|
console.log('profile change event: ' + data);
|
|
});
|
|
|
|
// Another events:
|
|
// event:owrx_initialized - called when OWRX is initialized
|
|
|
|
// Server events are triggered when server sends data over the WS
|
|
// All server events have suffix ':before' or ':after', based on the original functoin call.
|
|
// :before events are before the original function call,
|
|
// :after events are after the original function call.
|
|
// Some interesting server events:
|
|
// server:config - server configuration
|
|
// server:bookmarks - the bookmarks from server
|
|
// server:clients - clients number change
|
|
// server:profiles - sdr profiles
|
|
// server:features - supported features
|
|
|
|
|
|
// Modify an existing OWRX function with utils plugin.
|
|
// See utils.js for documentation on wrap method.
|
|
// This will wrap profile changing function
|
|
Plugins.utils.wrap_func(
|
|
// function to wrap around
|
|
'sdr_profile_changed',
|
|
|
|
// before callback, to be run before the original function
|
|
// orig = original function
|
|
// thisArg = thisArg for the original function
|
|
// args = the arguments for the original function
|
|
// If you call the original function here (in the before_cb), always return false,
|
|
// so the wrap_func() will not call it later again.
|
|
// example of calling the original function: orig.apply(thisArg, args);
|
|
function (orig, thisArg, args) {
|
|
console.log("Before callback for: " + orig.name);
|
|
|
|
// check if newly selected profile is the PMR profile
|
|
if ($('#openwebrx-sdr-profiles-listbox').find(':selected').text() === "[RTL] 446 PMR") {
|
|
// prevent changing to this profile
|
|
console.log('This profile is disabled by proxy function');
|
|
|
|
// restore the previous selected profile
|
|
$('#openwebrx-sdr-profiles-listbox').val(currentprofile.toString());
|
|
|
|
// return false to prevent execution of original function
|
|
return false;
|
|
}
|
|
|
|
// return true to allow execution of original function
|
|
return true;
|
|
},
|
|
|
|
// after callback, to be run after the original function,
|
|
// but only if the before callback returns true
|
|
// res = result of the original function, if any
|
|
function (res) {
|
|
console.log('profile changed.');
|
|
}
|
|
);
|
|
|
|
// this example will do the same (stop profile changing), but using another method
|
|
// replace the "onchange" handler of the profiles selectbox
|
|
// and call the original function "sdr_profile_changed"
|
|
$('#openwebrx-sdr-profiles-listbox')[0].onchange = function (e) {
|
|
|
|
// check the index of the selected profile (0 is the first profile in the list)
|
|
if (e.target.options.selectedIndex === 0) {
|
|
// prevent changing to this profile
|
|
console.log('This profile is disabled by onchange.');
|
|
|
|
// restore the previous profile
|
|
$('#openwebrx-sdr-profiles-listbox').val(currentprofile.toString());
|
|
e.preventDefault();
|
|
e.stopPropagation();
|
|
return false;
|
|
}
|
|
|
|
// otherwise, call the original function
|
|
sdr_profile_changed();
|
|
};
|
|
|
|
// this example will manipulate bookmarks data when the server sends the bookmarks
|
|
// We will wrap the bookmarks.replace_bookmarks() function, once OWRX is initialized.
|
|
// We cannot wrap the replace_bookmarks() function before the bookmarks object is created.
|
|
// So we wait for OWRX to initialize and then wrap the function.
|
|
$(document).on('event:owrx_initialized', function () {
|
|
|
|
// Call the wrap method of utils plugin
|
|
Plugins.utils.wrap_func(
|
|
|
|
// function to wrap
|
|
'replace_bookmarks',
|
|
|
|
// before callback
|
|
function (orig, thisArg, args) {
|
|
|
|
// check if the bookmarks are "server bookmarks"
|
|
if (args[1] === 'server') {
|
|
|
|
// check if we have array of bookmarks (will be empty if the profile has no bookmarks to show)
|
|
if (typeof (args[0]) === 'object' && args[0].length)
|
|
|
|
// replace the name of the first bookmark
|
|
args[0][0].name = 'replaced';
|
|
}
|
|
|
|
// now call the original function
|
|
orig.apply(thisArg, args);
|
|
|
|
// and return false, so the wrap_func() will not call the original for second time
|
|
return false;
|
|
},
|
|
|
|
// after callback
|
|
function (res) {
|
|
/* not executed because the before function returns false always */
|
|
},
|
|
|
|
// this is the object, where the repalce_boomarks() function should be found
|
|
bookmarks
|
|
);
|
|
});
|
|
|
|
|
|
|
|
// return true for plugin init()
|
|
return true;
|
|
} // end of init function
|