[coldbox:12260] Re: ColdBox + jQuery Mobile

FWIW, heres a mobile interceptor i created this weekend… it basically switches out the layout based on user-agent, or the presence of rc.isMobile…

var rc = event.getCollection();

param name=“request.session.isMobile” default=“0”;

if ( not structKeyExists(request.session,‘isMobile’) and not structKeyExists(request.session,‘noMobile’)){

// browser match, or url.isMobile to turn it on…
if (
reFindNoCase(“android|avantgo|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)/|plucker|pocket|psp|symbian|treo|up.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino”,CGI.HTTP_USER_AGENT) GT 0 OR reFindNoCase(“1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|)|g1 u|g560|gene|gf-5|g-mo|go(.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| ||a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|/(k|l|u)|50|54|e-|e/|-[a-w])|libw|lynx|m1-w|m3ga|m50/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(di|rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|xda(-|2|g)|yas-|your|zeto|zte-”,Left(CGI.HTTP_USER_AGENT,4)) GT 0)
{
request.session.isMobile = 1;
}
}

var rc = event.getCollection();

if (event.getValue(‘isMobile’,’’) eq 0) {
request.session.ismobile = false;
}

if (event.getValue(‘isMobile’,’’) eq 1) {
request.session.ismobile = true;
}

if (request.session.isMobile eq 1){
event.setLayout(‘layout.Mobile’);
}

could you upload this to forgebox :slight_smile:


Jeremy R. DeYoung
Phone:615.261.8201

RantsFromAMadMan.com

Any reason why you are using the request scope directly? Sorry my review eyes are always on.

Dan also remember that the mobile config is an interceptor also so you can create a preprocess method and it is automatically registered for you

Andrew - I am not sure why I would do that here. I think for my case I have a very different user experience so it makes sense for it to be a module.

Bill - Thanks for the example!

Luis - You lost me there o wise one… I am not sure what you mean or how to do that.

Thanks Stephen, I thought those had to be explicitly created. I think this is because by default /forgebox points to forgebox.

Ok, the ModuleConfig.cfc where you configure your module is also an interceptor, it means that it is registered for event driven programming automatically for you. All you have to do is create functions that are registered events and they will be called for you. Example:

function preProcess(event,interceptData(){
if( mobile ){
// switch stuff here.
}
}

Just by creating that method in your ModuleConfig, it will fire on preProcess or ANY event registered in your application.

Luis F. Majano
CEO
Ortus Solutions, Corp
www.ortussolutions.com

ColdBox Platform: http://www.coldbox.org
Linked In: http://www.linkedin.com/pub/3/731/483
Blog: http://www.luismajano.com
IECFUG Manager: http://www.iecfug.com

Social: twitter.com/lmajano facebook.com/lmajano

Dan, yeah that’s cool. I was looking at the point that you maybe don’t want to rewrite the entire site layout / views in a single module.