Modern javascript provides a host of cool functional-programming toys like forEach
and reduce
, but I'm stuck with IE* at work, which does not. jQuery fills some of those gaps (it has $.each
and $.map
) but not everything one would want.
Enter underscore.js, which bills itself as "the tie to go along with jQuery's tux."
It doesn't modify any native objects, requiring you to wrap them as _([1,2,3]).map(function(x) {return 2*x;})
, which returns [2,4,6]
. Chaining has to be explicitly enabled, _([1,2,3]).chain().map(function(x) {return 2*x;}).reduce(function(memo, num){ return memo + num; }, 0)
returns 12
.
Looks useful.
Posted by Danny on December 20, 2011 at 10:27 am under Javascript.
Comment on this post.
I put yesterday's unmask password plugin together with the code to automatically create a checkbox to control it, and removed the dependency on jQuery UI.
Download the code.
Example
<input type="password" id="password"/>
$('#password').showPassword('Show Characters as I Type');
Use
$('[type=password]').showPassword(string)
creates a checkbox as above with string
as the label. If the checkbox is checked then the password field is unmasked. $('type=password').showPassword(true)
unmasks the field directly, and $('type=password').showPassword(false)
restores masking.
Posted by Danny on December 13, 2011 at 2:10 pm under Javascript, jQuery.
Comment on this post.
I hate password masking—hiding what I'm typing to prevent someone from looking over my shoulder at my passwords. I know when I'm in public and when I'm alone in the house, and it should be my choice to actually see what I'm typing, since it has to have some nonsense combination of characters. Even Jakob Nielsen agrees with me.
The logical thing to do is to have a checkbox that would show the characters, and the easiest way to do that is to change the type
of the input
element from password
to text
.
For most browsers, this is nontrivial but doable. You have to detach
the element first in order to change its type
. But in Internet Explorer, there's no way to change it. One solution is to create a new input
element with type
text
and copy all the other attributes into it, but that seems like overkill. All we need is a way for the user to see what he is typing, so a tooltip-like overlay would work.
This is what I came up with (note that it requires jQuery UI position
:
<input type="password" id="password"/>
<label><input type="checkbox" id="check"/> Show characters as I type</label>
try{
$('<input type="password">').detach().attr('type', 'text');
$.fn.showPassword = function(shouldShow){
var type = shouldShow ? 'text' : 'password';
return this.each(function(){
/* from http://stackoverflow.com/questions/540851/jquery-change-element-type-from-hidden-to-input */
marker = $('<span />').insertBefore(this);
$(this).detach().attr('type', type).insertAfter(marker);
marker.remove();
});
};
}catch(e){
$.fn.showPassword = function(shouldShow){
return this.each(function(){
if (shouldShow){
var span = $(this).siblings('.showPassword');
if (span.length > 0){
span.show();
}else{
span = $('<span>').addClass('showPassword').css({
opacity: 0.9,
background: 'white',
position: 'absolute',
fontFamily: 'sans-serif',
paddingLeft: '2px'
}).position({
at: 'left bottom',
of: this,
my: 'left top'
}).text(this.value).insertBefore(this);
$(this).keyup(function(){ span.text(this.value); });
}
}else{
$(this).siblings('.showPassword').hide();
}
});
};
}
$('#check').change(function(){
$('#password').showPassword($(this).is(':checked'));
});
Try this in Internet Explorer as well as a standards browser. The details are different, but the functionality is the same.
Posted by Danny on December 12, 2011 at 5:40 pm under Javascript, jQuery.
Comment on this post.
tl;dr
Download the code. Use $.validateHTML5(callback)
, where callback (result, data)
is a function that is called with the result
, a string that can be "valid"
if the page validated, "invalid"
if it did not, "warning"
if it validated but is "in some way questionable", or "not validated"
if some error occurred. data
is the actual JSON
output from the validator.
Continue reading ‘HTML5 validator plugin’ »
Posted by Danny on December 6, 2011 at 1:47 pm under Javascript, jQuery.
Comment on this post.
Updated flexcal
to 1.2.1; nothing major, just changed the Hebrew numbers to use the technically correct Unicode code points HEBREW PUNCTUATION GERESH (׳ ׳) and HEBREW PUNCTUATION GERSHAYIM (״ ״) rather than single and double quotes. Also similarly updated the Hebrew keyboard.
Posted by Danny on November 27, 2011 at 6:22 pm under Javascript, jQuery, Judaism.
Comment on this post.
This doesn't belong in a programming blog, but I wanted this out there on the web.
I recently had a need for the Hebrew text of the traditional marriage documents, the ketubah and tenaim, and was very surprised that they are nowhere to be found, at least with my Google-fu. So I transcribed them and offer them with a liberal license to the world. The ketubah text is from Goldin's 1939 Hamadrikh and the tenaim text is that of haRav Feinstein (example).
These documents are licensed under a Creative Commons Attribution 3.0 Unported License.
tenaim (ODT)
tenaim (PDF)
ketubah (ODT)
ketubah (PDF)
Posted by Danny on November 8, 2011 at 1:23 pm under Judaism.
6 Comments.
This post is obsolete; since moving the code to github, the package is no longer being maintained. You need four files: flexcal.css, jquery.ui.subclass.js, jquery.textpopup.js and jquery.flexcal.js
There's been some interest in putting flexcal
and all its dependencies into a single file (that would be jquery.ui.subclass.js
, jquery.textpopup.js
, jquery.flexcal.js
, and flexcal.html
). The problem with putting it all into a ZIP file is keeping it updated; I don't have an automated make
-like system and there's no way I'm going to remember to keep the package up to date. So I created a PHP script based on Patrick Hunlock's Supercharged Javascript to pull the javascript together automatically, together with a script to create the HTML template (so no AJAX is needed and no flexcal.html
).
Download the code.
Posted by Danny on November 7, 2011 at 4:35 pm under Javascript, jQuery.
Comment on this post.
I use Ulrich Mierendorff's aws_signed_request to create my Amazon Wishlist Widget. But Amazon just changed the terms of their API (which they do with frightening regularity). Luckily, it's a small change: each request now requires an Associate Tag in addition to the AWS key and encryption with the AWS secret key. But if you want to make money off Amazon, you need an Associate Tag anyway. So in the $params
that are passed to aws_signed_request
be sure to include a parameter "AssociateTag" => $tag
. And now it works again. For now.
I guess the idea is to up the ante in Amazon's battle against state sales taxes—they've cut off the associates in states they're in conflict with, and now those users can't use the search API at all.
I hope they don't declare war on Missouri next.
Posted by Danny on November 1, 2011 at 7:59 pm under PHP.
Comment on this post.
I've had some questions about extending flexcal
so I created one that combines filtering, output formatting and drop-down menus.
The filtering will only allow dates going back 17 years, and the calendar will start on that date. The formatting will use European dates (d/m/y). The drop-down menus will be the ones from the original post, but instead of using aspect-oriented programming (flexcal('after', '_adjustHTML', function (cal){...
) we will subclass the original widget.
Continue reading ‘A flexcal
Example’ »
Posted by Danny on October 30, 2011 at 5:17 am under Javascript, jQuery.
Comment on this post.
In a major burst of middle-of-the-night hacking, I've updated flexcal
to better handle changing options after instantiation and added a current
option, representing the currently highlighted date. I also updated textpopup
with a new option, box
that allows you to set the popup's container, useful for inline widgets. The flexcal
API examples use it for an inline datepicker.
Posted by Danny on October 28, 2011 at 1:39 am under Javascript, jQuery.
Comment on this post.