Register a SA Forums Account here!
JOINING THE SA FORUMS WILL REMOVE THIS BIG AD, THE ANNOYING UNDERLINED ADS, AND STUPID INTERSTITIAL ADS!!!

You can: log in, read the tech support FAQ, or request your lost password. This dumb message (and those ads) will appear on every screen until you register! Get rid of this crap by registering your own SA Forums Account and joining roughly 150,000 Goons, for the one-time price of $9.95! We charge money because it costs us money per month for bills, and since we don't believe in showing ads to our users, we try to make the money back through forum registrations.
 
  • Post
  • Reply
Xenogenesis
Nov 8, 2005

geeves posted:

I don't know if this is a jQuery thing or not, but has anyone every successfully made a variable inside an anonymous function readable outside of it?

We did this at my old job so we would avoid collisions amongst us writing lots of JS. But I didn't come up with how it was done and I've been unsuccessful in trying to recreate it from memory. It was something maniacal involving the window object.

Just assign that variable to some arbitrary property on "window". The window object is also the top level scope, so any properties you define on it are global variables. Simple example:

code:
(function () {
  var someISH = {
    prop: "value",
    hi: function () { alert(":3");}
  };

  window.someISH = someISH;
})();

someISH.hi();
Just so you know whats going on here...

quote:

code:
($, window, function() {
   
   // I think it was window.document
   var foo = window.document = foo;

   foo = {
       bar : function(sa) {

      }
   };


})($, window); //I think it was this again from memory 


Any ideas?
code:
($, window, function () {
The "$, window, " is useless: this is because comma is being used as the expression operator. The comma is splitting whats in the parens into three expressions, but the value of a statement is the last expression evaluated. So the $ and window are just random variables chilling there for no reason; the function (and later, its invocation) is the only thing really happening there.

code:
var foo = window.document = foo
This just sets window.document to undefined. Proooobaly not what you want.

code:
})($, window)
The actual function invocation. The parens are used around the function because for whatever reason Javascript doesn't let you immediately invoke a declared function unless the "function" keyword is preceded by some token. The token doesn't really matter; you could do +function () {}(), ~function () {}(), any unary operator, but most people wrap the function in parens.

Also, no need to pass $ and window to the function, as your function does nothing with its arguments.


epswing posted:

Can I ask why you want to do this?

If you keep variables non-global, they won't conflict with others of the same name, of course.
For writing a library. Reusable code isn't *usable* unless... you have some way to use it. Most of the time you're only "exporting" one variable anyway, so you don't have to worry about conflicts too much. It's basically namespace emulation.

Adbot
ADBOT LOVES YOU

geeves
Sep 16, 2004

Xenogenesis posted:

Just assign that variable to some arbitrary property on "window". The window object is also the top level scope, so any properties you define on it are global variables. Simple example:

code:
(function () {
  var someISH = {
    prop: "value",
    hi: function () { alert(":3");}
  };

  window.someISH = someISH;
})();

someISH.hi();
Just so you know whats going on here...

code:
($, window, function () {
The "$, window, " is useless: this is because comma is being used as the expression operator. The comma is splitting whats in the parens into three expressions, but the value of a statement is the last expression evaluated. So the $ and window are just random variables chilling there for no reason; the function (and later, its invocation) is the only thing really happening there.

code:
var foo = window.document = foo
This just sets window.document to undefined. Proooobaly not what you want.

code:
})($, window)
The actual function invocation. The parens are used around the function because for whatever reason Javascript doesn't let you immediately invoke a declared function unless the "function" keyword is preceded by some token. The token doesn't really matter; you could do +function () {}(), ~function () {}(), any unary operator, but most people wrap the function in parens.

Also, no need to pass $ and window to the function, as your function does nothing with its arguments.

For writing a library. Reusable code isn't *usable* unless... you have some way to use it. Most of the time you're only "exporting" one variable anyway, so you don't have to worry about conflicts too much. It's basically namespace emulation.

That was it, thanks.

It has been a couple of months since I've seen the code and I didn't write the part that started with ($, window, function) ... so I don't know why that was in there and I had too many other things to work on that I never got around to doing a code review before I left my old job.

wins32767
Mar 16, 2007

I need a visualization/graphing JS library. Any suggestions?

Lumpy
Apr 26, 2002

La! La! La! Laaaa!



College Slice

wins32767 posted:

