Post by Lynx on Jun 6, 2017 9:05:26 GMT -8
Chris, Peter, Todge or any other coder who can help:
The code above is the mess I've run into trying to get this to work.
Currently, when set to dynamic, it waited for the delay time before even the first random item got displayed. This wasn't too bad if the delay is rather small. However, someone is trying to set it so it only changes once per day (delay time of 86400 seconds). With the code as it was, this meant it would have waited a day before the first random item even appeared.
What I'm trying to do is make it so the first random item shows right away, then have the delay timer (setInterval) go into affect before the next random item displayed.
I added a msg_passes variable to check the "pass number" - if it's first pass, it should display after just 1 second. After that, it should display after the time delay. Unfortunately, it seems to be changing after 1 second for everything. The console log does show that msg_passes did get incremented to 2, so no sure why the else if seems to still be taking command for the setInterval.
Any help on pointing me out to what I need to fix would be most appreciated.
Thanks!
// Random News
// Version 1.1.2
// Authored By: MSG
// You are not permitted to remove this header.
$('document').ready(function() {
var plugin = pb.plugin.get('random_news');
var settings = null;
if (plugin && plugin.settings) {
settings = plugin.settings;
}
if (settings) {
var msg_news_feed = settings.msg_newsfeed;
var msg_txt_clr = "#000"; // default text color
var msg_txt_just = null; // for text justification
var msg_link = ""; // link text
var msg_lurl = ""; // link URL
var msg_lnbr = ""; // line breaks?
var msg_nf_default = "Welcome to the Random News Feed. No News Feed Lines have been configured yet."; // default text if no news feed items present
var msg_timing = 0; // static or dynamic?
var msg_delay = 3000; //default 3 seconds on dynamic
var msg_to_delay = null; // variable for the setTimeout
var msg_target = null; // target page for links
var msg_passes = 1;
if (settings.msg_nf_timing == undefined || settings.msg_nf_timing == null || settings.msg_nf_timing == "") { //is timing static (0) or dynamic (1)
msg_timing = 0;
}
else {
msg_timing = settings.msg_nf_timing;
}
if (settings.msg_nf_delay == undefined || settings.msg_nf_delay == null || settings.msg_nf_delay == "") { // dynamic delay is 3 seconds
msg_delay = 3000;
}
else if (settings.msg_nf_delay < 1 ) { // if user entered less than a 1 in the UI, we go with the default 3 seconds
msg_delay = 3000;
}
else {
msg_delay = settings.msg_nf_delay * 1000; // number of seconds in the UI times 1000 (milliseconds) to get seconds
}
}
function msgRnf() {
var z = Math.floor(Math.random() * msg_news_feed.length); // pick a random number
var msg_txt_clr = (settings.msg_newsfeed[z].text_color == undefined ? "#000" : settings.msg_newsfeed[z].text_color); // color set? No=use default, Yes=use selection
if (settings.msg_newsfeed[z].msg_nf_link_text != undefined && settings.msg_newsfeed[z].msg_nf_link_url != undefined) // check for link text and link URL
{
msg_link = settings.msg_newsfeed[z].msg_nf_link_text;
msg_lurl = settings.msg_newsfeed[z].msg_nf_link_url;
}
if (settings.msg_newsfeed[z].target_for_link == undefined || settings.msg_newsfeed[z].target_for_link == null || settings.msg_newsfeed[z].target_for_link == "") {
msg_target = "blank";
}
else {
msg_target = "self";
}
var msg_text_just = (settings.msg_newsfeed[z].msg_nf_justify == undefined ? "left" : settings.msg_newsfeed[z].msg_nf_justify); // check justification and use default of left if none set or use selection
var msg_lnbr = (settings.msg_newsfeed[z].msg_nf_lbr == undefined ? "" : "<br />");
var msg_rand_nf = msg_news_feed[z].news_line; // get the news feed text
if (msg_rand_nf != undefined && msg_link != "" && msg_lurl != "") {
$('.msg-rnf').html('<div style="text-align:'+msg_text_just+'">'+msg_lnbr+'<font color="'+msg_txt_clr+'">'+msg_rand_nf+'</font> (Link: <a href="'+msg_lurl+'" target="_'+msg_target+'">'+msg_link+'</a>)'+msg_lnbr+msg_lnbr+'</div>');
}
else if (msg_rand_nf != undefined) { // we have at least 1 entry in the UI, so use their settings (or default if any are not set) to display
$('.msg-rnf').html('<div style="text-align:'+msg_text_just+'">'+msg_lnbr+'<font color="'+msg_txt_clr+'">'+msg_rand_nf+'</font>'+msg_lnbr+msg_lnbr+'</div>');
}
else { // no entries in the UI, so use a default message
$('.msg-rnf').html('<div style="text-align:left"><font color="'+msg_txt_clr+'">'+msg_nf_default+'</font></div>');
}
msg_passes++;
}
console.log('Passes:',msg_passes);
if (msg_timing == 1 && msg_passes > 1){ // dynamic change of news feed to change after a set amount of time - 3 seconds default or selected
msg_to_delay = setInterval(msgRnf, msg_delay);
msg_passes++;
console.log('Passes:',msg_passes);
}
else if (msg_timing == 1 && msg_passes <= 1) {
msg_to_delay = setInterval(msgRnf, 1000);
msg_passes++;
console.log('Passes:',msg_passes);
}
else {
proboards.on('afterSearch',msgRnf);
}
});
The code above is the mess I've run into trying to get this to work.
Currently, when set to dynamic, it waited for the delay time before even the first random item got displayed. This wasn't too bad if the delay is rather small. However, someone is trying to set it so it only changes once per day (delay time of 86400 seconds). With the code as it was, this meant it would have waited a day before the first random item even appeared.
What I'm trying to do is make it so the first random item shows right away, then have the delay timer (setInterval) go into affect before the next random item displayed.
I added a msg_passes variable to check the "pass number" - if it's first pass, it should display after just 1 second. After that, it should display after the time delay. Unfortunately, it seems to be changing after 1 second for everything. The console log does show that msg_passes did get incremented to 2, so no sure why the else if seems to still be taking command for the setInterval.
Any help on pointing me out to what I need to fix would be most appreciated.
Thanks!