dojox/grid/enhanced/plugins/Printer.js

  • Provides:

    • dojox.grid.enhanced.plugins.Printer
  • Requires:

    • dojox.grid.enhanced._Plugin in common
    • dojox.grid.enhanced.plugins.exporter.TableWriter in common
  • dojox.grid.enhanced.plugins.Printer

    • type
      Function
    • chains:
      • dojox.grid.enhanced._Plugin: (prototype)
      • dojox.grid.enhanced._Plugin: (call)
    • summary
      only newed by _Plugin
      inGrid: EnhancedGrid
      The grid to plug in to.
    • example
      
      	dojo.require("dojox.grid.enhanced.plugins.Printer");
      	dijit.byId("grid1").printGrid("my grid",					//A title for the grid,optional
      								["cssfile1.css","cssfile2.css"],//An array of css files to decorate the printed gird,optional
      								{table:"border='border'"}		//tagName:"attrbuteList" pairs, optional,
      																//control the html tags in the generated html
      	);
      
      
      __printArgs: {
      title: String
      A title of the printed page can be specified. Optional.
      If given, it's shown in an <h1> tag at the top of the page.
      cssFiles: Array | String
      CSS file paths. Optional.
      Every row and column is given CSS classes, including:
      grid_row_{row-number}, grid_odd_row, grid_even_row, grid_header,
      grid_col_{col-number}, grid_odd_col, grid_even_col
      {row_number} and {col-number} are both integers starting from 1.
      Row classes are for <thead> and <tbody> tags.
      Column classes are for <th> and <td> tags.
      Users can use these classes in the CSS files, but cannot define their own.
      writerArgs: Object (Association Array)
      Arguments for TableWriter.
      fetchArgs: object?
      Any arguments for store.fetch
      }
    • parameters:
      • grid: (typeof )
    • source: [view]
        this.grid = grid;
        this._mixinGrid(grid);

        
        //For print, we usually need the HTML instead of raw data.
        grid.setExportFormatter(function(data, cell, rowIndex, rowItem){
         return cell.format(rowIndex, rowItem);
        });
  • dojox.grid.enhanced.plugins.Printer.name

    • type
      String
    • summary
      Plugin name
  • dojox.grid.enhanced.plugins.Printer._mixinGrid

    • type
      Function
    • source: [view]
        var g = this.grid;
        g.printGrid = dojo.hitch(this, this.printGrid);
        g.printSelected = dojo.hitch(this, this.printSelected);
        g.exportToHTML = dojo.hitch(this, this.exportToHTML);
        g.exportSelectedToHTML = dojo.hitch(this, this.exportSelectedToHTML);
        g.normalizePrintedGrid = dojo.hitch(this, this.normalizeRowHeight);
    • summary
  • dojox.grid.enhanced.plugins.Printer.printGrid

    • type
      Function
    • parameters:
      • args: (typeof __printArgs)
        Arguments for print.
    • source: [view]
        this.exportToHTML(args, dojo.hitch(this, this._print));
    • summary
      Print all the data in the grid, using title as a title,
      decorating generated html by cssFiles,
      using tagName:&quot;attrbuteList&quot; pairs(writerArgs) to control html tags
      in the generated html string.
    • tags:
  • dojox.grid.enhanced.plugins.Printer.printSelected

    • type
      Function
    • parameters:
      • args: (typeof __printArgs)
        Arguments for print.
    • source: [view]
        this._print(this.exportSelectedToHTML(args));
    • summary
      Print selected data. All other features are the same as printGrid.
      For meaning of arguments see function *printGrid*
    • tags:
  • dojox.grid.enhanced.plugins.Printer.exportToHTML

    • type
      Function
    • parameters:
      • args: (typeof __printArgs)
        Arguments for print.
      • onExported: (typeof function(string)
        call back function
    • source: [view]
        args = this._formalizeArgs(args);
        var _this = this;
        this.grid.exportGrid("table", args, function(str){
         onExported(_this._wrapHTML(args.title, args.cssFiles, args.titleInBody + str));
        });
    • summary
      Export to HTML string, but do NOT print.
      Users can use this to implement print preview.
      For meaning of the 1st-3rd arguments see function *printGrid*.
    • tags:
  • dojox.grid.enhanced.plugins.Printer.exportSelectedToHTML

    • type
      Function
    • parameters:
      • args: (typeof __printArgs)
        Arguments for print.
    • source: [view]
        args = this._formalizeArgs(args);
        var str = this.grid.exportSelected("table", args.writerArgs);
        return this._wrapHTML(args.title, args.cssFiles, args.titleInBody + str); //String
    • summary
      Export selected rows to HTML string, but do NOT print.
      Users can use this to implement print preview.
      For meaning of arguments see function *printGrid*
    • tags:
    • returns
      String
  • dojox.grid.enhanced.plugins.Printer._print

    • type
      Function
    • parameters:
      • htmlStr: (typeof string)
        String
        The html content string to be printed.
    • source: [view]
        var win, _this = this,
         fillDoc = function(w){
          var doc = win.document;
          doc.open();
          doc.write(htmlStr);
          doc.close();
          _this.normalizeRowHeight(doc);
         };
        if(!window.print){
         //We don't have a print facility.
         return;
        }else if(dojo.isChrome || dojo.isOpera){
         //referred from dijit._editor.plugins.Print._print()
         //In opera and chrome the iframe.contentWindow.print
         //will also print the outside window. So we must create a
         //stand-alone new window.
         win = window.open("javascript: ''", "", "status=0,menubar=0,location=0,toolbar=0,width=1,height=1,resizable=0,scrollbars=0");
         fillDoc(win);
         //Opera will stop at this point, showing the popping-out window.
         //If the user closes the window, the following codes will not execute.
         //If the user returns focus to the main window, the print function
         // is executed, but still a no-op.
         win.print();
         win.close();
        }else{
         //Put private things in deeper namespace to avoid poluting grid namespace.
         var fn = this._printFrame,
          dn = this.grid.domNode;
         if(!fn){
          var frameId = dn.id + "_print_frame";
          if(!(fn = dojo.byId(frameId))){
           //create an iframe to store the grid data.
           fn = dojo.create("iframe");
           fn.id = frameId;
           fn.frameBorder = 0;
           dojo.style(fn, {
            width: "1px",
            height: "1px",
            position: "absolute",
            right: 0,
            bottoom: 0,
            border: "none",
            overflow: "hidden"
           });
           if(!dojo.isIE){
            dojo.style(fn, "visibility","hidden");
           }
           dn.appendChild(fn);
          }
          //Reuse this iframe
          this._printFrame = fn;
         }
         win = fn.contentWindow;
         fillDoc(win);
         // IE requires the frame to be focused for
         // print to work, but since this is okay for all
         // no special casing.
         dijit.focus(fn);
         win.print();
        }
    • summary
      Do the print job.
    • tags:
    • return_summary
      undefined
  • dojox.grid.enhanced.plugins.Printer._wrapHTML

    • type
      Function
    • parameters:
      • title: (typeof string)
        String
        A title for the html page.
      • cssFiles: (typeof Array)
        css file pathes.
      • body_content: (typeof string)
        String
        Content to print, not including &lt;head&gt;&lt;/head&gt; part and &lt;html&gt; tags
    • source: [view]
        var html = ['',
           '', title,<br>     ''];
        for(var i = 0; i < cssFiles.length; ++i){
         html.push('');
        }
        html.push('');
        if(body_content.search(/^\s*   body_content = '' + body_content + '';
        }
        html.push(body_content);
        return html.join('\n'); //String
    • summary
      Put title, cssFiles, and body_content together into an HTML string.
    • tags:
    • return_summary
      the wrapped HTML string ready for print
    • returns
      String
  • dojox.grid.enhanced.plugins.Printer.normalizeRowHeight

    • type
      Function
    • parameters:
      • doc: (typeof )
    • source: [view]
        var views = dojo.query("table.grid_view", doc.body);
        var headPerView = dojo.map(views, function(view){
         return dojo.query("thead.grid_header", view)[0];
        });
        var rowsPerView = dojo.map(views, function(view){
         return dojo.query("tbody.grid_row", view);
        });
        var rowCount = rowsPerView[0].length;
        var i, v, h, maxHeight = 0;
        for(v = views.length - 1; v >= 0; --v){
         h = dojo.contentBox(headPerView[v]).h;
         if(h > maxHeight){
          maxHeight = h;
         }
        }
        for(v = views.length - 1; v >= 0; --v){
         dojo.style(headPerView[v], "height", maxHeight + "px");
        }
        for(i = 0; i < rowCount; ++i){
         maxHeight = 0;
         for(v = views.length - 1; v >= 0; --v){
          h = dojo.contentBox(rowsPerView[v][i]).h;
          if(h > maxHeight){
           maxHeight = h;
          }
         }
         for(v = views.length - 1; v >= 0; --v){
          dojo.style(rowsPerView[v][i], "height", maxHeight + "px");
         }
        }
        var left = 0;
        for(v = 0; v < views.length; ++v){
         dojo.style(views[v], "left", left + "px");
         left += dojo.marginBox(views[v]).w;
        }
    • summary
  • dojox.grid.enhanced.plugins.Printer._formalizeArgs

    • type
      Function
    • parameters:
      • args: (typeof )
    • source: [view]
        args = (args && dojo.isObject(args)) ? args : {};
        args.title = String(args.title) || "";
        if(!dojo.isArray(args.cssFiles)){
         args.cssFiles = [args.cssFiles];
        }
        args.titleInBody = args.title ? ['

      ', args.title, '

      '].join('') : '';
        return args; //Object
    • returns
      Object
    • summary
  • dojox.grid.enhanced.plugins.Printer._printFrame

    • summary
  • dojox.grid.enhanced.plugins.Printer.grid

    • summary
  • dojox.grid.enhanced.plugins

    • type
      Object
    • summary
  • dojox.grid.enhanced

    • type
      Object
    • summary
  • dojox.grid

    • type
      Object
    • summary
  • dojox

    • type
      Object
    • summary