I need a visualization/graphing JS library. Any suggestions?

Flot: http://code.google.com/p/flot/

Parantumaton
Jan 29, 2009


The OnLy ThInG
i LoVe MoRe
ThAn ChUgGiNg SeMeN
iS gEtTiNg PaId To Be A
sOcIaL MeDiA sHiLl
FoR mIcRoSoFt
AnD nOkIa
Is JavaScript absolutely necessary for the whole thing? If not, you can integrate Open Flash Chart through JSON/Flash' standard methods to work with your JavaScript.

processing.js is also an option.

DholmbladRU
May 4, 2006
i am not sure if this is a Js question or html.

I have a text box that a user will be typing a currency value into it. I would like a comma to be inserted while the user is typing if they go over a a thousand, and a period where decimals are applicable.

Here is an example of the input box so far.
<input type="text" value="0.0"onblur="if (this.value=='') this.value='0.0';" onfocus="if (this.value==this.defaultValue) this.value='';" name="YearMisc" />

AshB
Sep 16, 2007
I'm a complete noob with Javascript and web-programming in general, bah. So I have a calendar for which I want to create a quick-jump with drop down menus. The url for a given month would, for example, look like this:

code:
http://www.site.org/calendar.php?month=October&year=2010
I want to create a drop-down for the month and a drop down for the year and once the user presses a "Go" button, the selected values would be fed to a small javascript snippet that would redirect the browser to the appropriate url given the choices. I'm feeling terrifically dumb trying to figure out what I did wrong here:

code:
<html>
	<script type="javascript/text">
		function quickJump()
		{
			var loc="http://www.site.org/calendar.php?month=" +
			document.quickJumpForm.quickJumpMonth.value + 
			"&year=" + document.quickJumpForm.quickJumpYear.value;

			return loc;
		}
	</script>
	<body>
		<form name="quickJumpForm" action=quickJump()>
			<select name="quickJumpMonth">
				<option value="January">January</option>
				<option value="February">February</option>
				<option value="March">March</option>
				<option value="April">April</option>
				<option value="May">May</option>
				<option value="June">June</option>
				<option value="July">July</option>
				<option value="August">August</option>
				<option value="September">September</option>
				<option value="October">October</option>
				<option value="November">November</option>
				<option value="December">December</option>
			</select>
			<select name="quickJumpYear">
				<option value="2005">2005</option>
				<option value="2006">2006</option>
				<option value="2007">2007</option>
				<option value="2008">2008</option>
				<option value="2009">2009</option>
				<option value="2010">2010</option>
			</select>
			<input type="submit" value="Go" onClick="quickJump()">
		</form>
	</body>
</html>
P.S. Do <select> and <input> tags have to be used in <form> tags or can I do without the <form>?

Edit: Okay I got this to work by completely removing all the Javascript. Apparently I only needed html for this. But just for my info, what's the proper way of using Javascript to get the value of the selected item in a drop-down menu?

AshB fucked around with this message at 23:51 on Oct 19, 2010

Tivac
Feb 18, 2003

No matter how things may seem to change, never forget who you are

AshB posted:

Edit: Okay I got this to work by completely removing all the Javascript. Apparently I only needed html for this. But just for my info, what's the proper way of using Javascript to get the value of the selected item in a drop-down menu?

code:
var select = document.getElementById("my_select");

var item = select.options[select.selectedIndex].value;

Lumpy
Apr 26, 2002

La! La! La! Laaaa!



College Slice

DholmbladRU posted:

i am not sure if this is a Js question or html.

I have a text box that a user will be typing a currency value into it. I would like a comma to be inserted while the user is typing if they go over a a thousand, and a period where decimals are applicable.

Here is an example of the input box so far.
<input type="text" value="0.0"onblur="if (this.value=='') this.value='0.0';" onfocus="if (this.value==this.defaultValue) this.value='';" name="YearMisc" />

It's a javascript question. You want to attach a keyup event to the input, and every time they enter something, pass the value through a regex that removes all non-digits, then adds commas in the right places, and sets the form input to that new string.

Tivac posted:

code:
var select = document.getElementById("my_select");

var item = select.options[select.selectedIndex].value;

code:
jQuery('#my_select').val();
:v:

Lumpy fucked around with this message at 01:11 on Oct 20, 2010

