1. #1
    Sencha User
    Join Date
    May 2012
    Posts
    38
    Vote Rating
    2
    Ocelyn is on a distinguished road

      0  

    Default Unanswered: Application stuck on SplashScreen on BlackBerry simulator (phonegap)

    Unanswered: Application stuck on SplashScreen on BlackBerry simulator (phonegap)


    Hello everybody,

    I'm stuck for hours now on this problem, I have my application created with the last version of Sencha, who works fine on IOS and Android, using Phonegap 2.2.0 to pack everything.
    Now I want to put my app on Blackberry using Webworks and Phonegap.

    When I launch my application it stuck on the SplashScreen, I search a solution and it seems that maybe Sencha Touch 2 is loaded before Phonegap and could bring some problem, so I tried to modify my index.html to launch ST2 after Phonegap :

    Code:
    <script type="text/javascript" charset="utf-8">
    
        // Wait for PhoneGap to load
        //
            // register PhoneGap event listeners when DOM content loaded
            function initPhonegap() {
                            document.body.style.height = screen.height;
                console.log('init()');
                            document.addEventListener("deviceready", onDeviceReadyOT, true);
                            }
    
        // PhoneGap is ready
        //
        function onDeviceReadyOT() {                   
           
           
                    
                        (function(i){function s(a){function b(a,j){var  c=a.length,b,g;for(b=0;b<c;b++){g=a[b];var e=a,K=b,d=void  0;"string"==typeof  g&&(g={path:g});g.shared?(g.version=g.shared,d=g.shared+g.path):(A.href=g.path,d=A.href);g.uri=d;g.key=h+"-"+d;f[d]=g;e[K]=g;g.type=j;g.index=b;g.collection=a;g.ready=!1;g.evaluated=!1}return  a}var c;"string"==typeof a?(c=a,a=B(c)):c=JSON.stringify(a);var  h=a.id,e=h+"-"+C+o,f={};this.key=e;this.css=b(a.css,"css");this.js=b(a.js,"js");this.assets=this.css.concat(this.js);this.getAsset=
    function(a){return  f[a]};this.store=function(){t(e,c)}}function v(a,b){k.write('<meta  name="'+a+'" content="'+b+'">')}function p(a,b,c){var h=new  XMLHttpRequest,c=c||D,a=a+(-1==a.indexOf("?")?"?":"&")+Date.now();try{h.open("GET",a,!0),h.onreadystatechange=function(){if(4==h.readyState){var   a=h.status,d=h.responseText;200<=a&&300>a||304==a||0==a&&0<d.length?b(d):c()}},h.send(null)}catch(d){c()}}function  L(a,b){var  c=k.createElement("iframe");m.push({iframe:c,callback:b});c.src=a+".html";c.style.cssText=
    "width:0;height:0;border:0;position:absolute;z-index:-999;visibility:hidden";k.body.appendChild(c)}function  E(a,b,c){var d=!!a.shared;if(a.remote)b("");else{if(!d)var  e=b,f=a.version,l,b=function(j){l=j.substring(0,f.length+4);l!=="/*"+f+"*/"?confirm("Requested:  '"+a.uri+"' with checksum: "+f+" but received:  "+l.substring(2,f.length)+"instead. Attempt to refresh the  application?")&&M():e(j)};(d?L:p)(a.uri,b,c)}}function F(a){var  b=a.data,a=a.source.window,c,d,e,f;c=0;for(d=m.length;c<d;c++)if(e=m[c],
    f=e.iframe,f.contentWindow===a){e.callback(b);k.body.removeChild(f);m.splice(c,1);break}}function  G(a){"undefined"!=typeof  console&&(console.error||console.log).call(console,a)}function  t(a,b){try{n.setItem(a,b)}catch(c){if(c.code==c.QUOTA_EXCEEDED_ERR&&q){var  d=q.assets.map(function(a){return  a.key}),e=0,f=n.length,l=!1,j;for(d.push(q.key);e<=f-1;)j=n.key(e),-1==d.indexOf(j)?(n.removeItem(j),l=!0,f--):e++;l&&t(a,b)}}}function  u(a){try{return n.getItem(a)}catch(d){return null}}function M(){H||(H=
    !0,p(o,function(a){(new  s(a)).store();i.location.reload()}))}function w(a){function b(a,d){var  b=a.collection,g=a.index,f=b.length,e;a.ready=!0;a.content=d;for(e=g-1;0<=e;e--)if(a=b[e],!a.ready||!a.evaluated)return;for(e=g;e<f;e++)if(a=b[e],a.ready)a.evaluated||c(a);else  break}function  c(a){a.evaluated=!0;if("js"==a.type)try{eval(a.content)}catch(b){G("Error  evaluating "+a.uri+" with message: "+b)}else{var  d=k.createElement("style"),c;d.type="text/css";d.textContent=a.content;"id"in  a&&(d.id=a.id);
    "disabled"in  a&&(d.disabled=a.disabled);c=document.createElement("base");c.href=a.path.replace(/\/[^\/]*$/,"/");x.appendChild(c);x.appendChild(d);x.removeChild(c)}delete  a.content;0==--f&&h()}function h(){function  b(){k&&c()}function c(){var a=r.onUpdated||D;if("onSetup"in  r)r.onSetup(a);else a()}function  e(){l.store();h.forEach(function(a){t(a.key,a.content)});c()}function  g(a,b){a.content=b;0==--m&&(d.status==d.IDLE?e():i=e)}function  f(){I("online",f,!1);p(o,function(c){q=l=new s(c);var  e;l.assets.forEach(function(b){e=
    a.getAsset(b.uri);(!e||b.version!==e.version)&&h.push(b)});m=h.length;0==m?d.status==d.IDLE?b():i=b:h.forEach(function(b){function  d(){E(b,function(a){g(b,a)})}var  c=a.getAsset(b.uri),e=b.path,f=b.update;!c||!f||null===u(b.key)||"delta"!=f?d():p("deltas/"+e+"/"+c.version+".json",function(a){try{var  d=b,c;var  e=u(b.key),f=B(a),a=[],h,j,i;if(0===f.length)c=e;else{j=0;for(i=f.length;j<i;j++)h=f[j],"number"===typeof   h?a.push(e.substring(h,h+f[++j])):a.push(h);c=a.join("")}g(d,c)}catch(k){G("Malformed  delta content received for "+
    b.uri)}},d)})})}var  h=[],k=!1,i=function(){},n=function(){d.swapCache();k=!0;i()},m;I("message",F,!1);if(d.status==d.UPDATEREADY)n();else   if(d.status==d.CHECKING||d.status==d.DOWNLOADING)d.onupdateready=n,d.onnoupdate=d.onobsolete=function(){i()};!1!==navigator.onLine?f():y("online",f,!1)}var   e=a.assets,f=e.length,l;q=a;y("message",F,!1);0==f?h():e.forEach(function(a){var   c=u(a.key);null===c?E(a,function(c){a.remote||t(a.key,c);b(a,c)},function(){b(a,"")}):b(a,c)})}function  J(a){null!==k.readyState.match(/interactive|complete|loaded/)?
    w(a):y("DOMContentLoaded",function(){navigator.standalone?setTimeout(function(){setTimeout(function(){w(a)},1)},1):w(a)},!1)}var   D=function(){},m=[],k=i.document,x=k.head,y=i.addEventListener,I=i.removeEventListener,n=i.localStorage,d=i.applicationCache,B=JSON.parse,A=k.createElement("a"),z=k.location,C=z.origin+z.pathname+z.search,o="app.json",H=!1,q;if("undefined"===typeof  r)var r=i.Ext={};r.blink=function(a){var  b=u(a.id+"-"+C+o);v("viewport","user-scalable=no, initial-scale=1,  maximum-scale=1, minimum-scale=1, width=device-width,  height=device-height, target-densitydpi=device-dpi");
    v("apple-mobile-web-app-capable","yes");v("apple-touch-fullscreen","yes");b?(a=new  s(b),J(a)):p(o,function(b){a=new  s(b);a.store();J(a)})}})(this);;Ext.blink({"id":"ba7734f5-ef3e-4477-bcea-70fb8b8a9663"})                        
        }       
        </script>
    Instead of putting the SenchaTouch2 initializer functions here :

    Code:
        function onDeviceReadyOT() {
            // Empty                
        }
        </script> 
            
        <script type="text/javascript">
                        (function(i){function s(a){function b(a,j){var c=a.length,b,g;for(b=0;b<c;b++){g=a[b];var e=a,K=b,d=void 0;"string"==typeof g&&(g={path:g});g.shared?(g.version=g.shared,d=g.shared+g.path):(A.href=g.path,d=A.href);g.uri=d;g.key=h+"-"+d;f[d]=g;e[K]=g;g.type=j;g.index=b;g.collection=a;g.ready=!1;g.evaluated=!1}return a}var c;"string"==typeof a?(c=a,a=B(c)):c=JSON.stringify(a);var h=a.id,e=h+"-"+C+o,f={};this.key=e;this.css=b(a.css,"css");this.js=b(a.js,"js");this.assets=this.css.concat(this.js);this.getAsset=
    function(a){return f[a]};this.store=function(){t(e,c)}}function v(a,b){k.write('<meta name="'+a+'" content="'+b+'">')}function p(a,b,c){var h=new XMLHttpRequest,c=c||D,a=a+(-1==a.indexOf("?")?"?":"&")+Date.now();try{h.open("GET",a,!0),h.onreadystatechange=function(){if(4==h.readyState){var a=h.status,d=h.responseText;200<=a&&300>a||304==a||0==a&&0<d.length?b(d):c()}},h.send(null)}catch(d){c()}}function L(a,b){var c=k.createElement("iframe");m.push({iframe:c,callback:b});c.src=a+".html";c.style.cssText=
    "width:0;height:0;border:0;position:absolute;z-index:-999;visibility:hidden";k.body.appendChild(c)}function E(a,b,c){var d=!!a.shared;if(a.remote)b("");else{if(!d)var e=b,f=a.version,l,b=function(j){l=j.substring(0,f.length+4);l!=="/*"+f+"*/"?confirm("Requested: '"+a.uri+"' with checksum: "+f+" but received: "+l.substring(2,f.length)+"instead. Attempt to refresh the application?")&&M():e(j)};(d?L:p)(a.uri,b,c)}}function F(a){var b=a.data,a=a.source.window,c,d,e,f;c=0;for(d=m.length;c<d;c++)if(e=m[c],
    f=e.iframe,f.contentWindow===a){e.callback(b);k.body.removeChild(f);m.splice(c,1);break}}function G(a){"undefined"!=typeof console&&(console.error||console.log).call(console,a)}function t(a,b){try{n.setItem(a,b)}catch(c){if(c.code==c.QUOTA_EXCEEDED_ERR&&q){var d=q.assets.map(function(a){return a.key}),e=0,f=n.length,l=!1,j;for(d.push(q.key);e<=f-1;)j=n.key(e),-1==d.indexOf(j)?(n.removeItem(j),l=!0,f--):e++;l&&t(a,b)}}}function u(a){try{return n.getItem(a)}catch(d){return null}}function M(){H||(H=
    !0,p(o,function(a){(new s(a)).store();i.location.reload()}))}function w(a){function b(a,d){var b=a.collection,g=a.index,f=b.length,e;a.ready=!0;a.content=d;for(e=g-1;0<=e;e--)if(a=b[e],!a.ready||!a.evaluated)return;for(e=g;e<f;e++)if(a=b[e],a.ready)a.evaluated||c(a);else break}function c(a){a.evaluated=!0;if("js"==a.type)try{eval(a.content)}catch(b){G("Error evaluating "+a.uri+" with message: "+b)}else{var d=k.createElement("style"),c;d.type="text/css";d.textContent=a.content;"id"in a&&(d.id=a.id);
    "disabled"in a&&(d.disabled=a.disabled);c=document.createElement("base");c.href=a.path.replace(/\/[^\/]*$/,"/");x.appendChild(c);x.appendChild(d);x.removeChild(c)}delete a.content;0==--f&&h()}function h(){function b(){k&&c()}function c(){var a=r.onUpdated||D;if("onSetup"in r)r.onSetup(a);else a()}function e(){l.store();h.forEach(function(a){t(a.key,a.content)});c()}function g(a,b){a.content=b;0==--m&&(d.status==d.IDLE?e():i=e)}function f(){I("online",f,!1);p(o,function(c){q=l=new s(c);var e;l.assets.forEach(function(b){e=
    a.getAsset(b.uri);(!e||b.version!==e.version)&&h.push(b)});m=h.length;0==m?d.status==d.IDLE?b():i=b:h.forEach(function(b){function d(){E(b,function(a){g(b,a)})}var c=a.getAsset(b.uri),e=b.path,f=b.update;!c||!f||null===u(b.key)||"delta"!=f?d():p("deltas/"+e+"/"+c.version+".json",function(a){try{var d=b,c;var e=u(b.key),f=B(a),a=[],h,j,i;if(0===f.length)c=e;else{j=0;for(i=f.length;j<i;j++)h=f[j],"number"===typeof h?a.push(e.substring(h,h+f[++j])):a.push(h);c=a.join("")}g(d,c)}catch(k){G("Malformed delta content received for "+
    b.uri)}},d)})})}var h=[],k=!1,i=function(){},n=function(){d.swapCache();k=!0;i()},m;I("message",F,!1);if(d.status==d.UPDATEREADY)n();else if(d.status==d.CHECKING||d.status==d.DOWNLOADING)d.onupdateready=n,d.onnoupdate=d.onobsolete=function(){i()};!1!==navigator.onLine?f():y("online",f,!1)}var e=a.assets,f=e.length,l;q=a;y("message",F,!1);0==f?h():e.forEach(function(a){var c=u(a.key);null===c?E(a,function(c){a.remote||t(a.key,c);b(a,c)},function(){b(a,"")}):b(a,c)})}function J(a){null!==k.readyState.match(/interactive|complete|loaded/)?
    w(a):y("DOMContentLoaded",function(){navigator.standalone?setTimeout(function(){setTimeout(function(){w(a)},1)},1):w(a)},!1)}var D=function(){},m=[],k=i.document,x=k.head,y=i.addEventListener,I=i.removeEventListener,n=i.localStorage,d=i.applicationCache,B=JSON.parse,A=k.createElement("a"),z=k.location,C=z.origin+z.pathname+z.search,o="app.json",H=!1,q;if("undefined"===typeof r)var r=i.Ext={};r.blink=function(a){var b=u(a.id+"-"+C+o);v("viewport","user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width, height=device-height, target-densitydpi=device-dpi");
    v("apple-mobile-web-app-capable","yes");v("apple-touch-fullscreen","yes");b?(a=new s(b),J(a)):p(o,function(b){a=new s(b);a.store();J(a)})}})(this);;Ext.blink({"id":"ba7734f5-ef3e-4477-bcea-70fb8b8a9663"})
        </script>
    The result is, I'll have the Sencha loader (appLoadingIndicator) appear, but the ST2 won't load.

    I also check if there is no javascript errors with Ripple but everything looks fine.

    I suppose there is a way to call the app.js code after being sure Phonegap is ready, but unfortunately I haven't been able to find it.

    Thanks for your help !

    Ocelyn

  2. #2
    Sencha User
    Join Date
    May 2012
    Posts
    38
    Vote Rating
    2
    Ocelyn is on a distinguished road

      0  

    Default


    I keep looking for a solution for my problem and using this index.html :

    PHP Code:
    <script type="text/javascript" charset="utf-8">
        var 
    app = {   
        
    initialize: function() {
            
    this.bindEvents();
        },    

        
    bindEvents: function() {
            
    document.addEventListener('deviceready'this.onDeviceReadyfalse);
        },    

        
    onDeviceReady: function() {
            
    app.receivedEvent('deviceready');
        },    

        
    receivedEvent: function(id) {

        
    alert('HERE 1');


            (function(
    i){function s(a){function b(a,j){
    alert('HERE 2');
    var 
    c=a.length,b,g;for(b=0;b<c;b++){g=a[b];var e=a,K=b,d=void 0;"string"==typeof g&&(g={path:g});g.shared?(g.version=g.shared,d=g.shared+g.path):(A.href=g.path,d=A.href);g.uri=d;g.key=h+"-"+d;f[d]=g;e[K]=g;g.type=j;g.index=b;g.collection=a;g.ready=!1;g.evaluated=!1}return a}var c;"string"==typeof a?(c=a,a=B(c)):c=JSON.stringify(a);var h=a.id,e=h+"-"+C+o,f={};this.key=e;this.css=b(a.css,"css");this.js=b(a.js,"js");this.assets=this.css.concat(this.js);this.getAsset=
    function(
    a){return f[a]};this.store=function(){t(e,c)}}function v(a,b){k.write('<meta name="'+a+'" content="'+b+'">')}function p(a,b,c){var h=new XMLHttpRequest,c=c||D,a=a+(-1==a.indexOf("?")?"?":"&")+Date.now();try{h.open("GET",a,!0),h.onreadystatechange=function(){if(4==h.readyState){var a=h.status,d=h.responseText;200<=a&&300>a||304==a||0==a&&0<d.length?b(d):c()}},h.send(null)}catch(d){c()}}function L(a,b){var c=k.createElement("iframe");m.push({iframe:c,callback:b});c.src=a+".html";c.style.cssText=
    "width:0;height:0;border:0;position:absolute;z-index:-999;visibility:hidden";k.body.appendChild(c)}function E(a,b,c){var d=!!a.shared;if(a.remote)b("");else{if(!d)var e=b,f=a.version,l,b=function(j){l=j.substring(0,f.length+4);l!=="/*"+f+"*/"?confirm("Requested: '"+a.uri+"' with checksum: "+f+" but received: "+l.substring(2,f.length)+"instead. Attempt to refresh the application?")&&M():e(j)};(d?L:p)(a.uri,b,c)}}function F(a){var b=a.data,a=a.source.window,c,d,e,f;c=0;for(d=m.length;c<d;c++)if(e=m[c],
    f=e.iframe,f.contentWindow===a){e.callback(b);k.body.removeChild(f);m.splice(c,1);break}}function G(a){"undefined"!=typeof console&&(console.error||console.log).call(console,a)}function t(a,b){try{n.setItem(a,b)}catch(c){if(c.code==c.QUOTA_EXCEEDED_ERR&&q){var d=q.assets.map(function(a){return a.key}),e=0,f=n.length,l=!1,j;for(d.push(q.key);e<=f-1;)j=n.key(e),-1==d.indexOf(j)?(n.removeItem(j),l=!0,f--):e++;l&&t(a,b)}}}function u(a){try{return n.getItem(a)}catch(d){return null}}function M(){H||(H=
    !
    0,p(o,function(a){(new s(a)).store();i.location.reload()}))}function w(a){function b(a,d){var b=a.collection,g=a.index,f=b.length,e;a.ready=!0;a.content=d;for(e=g-1;0<=e;e--)if(a=b[e],!a.ready||!a.evaluated)return;for(e=g;e<f;e++)if(a=b[e],a.ready)a.evaluated||c(a);else break}function c(a){a.evaluated=!0;if("js"==a.type)try{eval(a.content)}catch(b){G("Error evaluating "+a.uri+" with message: "+b)}else{var d=k.createElement("style"),c;d.type="text/css";d.textContent=a.content;"id"in a&&(d.id=a.id);
    "disabled"in a&&(d.disabled=a.disabled);c=document.createElement("base");c.href=a.path.replace(/\/[^\/]*$/,"/");x.appendChild(c);x.appendChild(d);x.removeChild(c)}delete a.content;0==--f&&h()}function h(){function b(){k&&c()}function c(){var a=r.onUpdated||D;if("onSetup"in r)r.onSetup(a);else a()}function e(){l.store();h.forEach(function(a){t(a.key,a.content)});c()}function g(a,b){a.content=b;0==--m&&(d.status==d.IDLE?e():i=e)}function f(){I("online",f,!1);p(o,function(c){q=l=new s(c);var e;l.assets.forEach(function(b){e=
    a.getAsset(b.uri);(!e||b.version!==e.version)&&h.push(b)});m=h.length;0==m?d.status==d.IDLE?b():i=b:h.forEach(function(b){function d(){E(b,function(a){g(b,a)})}var c=a.getAsset(b.uri),e=b.path,f=b.update;!c||!f||null===u(b.key)||"delta"!=f?d():p("deltas/"+e+"/"+c.version+".json",function(a){try{var d=b,c;var e=u(b.key),f=B(a),a=[],h,j,i;if(0===f.length)c=e;else{j=0;for(i=f.length;j<i;j++)h=f[j],"number"===typeof h?a.push(e.substring(h,h+f[++j])):a.push(h);c=a.join("")}g(d,c)}catch(k){G("Malformed delta content received for "+
    b.uri)}},d)})})}var h=[],k=!1,i=function(){},n=function(){d.swapCache();k=!0;i()},m;I("message",F,!1);if(d.status==d.UPDATEREADY)n();else if(d.status==d.CHECKING||d.status==d.DOWNLOADING)d.onupdateready=n,d.onnoupdate=d.onobsolete=function(){i()};!1!==navigator.onLine?f():y("online",f,!1)}var e=a.assets,f=e.length,l;q=a;y("message",F,!1);0==f?h():e.forEach(function(a){var c=u(a.key);null===c?E(a,function(c){a.remote||t(a.key,c);b(a,c)},function(){b(a,"")}):b(a,c)})}function J(a){null!==k.readyState.match(/interactive|complete|loaded/)?
    w(a):y("DOMContentLoaded",function(){navigator.standalone?setTimeout(function(){setTimeout(function(){w(a)},1)},1):w(a)},!1)}var D=function(){},m=[],k=i.document,x=k.head,y=i.addEventListener,I=i.removeEventListener,n=i.localStorage,d=i.applicationCache,B=JSON.parse,A=k.createElement("a"),z=k.location,C=z.origin+z.pathname+z.search,o="app.json",H=!1,q;if("undefined"===typeof r)var r=i.Ext={};r.blink=function(a){var b=u(a.id+"-"+C+o);v("viewport","width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no");
    v("apple-mobile-web-app-capable","yes");v("apple-touch-fullscreen","yes");b?(a=new s(b),J(a)):p(o,function(b){a=new s(b);a.store();J(a)})}})(this);;Ext.blink({"id":"ba7734f5-ef3e-4477-bcea-70fb8b8a9663"})
        

    alert('HERE 3');
        }
    };
        
    app.initialize();
        
    </script> 
    I wrote 3 alert, one before the Javascript part for Sencha, one after and one in the function sencha method.
    The first one is called but the others are not, so I guess there is a problem with the Sencha Part but I can't figure what it could be, is there a way to simply make a test inside of the receivedEvent function to check if Sencha is working? Or is Sencha not loaded yet when I call all this code and the last line Ext.blink({"id":"ba7734f5-ef3e-4477-bcea-70fb8b8a9663"}) is killing everything ?

    Thanks again for your help!

  3. #3
    Sencha User
    Join Date
    Apr 2012
    Posts
    164
    Answers
    13
    Vote Rating
    9
    in4p will become famous soon enough

      0  

    Default


    Have you tried testing on a device using browser debugging? Or hooking up weinre?

  4. #4
    Sencha User
    Join Date
    May 2012
    Posts
    38
    Vote Rating
    2
    Ocelyn is on a distinguished road

      0  

    Default


    Hello in4p,

    Thank you for your answer,

    Well, when I'm using ripple with the plateform : Apache Cordova / Phonegap 2.0.0 everything works fine.
    If I'm using the plateform Webworks 2.0.0 I have the same result as on emulator, stuck on the sencha loading.
    But I have no Javascript error at all, and if I comment most of my code, still the same result.

    The only thing is on Webworks the deviceReady event won't fire, so I had to put all the Sencha Code inside of the receivedEvent method (see above) directly in the <script>.
    The code inside of my app.js or the first view seems to be called.

    What's weird is the deviceReady event fire on emulator.

    Another things who seems weird is in my log :
    I have this :

    Document was loaded from Application Cache with manifest http://localhost/mobile/Subway_Sub2S...cache.appcache
    Application Cache Checking event
    Application Cache NoUpdate event
    HERE 2


    Called 2 times, one before my app.js code is called and one after.
    The "Here 2" is a log I wrote inside of all the generate stuff from Sencha in index.html.

    And also I have this :

    Ripple :: Environment Warming Up (Tea. Earl Gray. Hot.) ripple.js:475
    webworks.handset :: Initialization Finished (Make it so.)


    called after the Sencha app.js code

    I really have no clue on what test I could do to make it work

    Thanks for your help again!

    Ocelyn

  5. #5
    Sencha User
    Join Date
    Apr 2012
    Posts
    164
    Answers
    13
    Vote Rating
    9
    in4p will become famous soon enough

      0  

    Default


    Ocelyn,
    I have personally avoided using Ripple as I found that the results (at least in so far as wrapping Sencha with cordova are concerned) are sometimes inconsistent with the actual device. Which device are you targeting?

    I would suggest trying the following for wrapping in cordova for bb:
    https://github.com/apache/incubator-...berry-webworks

    You are correct regarding the deviceReady event. It does not execute - not really sure why, but I've seen the same behavior on devices. However, your code should still execute (i.e. I would revert back to the original). I encountered the same issue initially, and as I said, it was due to a javascript 'error'. I say 'error' as there was no error in the code, but for some reason the bb didn't like the javascript and threw an error. BUT.... I never saw that error when I ran the built 'production' or 'package' code.
    To debug, I suggest that rather than building the app, (via Sencha cmd) and then trying to wrap, use your pre-built code(original source) and try to wrap it. This was how I discovered what it didn't like about my code - for some reason this showed the javascript error.

  6. #6
    Sencha User
    Join Date
    May 2012
    Posts
    38
    Vote Rating
    2
    Ocelyn is on a distinguished road

      0  

    Default


    Hello in4p,

    I spent the last days trying to find a solution for my problem,

    Yes I'm wrapping my application with Webwork since the beginning, I was planning to export for OS6 at first but it seems webwork only allows you to export for 0S7 :
    https://developer.blackberry.com/htm...dk#smartphones

    I tried many solutions with different result.
    Trying to export with production mode : Stop at the SplashScreen

    Trying to export with testing mode : Stop at the SplashScreen too, I opened the js files to check if there is some error, but nothing, also I commented all the console.log() just in case.
    If I try to export with uncompressed files, my application is too large and won't be installed on Blackberry (around 15 meg)

    It's really annoying, I started to have no clue on the way I could fix that problem.
    Could you show me your index.html just in case ?

    Thank you,

    Ocelyn

  7. #7
    Sencha User
    Join Date
    Apr 2012
    Posts
    164
    Answers
    13
    Vote Rating
    9
    in4p will become famous soon enough

      0  

    Default


    Ocelyn,

    I've had a heck of time getting things to work on <=OS7.

    A few thoughts that might help you:
    1) What version of ST are you using? I noticed a bug in ST2.1 where lists don't appear properly (at least on the Playbook). If you are using ST2.1 and your main view is a list, this could be the issue. Again, haven't tested this on an OS7 device.
    2) While I'm not able to share my exact code with you the structure should be (this is pre-compiling for production):
    ...
    <head>
    ...
    <script type="text/javascript" src="js/webworks.js"></script>
    <script id="microloader" type="text/javascript" src="touch/microloader/development.js"></script>
    </head>
    ...
    However, the above will not compile webworks into the app. I.e. you won't see it in the built production directory and it won't have been compiled. So you have to make sure that you include it in the final exported directory. I doubt this is your problem, but figured I'd mention it.

    3) I would try adding an alert statement in your app.js before the viewport adds the mainview.

    As a last resort I can offer to take a look at your code this weekend - I don't have much time, but I may be able to offer suggestions - or at least try it on a playbook and see if perhaps its the device/os causing the issue rather than you code.

  8. #8
    Sencha User
    Join Date
    May 2012
    Posts
    38
    Vote Rating
    2
    Ocelyn is on a distinguished road

      0  

    Default


    Thank you so much again for your help,

    1) I'm using ST2.1, I have some list in my application but not in the main view, if the list can bring trouble, I could try to find another way to do some of my views.
    2) I'm wondering what is js/webworks.js? One of your own class ? I haven't been able to find it in all of the files I downloaded.
    3) I'm going to try to add the alert statement.

    Thank you so much for your offer, I'll try to do my best to fix the problem as fast as possible, in order to not take your time
    I should try my app in playbook emulator too if you think it could bring me some clue.

  9. #9
    Sencha User
    Join Date
    Apr 2012
    Posts
    164
    Answers
    13
    Vote Rating
    9
    in4p will become famous soon enough

      0  

    Default


    Ocelyn,

    Body of the webworks.js is below. It is not my code - I believe it comes from RIM and is necessary for BB10 (not sure it's necessary for old devices). I got it via Cordova.

    You can test if you can view the list at the following URL - please let me know if you can't see it as I'll update the bug I logged accordingly.
    http://inotforprofit.com/bbtest/production/

    Webworks.js:
    Code:
    /*
     *  Copyright 2012 Research In Motion Limited.
     *
     * Licensed under the Apache License, Version 2.0 (the "License");
     * you may not use this file except in compliance with the License.
     * You may obtain a copy of the License at
     *
     * http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS,
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     * See the License for the specific language governing permissions and
     * limitations under the License.
     */
    
    
    (function () { 
    /*
     *  Copyright 2012 Research In Motion Limited.
     *
     * Licensed under the Apache License, Version 2.0 (the "License");
     * you may not use this file except in compliance with the License.
     * You may obtain a copy of the License at
     *
     * http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS,
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     * See the License for the specific language governing permissions and
     * limitations under the License.
     */
    
    
    var define,
        require;
    
    
    (function () {
        var unpreparedModules = {},
            readyModules = {},
            ACCEPTABLE_EXTENSIONS = [".js", ".json"],
            DEFAULT_EXTENSION = ".js";
    
    
        function hasValidExtension(moduleName) {
            return ACCEPTABLE_EXTENSIONS.some(function (element, index, array) {
                return moduleName.match("\\" + element + "$");
            });
        }
    
    
    
    
        function normalizeName(originalName, baseName) {
            var nameParts,
                name = originalName.slice(0);
            //remove ^local:// (if it exists) and .js$
            //This will not work for local:// without a trailing js
            name = name.replace(/(?:^local:\/\/)/, "");
            if (name.charAt(0) === '.' && baseName) {
                //Split the baseName and remove the final part (the module name)
                nameParts = baseName.split('/');
                nameParts.pop();
                nameParts = nameParts.concat(name.split('/'));
                
                name = nameParts.reduce(function (previous, current,  index, array) {
                    var returnValue,
                        slashIndex;
    
    
                    //If previous is a dot, ignore it
                    //If previous is ever just .. we're screwed anyway
                    if (previous !== '.') {
                        returnValue = previous;
                    }
                    
                    //If we have a .. then remove a chunk of previous
                    if (current === "..") {
                        slashIndex = previous.lastIndexOf('/');
                        //If there's no slash we're either screwed or we remove the final token
                        if (slashIndex !== -1) {
                            returnValue = previous.slice(0, previous.lastIndexOf('/'));
                        } else {
                            returnValue = "";
                        }
                    } else if (current !== '.') {
                        //Otherwise simply append anything not a .
                        //Only append a slash if we're not empty
                        if (returnValue.length) {
                            returnValue += "/";
                        }
                        returnValue += current;
                    }
    
    
                    return returnValue;
                });
    
    
            }
            
            //If there is no acceptable extension tack on a .js
            if (!hasValidExtension(name)) {
                name = name + DEFAULT_EXTENSION;
            }
    
    
            return name;
        }
    
    
        function buildModule(name, dependencies, factory) {
            var module = {exports: {}},
                localRequire = function (moduleName) {
                    return require(moduleName, name);
                },
                args = [];
            localRequire.toUrl = function (moduleName, baseName) {
                return require.toUrl(moduleName, baseName || name);
            };
            dependencies.forEach(function (dependency) {
                if (dependency === 'require') {
                    args.push(localRequire);
                } else if (dependency === 'exports') {
                    args.push(module.exports);
                } else if (dependency === 'module') {
                    args.push(module);
                } else {
                    //This is because jshint cannot handle out of order functions
                    /*global loadModule:false */
                    args.push(loadModule(dependency));
                    /*global loadModule:true */
                }
            });
    
    
            //No need to process dependencies, webworks only has require, exports, module
            factory.apply(this, args);
    
    
            //For full AMD we would need logic to also check the return value
            return module.exports;
    
    
        }
    
    
        function getDefineString(moduleName, body) {
            var evalString = 'define("' + moduleName + '", function (require, exports, module) {',
                isJson = /\.json$/.test(moduleName);
    
    
            evalString += isJson ? ' module.exports = ' : '';
            evalString += body.replace(/^\s+|\s+$/g, '');
            evalString += isJson ? ' ;' : '';
            evalString += '});';
    
    
            return evalString;
        }
    
    
        function loadModule(name, baseName) {
            var normalizedName = normalizeName(name, baseName),
                url,
                xhr,
                loadResult;
            //Always check undefined first, this allows the user to redefine modules
            //(Not used in WebWorks, although it is used in our unit tests)
            if (unpreparedModules[normalizedName]) {
                readyModules[normalizedName] = buildModule(normalizedName, unpreparedModules[normalizedName].dependencies, unpreparedModules[normalizedName].factory);
                delete unpreparedModules[normalizedName];
            }
    
    
            //If the module does not exist, load the module from external source
            //Webworks currently only loads APIs from across bridge
            if (!readyModules[normalizedName]) {
                //If the module to be loaded ends in .js then we will define it
                //Also if baseName exists than we have a local require situation
                if (hasValidExtension(name) || baseName) {
                    xhr = new XMLHttpRequest();
                    url = name;
                    //If the module to be loaded starts with local:// go over the bridge
                    //Else If the module to be loaded is a relative load it may not have .js extension which is needed
                    if (/^local:\/\//.test(name)) {
                        url = "http://localhost:8472/extensions/load/" + normalizedName.replace(/(?:^ext\/)(.+)(?:\/client.js$)/, "$1");
    
    
                        xhr.open("GET", url, false);
                        xhr.send(null);
                        try {
                            loadResult = JSON.parse(xhr.responseText);
    
    
                            loadResult.dependencies.forEach(function (dep) {
                                /*jshint evil:true */
                                eval(getDefineString(dep.moduleName, dep.body));
                                /*jshint evil:false */
                            });
    
    
                            //Trimming responseText to remove EOF chars
                            /*jshint evil:true */
                            eval(getDefineString(normalizedName, loadResult.client));
                            /*jshint evil:false */
                        } catch (err1) {
                            err1.message += ' in ' + url;
                            throw err1;
                        }
                    } else {
                        if (baseName) {
                            url = normalizedName;
                        }
    
    
                        xhr.open("GET", url, false);
                        xhr.send(null);
                        try {
                            //Trimming responseText to remove EOF chars
                            /*jshint evil:true */
                            eval(getDefineString(normalizedName, xhr.responseText));
                            /*jshint evil:false */
                        } catch (err) {
                            err.message += ' in ' + url;
                            throw err;
                        }
                    }
    
    
                    if (unpreparedModules[normalizedName]) {
                        readyModules[normalizedName] = buildModule(normalizedName, unpreparedModules[normalizedName].dependencies, unpreparedModules[normalizedName].factory);
                        delete unpreparedModules[normalizedName];
                    }
                } else {
                    throw "module " + name + " cannot be found";
                }
    
    
            }
    
    
            return readyModules[normalizedName];
    
    
        }
    
    
        //Use the AMD signature incase we ever want to change.
        //For now we will only be using (name, baseName)
        require = function (dependencies, callback) {
            if (typeof dependencies === "string") {
                //dependencies is the module name and callback is the relName
                //relName is not part of the AMDJS spec, but we use it from localRequire
                return loadModule(dependencies, callback);
            } else if (Array.isArray(dependencies) && typeof callback === 'function') {
                //Call it Asynchronously
                setTimeout(function () {
                    buildModule(undefined, dependencies, callback);
                }, 0);
            }
        }; 
    
    
        require.toUrl = function (originalName, baseName) {
            return normalizeName(originalName, baseName);
        };
    
    
        //Use the AMD signature incase we ever want to change.
        //For now webworks will only be using (name, factory) signature.
        define = function (name, dependencies, factory) {
            if (typeof name === "string" && typeof dependencies === 'function') {
                factory = dependencies;
                dependencies = ['require', 'exports', 'module'];
            }
    
    
            //According to the AMDJS spec we should parse out the require statments 
            //from factory.toString and add those to the list of dependencies
    
    
            //Normalize the name. Remove local:// and .js
            name = normalizeName(name);
            unpreparedModules[name] = {
                dependencies: dependencies,
                factory: factory
            }; 
        };
    }());
    
    
    //Export for use in node for unit tests
    if (typeof module === "object" && typeof require === "function") {
        module.exports = {
            require: require,
            define: define
        };
    }
    
    
    define('builder', function (require, exports, module) {
    /*
     * Copyright 2010-2011 Research In Motion Limited.
     *
     * Licensed under the Apache License, Version 2.0 (the "License");
     * you may not use this file except in compliance with the License.
     * You may obtain a copy of the License at
     *
     * http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS,
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     * See the License for the specific language governing permissions and
     * limitations under the License.
     */
    var utils = require(!!require.resolve ? "../utils" : "lib/utils");
    
    
    function buildNamespace(currentNamespace, namespaceParts, featureProperties) {
        var featureId,
            nextPart;
    
    
        if (namespaceParts.length === 1) {
            //base case, feature properties go here
            featureId = namespaceParts[0];
            if (currentNamespace[featureId] === undefined) {
                currentNamespace[featureId] = {};
            }
    
    
            currentNamespace = utils.mixin(featureProperties, currentNamespace[featureId]);
            return currentNamespace;
        }
        else {
            nextPart = namespaceParts.shift();
            if (currentNamespace[nextPart] === undefined) {
                currentNamespace[nextPart] = {};
            }
    
    
            return buildNamespace(currentNamespace[nextPart], namespaceParts, featureProperties);
        }
    }
    
    
    function include(parent, featureIdList) {
        var featureId,
            featureProperties,
            localUrl,
            i;
    
    
        for (i = 0; i < featureIdList.length; i++) {
            featureId = featureIdList[i];
    
    
            localUrl = "local://ext/" + featureId + "/client.js";
            featureProperties = utils.loadModule(localUrl);
    
    
            buildNamespace(parent, featureId.split("."), featureProperties);
        }
    }
    
    
    var _self = {
        build: function (featureIdList) {
            return {
                into: function (target) {
                    include(target, featureIdList);
                }
            };
        }
    };
    
    
    module.exports = _self;
    
    
    });
    
    
    define('window', function (require, exports, module) {
    /*
     * Copyright 2010-2011 Research In Motion Limited.
     *
     * Licensed under the Apache License, Version 2.0 (the "License");
     * you may not use this file except in compliance with the License.
     * You may obtain a copy of the License at
     *
     * http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS,
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     * See the License for the specific language governing permissions and
     * limitations under the License.
     */
    
    
    // HACK have to live with differentiating node from browser for now
    module.exports = {
        "window": function () {
            return !!require.resolve ? null : window;
        }
    };
    });
    
    
    define('event', function (require, exports, module) {
    /*
    * Copyright 2010-2011 Research In Motion Limited.
    *
    * Licensed under the Apache License, Version 2.0 (the "License");
    * you may not use this file except in compliance with the License.
    * You may obtain a copy of the License at
    *
    * http://www.apache.org/licenses/LICENSE-2.0
    *
    * Unless required by applicable law or agreed to in writing, software
    * distributed under the License is distributed on an "AS IS" BASIS,
    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    * See the License for the specific language governing permissions and
    * limitations under the License.
    */
    
    
    var _handlers = {};
    
    
    function _add(featureId, name, cb, success, fail, once) {
        var handler;
        if (featureId && name && typeof cb === "function") {
            handler = {
                func: cb,
                once: !!once
            };
            //If this is the first time we are adding a cb
            if (!_handlers.hasOwnProperty(name)) {
                _handlers[name] = [handler];
                //Do not call exec for once because its not necessary
                if (!once) {
                    window.webworks.exec(success, fail, featureId, "add", {"eventName": name});
                }
            } else if (!_handlers[name].some(function (element, index, array) {
                return element.func === cb;
            })) {
                //Only add unique callbacks
                _handlers[name].push(handler);
            }
        }
    }
    
    
    module.exports = {
        add: function (featureId, name, cb, success, fail) {
            _add(featureId, name, cb, success, fail, false);
        },
    
    
        once: function (featureId, name, cb, success, fail) {
            _add(featureId, name, cb, success, fail, true);
        },
    
    
        isOn: function (name) {
            return !!_handlers[name];
        },
    
    
        remove: function (featureId, name, cb, success, fail) {
            if (featureId && name && typeof cb === "function") {
                if (_handlers.hasOwnProperty(name)) {
                    _handlers[name] = _handlers[name].filter(function (element, index, array) {
                        return element.func !== cb || element.once;
                    });
    
    
                    if (_handlers[name].length === 0) {
                        delete _handlers[name];
                        window.webworks.exec(success, fail, featureId, "remove", {"eventName": name});
                    }
                }
            }
        },
    
    
        trigger: function (name, args) {
            var parsedArgs;
            if (_handlers.hasOwnProperty(name)) {
                if (args && args !== "undefined") {
                    parsedArgs = JSON.parse(decodeURIComponent(args));
                }
                //Call the handlers
                _handlers[name].forEach(function (handler) {
                    if (handler) {
                        //args should be an array of arguments
                        handler.func.apply(undefined, parsedArgs);
                    }
                });
                //Remove the once listeners
                _handlers[name] = _handlers[name].filter(function (handler) {
                    return !handler.once;
                });
                //Clean up the array if it is empty
                if (_handlers[name].length === 0) {
                    delete _handlers[name];
                    //No need to call remove since this would only be for callbacks
                }
            }
        }
    };
    
    
    });
    
    
    define('lib/utils', function (require, exports, module) {
    /*
     *  Copyright 2012 Research In Motion Limited.
     *
     * Licensed under the Apache License, Version 2.0 (the "License");
     * you may not use this file except in compliance with the License.
     * You may obtain a copy of the License at
     *
     * http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS,
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     * See the License for the specific language governing permissions and
     * limitations under the License.
     */
    
    
    var self,
        exception = require('./exception');
    
    
    function S4() {
        return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
    }
    
    
    self = module.exports = {
        validateNumberOfArguments: function (lowerBound, upperBound, numberOfArguments, customExceptionType, customExceptionMessage, customExceptionObject) {
    
    
            customExceptionMessage = customExceptionMessage || "";
    
    
            if (arguments.length < 3 || arguments.length > 6) {
                exception.raise(exception.types.Argument, "Wrong number of arguments when calling: validateNumberOfArguments()");
            }
    
    
            if (isNaN(lowerBound) && isNaN(upperBound) && isNaN(numberOfArguments)) {
                exception.raise(exception.types.ArgumentType, "(validateNumberOfArguments) Arguments are not numbers");
            }
    
    
            lowerBound = parseInt(lowerBound, 10);
            upperBound = parseInt(upperBound, 10);
            numberOfArguments = parseInt(numberOfArguments, 10);
    
    
            if (numberOfArguments < lowerBound || numberOfArguments > upperBound) {
                exception.raise((customExceptionType || exception.types.ArgumentLength), (customExceptionMessage + "\n\nWrong number of arguments"), customExceptionObject);
            }
    
    
        },
    
    
        validateArgumentType: function (arg, argType, customExceptionType, customExceptionMessage, customExceptionObject) {
            var invalidArg = false,
                msg;
    
    
            switch (argType) {
            case "array":
                if (!arg instanceof Array) {
                    invalidArg = true;
                }
                break;
            case "date":
                if (!arg instanceof Date) {
                    invalidArg = true;
                }
                break;
            case "integer":
                if (typeof arg === "number") {
                    if (arg !== Math.floor(arg)) {
                        invalidArg = true;
                    }
                }
                else {
                    invalidArg = true;
                }
                break;
            default:
                if (typeof arg !== argType) {
                    invalidArg = true;
                }
                break;
            }
    
    
            if (invalidArg) {
                msg = customExceptionMessage +  ("\n\nInvalid Argument type. argument: " + arg + " ==> was expected to be of type: " + argType);
                exception.raise((customExceptionType || exception.types.ArgumentType), msg, customExceptionObject);
            }
        },
    
    
        validateMultipleArgumentTypes: function (argArray, argTypeArray, customExceptionType, customExceptionMessage, customExceptionObject) {
            for (var i = 0; i < argArray.length; i++) {
                this.validateArgumentType(argArray[i], argTypeArray[i], customExceptionType, customExceptionMessage, customExceptionObject);
            }
        },
    
    
        arrayContains: function (array, obj) {
            var i = array.length;
            while (i--) {
                if (array[i] === obj) {
                    return true;
                }
            }
            return false;
        },
    
    
        some: function (obj, predicate, scope) {
            if (obj instanceof Array) {
                return obj.some(predicate, scope);
            }
            else {
                var values = self.map(obj, predicate, scope);
    
    
                return self.reduce(values, function (some, value) {
                    return value ? value : some;
                }, false);
            }
        },
    
    
        count: function (obj) {
            return self.sum(obj, function (total) {
                return 1;
            });
        },
    
    
        sum: function (obj, selector, scope) {
            var values = self.map(obj, selector, scope);
            return self.reduce(values, function (total, value) {
                return total + value;
            });
        },
    
    
        max: function (obj, selector, scope) {
            var values = self.map(obj, selector, scope);
            return self.reduce(values, function (max, value) {
                return max < value ? value : max;
            }, Number.MIN_VALUE);
        },
    
    
        min: function (obj, selector, scope) {
            var values = self.map(obj, selector, scope);
            return self.reduce(values, function (min, value) {
                return min > value ? value : min;
            }, Number.MAX_VALUE);
        },
    
    
        forEach: function (obj, action, scope) {
            if (obj instanceof Array) {
                return obj.forEach(action, scope);
            }
            else {
                self.map(obj, action, scope);
            }
        },
    
    
        filter: function (obj, predicate, scope) {
            if (obj instanceof Array) {
                return obj.filter(predicate, scope);
            }
            else {
                var result = [];
                self.forEach(obj, function (value, index) {
                    if (predicate.apply(scope, [value, index])) {
                        result.push(value);
                    }
    
    
                }, scope);
    
    
                return result;
            }
        },
    
    
        reduce: function (obj, func, init, scope) {
            var i,
                initial = init === undefined ? 0 : init,
                result = initial;
    
    
    
    
            if (obj instanceof Array) {
                return obj.reduce(func, initial);
            }
            else if (obj instanceof NamedNodeMap) {
                for (i = 0; i < obj.length; i++) {
                    result = func.apply(scope, [result, obj[i], i]);
                }
            }
            else {
                for (i in obj) {
                    if (obj.hasOwnProperty(i)) {
                        result = func.apply(scope, [result, obj[i], i]);
                    }
                }
            }
    
    
            return result;
    
    
        },
    
    
        map: function (obj, func, scope) {
            var i,
                returnVal = null,
                result = [];
    
    
            if (obj instanceof Array) {
                return obj.map(func, scope);
            }
            else if (obj instanceof NamedNodeMap) {
                for (i = 0; i < obj.length; i++) {
                    returnVal = func.apply(scope, [obj[i], i]);
                    result.push(returnVal);
                }
            }
            else {
                for (i in obj) {
                    if (obj.hasOwnProperty(i)) {
                        returnVal = func.apply(scope, [obj[i], i]);
                        result.push(returnVal);
                    }
                }
            }
    
    
            return result;
        },
    
    
        series: function (tasks, callback) {
    
    
            var execute = function () {
                var args = [],
                    task;
    
    
                if (tasks.length) {
                    task = tasks.shift();
                    args = args.concat(task.args).concat(execute);
                    task.func.apply(this, args);
                }
                else {
                    callback.func.apply(this, callback.args);
                }
            };
    
    
            execute();
        },
    
    
        regexSanitize: function (regexString) {
            return regexString.replace("^", "\\^")
                        .replace("$", "\\$")
                        .replace("(", "\\(")
                        .replace(")", "\\)")
                        .replace("<", "\\<")
                        .replace("[", "\\[")
                        .replace("{", "\\{")
                        .replace(/\\/, "\\\\")
                        .replace("|", "\\|")
                        .replace(">", "\\>")
                        .replace(".", "\\.")
                        .replace("*", "\\*")
                        .replace("+", "\\+")
                        .replace("?", "\\?");
        },
    
    
        find: function (comparison, collection, startInx, endInx, callback) {
            var results = [],
                compare = function (s, pattern) {
    
    
                    if (typeof(s) !== "string" || pattern === null) {
                        return s === pattern;
                    }
    
    
                    var regex = pattern.replace(/\./g, "\\.")
                                       .replace(/\^/g, "\\^")
                                       .replace(/\*/g, ".*")
                                       .replace(/\\\.\*/g, "\\*");
    
    
                    regex = "^".concat(regex, "$");
    
    
                    return !!s.match(new RegExp(regex, "i"));
                };
    
    
            self.forEach(collection, function (c) {
                var match,
                    fail = false;
    
    
                self.forEach(comparison, function (value, key) {
                    if (!fail && value !== undefined) {
    
    
                        if (compare(c[key], value)) {
                            match = c;
                        }
                        else {
                            fail = true;
                            match = null;
                        }
                    }
                });
    
    
                if (match) {
                    results.push(match);
                }
            });
    
    
            if (callback) {
                if (startInx === undefined) {
                    startInx = 0;
                }
                if (endInx === undefined) {
                    endInx = results.length;
                }
                if (startInx === endInx) {
                    endInx = startInx + 1;
                }
    
    
                callback.apply(null, [results.slice(startInx, endInx)]);
            }
        },
    
    
        mixin: function (mixin, to) {
            Object.getOwnPropertyNames(mixin).forEach(function (prop) {
                if (Object.hasOwnProperty.call(mixin, prop)) {
                    Object.defineProperty(to, prop, Object.getOwnPropertyDescriptor(mixin, prop));
                }
            });
            return to;
        },
    
    
        copy: function (obj) {
            var i,
                newObj = (obj === null ? false : global.toString.call(obj) === "[object Array]") ? [] : {};
    
    
            if (typeof obj === 'number' ||
                typeof obj === 'string' ||
                typeof obj === 'boolean' ||
                obj === null ||
                obj === undefined) {
                return obj;
            }
    
    
            if (obj instanceof Date) {
                return new Date(obj);
            }
    
    
            if (obj instanceof RegExp) {
                return new RegExp(obj);
            }
    
    
            for (i in obj) {
                if (obj.hasOwnProperty(i)) {
                    if (obj[i] && typeof obj[i] === "object") {
                        if (obj[i] instanceof Date) {
                            newObj[i] = obj[i];
                        }
                        else {
                            newObj[i] = self.copy(obj[i]);
                        }
                    }
                    else {
                        newObj[i] = obj[i];
                    }
                }
            }
    
    
            return newObj;
        },
    
    
        startsWith : function (str, substr) {
            return str.indexOf(substr) === 0;
        },
    
    
        endsWith : function (str, substr) {
            return str.indexOf(substr, str.length - substr.length) !== -1;
        },
    
    
        parseUri : function (str) {
            var i, uri = {},
                key = [ "source", "scheme", "authority", "userInfo", "user", "password", "host", "port", "relative", "path", "directory", "file", "query", "anchor" ],
                matcher = /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(str);
    
    
            for (i = key.length - 1; i >= 0; i--) {
                uri[key[i]] = matcher[i] || "";
            }
    
    
            return uri;
        },
    
    
        // uri - output from parseUri
        isAbsoluteURI : function (uri) {
            if (uri && uri.source) {
                return uri.relative !== uri.source;
            }
    
    
            return false;
        },
    
    
        fileNameToImageMIME : function (fileName) {
    
    
            var extensionsToMIME = {},
                ext;
    
    
            extensionsToMIME.png = 'image/png';
            extensionsToMIME.jpg = 'image/jpeg';
            extensionsToMIME.jpe = 'image/jpeg';
            extensionsToMIME.jpeg = 'image/jpeg';
            extensionsToMIME.gif = 'image/gif';
            extensionsToMIME.bmp = 'image/bmp';
            extensionsToMIME.bm = 'image/bmp';
            extensionsToMIME.svg = 'image/svg+xml';
            extensionsToMIME.tif = 'image/tiff';
            extensionsToMIME.tiff = 'image/tiff';
    
    
            ext = fileName.split('.').pop();
            return extensionsToMIME[ext];
        },
    
    
        isLocalURI : function (uri) {
            return uri && uri.scheme && "local:///".indexOf(uri.scheme.toLowerCase()) !== -1;
        },
    
    
        isFileURI : function (uri) {
            return uri && uri.scheme && "file://".indexOf(uri.scheme.toLowerCase()) !== -1;
        },
    
    
        isHttpURI : function (uri) {
            return uri && uri.scheme && "http://".indexOf(uri.scheme.toLowerCase()) !== -1;
        },
    
    
        isHttpsURI : function (uri) {
            return uri && uri.scheme && "https://".indexOf(uri.scheme.toLowerCase()) !== -1;
        },
    
    
        // Checks if the specified uri starts with 'data:'
        isDataURI : function (uri) {
            return uri && uri.scheme && "data:".indexOf(uri.scheme.toLowerCase()) !== -1;
        },
    
    
        performExec : function (featureId, property, args) {
            var result;
    
    
            window.webworks.exec(function (data, response) {
                result = data;
            }, function (data, response) {
                throw data;
            }, featureId, property, args, true);
    
    
            return result;
        },
    
    
        inNode : function () {
            return !!require.resolve;
        },
    
    
        requireWebview : function () {
            return require("./webview");
        },
        convertDataToBinary : function (data, dataEncoding) {
            var rawData,
                uint8Array,
                i;
    
    
            if (data) {
                if (dataEncoding.toLowerCase() === "base64") {
                    rawData = window.atob(data);
                }
                else {
                    rawData = data;
                }
    
    
                uint8Array = new Uint8Array(new ArrayBuffer(rawData.length));
    
    
                for (i = 0; i < uint8Array.length; i++) {
                    uint8Array[i] = rawData.charCodeAt(i);
                }
    
    
                return uint8Array.buffer;
            }
        },
        getBlobWithArrayBufferAsData : function (data, dataEncoding) {
            var rawData,
                blobBuilderObj = new window.WebKitBlobBuilder();
            rawData = this.convertDataToBinary(data, dataEncoding);
            blobBuilderObj.append(rawData);
    
    
            return blobBuilderObj.getBlob("arraybuffer");
        },
        loadModule: function (module) {
            return require(module);
        },
        loadExtensionModule: function (extBasename, path) {
            var ext = require("./manifest")[extBasename];
    
    
            if (ext) {
                return require("../ext/" + ext.namespace + "/" + path);
            } else {
                return null;
            }
        },
        hasPermission: function (config, permission) {
            if (config && config.permissions && config.permissions.length) {
                return config.permissions.indexOf(permission) >= 0;
            }
    
    
            return false;
        },
        guid: function () {
            return (S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4());
        },
        getURIPrefix: function () {
            return "http://localhost:8472/";
        }
    };
    
    
    });
    
    
    define('lib/exception', function (require, exports, module) {
    /*
     *  Copyright 2012 Research In Motion Limited.
     *
     * Licensed under the Apache License, Version 2.0 (the "License");
     * you may not use this file except in compliance with the License.
     * You may obtain a copy of the License at
     *
     * http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS,
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     * See the License for the specific language governing permissions and
     * limitations under the License.
     */
    
    
    module.exports = {
    
    
        types: {
            Application: "Application",
            ArgumentLength: "ArgumentLength",
            ArgumentType: "ArgumentType",
            Argument: "Argument",
            NotificationType: "NotificationType",
            NotificationStateType: "NotificationStateType",
            DomObjectNotFound: "DomObjectNotFound",
            MethodNotImplemented: "MethodNotImplemented",
            InvalidState: "InvalidState",
            ApplicationState: "ApplicationState"
        },
    
    
        handle: function handle(exception, reThrow) {
            reThrow = reThrow || false;
    
    
            var eMsg = exception.message || "exception caught!",
            msg = eMsg + "\n\n" + (exception.stack || "*no stack provided*") + "\n\n";
    
    
            console.error(msg);
    
    
            if (reThrow) {
                throw exception;
            }
        },
    
    
        raise: function raise(exceptionType, message, customExceptionObject) {
            var obj = customExceptionObject || {
                    type: "",
                    message: "",
    
    
                    toString: function () {
                        var result = this.name + ': "' + this.message + '"';
    
    
                        if (this.stack) {
                            result += "\n" + this.stack;
                        }
                        return result;
                    }
                };
    
    
            message = message || "";
    
    
            obj.name = exceptionType;
            obj.type = exceptionType;
            // TODO: include the exception objects original message if exists
            obj.message = message;
    
    
            throw obj;
        }
    };
    
    
    });
    define('lib/webworks-info', function (require, exports, module) {
    module.exports = {
    	hash: "0ce47be0f0e032b04d4c4ba14e243218",
    	version: "1.0.2.9"
    };
    });
    /*
    * Copyright 2010-2012 Research In Motion Limited.
    *
    * Licensed under the Apache License, Version 2.0 (the "License");
    * you may not use this file except in compliance with the License.
    * You may obtain a copy of the License at
    *
    * http://www.apache.org/licenses/LICENSE-2.0
    *
    * Unless required by applicable law or agreed to in writing, software
    * distributed under the License is distributed on an "AS IS" BASIS,
    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    * See the License for the specific language governing permissions and
    * limitations under the License.
    */
    (function () {
        var _d = document.addEventListener,
            _webworksReady = false,
            _alreadyFired = false,
            _listenerRegistered = false;
    
    
        //Only fire the webworks event when both webworks is ready and a listener is registered
        function fireWebworksReadyEvent() {
            if (_listenerRegistered && _webworksReady && !_alreadyFired) {
                _alreadyFired = true;
                var evt = document.createEvent("Events");
                evt.initEvent("webworksready", true, true);
                document.dispatchEvent(evt);
            }
        }
    
    
        //Trapping when users add listeners to the webworks ready event
        //This way we can make sure not to fire the event before there is a listener
        document.addEventListener = function (event, callback, capture) {
            _d.call(document, event, callback, capture);
            if (event.toLowerCase() === "webworksready") {
                _listenerRegistered = true;
                fireWebworksReadyEvent();
            }
        };
    
    
    
    
        function createWebworksReady() {
            function RemoteFunctionCall(functionUri) {
                var params = {};
    
    
                function composeUri() {
                    return require("lib/utils").getURIPrefix() + functionUri;
                }
    
    
                function createXhrRequest(uri, isAsync) {
                    var request = new XMLHttpRequest();
    
    
                    request.open("POST", uri, isAsync);
                    request.setRequestHeader("Content-Type", "application/json");
    
    
                    return request;
                }
    
    
                this.addParam = function (name, value) {
                    params[name] = encodeURIComponent(JSON.stringify(value));
                };
    
    
                this.makeSyncCall = function (success, error) {
                    var requestUri = composeUri(),
                        request = createXhrRequest(requestUri, false),
                        response,
                        errored,
                        cb,
                        data;
    
    
                    request.send(JSON.stringify(params));
    
    
                    response = JSON.parse(decodeURIComponent(request.responseText) || "null");
                    errored = response.code < 0;
                    cb = errored ? error : success;
                    data = errored ? response.msg : response.data;
    
    
                    if (cb) {
                        cb(data, response);
                    }
                    else if (errored) {
                        throw data;
                    }
    
    
                    return data;
                };
    
    
                this.makeAsyncCall = function (success, error) {
                    var requestUri = composeUri(),
                        request = createXhrRequest(requestUri, true);
    
    
                    request.onreadystatechange = function () {
                        if (request.readyState === 4 && request.status === 200) {
                            var response = JSON.parse(decodeURIComponent(request.responseText) || "null"),
                            cb = response.code < 0 ? error : success,
                            data = response.code < 0 ? response.msg : response.data;
    
    
                            return cb && cb(data, response);
                        }
                    };
    
    
                    request.send(JSON.stringify(params));
                };
            }
    
    
            var builder,
                request,
                resp,
                execFunc,
                wwInfo = require('lib/webworks-info');
    
    
            //For users who wish to have a single source project across BB7 -> PB -> BB10 they will need to use webworks.js
            //To aid in this, we will fire the webworksready event on these platforms as well
            //If blackberry object already exists then we are in an older version of webworks
            if (window.blackberry) {
                _webworksReady = true;
                fireWebworksReadyEvent();
                return;
            }
    
    
            // Build out the blackberry namespace based on the APIs desired in the config.xml
            builder = require('builder');
    
    
            request = new XMLHttpRequest();
            request.open("GET", "http://localhost:8472/extensions/get/?hash=" + wwInfo.hash + "&version=" + wwInfo.version, true);
    
    
            request.onreadystatechange = function () {
                if (request.readyState === 4) {
                    resp = JSON.parse(decodeURIComponent(request.responseText));
    
    
                    if (request.status === 412) {
                        //Application Webworks.js does not match framework, display error to user.
                        alert(resp.msg);
                    } else if (request.status === 200) {
                        builder.build(resp.data).into(window);
                        //At this point all of the APIs should be built into the window object
                        //Fire the webworks ready event
                        _webworksReady = true;
                        fireWebworksReadyEvent();
                    }
                }
            };
            request.send(null);
    
    
            execFunc = function (success, fail, service, action, args, sync) {
                var uri = service + "/" + action,
                    request = new RemoteFunctionCall(uri),
                    name;
    
    
                for (name in args) {
                    if (Object.hasOwnProperty.call(args, name)) {
                        request.addParam(name, args[name]);
                    }
                }
    
    
                request[sync ? "makeSyncCall" : "makeAsyncCall"](success, fail);
            };
    
    
            window.webworks = {
                exec: execFunc,
                execSync: function (service, action, args) {
                    var result;
    
    
                    execFunc(function (data, response) {
                        result = data;
                    }, function (data, response) {
                        throw data;
                    }, service, action, args, true);
    
    
                    return result;
                },
                execAsync: function (service, action, args) {
                    var result;
    
    
                    execFunc(function (data, response) {
                        result = data;
                    }, function (data, response) {
                        throw data;
                    }, service, action, args, false);
    
    
                    return result;
                },
                successCallback: function (id, args) {
                    //HACK: this will live later
                    throw "not implemented";
                },
                errorCallback: function (id, args) {
                    //HACK: this will live later
                    throw "not implemented";
                },
                defineReadOnlyField: function (obj, field, value) {
                    Object.defineProperty(obj, field, {
                        "value": value,
                        "writable": false
                    });
                },
                event: require("event")
            };
        }
        //Only start building window.webworks once the DOMContent is loaded
        document.addEventListener('DOMContentLoaded', createWebworksReady, false);
        //If the DOM Content has already been loaded then create window.webworks immediately
        if (document.readyState === 'complete') {
            createWebworksReady();
        }
    }());
    
    
    
    
    }());

  10. #10
    Sencha User
    Join Date
    May 2012
    Posts
    38
    Vote Rating
    2
    Ocelyn is on a distinguished road

      0  

    Default


    Hello in4p,

    I'm almost done with this problem,

    Finally the error came from :
    jQuery.js who have an issue with Phonegap and Blackberry in the version above 1.6.4
    And the appLoadingIndicator CSS animation who seems to crash the application too

    Now I'm facing the 6px height issue, I found that thread http://www.sencha.com/forum/showthre...ebworks-Issues but it doesn't seems to work for me yet.

    The other one is when I'm changing the Name of the application in Config.xml I'll have only the Background who will appear, but Sencha seems not to start.

    I'll look again after this problem tomorrow,

    Ocelyn

Thread Participants: 1

Tags for this Thread

film izle

hd film izle

film sitesi

takipci kazanma sitesi

takipci kazanma sitesi

güzel olan herşey

takipci alma sitesi

komik eğlenceli videolar