diff --git a/HACKING.md b/HACKING.md index 8bc10f94..028fb612 100644 --- a/HACKING.md +++ b/HACKING.md @@ -27,8 +27,9 @@ Please follow the these guidelines. Some are just preference, others are good pr - use identity operators: `===` and `!==`. [Why do I want this?](http://stackoverflow.com/a/359509/1684530) - jQuery is your friend - indent using two spaces -- opening brace on the same line with a space after the if/for/etc: `if(blub) {` +- opening brace on the same line: `if(blub) {` - else clauses: `} else if(blub) {` or `} else {` +- there should be no space after `if`, `for`, etc. E.g. `if(true) { doStuff(); } else { dontDoStuff(); }` - comments: `// this is a comment` - quotes: Use single-quotes for JavaScript and double-quotes for HTML content. Example: `$('body').append('
Soup!
');`. - there is no length limit on lines, but try to keep them short where suitable diff --git a/code/redeeming.js b/code/redeeming.js index 0792f17d..0b9f4fbb 100644 --- a/code/redeeming.js +++ b/code/redeeming.js @@ -3,44 +3,69 @@ // REDEEMING ///////////////////////////////////////////////////////// window.handleRedeemResponse = function(data, textStatus, jqXHR) { - if (data.error) { + if(data.error) { var error = ''; - if (data.error === 'ALREADY_REDEEMED') { + if(data.error === 'ALREADY_REDEEMED') { error = 'The passcode has already been redeemed.'; - } else if (data.error === 'ALREADY_REDEEMED_BY_PLAYER') { + } else if(data.error === 'ALREADY_REDEEMED_BY_PLAYER') { error = 'You have already redeemed this passcode.'; - } else if (data.error === 'INVALID_PASSCODE') { + } else if(data.error === 'INVALID_PASSCODE') { error = 'This passcode is invalid.'; } else { error = 'There was a problem redeeming the passcode. Try again?'; } alert('' + data.error + '\n' + error); - } else if (data.result) { - var xmp_level = 0, xmp_count = 0; - var res_level = 0, res_count = 0; - var shield_rarity = '', shield_count = 0; - - // This assumes that each passcode gives only one type of resonator/XMP/shield. - // This may break at some point, depending on changes to passcode functionality. - for (var i in data.result.inventoryAward) { + } else if(data.result) { + var tblResult = $(''); + tblResult.append($('')); + + if(data.result.apAward) + tblResult.append($('')); + if(data.result.xmAward) + tblResult.append($('')); + + var resonators = {}; + var bursts = {}; + var shields = {}; + + for(var i in data.result.inventoryAward) { var acquired = data.result.inventoryAward[i][2]; - if (acquired.modResource) { - if (acquired.modResource.resourceType === 'RES_SHIELD') { - shield_rarity = acquired.modResource.rarity.split('_').map(function (i) {return i[0]}).join(''); - shield_count++; + if(acquired.modResource) { + if(acquired.modResource.resourceType === 'RES_SHIELD') { + var rarity = acquired.modResource.rarity.split('_').map(function (i) {return i[0]}).join(''); + if(!shields[rarity]) shields[rarity] = 0; + shields[rarity] += 1; } - } else if (acquired.resourceWithLevels) { - if (acquired.resourceWithLevels.resourceType === 'EMP_BURSTER') { - xmp_level = acquired.resourceWithLevels.level; - xmp_count++; - } else if (acquired.resourceWithLevels.resourceType === 'EMITTER_A') { - res_level = acquired.resourceWithLevels.level; - res_count++; + } else if(acquired.resourceWithLevels) { + if(acquired.resourceWithLevels.resourceType === 'EMITTER_A') { + var level = acquired.resourceWithLevels.level + if(!resonators[level]) resonators[level] = 0; + resonators[level] += 1; + } else if(acquired.resourceWithLevels.resourceType === 'EMP_BURSTER') { + var level = acquired.resourceWithLevels.level + if(!bursts[level]) bursts[level] = 0; + bursts[level] += 1; } } } + + $.each(resonators, function(lvl, count) { + var text = 'Resonator'; + if(count >= 2) text += ' ('+count+')'; + tblResult.append($('')); + }); + $.each(bursts, function(lvl, count) { + var text = 'Xmp Burster'; + if(count >= 2) text += ' ('+count+')'; + tblResult.append($('')); + }); + $.each(shields, function(lvl, count) { + var text = 'Portal Shield'; + if(count >= 2) text += ' ('+count+')'; + tblResult.append($('')); + }); - alert('Passcode accepted!\n' + [data.result.apAward + 'AP', data.result.xmAward + 'XM', xmp_count + 'xL' + xmp_level + ' XMP', res_count + 'xL' + res_level + ' RES', shield_count + 'x' + shield_rarity + ' SH'].join('/')); + alert(tblResult, true); } } @@ -51,8 +76,8 @@ window.setupRedeem = function() { window.postAjax('redeemReward', data, window.handleRedeemResponse, function(response) { var extra = ''; - if (response && response.status) { - if (response.status === 429) { + if(response && response.status) { + if(response.status === 429) { extra = 'You have been rate-limited by the server. Wait a bit and try again.'; } else { extra = 'The server indicated an error.'; diff --git a/mobile/AndroidManifest.xml b/mobile/AndroidManifest.xml index c4c68282..eca04943 100644 --- a/mobile/AndroidManifest.xml +++ b/mobile/AndroidManifest.xml @@ -6,10 +6,10 @@ - + android:targetSdkVersion="10" /> + - + - + \ No newline at end of file diff --git a/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java b/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java index 3e64f216..61a02499 100644 --- a/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java +++ b/mobile/src/com/cradle/iitc_mobile/IITC_Mobile.java @@ -15,26 +15,26 @@ import android.widget.Toast; public class IITC_Mobile extends Activity { private IITC_WebView iitc_view; - private boolean back_button_pressed = false; + private boolean back_button_pressed = false; - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_main); + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); - // we do not want to reload our page every time we switch orientations... - // so restore state if activity was already created - if(savedInstanceState != null) { - ((IITC_WebView)findViewById(R.id.webview)).restoreState(savedInstanceState); - } - else { - // load new iitc web view with ingress intel page - iitc_view= (IITC_WebView) findViewById(R.id.webview); - iitc_view.setWebChromeClient(new WebChromeClient()); - iitc_view.loadUrl("https://www.ingress.com/intel"); + // we do not want to reload our page every time we switch orientations... + // so restore state if activity was already created + if(savedInstanceState != null) { + ((IITC_WebView)findViewById(R.id.webview)).restoreState(savedInstanceState); + } + else { + // load new iitc web view with ingress intel page + iitc_view= (IITC_WebView) findViewById(R.id.webview); + iitc_view.setWebChromeClient(new WebChromeClient()); + iitc_view.loadUrl("https://www.ingress.com/intel"); - // listen to touches (think we need this) - iitc_view.setOnTouchListener(new OnTouchListener() { + // listen to touches (think we need this) + iitc_view.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { back_button_pressed = false; @@ -43,50 +43,49 @@ public class IITC_Mobile extends Activity { return false; } }); - } + } + } - } + // save instance state to avoid reloading on orientation change + @Override + protected void onSaveInstanceState(Bundle outState) { + iitc_view.saveState(outState); + } - // save instance state to avoid reloading on orientation change - @Override - protected void onSaveInstanceState(Bundle outState) { - iitc_view.saveState(outState); - } + // we want a self defined behavior on resume + @Override + protected void onResume() { + super.onResume(); + this.back_button_pressed = false; + } - // we want a self defined behavior on resume - @Override - protected void onResume() { - super.onResume(); - this.back_button_pressed = false; - } + // we want a self defined behavior for the back button + @Override + public void onBackPressed() { + if (this.back_button_pressed) { + super.onBackPressed(); + return; + } + this.back_button_pressed = true; + Toast.makeText(this, "Press twice to exit", Toast.LENGTH_SHORT).show(); + } - // we want a self defined behavior for the back button - @Override - public void onBackPressed() { - if (this.back_button_pressed) { - super.onBackPressed(); - return; - } - this.back_button_pressed = true; - Toast.makeText(this, "Press twice to exit", Toast.LENGTH_SHORT).show(); - } + @Override + public boolean onCreateOptionsMenu(Menu menu) { + // Inflate the menu; this adds items to the action bar if it is present. + getMenuInflater().inflate(R.menu.main, menu); + return true; + } - @Override - public boolean onCreateOptionsMenu(Menu menu) { - // Inflate the menu; this adds items to the action bar if it is present. - getMenuInflater().inflate(R.menu.main, menu); - return true; - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - // Handle item selection - switch (item.getItemId()) { - case R.id.reload_button: - iitc_view.reload(); - return true; - default: - return super.onOptionsItemSelected(item); - } - } + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle item selection + switch (item.getItemId()) { + case R.id.reload_button: + iitc_view.reload(); + return true; + default: + return super.onOptionsItemSelected(item); + } + } } diff --git a/mobile/src/com/cradle/iitc_mobile/IITC_WebView.java b/mobile/src/com/cradle/iitc_mobile/IITC_WebView.java index fcf4eb80..d82ca25b 100644 --- a/mobile/src/com/cradle/iitc_mobile/IITC_WebView.java +++ b/mobile/src/com/cradle/iitc_mobile/IITC_WebView.java @@ -11,7 +11,7 @@ public class IITC_WebView extends WebView { private WebSettings settings; private IITC_WebViewClient webclient; - + // init web view private void iitc_init() { settings = this.getSettings(); @@ -22,7 +22,7 @@ public class IITC_WebView extends WebView { webclient = new IITC_WebViewClient(); this.setWebViewClient(webclient); } - + // constructors ------------------------------------------------- public IITC_WebView(Context context) { super(context); @@ -35,7 +35,7 @@ public class IITC_WebView extends WebView { iitc_init(); } - + public IITC_WebView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); diff --git a/mobile/src/com/cradle/iitc_mobile/IITC_WebViewClient.java b/mobile/src/com/cradle/iitc_mobile/IITC_WebViewClient.java index c984e2dc..d36180ed 100644 --- a/mobile/src/com/cradle/iitc_mobile/IITC_WebViewClient.java +++ b/mobile/src/com/cradle/iitc_mobile/IITC_WebViewClient.java @@ -25,12 +25,12 @@ public class IITC_WebViewClient extends WebViewClient { CookieManager cm = CookieManager.getInstance(); final String cookie = cm.getCookie("https://www.ingress.com/intel"); if(cookie != null) { - web.loadUrl("javascript: (function() { " - + "var script=document.createElement('script');" - + "script.type='text/javascript';" - + "script.src='https://iitcserv.appspot.com/iitc-nightly/iitc-nightly-latest.user.js';" - + "document.getElementsByTagName('head').item(0).appendChild(script);" - + "})()"); + web.loadUrl("javascript: (function() { " + + "var script=document.createElement('script');" + + "script.type='text/javascript';" + + "script.src='https://iitcserv.appspot.com/iitc-nightly/iitc-nightly-latest.user.js';" + + "document.getElementsByTagName('head').item(0).appendChild(script);" + + "})()"); } } } diff --git a/style.css b/style.css index 31270562..758dfd3a 100644 --- a/style.css +++ b/style.css @@ -748,3 +748,15 @@ td { td + td { padding-left: 4px; } + +/* redeem results *****************************************************/ +.redeem-result { + font-size: 14px; + font-family: arial,helvetica,sans-serif; + table-layout: fixed; +} + +.redeem-result tr > td:first-child { + width: 50px; + text-align: right; +}
Passcode accepted!
+' + data.result.apAward + 'AP
+' + data.result.xmAward + 'XM
L' +lvl+ '' + text + '
L' +lvl+ '' + text + '
'+lvl+''+text+'