LOLLERZ
Dec 9, 2003
ASK ME ABOUT SPAMMING THE REPORT FORUM TO PROTECT ~MY WIFE'S~ OKCUPID PERSONALS ANALYSIS SA-MART THREAD. DO IT. ALL THE TIME. CONSTANTLY. IF SHE DOESN'T HAVE THE THREAD, SHE'LL WANT TO TALK TO ME!

wins32767 posted:

I need a visualization/graphing JS library. Any suggestions?

ProtoVis?

DholmbladRU
May 4, 2006

Lumpy posted:

It's a javascript question. You want to attach a keyup event to the input, and every time they enter something, pass the value through a regex that removes all non-digits, then adds commas in the right places, and sets the form input to that new string.


I would use the onkeyup correct? Im looking through tutorials on regexpressions now, I do not have much experience with them or web programing.

Lumpy
Apr 26, 2002

La! La! La! Laaaa!



College Slice

DholmbladRU posted:

I would use the onkeyup correct? Im looking through tutorials on regexpressions now, I do not have much experience with them or web programing.

Yeah, using jQuery because I'm lazy, you'd do something along the lines of:

code:
<input id="blah" />
<script>
var myEl = jQuery('#blah'); // making ugly global because it's an example
myEl.keyup( function() {
  var numsOnly =   myEl.val().replace(/[^0-9]/g, ''); // strip non-digits
  var withCommas; // do something clever to put commas in
  myEl.val( withCommas );
});
</script>
It's past my bedtime, so you can figure out how to put commas in. Here's a google search that turns up lots of ways to do it.

Golbez
Oct 9, 2002

1 2 3!
If you want to take a shot at me get in line, line
1 2 3!
Baby, I've had all my shots and I'm fine

Lumpy posted:

code:
jQuery('#my_select').val();
:v:

It makes me wonder why they don't simply build jQuery syntax into the next version of ECMAScript.

HFX
Nov 29, 2004

Golbez posted:

It makes me wonder why they don't simply build jQuery syntax into the next version of ECMAScript.

That's like asking why don't they just change the language to Scheme and call it done. :v:

Golbez
Oct 9, 2002

1 2 3!
If you want to take a shot at me get in line, line
1 2 3!
Baby, I've had all my shots and I'm fine
Although, now that I look at it, that works? You get the .val() of a select? I've been doing, $('#my_select option:selected').val(). :monocle:

Lumpy
Apr 26, 2002

La! La! La! Laaaa!



College Slice

Golbez posted:

Although, now that I look at it, that works? You get the .val() of a select? I've been doing, $('#my_select option:selected').val(). :monocle:

Yup, it's worked since at least 1.3.x, probably earlier.

Xenogenesis
Nov 8, 2005

Golbez posted:

It makes me wonder why they don't simply build jQuery syntax into the next version of ECMAScript.

What does this mean?

It SOUNDS like you're talking about document.querySelector, but thats the DOM, and most desktop browsers (except IE8 and below) support it, but maybe you mean something else?

Golbez
Oct 9, 2002

1 2 3!
If you want to take a shot at me get in line, line
1 2 3!
Baby, I've had all my shots and I'm fine

Xenogenesis posted:

What does this mean?

It SOUNDS like you're talking about document.querySelector, but thats the DOM, and most desktop browsers (except IE8 and below) support it, but maybe you mean something else?

Then perhaps swap 'want ECMAScript to have the syntax' to 'burn all the books and websites that told Tivac to do it that way'. Wasn't aware of querySelector, and I blame said references for that too.

Sergeant Rock
Apr 28, 2002

"... call the expert at kissing and stuff..."
querySelector is bloody marvellous, and even IE8 supports it.

Schweinhund
Oct 23, 2004

:derp:   :kayak:                                     
Can this be done?

var global_info_a = 0;
var global_info_b = 0;

blah (10, global_info_a);
blah (20, global_info_b);

function blah(stuff, info)
{
* magic voodoo so global_info_a=10 and global_info_b=20 *
}

Tad Naff
Jul 8, 2004

I told you you'd be sorry buying an emoticon, but no, you were hung over. Well look at you now. It's not catching on at all!
:backtowork:

Schweinhund posted:

Can this be done?

var global_info_a = 0;
var global_info_b = 0;

blah (10, global_info_a);
blah (20, global_info_b);

function blah(stuff, info)
{
* magic voodoo so global_info_a=10 and global_info_b=20 *
}

Nope. Maybe something like:
code:
var globals={info_a:0,info_b:0};

