Skip welcome & menu and move to editor
Welcome to JS Bin
Load cached copy from
 
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>JS Bin</title>
  <style> 
    td { width: 28px; height: 28px; background: white; border: 1px solid black; cursor: pointer;} 
    table { border-collapse: collapse; margin-right: -1px;}
    button { display: inline-block; width: 120px; margin-top: 20px; padding: 5px 0; border: 2px solid #dadada; border-radius: 5px; text-align: center; cursor: pointer;}
    button:hover {background: #f2e41f; }
    .black { background: black; }
    .conversely td { background: black; }
    .conversely .black { background: white; }
  </style> 
</head>
<body>
  <button id="btn-for-table">Поменять цвета</button>
</body>
</html>
 
function Util() {
  
}
Util.prototype.trim = function(str) {
  return str.replace(/^\s+|\s+$/g,"");
};
Util.prototype.hasClass = function(node, klass) {
  var classes = ' ' + node.className.replace(/\s/, ' ') + ' ';
  
  if ( classes.indexOf(' ' + klass + ' ') >= 0 ) { 
    return true; 
  }
  
  return false;
};
Util.prototype.addClass = function(node, klass) {
  if ( !Util.hasClass(node, klass) ) {
    if ( node.className.length !== 0 ) {
      node.className += ' ' + klass;
    } else {
      node.className = klass;
    }
  }
  
  return node;
};
Util.prototype.removeClass = function(node, klass) {
  if ( Util.hasClass(node, klass) ) {
    var classes = ' ' + node.className + ' ',
        regexp = new RegExp(" " + klass + "(?= )", 'g');
    
    node.className = trim( classes.replace(regexp, ' ') );
  }
  
  return node;
};
Util.prototype.toggleClass = function(node, klass) {
  if ( !Util.hasClass(node, klass) ) {
    return Util.addClass(node, klass);
  } else {
    return Util.removeClass(node, klass);
  }
};
Util.prototype.getRandom = function(size) {
  return Math.round(Math.random()*size);
};
function Field(width, height, mines) {
  this.width = width;
  this.height = height;
  this.mines = mines;
}
Field.MINE = 'mine';
Field.prototype.generateField = function() {
  var body = document.body,
      table = document.createElement('table'),
      tr,
      td;
  
  body.insertBefore(table, body.firstChild);
  
  this.cells = [];
  
  for (var k = 0; k < this.width; k++) {
    tr = table.insertRow();
    
    this.cells[k] = [];
    
    for (var j = 0; j < this.height; j++) {
      td = tr.insertCell();
      this.cells[k][j] = new Cell(td);
    }
  }
};
Field.prototype.generateMines = function() {
  var pos1 = Util.prototype.getRandom(this.width),
      pos2 = Util.prototype.getRandom(this.height);
  
  for (var i = 0; i < this.mines; i++) {
    if ( !this.cells[pos1][pos2][Field.mine] ) {
      this.cells[pos1][pos2][Field.mine] = true;
    }
  }
};
Field.prototype.calcMinesAround = function(pos1, pos2) {
  
};
function Cell(td) {
  this.td = td;
}
/*var button = document.getElementById('btn-for-table');
table.addEventListener('mousedown', function(event) {
  var target = event.target;
  
  if (target.tagName == 'TD') {
    toggleClass(target, 'black');
  }
});
button.addEventListener('click', function(event) {
  toggleClass(table, 'conversely');
});*/
var field1 = new Field(8, 8, 8);
field1.generateField();
field1.generateMines();
Output

You can jump to the latest bin by adding /latest to your URL

Dismiss x
public
Bin info
anonymouspro
0viewers