PageRenderTime 21ms CodeModel.GetById 29ms RepoModel.GetById 0ms app.codeStats 0ms

/erepmobile/index.html

https://bitbucket.org/doubleface/doubleface.bitbucket.org
HTML | 184 lines | 160 code | 24 blank | 0 comment | 0 complexity | 25e6bae210d34bad097a9bfaba649b49 MD5 | raw file
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>Erep Mobile</title>
  5. <link rel="stylesheet" href="http://code.jquery.com/mobile/1.0a3/jquery.mobile-1.0a3.min.css" />
  6. <script type="text/javascript" src="http://code.jquery.com/jquery-1.5.min.js"></script>
  7. <script type="text/javascript" src="http://code.jquery.com/mobile/1.0a3/jquery.mobile-1.0a3.min.js"></script>
  8. <script type="text/javascript" src="http://documentcloud.github.com/underscore/underscore-min.js"></script>
  9. <script type="text/javascript" src="http://documentcloud.github.com/backbone/backbone-min.js"></script>
  10. </head>
  11. <body>
  12. <script type="text/javascript">
  13. var companies = [
  14. {"number": 269139, "name": 'exedere'},
  15. {"number": 269296, "name": 'fodere'},
  16. {"number": 292795, "name": 'ggggrain'},
  17. {"number": 320252, "name": 'gunnns'},
  18. {"number": 313945, "name": 'irrrron'},
  19. {"number": 331277, "name": 'irrrrron'}
  20. ];
  21. // MODEL
  22. var CompanyModel = Backbone.Model.extend({
  23. defaults: {
  24. "number": undefined,
  25. "name": '',
  26. "stock": 0,
  27. "amount": 0,
  28. "price": 0,
  29. "taxes": 1,
  30. "currency": "",
  31. "raw": false,
  32. "loaded": false
  33. },
  34. url: function() {
  35. return "http://query.yahooapis.com/v1/public/yql?q=select%20content%20from%20html%20where%20url%3D%22http%3A%2F%2Feconomy.erepublik.com%2Fen%2Fcompany%2F" + this.get("name") + "%2F" + this.get("number") + "%22%20and%20xpath%3D'%2F%2Fbig%5B%40id%3D%22stock%22%5D%7C%2F%2Fdiv%5B%40class%3D%22raw_materials%22%5D%2Fdiv%5B%40class%3D%22stats%22%5D%2Fbig%7C%2F%2Fscript%5Bcontains(.%2C%22licensesJSON%22)%5D'&format=json&callback=?";
  36. },
  37. sync: function(method, obj, success, error) {
  38. $.getJSON(obj.url(), success);
  39. },
  40. parse: function(data){
  41. eval(data.query.results.script.split("\n")[2]);
  42. var offerdata = licensesJSON[0];
  43. var result = {
  44. "stock": data.query.results.big != 0 ? parseInt(data.query.results.big[0]) : 0,
  45. "raw": data.query.results.big != 0 ? parseFloat(data.query.results.big[1]) : 0,
  46. "amount": offerdata.offers[0] ? offerdata.offers[0].amount : 0,
  47. "price": offerdata.offers[0] ? parseFloat(offerdata.offers[0].price) : 0,
  48. "taxes": offerdata.taxes,
  49. "currency": offerdata.currency
  50. };
  51. return result;
  52. }
  53. });
  54. var CompanyCollection = Backbone.Collection.extend({
  55. model: CompanyModel,
  56. refresh: function() {
  57. this.each(function(obj){
  58. obj.trigger("beforerefresh", obj);
  59. obj.save(undefined, {success: function(model){
  60. model.trigger("afterrefresh", model);
  61. }});
  62. });
  63. return this;
  64. }
  65. });
  66. // VIEW
  67. var CompaniesView = Backbone.View.extend({
  68. events: {
  69. "click #header": "refresh",
  70. "swipe li": "swipe"
  71. },
  72. defaultli: _.template(
  73. '<li id="<%= name %>"><%= name %></li>'
  74. ),
  75. completedli: _.template(
  76. '<%= name %>' +
  77. '<div class="ui-li-aside">' +
  78. '<%= infos %>' +
  79. '</div>'
  80. ),
  81. companyInfo: _.template(
  82. '<p class="ui-li-desc"><strong><%= label %>:</strong> <span class="<%= class %>"><%= value %></span></p>'
  83. ),
  84. refresh: function() {
  85. this.collection.refresh();
  86. this.el.find('li').removeClass('ui-btn-up-e').addClass('ui-btn-up-c');
  87. },
  88. initialize: function() {
  89. var view = this;
  90. var ul = this.el.find('ul');
  91. ul.empty();
  92. $.each(companies, function(key, value){
  93. ul.append($(view.defaultli({"name": value.name})));
  94. });
  95. ul.listview('refresh');
  96. _.bindAll(this, "render");
  97. this.collection.bind("beforerefresh", this.beforerefresh);
  98. this.collection.bind("change", this.render);
  99. this.collection.bind("afterrefresh", this.render);
  100. },
  101. beforerefresh: function(obj) {
  102. var el = $('#' + obj.get('name'));
  103. el.html(obj.get("name"));
  104. },
  105. render: function(obj) {
  106. var el = $('#' + obj.get('name'));
  107. var liinfos = this.companyInfo({"class": 'stock', "label": "Stock","value": obj.get('stock')}) +
  108. this.companyInfo({"class": 'amount',"label": "Offer","value": obj.get('amount')});
  109. if (obj.get('raw')) liinfos+= this.companyInfo({"class": 'raw',"label": "Raw","value": obj.get('raw')});
  110. var litext = this.completedli({
  111. "name": obj.get("name"),
  112. "infos": liinfos
  113. });
  114. el.html(litext);
  115. this.el.find('ul').listview('refresh');
  116. // so that the change is triggered after the rendering and then be able to alter it
  117. if (true === obj.hasChanged())
  118. this.change(obj);
  119. },
  120. change: function(obj) {
  121. if (!obj.loaded) {
  122. obj.loaded = true;
  123. return;
  124. }
  125. var el = $('#' + obj.get('name'));
  126. el.removeClass('ui-btn-up-c').addClass('ui-btn-up-e');
  127. // get the list of changed attibutes
  128. var changelist = obj.changedAttributes();
  129. $.each(changelist, function(label, value){
  130. el.find('.' + label).each(function(key,value){
  131. $(value).css("color", "red");
  132. });
  133. });
  134. },
  135. swipe: function(obj) {
  136. $(obj.target).removeClass('ui-btn-up-e').addClass('ui-btn-up-c');
  137. }
  138. });
  139. $('#main').live('pagecreate',function(event){
  140. var companyList = new CompanyCollection();
  141. var companiesView = new CompaniesView({
  142. el: $("#main"),
  143. collection: companyList
  144. });
  145. companyList.add(companies);
  146. companyList.refresh();
  147. });
  148. </script>
  149. <div data-role="page" id="main">
  150. <div data-role="header" id="header">
  151. <h2>Erep Mobile</h2>
  152. </div><!-- /header -->
  153. <div data-role="content">
  154. <ul data-role="listview">
  155. <li>No Company defined</li>
  156. </ul>
  157. </div><!-- /content -->
  158. </div><!-- /page -->
  159. </body>
  160. </html>