I just released the version 0.4 of the django-meio-easytags. I added a subclass of django’s default template tags Library. And now it’s easier to create a template tag. Take a look.
Posts de ‘Fábio M. Costa’
[Fabio M Costa] django-meio-easytags 0.4 released!
Wednesday, March 2nd, 2011[Fabio M Costa] django-meio-easytags 0.3 released!
Saturday, February 26th, 2011I released today the version 0.3 of django-meio-easytags. Now it supports template tags that accepts positional arguments (*args) and keyword arguments (**kwargs). If you don’t know how to use this, take a look at Python FAQ. In this release I included some documentation and created a page for the project.
Any doubts, suggestions, feature requests, feel free to mail me, open an issue at Github or leave a comment.
[Fabio M Costa] django-meio-easytags released!
Monday, February 21st, 2011I just released a project I have been working today. A long time ago, I was tired of parsing my template tags by hand, then I created a BaseNode to do this work for me and all I had to do was subclass it and define the method to render the context.
Last friday, my friend Diego Fleury asked me for some help developing a template tag and I talked to him about my old BaseNode. When I showed the code to him, he didn’t understand it so did I. So I wanted to make it cleaner and developed the project django-meio-easytags. It’s hosted at Github (http://github.com/vbmendes/django-meio-easytags/).
It’s very easy to create your own template tags with it. Take a look: https://github.com/vbmendes/django-meio-easytags/blob/master/README
Any comments and contributions are welcome.
[Fabio M Costa] Domain redirect keeping the URL path with .htaccess
Friday, July 16th, 2010I had a site hosted at a domain and the client asked me to change the domain. But it’s a very bad idea to simply change a site’s address without thinking about all the users who have bookmarked the old site. It means losing all of them. So I thought that i could do a redirect from the old domain to the new one. This redirect should be using HTTP status code 301 to identify that the site has moved permanently. There are many ways to do such a thing. But one took my attention. Why not use Apache .htaccess file associated with mod_rewrite? Most of the hosting services supports this. Firstly I tried this:
RewriteEngine On RewriteBase / Redirect 301 / http://mynewdomain.com/
This way, all requests to the root of my old domain get redirected to the root of my new domain. But what if I try yo access some path inside my old domain? It would raise a 404 error because it does not have the content anymore. I want that if the user access http://myolddomain.com/path/ it redirects him to http://mynewdomain.com/path/. So I ended up with this:
RewriteEngine On RewriteBase / RedirectMatch 301 (.*)$ http://mynewdomain.com$1
[Fabio M Costa] get_first_object_or_none shortcut for Django
Sunday, March 28th, 2010I will talk about a shortcut I developed for the Django framework and always use in my apps. This code is aimed in making a quik shortcut to obtain the first object of a queryset if it exists or None otherwise.
It’s very useful when you want to display the last news in the first page of your website, but don’t want it to break if there isn’t one to show. It’s just a use case for such a code, but there are many more.
In the past I used to write something like this:
try:
first_user = User.objects.all()[:1][0]
except IndexError:
first_user = None
This is four lines to do a very simple task and I wanted to evolve this to use only one line of code. So I developed a function that do this to me. It’s inspired in the django.shortcuts.get_object_or_404. Let’s take a look at the code:
def get_first_object_or_none(queryset):
try:
return queryset[:1][0]
except IndexError:
return None
I’ve put this code in a module called shortcuts inside my project and now everytime I want to use it I can write this code:
from shortcuts import get_first_object_or_none first_user = get_first_object_or_none(User.objects.all())
I think it’s a very good result and helps a lot in my coding. It also made my code more legible and easy to understand. It increased my productivity and I am publishing to increase others productivity also. Any doubts, questions os suggestions, please leave a comment.
[Fabio M Costa] Meio.Autocomplete, Mootools Autocomplete plugin
Monday, March 15th, 2010Meio.Autocomplete Docs and Demos
Yeah, we haven’t posted for a while, but it’s time to show you some great code I’ve been working on these days.
I’ve been searching for a good auto-complete plugin for a while. Found some good ones but none of them is perfect and I sometimes had to change their codes to get what I wanted on my projects. So I got tired and decided that I should do my own. My “perfect” one.
Basically I wanted an auto-complete plugin that would act as a select DOM element, which means, when I select a value on the auto-complete list the id of this option is setted somewhere (a hidden field for example) and I needed to have access to the “select” and “deselect” events, that would be fired when I select and deselect an option, respectively.
Meio.Autocomplete does all these simple tasks and more. It’s full of options and I made it in a way that it would be easy to set it up. I really recommend you to take a look at its documentation and see the demos to understand how it works. You can change the demos code too if you wish and run the resulting code, thanks to Mooshell.
I’m open to new ideas, bug fixes, new options etc…
Feel free to comment and ask anything (help included) on the documentations page.
[Fabio M Costa] New changed event
Thursday, August 13th, 2009Have you ever had problems with the ‘change’ event? I did, in particular on text-inputs.
I’ll list the crazy behaviors i don’t like about it:
- If you change the value of a text input and submit the actual form by pressing enter, on Opera the change event won’t fire!;
- If you apply keydown, keypress or keyup and any of them returns false (this is used on meioMask and most of the plugins that filters the input from the user), the change event won’t fire!;
- If you focused on a text input and some script you made changes the value from this input, when you blur it the change even’t won’t fire!;
- On IE, if you choose one of the native auto-complete options that is shown when you focus without typing anything, change event won’t fire!
That’s why i created this new glossy ‘changed’ event, which is the change event but fixing all these problems i listed. It uses the power of the Mootools custom events to create this new event that can be used like any other event.
I’ve created a page to show it working.
/**
* @author Fábio Miranda Costa <fabiomcosta [at] gmail [dot] com>
* 09-07-2009
* http://www.meiocodigo.com
* Changed Event for Mootools 1.2.x
*/</p>
<p>(function(){</p>
<pre><code>var $ = document.id || $;
var STORAGE_VALUE = 'changed-event-value-storage';
var lastFocused = null;
var focusFunc = function(){
lastFocused = this;
this.store(STORAGE_VALUE, this.get('value'));
};
var submitFunc = function(e){
if(check.call(lastFocused)){
lastFocused.fireEvent('changed');
}
};
var check = function(e){
var storedValue = this.retrieve(STORAGE_VALUE);
// this happens when you focus the input before adding the changed event on the input
if(storedValue === null) return false;
return this.value !== storedValue;
};
Element.Events.changed = {
base: 'blur',
onAdd: function(){
var evts = this.retrieve('events');
if(!(evts && evts.focus && evts.focus.keys.contains(focusFunc))){
this.addEvent('focus', focusFunc);
var formEl = $(this.form), fevts = formEl.retrieve('events');
if(!(fevts && fevts.submit && fevts.submit.keys.contains(submitFunc))){
formEl.addEvent('submit', submitFunc);
}
}
},
condition: function(e){
e.type = 'changed';
return check.call(this, e);
},
onRemove: function(){
var evts = this.retrieve('events');
if(!evts.changed.keys.length){
this.removeEvent('focus', focusFunc);
if(lastFocused == this) lastFocused = null;
if(!submitInputs.length){
$(this.form).removeEvent('submit', submitFunc);
}
}
}
};
</code></pre>
<p>})();
I’m sorry about the entities errors on the code, its this f…. s…. blog system that simply can’t do it right. If anybody know how to solve this, please let me know.
It won’t hurt if i remember that it should only be used on text inputs (it wont work as expected on radiobuttons and checkboxes) and you should apply the event before you focus the element (its kind of obvious but as i said, it won’t hurt).
Did i tell you that Mootools rocks?
[Fabio M Costa] meioMask 1.1.3 version released!
Monday, June 29th, 2009meioMask 1.1.3 is out! sorry for this little interval between the versions but the last one would break on IE on a certain situation, explained below on the changelog.
Everyone that has 1.1.2 working ok is hardly encouraged to change to 1.1.3.
Features
- Accepts paste event;
- Has fixed, reverse (currency) and repeat mask types;
- You can still use your hot keys and others (ex: ctrl+t, ctrl+f5, TAB …);
- Supports metadata plugin;
- Works with iPhone;
- Allow default values;
- Has callbacks for invalid inputs, valid and overflow;
- Has function to mask strings;
- Support for positive and negative numbers on reverse masks;
- Can auto-focus the next form element when the current input is completely filled.
Changelog
v1.1.3
- a minor bug on _keyPressReverse that may break 1.1.2 on ie when a char is typed in a text input that had its content selected by any range;
- FIxed the onchange event on ie in masks that have type fixed.
v1.1.2
- Set defaultValue property of the input. This fixes the behavior of the reset button on forms. Now the value will be reseted to the masked value;
- âêô were added to the ‘@’ rule;
- Fix for the auto-tab feature, it now focus just on visible form elements;
- Added setSize option. It sets the input size based on the length of the mask (work with fixed and reverse masks only).
v1.1.1
- Fixed caret bug on ‘repeat’ masks;
- Fixed keyup event on fixed masks, it is now firing propertly;
- Added selectCharsOnFocus option;
- Added textAlign option.
v1.1
- Mask type ‘infinite’ is now called ‘repeat’ (using ‘infinite’ still works but it is deprecated). It now allows a maxLenght value to be set. MaxLength can be set by the maxLength attribute of the element or the maxLength option;
- You can easily set an autoTab option that will focus the next form element when the masked input is totally filled. It is true by default but you can put a jQuery selector string to match the next element you want to be focused.
- Deprecated ‘unmaskVal’ function. This function is too buggy… works for most cases but not all. The best way to unmask a value is by doing it yourself;
- The fixedChars option is not global anymore, giving more flexibility for the masks;
- ‘phone-us’ mask is now ‘(999) 999-9999′;
- Correctly fires the onChange event on reverse masked inputs.
You can see the plugin page here. It contains documentation and examples. Please tell me any bug, new feature, english errors on documentation…. anything! I’ll be glad to hear your feedback and make the fixes. Hope it helps you!
[Fabio M Costa] meioMask 1.1.2 version released!
Sunday, June 28th, 2009meioMask 1.1.2 is out! It basically adds some sugar to the 1.1.1 version. See the changelog on this post for more info.
Added 1 new options:
- setSize (default=false): sets the input size based on the length of the mask (work with fixed and reverse masks only).
Everyone that has 1.1.1 working ok is encouraged to change to 1.1.2.
Features
- Accepts paste event;
- Haves fixed, reverse (currency) and repeat mask types;
- You can still use your hot keys and others (ex: ctrl+t, ctrl+f5, TAB …);
- Supports metadata plugin;
- Works with iPhone;
- Allow default values;
- Haves callbacks for invalid inputs, valid and overflow;
- Haves function to mask strings;
- Support for positive and negative numbers on reverse masks;
- Can auto-focus the next form element when the current input is completely filled.
Changelog
v1.1.2
- Set defaultValue property of the input. This fixes the behavior of the reset button on forms. Now the value will be reseted to the masked value;
- âêô were added to the ‘@’ rule;
- Fix for the auto-tab feature, it now focus just on visible form elements;
- Added setSize option. It sets the input size based on the length of the mask (work with fixed and reverse masks only).
v1.1.1
- Fixed caret bug on ‘repeat’ masks;
- Fixed keyup event on fixed masks, it is now firing propertly;
- Added selectCharsOnFocus option;
- Added textAlign option.
v1.1
- Mask type ‘infinite’ is now called ‘repeat’ (using ‘infinite’ still works but it is deprecated). It now allows a maxLenght value to be set. MaxLength can be set by the maxLength attribute of the element or the maxLength option;
- You can easily set an autoTab option that will focus the next form element when the masked input is totally filled. It is true by default but you can put a jQuery selector string to match the next element you want to be focused.
- Deprecated ‘unmaskVal’ function. This function is too buggy… works for most cases but not all. The best way to unmask a value is by doing it yourself;
- The fixedChars option is not global anymore, giving more flexibility for the masks;
- ‘phone-us’ mask is now ‘(999) 999-9999′;
- Correctly fires the onChange event on reverse masked inputs.
You can see the plugin page here. It contains documentation and examples. Please tell me any bug, new feature, english errors on documentation…. anything! I’ll be glad to hear your feedback and make the fixes. Hope it helps you!
[Fabio M Costa] MeioCódigo now in Twitter
Thursday, June 25th, 2009We have created a profile for MeioCódigo in Twitter. We will twitt all our blog posts and something related to the blog’s topics. If you like MeioCódigo, start following our twitter.