• ViewPageAsImage


    var ViewPageAsImage = function(target, label) {
     var setting = {
      min_height:   4,
      min_   4,
      scroll_factor:  0.5
     };
     
     var widget = {
      window:    null,
      document:   null,
      root:    null,
      body:    null,
      overlay:   null,
      selection:   null,
      selection_inner: null,
      selection_top:  null,
      selection_bottom: null,
      selection_left:  null,
      selection_right: null
     };
     
     var get_position = function(element) {
      return element.getBoundingClientRect();
     };
     
     var scroll_to_y = function(min_y, max_y) {
      var scroll_up = Math.round(
       (24 - min_y + widget.root.scrollTop) * setting.scroll_factor
      );
      var scroll_down = Math.round(
       (24 + max_y - widget.overlay.offsetHeight - widget.root.scrollTop) * setting.scroll_factor
      );
      
      if (scroll_up > 0) {
       widget.root.scrollTop -= scroll_up;
      }
      
      else if (scroll_down > 0) {
       widget.root.scrollTop += scroll_down;
      }
     };
     
     var scroll_to_x = function(min_x, max_x) {
      var scroll_left = Math.round(
       (24 - min_x + widget.root.scrollLeft) * setting.scroll_factor
      );
      var scroll_down = Math.round(
       (24 + max_x - widget.overlay.offsetWidth - widget.root.scrollLeft) * setting.scroll_factor
      );
      
      if (scroll_left > 0) {
       widget.root.scrollLeft -= scroll_left;
      }
      
      else if (scroll_down > 0) {
       widget.root.scrollLeft += scroll_down;
      }
     };
     
     var event_connect = function(target, event, listener) {
      target.addEventListener(event, listener, false);
     };
     
     var event_release = function(target, event, listener) {
      target.removeEventListener(event, listener, false);
     };
     
     var event_stop = function(event) {
      if (event.preventDefault) {
       event.preventDefault();
      }
      
      event.stopPropagation();
     };
     
     var position_selection = function(position) {
      if (position.height < setting.min_height) {
       position.height = setting.min_height;
      }
      
      if (position.width < setting.min_width) {
       position.width = setting.min_width;
      }
      
      widget.selection.style.height = position.height + 'px';
      widget.selection.style.left = position.left + 'px';
      widget.selection.style.top = position.top + 'px';
      widget.selection.style.width = position.width + 'px';
     };
     
     var action_auto = function() {
      var stop = function() {
       widget.selection.className = null;
       widget.overlay.className = null;
       action_maximize_state = null;
       
       event_release(widget.selection, 'mousemove', move);
       event_release(widget.selection, 'mousedown', stop);
       event_release(widget.overlay, 'mousemove', move);
       event_release(widget.overlay, 'mousedown', stop);
      };
      var move = function(event) {
       widget.overlay.style.zIndex = -10000002;
       widget.selection.style.zIndex = -10000003;
       
       widget.selection.style.height = 0;
       widget.selection.style.left = 0;
       widget.selection.style.top = 0;
       widget.selection.style.width = 0;
       
       var element = widget.document.elementFromPoint(event.clientX, event.clientY);
       
       position_selection(get_position(element));
       
       widget.overlay.style.zIndex = 10000002;
       widget.selection.style.zIndex = 10000003;
      };
      
      action_maximize_state = null;
      action_maximize();
      
      widget.selection.className = 'x-ray';
      widget.overlay.className = 'x-ray';
      
      event_connect(widget.selection, 'mousemove', move);
      event_connect(widget.selection, 'mousedown', stop);
      event_connect(widget.overlay, 'mousemove', move);
      event_connect(widget.overlay, 'mousedown', stop);
     };
     
     var action_move = function(event) {
      var stop = function() {
       event_release(widget.selection, 'mousemove', move)
       event_release(widget.selection, 'mouseup', stop);
       event_release(widget.overlay, 'mousemove', move)
       event_release(widget.overlay, 'mouseup', stop);
       event_release(widget.document, 'mouseleave', stop);
      };
      var move = function(event) {
       var position = get_position(widget.selection);
       var left = (event.pageX + offsetX);
       var top = (event.pageY + offsetY);
       var height = position.height;
       var width = position.width;
       
       if (left < 0) left = 0;
       if (top < 0) top = 0;
       
       if (left + width > widget.root.scrollWidth) {
        left = widget.root.scrollWidth - width;
       }
       
       if (top + height > widget.root.scrollHeight) {
        top = widget.root.scrollHeight - height;
       }
       
       scroll_to_y(top, top + height);
       scroll_to_x(left, left + width);
       
       widget.selection.style.left = left + 'px';
       widget.selection.style.top = top + 'px';
      };
      
      if (action_maximize_state != null) return;
      
      var position = get_position(widget.selection);
      var offsetX = position.left - event.pageX;
      var offsetY = position.top - event.pageY;
      
      event_connect(widget.selection, 'mousemove', move)
      event_connect(widget.selection, 'mouseup', stop);
      event_connect(widget.overlay, 'mousemove', move)
      event_connect(widget.overlay, 'mouseup', stop);
      event_connect(widget.document, 'mouseleave', stop);
      event_stop(event);
     };
     
     // Maximze selection:
     var action_maximize_state = null;
     var action_maximize = function() {
      // if (action_maximize_state != null) {
       // var position = action_maximize_state;
       // var height = position.height;
       // var width = position.width;
       // var top = position.top;
       // var left = position.left;
       
       // action_maximize_state = null;
      // }
      
      // else {
       // var height = widget.root.scrollHeight;
       // var width = widget.root.scrollWidth;
       // var top = 0, left = 0;
       
       // action_maximize_state = get_position(widget.selection);
      // }
      
       var height = widget.root.scrollHeight;
       var width = widget.root.scrollWidth;
       var top = 0, left = 0;
       
       action_maximize_state = get_position(widget.selection);

      widget.selection.style.height = height + 'px';
      widget.selection.style.left = left + 'px';
      widget.selection.style.top = top + 'px';
      widget.selection.style.width = width + 'px';
     };
     
     var init_selection_top = function(event) {
      var selection = get_position(widget.selection);
      
      return {
       selection: selection,
       offset:  selection.top - event.pageY,
       height:  selection.height + selection.top
      };
     };
     
     var init_selection_bottom = function(event) {
      var selection = get_position(widget.selection);
      
      return {
       selection: selection,
       offset:  selection.height - event.pageY
      };
     };
     
     var init_selection_left = function(event) {
      var selection = get_position(widget.selection);
      
      return {
       selection: selection,
       offset:  selection.left - event.pageX,
         selection.width + selection.left
      };
     };
     
     var init_selection_right = function(event) {
      var selection = get_position(widget.selection);
      
      return {
       selection: selection,
       offset:  selection.width - event.pageX
      };
     };
     
     var set_selection_top = function(event, context) {
      var top = event.pageY + context.offset;
      var height = context.height;
      
      if (top < 0) top = 0;
      
      if (height - top < setting.min_height) {
       height = setting.min_height;
       top = context.height - height;
      }
      
      else {
       height -= top;
      }
      
      scroll_to_y(event.pageY, event.pageY);
      
      widget.selection.style.height = height + 'px';
      widget.selection.style.top = top + 'px';
     };
     
     var set_selection_bottom = function(event, context) {
      var height = (event.pageY + context.offset);
      
      if (height < setting.min_height) {
       height = setting.min_height;
      }
      
      if (context.selection.top + height > widget.root.scrollHeight) {
       height = widget.root.scrollHeight - context.selection.top;
      }
      
      scroll_to_y(event.pageY, event.pageY);
      
      widget.selection.style.height = height + 'px';
     };
     
     var set_selection_left = function(event, context) {
      var left = event.pageX + context.offset;
      var width = context.width;
      
      if (left < 0) left = 0;
      
      if (width - left < setting.min_width) {
       width = setting.min_width;
       left = context.width - width;
      }
      
      else {
       width -= left;
      }
      
      scroll_to_x(event.pageX, event.pageX);
      
      widget.selection.style.width = width + 'px';
      widget.selection.style.left = left + 'px';
     };
     
     var set_selection_right = function(event, context) {
      var width = (event.pageX + context.offset);
      
      if (width < setting.min_width) {
       width = setting.min_width;
      }
      
      if (context.selection.left + width > widget.root.scrollWidth) {
       width = widget.root.scrollWidth - context.selection.left;
      }
      
      scroll_to_x(event.pageX, event.pageX);
      
      widget.selection.style.width = width + 'px';
     };
     
     // Resize top:
     var action_top = function(event) {
      var stop = function() {
       widget.overlay.setAttribute('state', '');
       widget.selection.setAttribute('state', '');
       
       event_release(widget.selection, 'mousemove', move)
       event_release(widget.selection, 'mouseup', stop);
       event_release(widget.overlay, 'mousemove', move)
       event_release(widget.overlay, 'mouseup', stop);
       event_release(widget.document, 'mouseleave', stop);
      };
      var move = function(event) {
       widget.overlay.setAttribute('state', 'resize-top');
       widget.selection.setAttribute('state', 'resize-top');
       
       set_selection_top(event, context_top);
      };
      
      var context_top = init_selection_top(event);
      
      action_maximize_state = null;
      
      event_connect(widget.selection, 'mousemove', move)
      event_connect(widget.selection, 'mouseup', stop);
      event_connect(widget.overlay, 'mousemove', move)
      event_connect(widget.overlay, 'mouseup', stop);
      event_connect(widget.document, 'mouseleave', stop);
      event_stop(event);
     };
     
     // Resize top left:
     var action_top_left = function(event) {
      var stop = function() {
       widget.overlay.setAttribute('state', '');
       widget.selection.setAttribute('state', '');
       
       event_release(widget.selection, 'mousemove', move)
       event_release(widget.selection, 'mouseup', stop);
       event_release(widget.overlay, 'mousemove', move)
       event_release(widget.overlay, 'mouseup', stop);
       event_release(widget.document, 'mouseleave', stop);
      };
      var move = function(event) {
       widget.overlay.setAttribute('state', 'resize-top-left');
       widget.selection.setAttribute('state', 'resize-top-left');
       
       set_selection_top(event, context_top);
       set_selection_left(event, context_left);
      };
      
      var context_top = init_selection_top(event);
      var context_left = init_selection_left(event);
      
      action_maximize_state = null;
      
      event_connect(widget.selection, 'mousemove', move)
      event_connect(widget.selection, 'mouseup', stop);
      event_connect(widget.overlay, 'mousemove', move)
      event_connect(widget.overlay, 'mouseup', stop);
      event_connect(widget.document, 'mouseleave', stop);
      event_stop(event);
     };
     
     // Resize top right:
     var action_top_right = function(event) {
      var stop = function() {
       widget.overlay.setAttribute('state', '');
       widget.selection.setAttribute('state', '');
       
       event_release(widget.selection, 'mousemove', move)
       event_release(widget.selection, 'mouseup', stop);
       event_release(widget.overlay, 'mousemove', move)
       event_release(widget.overlay, 'mouseup', stop);
       event_release(widget.document, 'mouseleave', stop);
      };
      var move = function(event) {
       widget.overlay.setAttribute('state', 'resize-top-right');
       widget.selection.setAttribute('state', 'resize-top-right');
       
       set_selection_top(event, context_top);
       set_selection_right(event, context_right);
      };
      
      var context_top = init_selection_top(event);
      var context_right = init_selection_right(event);
      
      action_maximize_state = null;
      
      event_connect(widget.selection, 'mousemove', move)
      event_connect(widget.selection, 'mouseup', stop);
      event_connect(widget.overlay, 'mousemove', move)
      event_connect(widget.overlay, 'mouseup', stop);
      event_connect(widget.document, 'mouseleave', stop);
      event_stop(event);
     };
     
     // Resize bottom:
     var action_bottom = function(event) {
      var stop = function() {
       widget.overlay.setAttribute('state', '');
       widget.selection.setAttribute('state', '');
       
       event_release(widget.selection, 'mousemove', move)
       event_release(widget.selection, 'mouseup', stop);
       event_release(widget.overlay, 'mousemove', move)
       event_release(widget.overlay, 'mouseup', stop);
       event_release(widget.document, 'mouseleave', stop);
      };
      var move = function(event) {
       widget.overlay.setAttribute('state', 'resize-bottom');
       widget.selection.setAttribute('state', 'resize-bottom');
       
       set_selection_bottom(event, context_bottom);
      };
      
      var context_bottom = init_selection_bottom(event);
      
      action_maximize_state = null;
      
      event_connect(widget.selection, 'mousemove', move)
      event_connect(widget.selection, 'mouseup', stop);
      event_connect(widget.overlay, 'mousemove', move)
      event_connect(widget.overlay, 'mouseup', stop);
      event_connect(widget.document, 'mouseleave', stop);
      event_stop(event);
     };
     
     // Resize bottom left:
     var action_bottom_left = function(event) {
      var stop = function() {
       widget.overlay.setAttribute('state', '');
       widget.selection.setAttribute('state', '');
       
       event_release(widget.selection, 'mousemove', move)
       event_release(widget.selection, 'mouseup', stop);
       event_release(widget.overlay, 'mousemove', move)
       event_release(widget.overlay, 'mouseup', stop);
       event_release(widget.document, 'mouseleave', stop);
      };
      var move = function(event) {
       widget.overlay.setAttribute('state', 'resize-bottom-left');
       widget.selection.setAttribute('state', 'resize-bottom-left');
       
       set_selection_bottom(event, context_bottom);
       set_selection_left(event, context_left);
      };
      
      var context_bottom = init_selection_bottom(event);
      var context_left = init_selection_left(event);
      
      action_maximize_state = null;
      
      event_connect(widget.selection, 'mousemove', move)
      event_connect(widget.selection, 'mouseup', stop);
      event_connect(widget.overlay, 'mousemove', move)
      event_connect(widget.overlay, 'mouseup', stop);
      event_connect(widget.document, 'mouseleave', stop);
      event_stop(event);
     };
     
     // Resize bottom right:
     var action_bottom_right = function(event) {
      var stop = function() {
       widget.overlay.setAttribute('state', '');
       widget.selection.setAttribute('state', '');
       
       event_release(widget.selection, 'mousemove', move)
       event_release(widget.selection, 'mouseup', stop);
       event_release(widget.overlay, 'mousemove', move)
       event_release(widget.overlay, 'mouseup', stop);
       event_release(widget.document, 'mouseleave', stop);
      };
      var move = function(event) {
       widget.overlay.setAttribute('state', 'resize-bottom-right');
       widget.selection.setAttribute('state', 'resize-bottom-right');
       
       set_selection_bottom(event, context_bottom);
       set_selection_right(event, context_right);
      };
      
      var context_bottom = init_selection_bottom(event);
      var context_right = init_selection_right(event);
      
      action_maximize_state = null;
      
      event_connect(widget.selection, 'mousemove', move)
      event_connect(widget.selection, 'mouseup', stop);
      event_connect(widget.overlay, 'mousemove', move)
      event_connect(widget.overlay, 'mouseup', stop);
      event_connect(widget.document, 'mouseleave', stop);
      event_stop(event);
     };
     // Resize left:
     var action_left = function(event) {
      var stop = function() {
       widget.overlay.setAttribute('state', '');
       widget.selection.setAttribute('state', '');
       
       event_release(widget.selection, 'mousemove', move)
       event_release(widget.selection, 'mouseup', stop);
       event_release(widget.overlay, 'mousemove', move)
       event_release(widget.overlay, 'mouseup', stop);
       event_release(widget.document, 'mouseleave', stop);
      };
      var move = function(event) {
       widget.overlay.setAttribute('state', 'resize-left');
       widget.selection.setAttribute('state', 'resize-left');
       
       set_selection_left(event, context_left);
      };
      
      var context_left = init_selection_left(event);
      
      action_maximize_state = null;
      
      event_connect(widget.selection, 'mousemove', move)
      event_connect(widget.selection, 'mouseup', stop);
      event_connect(widget.overlay, 'mousemove', move)
      event_connect(widget.overlay, 'mouseup', stop);
      event_connect(widget.document, 'mouseleave', stop);
      event_stop(event);
     };
     
     // Resize right:
     var action_right = function(event) {
      var stop = function() {
       widget.overlay.setAttribute('state', '');
       widget.selection.setAttribute('state', '');
       
       event_release(widget.selection, 'mousemove', move)
       event_release(widget.selection, 'mouseup', stop);
       event_release(widget.overlay, 'mousemove', move)
       event_release(widget.overlay, 'mouseup', stop);
       event_release(widget.document, 'mouseleave', stop);
      };
      var move = function(event) {
       widget.overlay.setAttribute('state', 'resize-right');
       widget.selection.setAttribute('state', 'resize-right');
       
       set_selection_right(event, context_right);
      };
      
      var context_right = init_selection_right(event);
      
      action_maximize_state = null;
      
      event_connect(widget.selection, 'mousemove', move)
      event_connect(widget.selection, 'mouseup', stop);
      event_connect(widget.overlay, 'mousemove', move)
      event_connect(widget.overlay, 'mouseup', stop);
      event_connect(widget.document, 'mouseleave', stop);
      event_stop(event);
     };
     
     // Select:
     var action_all = function(event) {
      var stop = function() {
       widget.overlay.setAttribute('state', '');
       widget.selection.setAttribute('state', '');
       
       event_release(widget.selection, 'mousemove', move)
       event_release(widget.selection, 'mouseup', stop);
       event_release(widget.overlay, 'mousemove', move)
       event_release(widget.overlay, 'mouseup', stop);
       event_release(widget.document, 'mouseleave', stop);
      };
      var move = function(event) {
       widget.overlay.setAttribute('state', 'selecting');
       widget.selection.setAttribute('state', 'selecting');
       
       if (start.x < event.pageX) {
        var width = event.pageX - start.x;
        var left = start.x;
       }
       
       else {
        var width = start.x - event.pageX;
        var left = event.pageX;
       }
       
       if (start.y < event.pageY) {
        var height = event.pageY - start.y;
        var top = start.y;
       }
       
       else {
        var height = start.y - event.pageY;
        var top = event.pageY;
       }
       
       if (width < 4) width = 4;
       if (height < 4) height = 4;
       
       scroll_to_y(event.pageY, event.pageY);
       scroll_to_x(event.pageX, event.pageX);
       
       widget.selection.style.top = top + 'px';
       widget.selection.style.left = left + 'px';
       widget.selection.style.width = width + 'px';
       widget.selection.style.height = height + 'px';
      };
      
      var start = {
       x: event.pageX,
       y: event.pageY
      };
      
      action_maximize_state = null;
      
      event_connect(widget.selection, 'mousemove', move)
      event_connect(widget.selection, 'mouseup', stop);
      event_connect(widget.overlay, 'mousemove', move)
      event_connect(widget.overlay, 'mouseup', stop);
      event_connect(widget.document, 'mouseleave', stop);
      event_stop(event);
     };
     
     // Define widgets:
     widget.document = window.top.getBrowser().selectedBrowser.contentWindow.document;
     widget.window = widget.document.defaultView;
     widget.root = widget.document.documentElement;
     widget.overlay = widget.document.createElement('ViewPageAsImage-overlay');
     widget.selection = widget.document.createElement('ViewPageAsImage-selection');
     widget.selection_inner = widget.document.createElement('ViewPageAsImage-selection-inner');
     widget.selection_top = widget.document.createElement('ViewPageAsImage-selection-top');
     widget.selection_top_left = widget.document.createElement('ViewPageAsImage-selection-top-left');
     widget.selection_top_right = widget.document.createElement('ViewPageAsImage-selection-top-right');
     widget.selection_bottom = widget.document.createElement('ViewPageAsImage-selection-bottom');
     widget.selection_bottom_left = widget.document.createElement('ViewPageAsImage-selection-bottom-left');
     widget.selection_bottom_right = widget.document.createElement('ViewPageAsImage-selection-bottom-right');
     widget.selection_left = widget.document.createElement('ViewPageAsImage-selection-left');
     widget.selection_right = widget.document.createElement('ViewPageAsImage-selection-right');
     
     var styles = widget.document.createElement('link');
     styles.setAttribute('rel', 'stylesheet');
     styles.setAttribute('href', 'resource://ViewPageAsImage/browser.css');
     widget.root.appendChild(styles);
     widget.root.appendChild(widget.overlay);
     
     // if (target) {
      // var target_position = get_position(target);
      
      // if (target_position.height < setting.min_height) {
       // target_position.height = setting.min_height;
      // }
      
      // if (target_position.width < setting.min_width) {
       // target_position.width = setting.min_width;
      // }
      
      // widget.selection.style.height = target_position.height + 'px';
      // widget.selection.style.left = target_position.left + 'px';
      // widget.selection.style.top = target_position.top + 'px';
      // widget.selection.style.width = target_position.width + 'px';
     // }
     
     // else {
      // widget.selection.style.height = (widget.window.innerHeight * 0.33) + 'px';
      // widget.selection.style.left = (widget.window.innerWidth * 0.33) + 'px';
      // widget.selection.style.top = (widget.root.scrollTop + (widget.window.innerHeight * 0.33)) + 'px';
      // widget.selection.style.width = (widget.window.innerWidth * 0.33) + 'px';
     // }
     

     
     widget.root.appendChild(widget.selection);
     widget.selection.appendChild(widget.selection_inner);
     widget.selection_inner.appendChild(widget.selection_top);
     widget.selection_inner.appendChild(widget.selection_top_left);
     widget.selection_inner.appendChild(widget.selection_top_right);
     widget.selection_inner.appendChild(widget.selection_bottom);
     widget.selection_inner.appendChild(widget.selection_bottom_left);
     widget.selection_inner.appendChild(widget.selection_bottom_right);
     widget.selection_inner.appendChild(widget.selection_left);
     widget.selection_inner.appendChild(widget.selection_right);
     
     widget.overlay.setAttribute('state', '');
     widget.selection.setAttribute('state', '');
     
     // Bind actions:
     event_connect(widget.overlay, 'mousedown', action_all);
     event_connect(widget.selection, 'mousedown', action_move);
     event_connect(widget.selection, 'dblclick', action_maximize);
     event_connect(widget.selection_top, 'mousedown', action_top);
     event_connect(widget.selection_top_left, 'mousedown', action_top_left);
     event_connect(widget.selection_top_right, 'mousedown', action_top_right);
     event_connect(widget.selection_bottom, 'mousedown', action_bottom);
     event_connect(widget.selection_bottom_left, 'mousedown', action_bottom_left);
     event_connect(widget.selection_bottom_right, 'mousedown', action_bottom_right);
     event_connect(widget.selection_left, 'mousedown', action_left);
     event_connect(widget.selection_right, 'mousedown', action_right);

     // maximize to capture the whole page.
     try {
           action_maximize();
          }
          
          catch (error) {
           alert(error);
     }
     
     /*-------------------------------------------------------------------------------------------*/

     var capture = function() {
      var canvas = document.createElementNS('http://www.w3.org/1999/xhtml', 'html:canvas');
      var context = canvas.getContext('2d');
      try {
           action_maximize();
          }
          
          catch (error) {
           alert(error);
      }
      var selection = get_position(widget.selection);
      
      // canvas.height = selection.height;
      // canvas.width = selection.width;
      canvas.height = widget.root.scrollHeight;
      canvas.width = widget.root.scrollWidth;
      
      widget.overlay.style.display = 'none';
      widget.selection.style.display = 'none';
      
      // context.drawWindow(
       // widget.window,
       // selection.left,
       // selection.top,
       // selection.width,
       // selection.height,
       // 'rgb(255, 255, 255)'
      // );
      context.drawWindow(
       widget.window,
       0,
       0,
       widget.root.scrollWidth,
       widget.root.scrollHeight,
       'rgb(255, 255, 255)'
      );
      //alert("selection.left: "+selection.left+",selection.top:"+selection.top+",selection."+selection.width+",selection.height:"+selection.height+",widget.root.scrollHeight:"+widget.root.scrollHeight+",widget.root.scrollWidth:"+widget.root.scrollWidth);
      
      widget.overlay.style.display = 'block';
      widget.selection.style.display = 'block';
      
      return canvas.toDataURL('image/png', '');
     };
     var action_close = function(event) {
      //event_release(notice, 'command', action_close);
      //event_release(widget.window, 'unload', action_close);
      //event_release(widget.window, 'keydown', action_keydown);
      
      widget.root.removeChild(styles);
      widget.root.removeChild(widget.overlay);
      widget.root.removeChild(widget.selection);
      //notices.removeAllNotifications(true);
     };
     var action_save = function() {
      try {
       // var picker = Components.classes["@mozilla.org/filepicker;1"]
        // .createInstance(Components.interfaces.nsIFilePicker);
       var io = Components.classes["@mozilla.org/network/io-service;1"]
        .getService(Components.interfaces.nsIIOService);
       
       // Create a 'Save As' dialog:
       // picker.init(
        // window, label.notice + ' ' + filename,
        // Components.interfaces.nsIFilePicker.modeSave
       // );
       // picker.appendFilters(
        // Components.interfaces.nsIFilePicker.filterImages
       // );
       // picker.defaultExtension = '.png';
       // picker.defaultString = filename + '.png';
       
       //Show picker, cancel on user interaction:
       // if (picker.show() == Components.interfaces.nsIFilePicker.returnCancel) return;


       //https://developer.mozilla.org/en-US/docs/Code_snippets/File_I_O#Getting_special_files
       //get file
       Components.utils.import("resource://gre/modules/FileUtils.jsm");
       var file = FileUtils.getFile("TmpD", [filename + '.png']);
       //alert(file.path);
       //debugger;
       
       // Write the file to disk, without a Download dialog:
       var source = io.newURI(capture(), 'utf8', null);
       var persist = Components.classes["@mozilla.org/embedding/browser/nsWebBrowserPersist;1"]
        .createInstance(Components.interfaces.nsIWebBrowserPersist);
       
       persist.persistFlags = Components.interfaces.nsIWebBrowserPersist.PERSIST_FLAGS_REPLACE_EXISTING_FILES;
       persist.persistFlags |= Components.interfaces.nsIWebBrowserPersist.PERSIST_FLAGS_AUTODETECT_APPLY_CONVERSION;
       
       //persist.saveURI(source, null, null, null, null, picker.file);
       //alert("before persist.saveURI");
       persist.saveURI(source, null, null, null, null, file, null);
       
       // All done.
       //alert("after persist.saveURI");
       //alert(file.path);
       action_close();
       
       // load the image
       //Components.utils.import("resource://gre/modules/Services.jsm");
       //var oReq = new XMLHttpRequest();
       //// var ios = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService);
       //var url = services.io.newFileURI(file);
       //var url = nsIIOService.newFileURI(file);
       var url = io.newFileURI(file);
       //window.loadURI(url, null, null);
       window.loadURI("file://"+url.path, null, null);
       //window.loadURI("file:///d:/linux/browser/firefox/ViewPageAsImage/service.PNG", null, null);
       ////alert(url.path);
       //oReq.open("get", url, true);
       //oReq.send();
      }
      
      catch (error) {
       //alert(label.sizeerror);
       alert(error);
      }
     };
     var action_keydown = function(event) {
      if (event.keyCode == 27) action_close();
      else if (event.keyCode == 13) action_save();
      else return;
      
      event_release(widget.window, 'keydown', action_keydown);
     };
     var append_notice = function() {
      return notices.appendNotification(
       label.notice + ' ' + filename, 'ViewPageAsImage-controls',
       null, notices.PRIORITY_INFO_HIGH, [
        {
         label:  label.autoselect,
         callback: function() {
          try {
           action_auto();
          }
          
          catch (error) {
           alert(error);
          }
          
          return true;
         }
        },
        {
         label:  label.selectall,
         callback: function() {
          try {
           action_maximize();
          }
          
          catch (error) {
           alert(error);
          }
          
          return true;
         }
        },
        {
         label:  label.save,
         accessKey: label.accesskey,
         callback: function() {
          try {
           action_save();
          }
          
          catch (error) {
           alert(error);
          }
          
          return true;
         }
        }
       ]
      );
     };
     
     //var notices = window.getNotificationBox(widget.window);
     var filename1 = (widget.document.title ? widget.document.title : widget.document.URL);
     //alert(filename.match("[^A-Za-z0-9_.]"));
     var regEx = new RegExp('[,/:*?""<>|]', 'g');
     var filename = filename1.replace(regEx,"_");
     //alert(filename);
     try {
      //var filename = (widget.document.title ? widget.document.title : widget.document.URL);
      //String filename1 = filename + "";
      //alert("before:"+filename1);
      //filename1.replaceAll("[^A-Za-z0-9_.]","_");
      //alert("after:"+filename1);
           action_save();
     }
          
     catch (error) {
           alert(error);
     }
     //var notice = append_notice();
     //var notice_allow_close = true;
     
     //event_connect(notice, 'command', action_close);
     //event_connect(widget.window, 'unload', action_close);
     //event_connect(widget.window, 'keydown', action_keydown);
    };

  • 相关阅读:
    jdk源码阅读笔记之java集合框架(四)(LinkedList)
    jdk源码阅读笔记之java集合框架(二)(ArrayList)
    jdk源码阅读笔记之java集合框架(三)(modCount)
    java文件拷贝的一点思考
    mac(10.11.5 )安装pt-query-digest所遇问题总结
    关于springboot启动所需所有jar包详解
    volatile的一点理解
    java 虚拟机自动内存管理
    虚拟机运行时数据区划分
    笔记本连上wifi(WiFi完全没问题)却无法上网
  • 原文地址:https://www.cnblogs.com/riskyer/p/3266437.html
Copyright © 2020-2023  润新知