vb.org Archive

vb.org Archive (https://vborg.vbsupport.ru/index.php)
-   vBulletin 2.x Full Releases (https://vborg.vbsupport.ru/forumdisplay.php?f=4)
-   -   New vBCode Tags: [Countdown] and [Countup] timers for users (https://vborg.vbsupport.ru/showthread.php?t=38179)

KevinG 05-02-2002 10:00 PM

New vBCode Tags: [Countdown] and [Countup] timers for users
 
Have you or any of your members ever had the need or desire to post a countdown or countup in a post?
Something that automatically shows the remaining days, hours, minutes and seconds of that upcoming Walt Disney World trip?
Or want to show everyone how many days, hours, minutes and seconds that the user has gone without a cigarette, drink, sex? - LOL

I came up with this one here. It basically gives your users two new vB Code Tags, [countdown] and [countup].
Now there is no need to worry that the user will mess up your threads with incorrect JavaScript.
All they have to do is use these tags, just like most other tags.

For counting down, they would just have to do the following:
[countdown=May 21, 2002 12:32 PM EST;We are off to see Mickey Mouse;RED]My Walt Disney World Trip Begins in [/countdown]

Same for counting up with just different text of course.

I guess this would qualify as a hack as you do need to change one field in the database to store this.
Luckily, it's in a very small table so it should not slow anything down in theory.


Modify the database
Modify the field bbcodereplacement in the bbcode table to increase the storage size.
Change the field properties from varchar(200) to LONGTEXT. This is needed for the new vB Code replacement to follow.
I used phpMyAdmin which is very easy to use for this change.

Add new JavaScript
Add the following JavaScript code to your Style under Head Insert preferrably at the bottom.
Be sure to do this for every style that you defined in your database.

PHP Code:

<SCRIPT LANGUAGE="JavaScript">
function 
countdowndaterndNumouttext ) {
now = new Date();
y2k = new Datedate );
days = (y2k now) / 1000 60 60 24;
daysRound Math.floor(days);
hours = (y2k now) / 1000 60 60 - (24 daysRound);
hoursRound Math.floor(hours);
minutes = (y2k now) / 1000 /60 - (24 60 daysRound) - (60 hoursRound);
minutesRound Math.floor(minutes);
seconds = (y2k now) / 1000 - (24 60 60 daysRound) - (60 60 hoursRound) - (60 minutesRound);
secondsRound Math.round(seconds);
if ((
days 0) | (hours 0) | (minutes 0) | (seconds 0)) {
   
thisoutput outtext;
   if (
thisoutput == ""thisoutput "Countdown Finished";
} else {
   
sec = (secondsRound == 1) ? " second." " seconds.";
   
min = (minutesRound == 1) ? " minute, " " minutes, ";
   
hr = (hoursRound == 1) ? " hour, " " hours, ";
   
dy = (daysRound == 1)  ? " day, " " days, ";
   
thisoutput daysRound  dy hoursRound hr minutesRound min secondsRound sec;
}
eval(
"document.forms.form" rndNum ".elements.countdown.value = thisoutput;");
thisclock "countdown(\""+date+"\",\""+rndNum+"\",\""+outtext+"\");";
window.setTimeout(thisclock1000);
}

function 
countupdaterndNumouttext ) {
now = new Date();
y2k = new Datedate );
days = (now y2k) / 1000 60 60 24;
daysRound Math.floor(days);
hours = (now y2k) / 1000 60 60 - (24 daysRound);
hoursRound Math.floor(hours);
minutes = (now y2k) / 1000 /60 - (24 60 daysRound) - (60 hoursRound);
minutesRound Math.floor(minutes);
seconds = (now y2k) / 1000 - (24 60 60 daysRound) - (60 60 hoursRound) - (60 minutesRound);
secondsRound Math.round(seconds);
if ((
days 0) | (hours 0) | (minutes 0) | (seconds 0)) {
   
thisoutput outtext;
} else {
   
sec = (secondsRound == 1) ? " second." " seconds.";
   
min = (minutesRound == 1) ? " minute, " " minutes, ";
   
hr = (hoursRound == 1) ? " hour, " " hours, ";
   
dy = (daysRound == 1)  ? " day, " " days, ";
   
thisoutput daysRound  dy hoursRound hr minutesRound min secondsRound sec;
}
eval(
"document.forms.form" rndNum ".elements.countup.value = thisoutput;");
thisclock "countup(\""+date+"\",\""+rndNum+"\",\""+outtext+"\");";
window.setTimeout(thisclock1000);
}

function 
explodeArray(item,delimiter) {
  
tempArray=new Array(1);
  var 
Count=0;
  var 
tempString=new String(item);

  while (
tempString.indexOf(delimiter)>0) {
    
tempArray[Count]=tempString.substr(0,tempString.indexOf(delimiter));
    
tempString=tempString.substr(tempString.indexOf(delimiter)+1,tempString.length-tempString.indexOf(delimiter)+1);
    
Count=Count+1
  
}

  
tempArray[Count]=tempString;
  return 
tempArray;
}

</
script

Add the new vBCodes
Using the Admin CP, add the following;

vB Code tag
-----------------------------------------------------
countdown


vB Code replacement
-----------------------------------------------------
PHP Code:

<Script language='Javascript'>
var 
rndNum Math.floor(Math.random() * 10000);
var 
tempString="{option}";
tempArray=explodeArray(tempString,";");
document.writeln("<form name='form" rndNum "' action='Javascript:void(0);'>");
document.writeln('<font size=2 color="'+tempArray[2]+'">{param}</font><BR>');
document.writeln("<input type=text value='' size=40 name='countdown'>");
document.writeln("</form>");
countdown(tempArray[0], rndNumtempArray[1]);
</
script

vB Code example
-----------------------------------------------------
[countdown="May 4, 2002;Currently At WDW Now;BLUE"]My Countdown to Disney World[/countdown]

vB Code explanation
-----------------------------------------------------
Enter any text you would like to say to your members here.

Use {option} ?
-----------------------------------------------------
Select YES


Add the [countup] tag next;
vB Code tag
-----------------------------------------------------
countup

vB Code replacement
-----------------------------------------------------
PHP Code:

<Script language='Javascript'>
var 
rndNum Math.floor(Math.random() * 10000);
var 
tempString="{option}";
tempArray=explodeArray(tempString,";");
document.writeln("<form name='form" rndNum "' action='Javascript:void(0);'>");
document.writeln('<font size=2 color="'+tempArray[2]+'">{param}</font><BR>');
document.writeln("<input type=text value='' size=40 name='countup'>");
document.writeln("</form>");
countup(tempArray[0], rndNumtempArray[1]);
</
script

vB Code example
-----------------------------------------------------
[countup="May 4, 2002;Waiting for my last cigarette;RED"]Smokefree Days[/countup]

vB Code explanation
-----------------------------------------------------
Enter any text you would like to say to your members here.

Use {option} ?
-----------------------------------------------------
Select YES



There are many variations that can be use here for how the text field looks.
We can post suggestions here for everyone to share :)

I can post a screenshot tomorrow if you would like.
It's really just a text field containing the days, hours, minutes and seconds of the timers with the {param} text over it.

Edit:
Reformatting some of the text as the PHP blocks are very wide.
Also fixed a case conversion that the PHP code tag is making in my post.

RDX1 05-03-2002 03:48 AM

demo or screen?

Sweet Cheeks 05-03-2002 04:07 AM

OMG Kevin you are SO awesome! :cheeky: Thank you SO much, I will give you full credit on my site, You are too cool. :rambo: Thank you so much!!

MrLister 05-03-2002 04:09 AM

wow great job. this is awsome.

Velocd 05-03-2002 04:23 AM

I'm too lazy to install this unless I know what it actually looks like. Please post a demo or screenshot ;)

Neo 05-03-2002 05:19 AM

Nice man. Here is a image.

JulianD 05-03-2002 06:58 AM

ummsmm... Seems very interesting and useful! Thanks Kevin!

Floris 05-03-2002 07:49 AM

Uhm, the countdown is managed by the javascript? Not client-side? - little bit disappointing.. but I most surely LIKE this .. would be very cool to have this on vB3 in the calendar in many ways I can think of :)

Logician 05-03-2002 07:57 AM

It's a very useful hack and idea is very nice either, congratulations! :)

Just one tiny concern in my side: You (and your members) will use the vbcode for a few messages only, however the java code in the header will be loaded with every page (not just for messages either, with even in calender or user CP pages) in your board.

Maybe it could be nice to check the message inside "showthread.php" before displayed whether vbcode exits or not and if it exits, make the neccessary parsing inside the same script again.

This method both saves you from the java header and it could also be possible to count down according to thread reader's local time ;) Even if you wouldnt regard this method, adding the java code to a relevant template (which is related to thread displaying only) can help to get rid of it for at least unrelevant pages. Just my 0.2 cents.

Congratulations again! :)

Logician

Sparkz 05-03-2002 08:27 AM

Quote:

Originally posted by xiphoid
Uhm, the countdown is managed by the javascript? Not client-side? - little bit disappointing..
Not that it has anything to do with the hack but javascript IS clientside :)

Oh, and for changing the field in the DB to LONGTEXT... Why on earth would you need to be able to fit 4 GB in there? Changing it to text should be MORE than sufficient, unless you plan on having replacements bigger than 64kb, which I doubt anyone would ever need...

Not that the field itself will end up bigger by the change, (unless you actually fill it, that is) but I was just wondering why it had to be LONGTEXT and not just text...

http://www.mysql.com/doc/n/o/node_368.html


All times are GMT. The time now is 10:07 PM.

Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, vBulletin Solutions Inc.

X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.01151 seconds
  • Memory Usage 1,834KB
  • Queries Executed 10 (?)
More Information
Template Usage:
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (3)bbcode_php_printable
  • (1)bbcode_quote_printable
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)pagenav
  • (1)pagenav_curpage
  • (2)pagenav_pagelink
  • (1)post_thanks_navbar_search
  • (1)printthread
  • (10)printthreadbit
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • showthread
Included Files:
  • ./printthread.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/class_bbcode_alt.php
  • ./includes/class_bbcode.php
  • ./includes/functions_bigthree.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • printthread_start
  • pagenav_page
  • pagenav_complete
  • bbcode_fetch_tags
  • bbcode_create
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • printthread_post
  • printthread_complete