blah(10,'info_a');
blah(20,'info_b');

function blah(stuff, info){
  globals[info]=stuff;
}
Then globals.info_a=20 and globals.info_b=20. Also obligatory globals are bad etc etc.

epswing
Nov 4, 2003

Soiled Meat
You can use closure to bind to those variables...

code:
var a = 0, b = 0;

function transmogrify(f, val) {
  f(val);
};

console.log(a + " " + b); // prints "0 0"

transmogrify(function(val) { a = val; }, 10);
transmogrify(function(val) { b = val; }, 20);

console.log(a + " " + b); // prints "10 20"

epswing fucked around with this message at 06:23 on Oct 29, 2010

peepsalot
Apr 24, 2007

        PEEP THIS...
           BITCH!

FeloniousDrunk posted:

Nope. Maybe something like:
code:
var globals={info_a:0,info_b:0};

blah(10,'info_a');
blah(20,'info_b');

function blah(stuff, info){
  globals[info]=stuff;
}
Then globals.info_a=20 and globals.info_b=20. Also obligatory globals are bad etc etc.

if you're in a browser, then window is the global object, and you can access the variables as properties of it.


code:
var info_a = 0;
var info_b = 0;

blah(10,'info_a');
blah(20,'info_b');

function blah(stuff, info){
  window[info]=stuff;
}
But yeah, you can't really pass variables by reference

peepsalot fucked around with this message at 07:04 on Oct 29, 2010

Schweinhund
Oct 23, 2004

:derp:   :kayak:                                     
Thanks. It will be easier to just write separate blaha and blahb functions for now, but I'll keep those options in mind in the future.

BlackRider
Dec 28, 2004
*cringes having to bump this thread*

I'm in an intro to web development class so I'm new to this stuff. I'm stuck on one small thing in this assignment and I was hoping someone could nudge me in the right direction.

I have a select box that lists different colors. I need it to be able to change the background color of the page, to the color that the person has selected. I was able to get it to work with this:

code:
<select onchange="document.body.style.backgroundColor=this.value"> 
  <option value="black">Black</option>
  <option value="red">Red</option>
  <option value="green">Green</option>
  <option value="orange">Orange</option>
  <option value="brown">Brown</option>
  <option value="blue">Blue</option>
</select>
However, all javascript needs to be in an external .js file. So I tried to make a function that was simply this:

code:
function bgColor(){
document.body.style.backgroundColor="this.value"
}
and then calling it

code:
<select onchange="bgColor()">
  <option value="black">Black</option>
  <option value="red">Red</option>
  <option value="green">Green</option>
  <option value="orange">Orange</option>
  <option value="brown">Brown</option>
  <option value="blue">Blue</option>
</select>
But this doesn't do anything. I've tried giving the select box a name attribute and replaced "this" with the name instead.. no luck. Also tried the same thing with the "id" attribute. Tried searching a while, also tried playing around with the individual options.. I'm stuck.

