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($('Passcode accepted! |
'));
+
+ if(data.result.apAward)
+ tblResult.append($('+ | ' + data.result.apAward + 'AP |
'));
+ if(data.result.xmAward)
+ tblResult.append($('+ | ' + data.result.xmAward + 'XM |
'));
+
+ 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($('L' +lvl+ ' | ' + text + ' |
'));
+ });
+ $.each(bursts, function(lvl, count) {
+ var text = 'Xmp Burster';
+ if(count >= 2) text += ' ('+count+')';
+ tblResult.append($('L' +lvl+ ' | ' + text + ' |
'));
+ });
+ $.each(shields, function(lvl, count) {
+ var text = 'Portal Shield';
+ if(count >= 2) text += ' ('+count+')';
+ tblResult.append($(''+lvl+' | '+text+' |
'));
+ });
- 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;
+}