Jump to content

User:Matthew Yeager/renderboard.js

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Matthew Yeager (talk | contribs) at 05:51, 23 September 2007 (logic please). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
/*
Testing Starting Positions:
rd|nd|bd|qd|kd|bd|nd|rd|pd|pd|pd|pd|pd|pd|pd|pd|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |pl|pl|pl|pl|pl|pl|pl|pl|rl|nl|bl|ql|kl|bl|nl|rl

rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR
*/

if( typeof(RenderBoard) == 'undefined' ) {
  RenderBoard= function(){};
}

function brender() {
  addPortletLink( 'p-personal', "javascript:brender.generate()", "Render Game Board", "", "Render Game Board", "");
}
addOnloadHook(brender);

brender.generate = function brendergenerate() {
  var Window = new SimpleWindow(350,450);
  Window.setTitle("Render Game Board");
  var form = new QuickForm(brender.generate.code);
  form.append({
      type:'select',
      name:'seltype',
      label:'Game Selection: ',
      align:'left',
      event: brender.generate.logic,
      list:[{
	  label:'Chess',
	  list:[
	    {label:'Standard 8x8 (26x26px)', selected:true, value:'1'},
	    {label:'Standard 8x8 Small (22x22px)', value:'2'},
	    {label:'8x10 (10 columns) (26x26px)', value:'3' },
	    {label:'Chaturanga 8x8 (uncheckered)(26x26px)', value:'4'},
	    {label:'Mutation 8x8 (colored squares) (26x26px)', value:'5'},
	    {label:'Omega 10x10 (22x22px)', value:'6'},
	    {label:'Raumschach 5x5x5 (22x22px)', value:'7'}
	  ]
      }]
  });
  var specs = form.append({
      type: 'field',
      label: 'Board Specifications'
  });
  specs.append({
      type: 'input',
      name: 'txtalign',
      label: 'Alignment:  ',
      tooltip: 'Default is empty, but may be tright or tleft.'
  });
  specs.append({
      type: 'input',
      name: 'txtheader',
      label: 'Heading: ',
      tooltip: 'The title of this image.'
  });
  specs.append({
      type: 'input',
      name: 'txtfooter',
      label: 'Footer: ',
      tooltip: 'Text that appears below image.'
  });
  var inputsec = form.append({
      type: 'field',
      label: 'Input'
  });
  inputsec.append({
      type:'checkbox',
      list:[{
          name: 'chkstnd',
          label: 'Render Starting Position',
          tooltip: 'Will create code with pieces set up in starting position.',
        }
      ]
  });
  specs.append({
      type: 'input',
      name: 'txtFENparam',
      label: 'FEN Parameters: ',
      tooltip: 'Only applicable to certain templates.'
  });
  inputsec.append({
      type: 'input',
      name: 'txtposition',
      label: 'Position String',
      tooltip: 'This would be black\'s starting position: \'rd|nd|bd|qd|kd|bd|nd|rd|pd|pd|pd|pd|pd|pd|pd|pd\''
  });
  inputsec.append({
      type: 'input',
      name: 'txtFEN',
      label: 'FEN String',
      tooltip: 'This would be starting position: \'rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR\''
  });
  var resultdisplay = form.append({
      type: 'field',
      label: 'Rendered Code'
  });
  resultdisplay.append({
      type: 'textarea',
      name: 'txtresult',
      label: 'Result: '
  });

  form.append({ 
      type:'submit',
      name: 'Render Code',
      event: brender.generate.code
  });
  var result = form.render();
  Window.setContent( result );
  Window.display();
}

brender.generate.logic = function brendergeneratelogic(e) {
  alert('we have logic!');
}