The rest of the webpage works fine so I know the .js file is being read properly (it's an image gallery).

What am I missing here?

epswing
Nov 4, 2003

Soiled Meat
Untested, but I would try something like

code:
function bgColor(color){
  document.body.style.backgroundColor = color;
}
and then

code:
<select onchange="bgColor(this.value)"> 
  <option value="black">Black</option>
  <option value="red">Red</option>
  ...
</select>

BlackRider
Dec 28, 2004
Thanks for the reply! It was a good idea but it didn't work :(

I made a blank page just to test this (in case it was something else interfering) but it didn't make a difference.

peepsalot
Apr 24, 2007

        PEEP THIS...
           BITCH!

It's good have a thorough understand of how the "this" keyword works. It will save you some headaches:
https://developer.mozilla.org/en/JavaScript/Reference/Operators/Special_Operators/this_Operator

When you use the onchange or onwhatever attribute in an html element, it's basically like wrapping your attribute string in an anonymous function declaration.
So your initial onchange"bgColor()" example is equivalent to assigning the following handler to your event:
code:
element.onchange = function () {
  bgColor();
}

If you read the link above, and notice that bgColor is called directly here, the context given to it(what "this" points to inside bgColor) is the global object(window). This doesn't work because you want this to point to the element that the event fired from.

Accesing "this" from inside this anonymous function will get you the element you want, and that's why epswing's example should work, but it's still not really ideal.
If you really want to separate content from behavior, you shouldn't be using those on____ html attributes at all. You should register your event handlers inside your script. This must be done after the DOM tree has been populated(either by including your script file at the end of the page, or by wrapping your event registrations inside the window.load event). Otherwise the elements won't exist for you to register events on.

Here's a slightly better way to do what you want:
code:
function bgColor(color){
  document.body.style.backgroundColor = color;
}

window.onload = function() {
document.getElementById("colorSelector").onchange = bgColor;
}
This approach allows you to completely separate content from code. You don't need any on____ attributes in them. Just make sure you give your element a unique id in the html. Using window.onload allows you to include this script inside the document head, before the element is defined. If you include your script at the foot of the document, you don't need window.onload.

Assigning functions to the on____ properties on elements is a quick and dirty way of registering events, which is better than using the html attributes. It's dirty though because it does not support the registering of multiple events on any given object. Subsequent event registrations will override existing ones. Ideally you would use the W3C standard element.addEventListener method to register your events. But then there's the issue of IE not suppotring the standard and having their own attachEvent method, which complicates things. So you have to do some feature detection and branching depending on what the browser supports.

This is why I prefer to use a library such as jQuery as it abstracts away some of the more tedious aspects of event regsistration and cross browser comaptibility in general.

jQuery example:
code:
$(function() {
  $("#colorSelector").change(bgColor);
});

peepsalot fucked around with this message at 20:31 on Nov 7, 2010

peepsalot
Apr 24, 2007

        PEEP THIS...
           BITCH!

BlackRider posted:

Thanks for the reply! It was a good idea but it didn't work :(

I made a blank page just to test this (in case it was something else interfering) but it didn't make a difference.

Hmm, I tested this since I found it hard to believe that epswing's example would not work, but sure enough I got an error "bgColor is not a function". Giving your functions the same name as html attributes can cause problems. bgcolor is an html element attribute.

renaming it to setBgColor works fine:
http://jsbin.com/eheru3/2/edit

peepsalot fucked around with this message at 20:52 on Nov 7, 2010

BlackRider
Dec 28, 2004
Awesome.

Thank you peepsalot for taking the time to explain all of that to me. I had to re-read it a few times to really understand it but it was very thorough and well explained. If you ever get sick of whatever it is you do, maybe you should teach this stuff. Can't thank you enough, I wasn't expecting that kind of response.

jQuery is very intriguing to me and I didn't know it existed. Part of the problem with learning some of this stuff is everything we are doing is pretty antiquated. I think I will get familiar with this on my own.

As far as the function name being the same as an element attribute :doh:

epswing
Nov 4, 2003

Soiled Meat

peepsalot posted:

Hmm, I tested this since I found it hard to believe that epswing's example would not work, but sure enough I got an error "bgColor is not a function". Giving your functions the same name as html attributes can cause problems. bgcolor is an html element attribute.

whoops :doh:

dizzywhip
Dec 23, 2005

I'm developing a JavaScript game and I quickly ran into issues trying to do inheritance. Google was no help so I sat down and created a prototypal inheritance pattern. I wrote an article about it and I'm looking for feedback -- what do you guys think?

http://www.iokat.com/posts/2/a-javascript-prototypal-inheritance-pattern-that-doesnt-suck

Lumpy
Apr 26, 2002

La! La! La! Laaaa!



College Slice

Gordon Cole posted:

I'm developing a JavaScript game and I quickly ran into issues trying to do inheritance. Google was no help so I sat down and created a prototypal inheritance pattern. I wrote an article about it and I'm looking for feedback -- what do you guys think?

http://www.iokat.com/posts/2/a-javascript-prototypal-inheritance-pattern-that-doesnt-suck

One nit pick off the bat:

your atricle posted:

The current solutions to implementing JavaScript inheritance tend to be clunky and impractical.

If you are going to say this, back it up. I know my js inheritance pattern certainly isn't clunky or impractical. :) In a "serious" article, using that type of language can set the wrong tone to your audience.

As for the article... it's decent, but there are tons like it out there. The chapter on Inheritance form Crockford's java script: The Good Parts touches on all this as well, and your pattern here seems like a variation on the Functional inheritance he describes there. That said, it is well written, clear, and I wish I was as good at writing about code as you are.

dizzywhip
Dec 23, 2005

Thanks for the advice :)

