sashomaga

GridView -> module pattern

May 16th, 2013
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var controls = (function () {
  2.  
  3.     function initialGridView(selector) {
  4.         var header = [];
  5.         var rows = [];        
  6.         var holderNode = document.querySelector(selector);
  7.  
  8.         this.addHeader = function () {
  9.             header = [];
  10.             for (var i = 0; i < arguments.length; i++) {
  11.                 header.push(arguments[i]);
  12.             }
  13.         }
  14.  
  15.         this.addRow = function () {
  16.             var params = [];
  17.             for (var i = 0; i < arguments.length; i++) {
  18.                 params[i] = arguments[i];
  19.             }
  20.  
  21.             var row = new GridViewRow(params);
  22.             rows.push(row);
  23.             //console.log(row);
  24.             return row;
  25.         }
  26.  
  27.         this.render = function () {
  28.             var table = document.createElement('table');
  29.             if (header.length > 0) {
  30.                 var tableHeader = document.createElement('tr');
  31.                 for (var i = 0; i < header.length; i++) {
  32.                     var cell = document.createElement('th');
  33.                     var checkedText = header[i];
  34.                     checkedText = checkedText.replace(/<br\s*[\/]?>/gi, "&#60;br />");
  35.                     cell.innerHTML = checkedText; //here can check for escape br
  36.                     tableHeader.appendChild(cell);
  37.                 }
  38.                 table.appendChild(tableHeader);
  39.             }
  40.             if (rows.length > 0) {
  41.                 for (var i = 0; i < rows.length; i++) {
  42.                     var row = rows[i].render();                  
  43.                     table.appendChild(row);
  44.                 }
  45.             }
  46.             holderNode.appendChild(table);
  47.         }
  48.  
  49.         this.getGridViewData = function () {
  50.             var data = {};
  51.            
  52.             for (var i = 0; i < rows.length; i++) {
  53.                 var rowData = {};
  54.                 rowData["headers"] = header;
  55.                 rowData["rows"] = rows[i].getData();
  56.                 data[i] = rowData;
  57.             }
  58.  
  59.             return data;
  60.         }
  61.        
  62.  
  63.        
  64.     }; //end initial grid view
  65.  
  66.     function GridView() {
  67.         var header = [];
  68.         var rows = [];
  69.        
  70.         this.getData = function () {
  71.             var data = {};
  72.             for (var i = 0; i < rows.length; i++) {
  73.                 var rowData = {};
  74.                 rowData["headers"] = header;
  75.                 rowData["rows"] = rows[i].getData();
  76.                 data[i] = rowData;
  77.             }
  78.            
  79.             return data;
  80.         }
  81.         this.addHeader = function () {
  82.             header = [];
  83.             for (var i = 0; i < arguments.length; i++) {
  84.                 header.push(arguments[i]);
  85.             }
  86.         }
  87.  
  88.         this.addRow = function () {
  89.             var params = [];
  90.             for (var i = 0; i < arguments.length; i++) {
  91.                 params[i] = arguments[i];
  92.             }
  93.  
  94.             var row = new GridViewRow(params);
  95.             rows.push(row);          
  96.             return row;
  97.         }
  98.  
  99.         this.render = function () {
  100.             var table = document.createElement('table');
  101.             if (header.length > 0) {
  102.                 var tableHeader = document.createElement('tr');
  103.                 for (var i = 0; i < header.length; i++) {
  104.                     var cell = document.createElement('th');
  105.                     var checkedText = header[i];
  106.                     checkedText = checkedText.replace(/<br\s*[\/]?>/gi, "&#60;br />");
  107.                     cell.innerHTML = header[i]; //here can check for escape br
  108.                     tableHeader.appendChild(cell);
  109.                 }
  110.                 table.appendChild(tableHeader);
  111.  
  112.             }
  113.             if (rows.length > 0) {
  114.                 for (var i = 0; i < rows.length; i++) {
  115.                     var row = rows[i].render();
  116.                     table.appendChild(row);
  117.                 }
  118.             }
  119.             return table;
  120.         }
  121.        
  122.     }
  123.     // rows class
  124.     function GridViewRow(params) {
  125.         var items = [];
  126.         var nestedTable;
  127.  
  128.         if (params.length > 0) {
  129.             for (var i = 0; i < params.length; i++) {
  130.                 items[i] = params[i];
  131.             }  
  132.         }
  133.        
  134.         this.getData = function () {
  135.             var data = {};
  136.             data["items"] = items;
  137.             if (nestedTable != undefined) {
  138.                 data["table"] = nestedTable.getData();
  139.             }
  140.             return data;
  141.         }
  142.  
  143.         this.getNestedGridView = function () {
  144.             var nestedGrid = new GridView();
  145.             nestedTable = nestedGrid;
  146.  
  147.             return nestedGrid;
  148.         }
  149.         this.render = function () {
  150.             var docFragment = document.createDocumentFragment();
  151.             var tableRow = document.createElement('tr');
  152.  
  153.             if (nestedTable != undefined) {
  154.                 var elementTable = nestedTable.render()
  155.                 var newRow = document.createElement('tr');
  156.                 var newTd = document.createElement('td');
  157.                 newTd.appendChild(elementTable);
  158.                 newRow.appendChild(newTd);
  159.             }
  160.             if (items.length > 0) {              
  161.                 for (var i = 0; i < items.length; i++) {
  162.                     var cell = document.createElement('td');
  163.                     var checkedText = items[i];
  164.                     checkedText = checkedText + "";
  165.                     checkedText = checkedText.replace(/<br\s*[\/]?>/gi, "&#60;br />");
  166.                     cell.innerHTML = checkedText; //here can check for escape br                  
  167.                     tableRow.appendChild(cell);                
  168.                 }                
  169.             }
  170.             if (nestedTable != undefined) {
  171.                 tableRow.addEventListener('click', function (ev) {
  172.                     ev.stopPropagation();
  173.                     var next = tableRow.nextElementSibling;
  174.                     if (next.classList.contains('hidden')) {
  175.                         next.classList.remove('hidden');
  176.                     } else {
  177.                         next.classList.add('hidden');
  178.                     }
  179.                 })
  180.             }
  181.             docFragment.appendChild(tableRow);
  182.             if (nestedTable != undefined) {
  183.                 docFragment.appendChild(newRow);
  184.             }
  185.             return docFragment;
  186.         }
  187.     }
  188.  
  189.  
  190.     return {
  191.         getGridView: function (selector) {
  192.             return new initialGridView(selector);
  193.         }  
  194.     }
  195. }());
  196.  
  197. // loc storage extensions
  198. (function () {
  199.     if (!Storage.prototype.setObject) {
  200.         Storage.prototype.setObject = function (key, obj) {
  201.             this.setItem(key, JSON.stringify(obj));
  202.         }
  203.     }
  204.  
  205.     if (!Storage.prototype.getObject) {
  206.         Storage.prototype.getObject = function (key) {
  207.             return JSON.parse(this.getItem(key));
  208.         }
  209.     }
  210. }());
Advertisement
Add Comment
Please, Sign In to add comment