brender.generate.code= function brendergeneratecode(e) {
  var InputLogic = 'Please note that code will be determined in this order:\n\t1. Starting Position Checkbox (Overrides other inputs)';
  InputLogic += '\n\t2. Position String (Overrides FEN String)\n\t3. FEN String';
  alert(InputLogic);
  var RenderedBoard = 'MYEA';
  var form = e.target;
  var params = {
    type: form.seltype.value,
    align: form.txtalign.value,
    header: form.txtheader.value,
    startpos: form.chkstnd.checked,
    footer: form.txtfooter.value,
    FENparam: form.txtFENparam.value,
    position: form.txtposition.value,
    FEN: form.txtFEN.value
  }
  if(params.type == 1 || params.type == 2){
    if(params.type == 1){
      RenderedBoard = '{{User:Matthew Yeager/Chess Render FEN|=\n';
    }else{
      RenderedBoard = '{{Template:Chess diagram small|=\n';
    }
    RenderedBoard += '|' + params.align + '\n';
    RenderedBoard += '|' + params.header + '\n';
    RenderedBoard += '|=' + '\n';
    if(params.startpos == true){
      RenderedBoard += '|rd|nd|bd|qd|kd|bd|nd|rd|=\n';
      RenderedBoard += '|pd|pd|pd|pd|pd|pd|pd|pd|=\n';
      RenderedBoard += '|  |  |  |  |  |  |  |  |=\n';
      RenderedBoard += '|  |  |  |  |  |  |  |  |=\n';
      RenderedBoard += '|  |  |  |  |  |  |  |  |=\n';
      RenderedBoard += '|  |  |  |  |  |  |  |  |=\n';
      RenderedBoard += '|pl|pl|pl|pl|pl|pl|pl|pl|=\n';
      RenderedBoard += '|rl|nl|bl|ql|kl|bl|nl|rl|=\n';
    }else if(params.position != ''){
      var avPosition = params.position.split('|');
      for(var i = 1;i <= 64;i++){
        if(i <= avPosition.length){
          RenderedBoard += '|' + avPosition[i-1];
        }else{
          RenderedBoard += '|  ';
        }
        if(i != 0 && i % 8 == 0){
          RenderedBoard += '|=\n';
        }
      }
    }else if(params.FEN != ''){
      var FEN = params.FEN;
      for(var i = 0;i <= FEN.length;i++){
        if(FEN[i] == '/'){
          RenderedBoard += '|=\n';
        }else{
          if(FEN[i] == '/'){
            RenderedBoard += '|=\n';
          }else if(FEN[i] == 'r'){
            RenderedBoard += '|rd';
          }else if(FEN[i] == 'n'){
            RenderedBoard += '|nd';
          }else if(FEN[i] == 'b'){
            RenderedBoard += '|bd';
          }else if(FEN[i] == 'q'){
            RenderedBoard += '|qd';
          }else if(FEN[i] == 'k'){
            RenderedBoard += '|kd';
          }else if(FEN[i] == 'p'){
            RenderedBoard += '|pd';
          }else if(FEN[i] == 'P'){
            RenderedBoard += '|pl';
          }else if(FEN[i] == 'K'){
            RenderedBoard += '|kl';
          }else if(FEN[i] == 'Q'){
            RenderedBoard += '|ql';
          }else if(FEN[i] == 'B'){
            RenderedBoard += '|bl';
          }else if(FEN[i] == 'N'){
            RenderedBoard += '|nl';
          }else if(FEN[i] == 'R'){
            RenderedBoard += '|rl';
          }else{ 
            for(var s = 0;s < FEN[i];s++){
              RenderedBoard += '|  ';
            }
          }
        }
      }
    }else{
      for(var i = 1;i <= 64;i++){
        RenderedBoard += '|  ';
        if(i != 0 && i % 8 == 0){
          RenderedBoard += '|=\n';
        }
      }
    }
    RenderedBoard += '|' + params.footer;
    if(params.type == 1){
      RenderedBoard += '\n|FEN=' + params.FENparam + '}}\n';
    }else{
      RenderedBoard += '}}\n';
    }
  }else if(params.type == 3){
     RenderedBoard = '8x10 yay!';
  }    
  RenderedBoard += '<!--Code Created From RenderBoard-->\n';
  RenderedBoard += '<!--If there are any problems please contact user Matthew_Yeager on English Wikipedia.-->\n';
  
  form.txtresult.value = RenderedBoard;
}