Perhaps I should take that part out. The reason I developed my own pattern to begin with was that everything I found on Google kind of sucked. I mostly found patterns that tried to recreate class-based object orientation or ones that didn't support extending functions.

But Googling now I'm finding some pretty decent solutions, so I guess I wasn't using very good search terms before. Which is probably true because I was still learning the more advanced parts of JavaScript while I was coming up with this.

almostkorean
Jul 9, 2001
eeeeeeeee
I'm currently working on a Google Chrome extension, but I'm a Javascript newbie and I'm running into a problem I can't figure out.

I'm using XMLHttpRequest to grab a web page that I want to parse. The Chrome extension tutorials give this example:

code:
var xhr = new XMLHttpRequest();
xhr.open("GET", "http://api.example.com/data.json", true);
xhr.onreadystatechange = function() {
  if (xhr.readyState == 4) {
    // JSON.parse does not evaluate the attacker's scripts.
    var resp = JSON.parse(xhr.responseText);
  }
}
xhr.send();
I'm having problems using JSON.parse in my extension. For some reason when I have that line in there, I get the error: "Uncaught SyntaxError: Unexpected token ILLEGAL" on line 2 of my html file which starts out like this:

code:
1  <style>
2  body {
3    min-width:357px;
4    min-height:400px;
5    overflow-x:hidden;
6  }
.
.
And the error goes away if I comment out the JSON.parse line. Any ideas on what's going on?

Lumpy
Apr 26, 2002

La! La! La! Laaaa!



College Slice

almostkorean posted:

I'm currently working on a Google Chrome extension, but I'm a Javascript newbie and I'm running into a problem I can't figure out.

I'm using XMLHttpRequest to grab a web page that I want to parse. The Chrome extension tutorials give this example:

code:
var xhr = new XMLHttpRequest();
xhr.open("GET", "http://api.example.com/data.json", true);
xhr.onreadystatechange = function() {
  if (xhr.readyState == 4) {
    // JSON.parse does not evaluate the attacker's scripts.
    var resp = JSON.parse(xhr.responseText);
  }
}
xhr.send();
I'm having problems using JSON.parse in my extension. For some reason when I have that line in there, I get the error: "Uncaught SyntaxError: Unexpected token ILLEGAL" on line 2 of my html file which starts out like this:

code:
1  <style>
2  body {
3    min-width:357px;
4    min-height:400px;
5    overflow-x:hidden;
6  }
.
.
And the error goes away if I comment out the JSON.parse line. Any ideas on what's going on?

Not knowing specifics, my guess is because HTML is not JSON. JSON.parse is likely expected to act on "stringified" JSON. I don't know what JSON lib you are using, but the one at json.org which is the most commonly used one says this about the parse() method:

JSON docs posted:

The parse method takes a text and an optional reviver function, and returns
a JavaScript value if the text is a valid JSON text.

So it seems like you are taking HTML and attempting to convert it to JSON, and it (correctly) failing.

Munkeymon
Aug 14, 2003

Motherfucker's got an
armor-piercing crowbar! Rigoddamndicu𝜆ous.




You mention Firefox in the article, but even the latest 3.x doesn't seem to support Object.create() so you might want to explicitly mention which browsers (or just which JS engines) it's going to work on if it's that badly supported.

almostkorean
Jul 9, 2001
eeeeeeeee

Lumpy posted:

Not knowing specifics, my guess is because HTML is not JSON. JSON.parse is likely expected to act on "stringified" JSON. I don't know what JSON lib you are using, but the one at json.org which is the most commonly used one says this about the parse() method:


So it seems like you are taking HTML and attempting to convert it to JSON, and it (correctly) failing.

Thanks, you are right :doh:. With that said, I'm 90% sure I'm going to finish making this extension using GWT. I really can't stand Javascript

Nigglypuff
Nov 9, 2006


BUY ME BONESTORM
OR
GO TO HELL

almostkorean posted:

Thanks, you are right :doh:. With that said, I'm 90% sure I'm going to finish making this extension using GWT. I really can't stand Javascript
Care to elaborate?

Adbot
ADBOT LOVES YOU

Lumpy
Apr 26, 2002

La! La! La! Laaaa!



College Slice

Nigglypuff posted:

Care to elaborate?

People who don't know javascript and try to write it w/o learning it hate javascript. Film at 11.

  • 1
  • 2
  • 3
  • 4
  • 5
  • Post
  • Reply