Changeset 314 for trunk/plugins/ListType


Ignore:
Timestamp:
09/11/05 17:53:53 (14 years ago)
Author:
mokhet
Message:

add a panel version
xinha_config.ListType?.mode = 'toolbar' is set by default, you can set it to 'panel' to use the new panel version

Location:
trunk/plugins/ListType
Files:
11 added
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/plugins/ListType/list-type.js

    r157 r314  
    1 // ListType Plugin for HTMLArea-3.0 
    2 // Sponsored by MEdTech Unit - Queen's University 
    3 // Implementation by Mihai Bazon, http://dynarch.com/mishoo/ 
    4 // 
    5 // (c) dynarch.com 2003. 
    6 // Distributed under the same terms as HTMLArea itself. 
    7 // This notice MUST stay intact for use (see license.txt). 
    8 // 
    9 // $Id$ 
     1// ListType Plugin for Xinha 
     2// Toolbar Implementation by Mihai Bazon, http://dynarch.com/mishoo/ 
     3HTMLArea.loadStyle( 'ListType.css', 'ListType' ); 
    104 
    11 function ListType(editor) { 
    12         this.editor = editor; 
    13         var cfg = editor.config; 
    14         var self = this; 
    15         var options = {}; 
    16         options[this._lc("Decimal numbers")] = "decimal"; 
    17         options[this._lc("Lower roman numbers")] = "lower-roman"; 
    18         options[this._lc("Upper roman numbers")] = "upper-roman"; 
    19         options[this._lc("Lower latin letters")] = "lower-alpha"; 
    20         options[this._lc("Upper latin letters")] = "upper-alpha"; 
    21         if (!HTMLArea.is_ie) 
    22                 // IE doesn't support this property; even worse, it complains 
    23                 // with a gross error message when we tried to select it, 
    24                 // therefore let's hide it from the damn "browser". 
    25                 options[this._lc("Lower greek letters")] = "lower-greek"; 
    26         var obj = { 
    27                 id            : "listtype", 
    28                 tooltip       : this._lc("Choose list style type (for ordered lists)"), 
    29                 options       : options, 
    30                 action        : function(editor) { self.onSelect(editor, this); }, 
    31                 refresh       : function(editor) { self.updateValue(editor, this); }, 
    32                 context       : "ol" 
    33         }; 
    34         cfg.registerDropdown(obj); 
    35         cfg.addToolbarElement("listtype", ["insertorderedlist","orderedlist"], 1); 
    36 }        
     5function ListType( editor ) 
     6{ 
     7  this.editor = editor; 
     8  var cfg = editor.config; 
     9  var self = this; 
    3710 
    38 ListType._pluginInfo = { 
    39         name          : "ListType", 
    40         version       : "1.0", 
    41         developer     : "Mihai Bazon", 
    42         developer_url : "http://dynarch.com/mishoo/", 
    43         c_owner       : "dynarch.com", 
    44         sponsor       : "MEdTech Unit - Queen's University", 
    45         sponsor_url   : "http://www.queensu.ca/", 
    46         license       : "htmlArea" 
     11  if ( cfg.ListType.mode == 'toolbar' ) 
     12  { 
     13  var options = {}; 
     14    options[HTMLArea._lc( "Decimal numbers", "ListType" )] = "decimal"; 
     15    options[HTMLArea._lc( "Lower roman numbers", "ListType" )] = "lower-roman"; 
     16    options[HTMLArea._lc( "Upper roman numbers", "ListType" )] = "upper-roman"; 
     17    options[HTMLArea._lc( "Lower latin letters", "ListType" )] = "lower-alpha"; 
     18    options[HTMLArea._lc( "Upper latin letters", "ListType" )] = "upper-alpha"; 
     19    if (!HTMLArea.is_ie) 
     20      // IE doesn't support this property; even worse, it complains 
     21      // with a gross error message when we tried to select it, 
     22      // therefore let's hide it from the damn "browser". 
     23      options[HTMLArea._lc( "Lower greek letters", "ListType" )] = "lower-greek"; 
     24    var obj = 
     25    { 
     26      id            : "listtype", 
     27      tooltip       : HTMLArea._lc( "Choose list style type (for ordered lists)", "ListType" ), 
     28      options       : options, 
     29      action        : function( editor ) { self.onSelect( editor, this ); }, 
     30      refresh       : function( editor ) { self.updateValue( editor, this ); }, 
     31      context       : "ol" 
     32    }; 
     33    cfg.registerDropdown( obj ); 
     34    cfg.addToolbarElement( "listtype", ["insertorderedlist","orderedlist"], 1 ); 
     35  } 
     36  else 
     37  { 
     38    editor._ListType = editor.addPanel( 'right' ); 
     39    HTMLArea.freeLater( editor, '_ListType' ); 
     40    HTMLArea.addClass( editor._ListType, 'ListType' ); 
     41    // hurm, ok it's pretty to use the background color for the whole panel, 
     42    // but should not it be set by default when creating the panel ? 
     43    HTMLArea.addClass( editor._ListType.parentNode, 'dialog' ); 
     44 
     45    editor.notifyOn( 'modechange', 
     46      function(e,args) 
     47      { 
     48        if ( args.mode == 'text' ) editor.hidePanel( editor._ListType ); 
     49      } 
     50    ); 
     51 
     52    var elts_ul = ['disc', 'circle', 'square', 'none']; 
     53    var elts_ol = ['decimal', 'lower-alpha', 'upper-alpha', 'lower-roman', 'upper-roman', 'none']; 
     54    var div = document.createElement( 'div' ); 
     55    div.id = 'LTdivUL'; 
     56    div.style.display = 'none'; 
     57    for ( var i=0; i<elts_ul.length; i++ ) { 
     58      div.appendChild( this.createImage( elts_ul[i] ) ); 
     59    } 
     60    editor._ListType.appendChild( div ); 
     61    var div = document.createElement( 'div' ); 
     62    div.id = 'LTdivOL'; 
     63    div.style.display = 'none'; 
     64    for ( var i=0; i<elts_ol.length; i++ ) { 
     65      div.appendChild( this.createImage( elts_ol[i] ) ); 
     66    } 
     67    editor._ListType.appendChild( div ); 
     68 
     69    editor.hidePanel( editor._ListType ); 
     70  } 
    4771}; 
    4872 
    49 ListType.prototype._lc = function(string) { 
    50     return HTMLArea._lc(string, 'ListType'); 
    51 } 
    52  
    53 ListType.prototype.onSelect = function(editor, combo) { 
    54         var tbobj = editor._toolbarObjects[combo.id].element; 
    55         var parent = editor.getParentElement(); 
    56         while (!/^ol$/i.test(parent.tagName)) { 
    57                 parent = parent.parentNode; 
    58         } 
    59         parent.style.listStyleType = tbobj.value; 
     73HTMLArea.Config.prototype.ListType = 
     74{ 
     75  'mode': 'toolbar' // configuration mode : toolbar or panel 
    6076}; 
    6177 
    62 ListType.prototype.updateValue = function(editor, combo) { 
    63         var tbobj = editor._toolbarObjects[combo.id].element; 
    64         var parent = editor.getParentElement(); 
    65         while (parent && !/^ol$/i.test(parent.tagName)) { 
    66                 parent = parent.parentNode; 
    67         } 
    68         if (!parent) { 
    69                 tbobj.selectedIndex = 0; 
    70                 return; 
    71         } 
    72         var type = parent.style.listStyleType; 
    73         if (!type) { 
    74                 tbobj.selectedIndex = 0; 
    75         } else { 
    76                 for (var i = tbobj.firstChild; i; i = i.nextSibling) { 
    77                         i.selected = (type.indexOf(i.value) != -1); 
    78                 } 
    79         } 
     78ListType._pluginInfo = 
     79{ 
     80  name          : "ListType", 
     81  version       : "2.0", 
     82  developer     : "Laurent Vilday", 
     83  developer_url : "http://www.mokhet.com/", 
     84  c_owner       : "Xinha community", 
     85  sponsor       : "", 
     86  sponsor_url   : "", 
     87  license       : "Creative Commons Attribution-ShareAlike License" 
    8088}; 
     89 
     90ListType.prototype.onSelect = function( editor, combo ) 
     91{ 
     92  var tbobj = editor._toolbarObjects[ combo.id ].element; 
     93  var parent = editor.getParentElement(); 
     94  while (!/^ol$/i.test( parent.tagName )) 
     95    parent = parent.parentNode; 
     96  parent.style.listStyleType = tbobj.value; 
     97}; 
     98 
     99ListType.prototype.updateValue = function( editor, combo ) 
     100{ 
     101  var tbobj = editor._toolbarObjects[ combo.id ].element; 
     102  var parent = editor.getParentElement(); 
     103  while ( parent && !/^ol$/i.test( parent.tagName ) ) 
     104    parent = parent.parentNode; 
     105  if (!parent) 
     106  { 
     107    tbobj.selectedIndex = 0; 
     108    return; 
     109  } 
     110  var type = parent.style.listStyleType; 
     111  if (!type) 
     112  { 
     113    tbobj.selectedIndex = 0; 
     114  } 
     115  else 
     116  { 
     117    for ( var i = tbobj.firstChild; i; i = i.nextSibling ) 
     118    { 
     119      i.selected = (type.indexOf(i.value) != -1); 
     120    } 
     121  } 
     122}; 
     123 
     124ListType.prototype.onUpdateToolbar = function() 
     125{ 
     126  if ( this.editor.config.ListType.mode == 'toolbar' ) return ; 
     127  var courant = this.editor.getParentElement(); 
     128  var parent = courant; 
     129  if ( ( courant.tagName.toLowerCase() == 'li' ) && ( typeof courant.parentNode != 'undefined' ) ) 
     130   parent = courant.parentNode; 
     131  if ( ( parent.tagName.toLowerCase() == 'ul' ) || ( parent.tagName.toLowerCase() == 'ol' ) ) 
     132  { 
     133    this.showPanel( parent ); 
     134  } 
     135  else 
     136  { 
     137    this.editor.hidePanel( this.editor._ListType ); 
     138  } 
     139}; 
     140 
     141ListType.prototype.createImage = function( listStyleType ) 
     142{ 
     143  var self = this; 
     144  var editor = this.editor; 
     145  var a = document.createElement( 'a' ); 
     146  a.href = 'javascript:void(0)'; 
     147  HTMLArea._addClass( a, listStyleType ); 
     148  HTMLArea._addEvent( a, "click", function () 
     149    { 
     150      var parent = editor._ListType.currentListTypeParent; 
     151      parent.style.listStyleType = listStyleType; 
     152      self.showActive( parent ); 
     153      return false; 
     154    } 
     155  ); 
     156  return a; 
     157}; 
     158 
     159ListType.prototype.showActive = function( parent ) 
     160{ 
     161  var activeDiv = document.getElementById( ( parent.tagName.toLowerCase() == 'ul' )? 'LTdivUL':'LTdivOL' ); 
     162  document.getElementById( 'LTdivUL' ).style.display = 'none'; 
     163  document.getElementById( 'LTdivOL' ).style.display = 'none'; 
     164  activeDiv.style.display = 'block'; 
     165  var defaultType = parent.style.listStyleType; 
     166  if ( '' == defaultType ) defaultType = ( parent.tagName.toLowerCase() == 'ul' )? 'disc':'decimal'; 
     167  for ( var i=0; i<activeDiv.childNodes.length; i++ ) 
     168  { 
     169    var elt = activeDiv.childNodes[i]; 
     170    if ( HTMLArea._hasClass( elt, defaultType ) ) 
     171    { 
     172      HTMLArea._addClass( elt, 'active' ); 
     173    } 
     174    else 
     175    { 
     176      HTMLArea._removeClass( elt, 'active' ); 
     177    } 
     178  } 
     179}; 
     180 
     181ListType.prototype.showPanel = function( parent ) 
     182{ 
     183  this.editor._ListType.currentListTypeParent = parent; 
     184  this.showActive(parent); 
     185  this.editor.showPanel( this.editor._ListType ); 
     186}; 
Note: See TracChangeset for help on using the changeset viewer.