Dotclear


Ignore:
Files:
2 added
16 edited

Legend:

Unmodified
Added
Removed
  • admin/categories.php

    r1988 r2125  
    157157 
    158158          echo    
    159           '<p><label class="classic" for="cat_'.$rs->cat_id.'"><a href="category.php?id='.$rs->cat_id.'">'.html::escapeHTML($rs->cat_title).'</a></label> </p>'. 
    160           '<p>(<a href="posts.php?cat_id='.$rs->cat_id.'">'. 
     159          '<p class="cat-title"><label class="classic" for="cat_'.$rs->cat_id.'"><a href="category.php?id='.$rs->cat_id.'">'.html::escapeHTML($rs->cat_title).'</a></label> </p>'. 
     160          '<p class="cat-nb-posts">(<a href="posts.php?cat_id='.$rs->cat_id.'">'. 
    161161          sprintf(($rs->nb_post > 1 ? __('%d entries') : __('%d entry') ),$rs->nb_post).'</a>'. 
    162162          ', '.__('total:').' '.$rs->nb_total.')</p>'. 
    163           '<p><span class="cat-url">'.__('URL:').' <code>'.html::escapeHTML($rs->cat_url).'</code></span></p>'; 
     163          '<p class="cat-url">'.__('URL:').' <code>'.html::escapeHTML($rs->cat_url).'</code></p>'; 
    164164 
    165165          echo 
  • admin/category.php

    r1571 r2117  
    182182'<form action="category.php" method="post" id="category-form">'. 
    183183'<h3>'.__('Category information').'</h3>'. 
    184 '<p><label class="required" for="cat_title"><abbr title="'.__('Required field').'">*</abbr> '.__('Title:').'</label> '. 
     184'<p><label class="required" for="cat_title"><abbr title="'.__('Required field').'">*</abbr> '.__('Name:').'</label> '. 
    185185form::field('cat_title',40,255,html::escapeHTML($cat_title)). 
    186186'</p>'; 
  • admin/index.php

    r2085 r2116  
    288288if (!empty($plugins_install['success'])) 
    289289{ 
    290      echo '<div class="static-msg">'.__('Following plugins have been installed:').'<ul>'; 
     290     echo '<div class="success">'.__('Following plugins have been installed:').'<ul>'; 
    291291     foreach ($plugins_install['success'] as $k => $v) { 
    292292          echo '<li>'.$k.'</li>'; 
     
    332332} 
    333333 
     334# Dashboard elements 
     335echo '<div id="dashboard-main">'; 
     336 
    334337# Dashboard icons 
    335 echo '<div id="dashboard-main"><div id="icons">'; 
     338echo '<div id="icons">'; 
    336339foreach ($__dashboard_icons as $i) 
    337340{ 
     
    403406} 
    404407 
    405 //$class = ' '.(($dashboardItems != '') && ($dashboardContents != '') ? 'two-boxes' : 'one-box'); 
    406  
    407408if ($dashboardContents != '' || $dashboardItems != '') { 
    408409     echo  
    409      //'<hr />'. 
    410      '<div id="dashboard-boxes">'; 
    411           echo  
    412                '<div class="db-items">'. 
    413                     $dashboardItems.$dashboardContents. 
    414                '</div>'; 
    415           //echo ($dashboardContents ? '<div class="db-contents'.$class.'">'.$dashboardContents.'</div>' : ''); 
    416           //echo ($dashboardItems ? '<div class="db-items'.$class.'">'.$dashboardItems.'</div>' : ''); 
    417      echo 
     410     '<div id="dashboard-boxes">'. 
     411     '<div class="db-items">'.$dashboardItems.$dashboardContents.'</div>'. 
    418412     '</div>';       
    419413} 
    420414 
    421 echo '</div>'; 
     415echo '</div>'; #end dashboard-main 
    422416 
    423417dcPage::close(); 
  • admin/js/jquery/jquery.autocomplete.js

    r1035 r2114  
    11/* 
    2  * jQuery Autocomplete plugin 1.1 
     2 * jQuery Autocomplete plugin 1.2.3 
    33 * 
    44 * Copyright (c) 2009 Jörn Zaefferer 
     
    88 *   http://www.gnu.org/licenses/gpl.html 
    99 * 
    10  * Revision: $Id: jquery.autocomplete.js 15 2009-08-22 10:30:27Z joern.zaefferer $ 
     10 * With small modifications by Alfonso Gómez-Arzola. 
     11 * See changelog for details. 
     12 * 
    1113 */ 
    1214 
    1315;(function($) { 
    14       
     16 
    1517$.fn.extend({ 
    1618     autocomplete: function(urlOrData, options) { 
     
    2022               data: isUrl ? null : urlOrData, 
    2123               delay: isUrl ? $.Autocompleter.defaults.delay : 10, 
    22                max: options && !options.scroll ? 10 : 150 
     24               max: options && !options.scroll ? 10 : 150, 
     25               noRecord: "No Records." 
    2326          }, options); 
    24            
     27 
    2528          // if highlight is set to false, replace it with a do-nothing function 
    2629          options.highlight = options.highlight || function(value) { return value; }; 
    27            
     30 
    2831          // if the formatMatch option is not specified, then use formatItem for backwards compatibility 
    2932          options.formatMatch = options.formatMatch || options.formatItem; 
    30            
     33 
    3134          return this.each(function() { 
    3235               new $.Autocompleter(this, options); 
     
    6568     }; 
    6669 
     70     var globalFailure = null; 
     71     if(options.failure != null && typeof options.failure == "function") { 
     72       globalFailure = options.failure; 
     73     } 
     74 
    6775     // Create $ object for input element 
    6876     var $input = $(input).attr("autocomplete", "off").addClass(options.inputClass); 
     
    7785     }; 
    7886     var select = $.Autocompleter.Select(options, input, selectCurrent, config); 
    79       
     87 
    8088     var blockSubmit; 
    81       
     89 
    8290     // prevent form submit in opera when selecting with return key 
    83      $.browser.opera && $(input.form).bind("submit.autocomplete", function() { 
     91  navigator.userAgent.indexOf("Opera") != -1 && $(input.form).bind("submit.autocomplete", function() { 
    8492          if (blockSubmit) { 
    8593               blockSubmit = false; 
     
    8795          } 
    8896     }); 
    89       
    90      // only opera doesn't trigger keydown multiple times while pressed, others don't work with keypress at all 
    91      $input.bind(($.browser.opera ? "keypress" : "keydown") + ".autocomplete", function(event) { 
     97 
     98     // older versions of opera don't trigger keydown multiple times while pressed, others don't work with keypress at all 
     99     $input.bind((navigator.userAgent.indexOf("Opera") != -1 && !'KeyboardEvent' in window ? "keypress" : "keydown") + ".autocomplete", function(event) { 
    92100          // a keypress means the input has focus 
    93101          // avoids issue where input had focus before the autocomplete was applied 
     
    96104          lastKeyPressCode = event.keyCode; 
    97105          switch(event.keyCode) { 
    98            
     106 
    99107               case KEY.UP: 
    100                     event.preventDefault(); 
    101108                    if ( select.visible() ) { 
     109                         event.preventDefault(); 
    102110                         select.prev(); 
    103111                    } else { 
     
    105113                    } 
    106114                    break; 
    107                      
     115 
    108116               case KEY.DOWN: 
    109                     event.preventDefault(); 
    110117                    if ( select.visible() ) { 
     118                         event.preventDefault(); 
    111119                         select.next(); 
    112120                    } else { 
     
    114122                    } 
    115123                    break; 
    116                      
     124 
    117125               case KEY.PAGEUP: 
    118                     event.preventDefault(); 
    119126                    if ( select.visible() ) { 
     127                    event.preventDefault(); 
    120128                         select.pageUp(); 
    121129                    } else { 
     
    123131                    } 
    124132                    break; 
    125                      
     133 
    126134               case KEY.PAGEDOWN: 
    127                     event.preventDefault(); 
    128135                    if ( select.visible() ) { 
     136                    event.preventDefault(); 
    129137                         select.pageDown(); 
    130138                    } else { 
     
    132140                    } 
    133141                    break; 
    134                 
     142 
    135143               // matches also semicolon 
    136144               case options.multiple && $.trim(options.multipleSeparator) == "," && KEY.COMMA: 
     
    144152                    } 
    145153                    break; 
    146                      
     154 
    147155               case KEY.ESC: 
    148156                    select.hide(); 
    149157                    break; 
    150                      
     158 
    151159               default: 
    152160                    clearTimeout(timeout); 
     
    159167          hasFocus++; 
    160168     }).blur(function() { 
    161           hasFocus = 0; 
     169       hasFocus = 0; 
    162170          if (!config.mouseDownOnSelect) { 
    163171               hideResults(); 
     
    165173     }).click(function() { 
    166174          // show select when clicking in a focused field 
    167           if ( hasFocus++ > 1 && !select.visible() ) { 
    168                onChange(0, true); 
     175          // but if clickFire is true, don't require field 
     176          // to be focused to begin with; just show select 
     177          if( options.clickFire ) { 
     178            if ( !select.visible() ) { 
     179               onChange(0, true); 
     180          } 
     181          } else { 
     182            if ( hasFocus++ > 1 && !select.visible() ) { 
     183               onChange(0, true); 
     184          } 
    169185          } 
    170186     }).bind("search", function() { 
     
    190206          cache.flush(); 
    191207     }).bind("setOptions", function() { 
    192           $.extend(options, arguments[1]); 
     208          $.extend(true, options, arguments[1]); 
    193209          // if we've updated the data, repopulate 
    194210          if ( "data" in arguments[1] ) 
     
    199215          $(input.form).unbind(".autocomplete"); 
    200216     }); 
    201       
    202       
     217 
     218 
    203219     function selectCurrent() { 
    204220          var selected = select.selected(); 
    205221          if( !selected ) 
    206222               return false; 
    207            
     223 
    208224          var v = selected.result; 
    209225          previousValue = v; 
    210            
     226 
    211227          if ( options.multiple ) { 
    212228               var words = trimWords($input.val()); 
     
    230246               v += options.multipleSeparator; 
    231247          } 
    232            
     248 
    233249          $input.val(v); 
    234250          hideResultsNow(); 
     
    236252          return true; 
    237253     } 
    238       
     254 
    239255     function onChange(crap, skipPrevCheck) { 
    240256          if( lastKeyPressCode == KEY.DEL ) { 
     
    242258               return; 
    243259          } 
    244            
     260 
    245261          var currentValue = $input.val(); 
    246            
     262 
    247263          if ( !skipPrevCheck && currentValue == previousValue ) 
    248264               return; 
    249            
     265 
    250266          previousValue = currentValue; 
    251            
     267 
    252268          currentValue = lastWord(currentValue); 
    253269          if ( currentValue.length >= options.minChars) { 
     
    261277          } 
    262278     }; 
    263       
     279 
    264280     function trimWords(value) { 
    265281          if (!value) 
     
    271287          }); 
    272288     } 
    273       
     289 
    274290     function lastWord(value) { 
    275291          if ( !options.multiple ) 
    276292               return value; 
    277293          var words = trimWords(value); 
    278           if (words.length == 1)  
     294          if (words.length == 1) 
    279295               return words[0]; 
    280296          var cursorAt = $(input).selection().start; 
     
    286302          return words[words.length - 1]; 
    287303     } 
    288       
     304 
    289305     // fills in the input box w/the first match (assumed to be the best match) 
    290306     // q: the term entered 
     
    347363          var data = cache.load(term); 
    348364          // recieve the cached data 
    349           if (data && data.length) { 
    350                success(term, data); 
     365          if (data) { 
     366               if(data.length)     { 
     367                    success(term, data); 
     368               } 
     369               else{ 
     370                    var parsed = options.parse && options.parse(options.noRecord) || parse(options.noRecord);  
     371                    success(term,parsed); 
     372               } 
    351373          // if an AJAX url has been supplied, try loading the data now 
    352374          } else if( (typeof options.url == "string") && (options.url.length > 0) ){ 
    353                 
     375 
    354376               var extraParams = { 
    355377                    timestamp: +new Date() 
     
    358380                    extraParams[key] = typeof param == "function" ? param() : param; 
    359381               }); 
    360                 
     382 
    361383               $.ajax({ 
    362384                    // try to leverage ajaxQueue plugin to abort previous requests 
     
    379401               // if we have a failure, we need to empty the list -- this prevents the the [TAB] key from selecting the last successful match 
    380402               select.emptyList(); 
    381                failure(term); 
    382           } 
    383      }; 
    384       
     403               if(globalFailure != null) { 
     404        globalFailure(); 
     405      } 
     406      else { 
     407        failure(term); 
     408               } 
     409          } 
     410     }; 
     411 
    385412     function parse(data) { 
    386413          var parsed = []; 
     
    415442     matchSubset: true, 
    416443     matchContains: false, 
    417      cacheLength: 10, 
    418      max: 100, 
     444     cacheLength: 100, 
     445     max: 1000, 
    419446     mustMatch: false, 
    420447     extraParams: {}, 
     
    425452     width: 0, 
    426453     multiple: false, 
    427      multipleSeparator: ", ", 
     454     multipleSeparator: " ", 
     455     inputFocus: true, 
     456     clickFire: false, 
    428457     highlight: function(value, term) { 
    429458          return value.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + term.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi, "\\$1") + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "<strong>$1</strong>"); 
    430459     }, 
    431460    scroll: true, 
    432     scrollHeight: 180 
     461    scrollHeight: 180, 
     462    scrollJumpPosition: true 
    433463}; 
    434464 
     
    437467     var data = {}; 
    438468     var length = 0; 
    439       
     469 
    440470     function matchSubset(s, sub) { 
    441           if (!options.matchCase)  
     471          if (!options.matchCase) 
    442472               s = s.toLowerCase(); 
    443473          var i = s.indexOf(sub); 
     
    448478          return i == 0 || options.matchContains; 
    449479     }; 
    450       
     480 
    451481     function add(q, value) { 
    452482          if (length > options.cacheLength){ 
    453483               flush(); 
    454484          } 
    455           if (!data[q]){  
     485          if (!data[q]){ 
    456486               length++; 
    457487          } 
    458488          data[q] = value; 
    459489     } 
    460       
     490 
    461491     function populate(){ 
    462492          if( !options.data ) return false; 
     
    467497          // no url was specified, we need to adjust the cache length to make sure it fits the local data store 
    468498          if( !options.url ) options.cacheLength = 1; 
    469            
     499 
    470500          // track all options for minChars = 0 
    471501          stMatchSets[""] = []; 
    472            
     502 
    473503          // loop through the array and create a lookup structure 
    474504          for ( var i = 0, ol = options.data.length; i < ol; i++ ) { 
     
    476506               // if rawValue is a string, make an array otherwise just reference the array 
    477507               rawValue = (typeof rawValue == "string") ? [rawValue] : rawValue; 
    478                 
     508 
    479509               var value = options.formatMatch(rawValue, i+1, options.data.length); 
    480                if ( value === false ) 
     510               if ( typeof(value) === 'undefined' || value === false ) 
    481511                    continue; 
    482                      
     512 
    483513               var firstChar = value.charAt(0).toLowerCase(); 
    484514               // if no lookup array for this character exists, look it up now 
    485                if( !stMatchSets[firstChar] )  
     515               if( !stMatchSets[firstChar] ) 
    486516                    stMatchSets[firstChar] = []; 
    487517 
     
    492522                    result: options.formatResult && options.formatResult(rawValue) || value 
    493523               }; 
    494                 
     524 
    495525               // push the current match into the set list 
    496526               stMatchSets[firstChar].push(row); 
     
    510540          }); 
    511541     } 
    512       
     542 
    513543     // populate any existing data 
    514544     setTimeout(populate, 25); 
    515       
     545 
    516546     function flush(){ 
    517547          data = {}; 
    518548          length = 0; 
    519549     } 
    520       
     550 
    521551     return { 
    522552          flush: flush, 
     
    526556               if (!options.cacheLength || !length) 
    527557                    return null; 
    528                /*  
     558               /* 
    529559                * if dealing w/local data and matchContains than we must make sure 
    530560                * to loop through all the data collections looking for matches 
     
    546576                              }); 
    547577                         } 
    548                     }                    
     578                    } 
    549579                    return csub; 
    550                } else  
     580               } else 
    551581               // if the exact item exists, use it 
    552582               if (data[q]){ 
     
    576606          ACTIVE: "ac_over" 
    577607     }; 
    578       
     608 
    579609     var listItems, 
    580610          active = -1, 
     
    584614          element, 
    585615          list; 
    586       
     616 
    587617     // Create results 
    588618     function init() { 
     
    593623          .addClass(options.resultsClass) 
    594624          .css("position", "absolute") 
    595           .appendTo(document.body); 
    596       
     625          .appendTo(document.body) 
     626          .hover(function(event) { 
     627            // Browsers except FF do not fire mouseup event on scrollbars, resulting in mouseDownOnSelect remaining true, and results list not always hiding. 
     628            if($(this).is(":visible")) { 
     629              input.focus(); 
     630            } 
     631            config.mouseDownOnSelect = false; 
     632          }); 
     633 
    597634          list = $("<ul/>").appendTo(element).mouseover( function(event) { 
    598635               if(target(event).nodeName && target(event).nodeName.toUpperCase() == 'LI') { 
    599636                 active = $("li", list).removeClass(CLASSES.ACTIVE).index(target(event)); 
    600                    $(target(event)).addClass(CLASSES.ACTIVE);             
     637                   $(target(event)).addClass(CLASSES.ACTIVE); 
    601638             } 
    602639          }).click(function(event) { 
    603640               $(target(event)).addClass(CLASSES.ACTIVE); 
    604641               select(); 
    605                // TODO provide option to avoid setting focus again after selection? useful for cleanup-on-focus 
    606                input.focus(); 
     642               if( options.inputFocus ) 
     643                 input.focus(); 
    607644               return false; 
    608645          }).mousedown(function() { 
     
    611648               config.mouseDownOnSelect = false; 
    612649          }); 
    613            
     650 
    614651          if( options.width > 0 ) 
    615652               element.css("width", options.width); 
    616                 
     653 
    617654          needsInit = false; 
    618      }  
    619       
     655     } 
     656 
    620657     function target(event) { 
    621658          var element = event.target; 
     
    644681        } 
    645682     }; 
    646       
     683 
    647684     function movePosition(step) { 
    648           active += step; 
    649           if (active < 0) { 
    650                active = listItems.size() - 1; 
    651           } else if (active >= listItems.size()) { 
    652                active = 0; 
    653           } 
    654      } 
    655       
     685          if (options.scrollJumpPosition || (!options.scrollJumpPosition && !((step < 0 && active == 0) || (step > 0 && active == listItems.size() - 1)) )) { 
     686               active += step; 
     687               if (active < 0) { 
     688                    active = listItems.size() - 1; 
     689               } else if (active >= listItems.size()) { 
     690                    active = 0; 
     691               } 
     692          } 
     693     } 
     694 
     695 
    656696     function limitNumberOfItems(available) { 
    657697          return options.max && options.max < available 
     
    659699               : available; 
    660700     } 
    661       
     701 
    662702     function fillList() { 
    663703          list.empty(); 
     
    681721               list.bgiframe(); 
    682722     } 
    683       
     723 
    684724     return { 
    685725          display: function(d, q) { 
     
    733773                         overflow: 'auto' 
    734774                    }); 
    735                      
    736                 if($.browser.msie && typeof document.body.style.maxHeight === "undefined") { 
     775 
     776                if(navigator.userAgent.indexOf("MSIE") != -1 && typeof document.body.style.maxHeight === "undefined") { 
    737777                         var listHeight = 0; 
    738778                         listItems.each(function() { 
     
    746786                         } 
    747787                } 
    748                  
     788 
    749789            } 
    750790          }, 
  • admin/style/default.css

    r2134 r2138  
    12181218     } 
    12191219th.first img { 
    1220      padding-right: 24px; 
     1220     padding-right: 34px; 
    12211221     } 
    12221222tr.line img.expand, th img.expand { 
     
    13701370     box-sizing: border-box;  
    13711371     } 
    1372      #login-screen input.login { 
     1372     #login-screen input.login, #login-screen input.login:focus { 
    13731373          padding-top: 6px; 
    13741374          padding-bottom: 6px; 
     
    14951495          .db-items li, .db-contents li { 
    14961496               margin: 0.25em 0 0 0; 
    1497                color: #676e78; 
    14981497               } 
    14991498     #news dt { 
     
    16771676          padding: .66em 1em; 
    16781677          border: 1px solid #bbb; 
    1679           border-left: 6px solid #bbb; 
    16801678          border-radius: 3px; 
    16811679          } 
     1680          .cat-line label { 
     1681               margin-right: .25em; 
     1682               } 
    16821683          .cat-line label a { 
    16831684               font-weight: bold; 
     
    16861687               margin: 0; 
    16871688               display: inline-block; 
     1689               } 
     1690          p.cat-title { 
     1691               margin-right: 1em; 
     1692               } 
     1693          .cat-nb-posts a { 
     1694               color: #333; 
    16881695               } 
    16891696          .cat-url { 
     
    17031710     margin-right: .25em; 
    17041711     } 
    1705 .cat-line label { 
    1706      margin-right: .25em; 
    1707      } 
    17081712.cat-buttons .reset { 
    17091713     padding-left: 4px; 
     
    17161720.cat-line .cat-line { 
    17171721     border: 1px solid #dfdfdf; 
    1718      border-left-width: 3px; 
    1719      } 
    1720 #categories h4 { 
    1721      margin: 0; 
    1722      } 
    1723      #categories h4 span { 
    1724           font-weight: normal; 
    1725           } 
     1722     } 
    17261723.cat-actions { 
    17271724     line-height: 2; 
     
    19811978     float: left; 
    19821979     width: 100%; 
    1983      margin-right: -18em; 
     1980     margin-right: -16em; 
    19841981     } 
    19851982#entry-content { 
    1986      margin-right: 20em; 
     1983     margin-right: 18em; 
    19871984     margin-left: 0; 
    19881985     } 
     
    19971994          } 
    19981995#entry-sidebar { 
    1999      width: 18em; 
     1996     width: 16em; 
    20001997     float: right; 
    20011998     } 
     1999     #entry-sidebar h4 { 
     2000          font-size: 13px; 
     2001          font-size: 1.3rem; 
     2002          margin-top: .3em; 
     2003          } 
    20022004     #entry-sidebar select { 
    20032005          width: 100%; 
     
    25672569 .colorEndValidatorMsg { 
    25682570     color: #ffcc00; 
    2569      }     
     2571     } 
  • inc/admin/lib.pager.php

    r2135 r2138  
    185185               '<th scope="col">'.__('Category').'</th>'. 
    186186               '<th scope="col">'.__('Author').'</th>'. 
    187                '<th scope="col">'.__('Comments').'</th>'. 
    188                '<th scope="col">'.__('Trackbacks').'</th>'. 
     187               '<th scope="col"><img src="images/comments.png" alt="" title="'.__('Comments').'" /><span class="hidden">'.__('Comments').'</span></th>'. 
     188               '<th scope="col"><img src="images/trackbacks.png" alt="" title="'.__('Trackbacks').'" /><span class="hidden">'.__('Trackbacks').'</span></th>'. 
    189189               '<th scope="col">'.__('Status').'</th>'. 
    190190               '</tr>%s</table></div>'; 
  • locales/fr/help/core_category.html

    r1921 r2118  
    77<h4>Créer une nouvelle catégorie</h4> 
    88<dl> 
    9   <dt>Titre</dt> 
     9  <dt>Nom</dt> 
    1010  <dd>Choisissez le nom que vous souhaitez donner à votre nouvelle catégorie. 
    1111  Ce champ est obligatoire.</dd> 
     
    2929</dl> 
    3030 
    31 <h4>Modifier une catégorie</h4> 
    32 <dl> 
    33   <dt>Titre</dt> 
    34   <dd>Choisissez le nom que vous souhaitez donner à votre nouvelle catégorie 
    35   puis cliquer sur Enregistrer pour valider sa création.</dd> 
    36  
    37   <dt>URL</dt> 
    38   <dd>DotClear crée une url par défaut de la catégorie, qui sera ainsi 
    39   accessible avec un chemin de la forme 
    40   <strong>http://monblog.tld/category/Ma-categorie</strong>. En cliquant sur le 
    41   petit verrou situé à la droite, vous pouvez la modifier comme il vous 
    42   plaira.<br /> 
    43   <strong>Attention&nbsp;: si vous indiquez l'URL manuellement, celle-ci peut 
    44   entrer en conflit avec une autre catégorie.</strong></dd> 
    45  
    46   <dt>Description</dt> 
    47   <dd>Le contenu de ce champ de description sera affiché lors de la sélection 
    48   d'une catégorie dans le blog. Vous pouvez le remplir avec toute forme de 
    49   contenu (paragraphes, listes, etc.) Le format du texte de la description est 
    50   HTML.</dd> 
    51  
    52 <h4>Déplacer une catégorie</h4> 
     31<h4>Placer ou déplacer une catégorie</h4> 
    5332<dl> 
    5433  <dt>Catégorie parente</dt> 
    5534  <dd>Il est possible de créer des sous-catégories. Dans ce cas, il faut choisir 
    56   la catégorie parente dans le champs Parent.</dd> 
     35  la catégorie parente dans le champ Parent.</dd> 
    5736 
    5837  <dt>Catégorie voisine</dt> 
  • locales/fr/help/index.html

    r2112 r2116  
    164164          <div class="three-boxes first-child"> 
    165165               <h4 class="pretty-title">Design &amp; Thèmes</h4> 
    166                <ul> 
     166               <ul class="from-left"> 
    167167                    <li><a href="/documentation/2.0/resources/themes">Thèmes</a> 
    168168                         <ul><li>Guide d&#039;utilisation des thèmes</li><li>Les balises template</li><li>Annexes</a></li></ul></li> 
     
    176176          <div class="three-boxes first-child"> 
    177177               <h4 class="pretty-title">Code &amp; Plugins</h4> 
    178                <ul> 
     178               <ul class="from-left"> 
    179179                    <li><a href="/documentation/2.0/resources/tpl">Création d’une balise tpl pour un plugin ou un thème</a> 
    180180                         <ul><li>Introduction</li><li>Les valeurs</li><li>Les blocs d’instruction</li><li>Démonstration de l&#039;influence du cache des templates</li></ul></li> 
     
    191191          <div class="three-boxes"> 
    192192               <h4 class="pretty-title">Contribution &amp; Support</h4> 
    193                <ul> 
     193               <ul class="from-left"> 
    194194                    <li><a href="/documentation/2.0/resources/contribute">Contribuer</a> 
    195195                         <ul><li>Améliorer la documentation</li><li>Où envoyer vos œuvres?</li><li>Rapporter les bugs ou proposer une amélioration</li><li>Suggestions</li><li>Traduction</li></ul></li> 
  • locales/fr/plugins.po

    r2081 r2126  
    22352235 
    22362236msgid "To rearrange pages order, move items by drag and drop, then click on “Save pages order” button." 
    2237 msgstr "Pour réordonner les pages, déplacez les items par glisser déposer puis cliquez sur “Enregistrer l'ordre des pages”."" 
     2237msgstr "Pour réordonner les pages, déplacez les items par glisser déposer puis cliquez sur “Enregistrer l'ordre des pages”." 
     2238 
     2239msgid "To rearrange pages order, change number at the begining of the line, then click on “Save pages order” button." 
     2240msgstr "Pour réordonner les pages, modifier le numéro dans le champ au début de la ligne puis cliquez sur “Enregistrer l'ordre des pages”." 
     2241 
     2242msgid "Step #1" 
     2243msgstr "Étape 1" 
     2244 
     2245msgid "Step #2" 
     2246msgstr "Étape 2" 
     2247 
     2248msgid "Step #3" 
     2249msgstr "Étape 3" 
     2250 
     2251msgid "Back to filters list" 
     2252msgstr "Retour à la liste des filtres" 
  • plugins/antispam/index.php

    r2002 r2122  
    130130          )); 
    131131 
     132     echo '<p><a href="plugin.php?p=antispam" class="back">'.__('Back to filters list').'</a></p>'; 
     133 
    132134     echo $filter_gui; 
    133135} 
  • plugins/blogroll/index.php

    r2002 r2115  
    207207?> 
    208208 
    209 <div class="multi-part" title="<?php echo __('Blogroll'); ?>"> 
     209<div class="multi-part" id="links-list" title="<?php echo __('Blogroll'); ?>"> 
    210210 
    211211<?php if (!$rs->isEmpty()) { ?> 
  • plugins/maintenance/_admin.php

    r2087 r2116  
    171171               '<div id="maintenance-expired" class="box small">'. 
    172172               '<h3><img src="index.php?pf=maintenance/icon-small.png" alt="" /> '.__('Maintenance').'</h3>'. 
    173                '<p class="warn">'.sprintf(__('There is a task to execute.', 'There are %s tasks to execute.', count($lines)), count($lines)).'</p>'. 
     173               '<p class="warning no-margin">'.sprintf(__('There is a task to execute.', 'There are %s tasks to execute.', count($lines)), count($lines)).'</p>'. 
    174174               '<ul>'.implode('',$lines).'</ul>'. 
    175175               '<p><a href="plugin.php?p=maintenance">'.__('Manage tasks').'</a></p>'. 
  • plugins/pages/class.listpage.php

    r2055 r2127  
    3333               '<div class="table-outer">'. 
    3434               '<table class="maximal dragable"><thead><tr>'. 
    35                '<th colspan="3">'.__('Title').'</th>'. 
    36                '<th>'.__('Date').'</th>'. 
    37                '<th>'.__('Author').'</th>'. 
    38                '<th>'.__('Comments').'</th>'. 
    39                '<th>'.__('Trackbacks').'</th>'. 
    40                '<th>'.__('Status').'</th>'. 
     35               '<th colspan="3" scope="col" class="first">'.__('Title').'</th>'. 
     36               '<th scope="col">'.__('Date').'</th>'. 
     37               '<th scope="col">'.__('Author').'</th>'. 
     38               '<th scope="col"><img src="images/comments.png" alt="" title="'.__('Comments').'" /><span class="hidden">'.__('Comments').'</span></th>'. 
     39               '<th scope="col"><img src="images/trackbacks.png" alt="" title="'.__('Trackbacks').'" /><span class="hidden">'.__('Trackbacks').'</span></th>'. 
     40               '<th scope="col">'.__('Status').'</th>'. 
    4141               '</tr></thead><tbody id="pageslist">%s</tbody></table></div>'; 
    4242                
     
    106106          '<td class="nowrap">'. 
    107107          form::checkbox(array('entries[]'),$this->rs->post_id,$checked,'','',!$this->rs->isEditable(),'title="'.__('Select this page').'"').'</td>'. 
    108           '<td class="maximal"><a href="'.$this->core->getPostAdminURL($this->rs->post_type,$this->rs->post_id).'">'. 
     108          '<td class="maximal" scope="row"><a href="'.$this->core->getPostAdminURL($this->rs->post_type,$this->rs->post_id).'">'. 
    109109          html::escapeHTML($this->rs->post_title).'</a></td>'. 
    110           '<td class="nowrap">'.dt::dt2str(__('%Y-%m-%d %H:%M'),$this->rs->post_dt).'</td>'. 
    111            
     110          '<td class="nowrap">'.dt::dt2str(__('%Y-%m-%d %H:%M'),$this->rs->post_dt).'</td>'.         
    112111          '<td class="nowrap">'.$this->rs->user_id.'</td>'. 
    113           '<td class="nowrap">'.$this->rs->nb_comment.'</td>'. 
    114           '<td class="nowrap">'.$this->rs->nb_trackback.'</td>'. 
     112          '<td class="nowrap count">'.$this->rs->nb_comment.'</td>'. 
     113          '<td class="nowrap count">'.$this->rs->nb_trackback.'</td>'. 
    115114          '<td class="nowrap status">'.$img_status.' '.$selected.' '.$protected.' '.$attach.'</td>'. 
    116115          '</tr>'; 
  • plugins/simpleMenu/index.php

    r2078 r2120  
    353353 
    354354if ($step) { 
     355     switch ($step) { 
     356          case 1: 
     357               $step_label = __('Step #1'); 
     358               break; 
     359          case 2: 
     360               if ($items[$item_type][1]) { 
     361                    $step_label = __('Step #2'); 
     362                    break; 
     363               } 
     364          case 3: 
     365               if ($items[$item_type][1]) { 
     366                    $step_label = __('Step #3'); 
     367               } else { 
     368                    $step_label = __('Step #2'); 
     369               } 
     370               break; 
     371     } 
    355372     echo dcPage::breadcrumb( 
    356373          array( 
    357374               html::escapeHTML($core->blog->name) => '', 
    358375               $page_title => $p_url, 
    359                '<span class="page-title">'.__('Add item').'</span>' => '' 
     376               '<span class="page-title">'.__('Add item').'</span>' => '', 
     377               $step_label => '' 
    360378          )); 
    361379} else { 
  • plugins/tags/js/jquery.autocomplete.js

    r738 r2114  
    11/* 
    2  * jQuery Autocomplete plugin 1.1 
     2 * jQuery Autocomplete plugin 1.2.3 
    33 * 
    44 * Copyright (c) 2009 Jörn Zaefferer 
     
    88 *   http://www.gnu.org/licenses/gpl.html 
    99 * 
    10  * Revision: $Id: jquery.autocomplete.js 15 2009-08-22 10:30:27Z joern.zaefferer $ 
     10 * With small modifications by Alfonso Gómez-Arzola. 
     11 * See changelog for details. 
     12 * 
    1113 */ 
    1214 
    1315;(function($) { 
    14       
     16 
    1517$.fn.extend({ 
    1618     autocomplete: function(urlOrData, options) { 
     
    2022               data: isUrl ? null : urlOrData, 
    2123               delay: isUrl ? $.Autocompleter.defaults.delay : 10, 
    22                max: options && !options.scroll ? 10 : 150 
     24               max: options && !options.scroll ? 10 : 150, 
     25               noRecord: "No Records." 
    2326          }, options); 
    24            
     27 
    2528          // if highlight is set to false, replace it with a do-nothing function 
    2629          options.highlight = options.highlight || function(value) { return value; }; 
    27            
     30 
    2831          // if the formatMatch option is not specified, then use formatItem for backwards compatibility 
    2932          options.formatMatch = options.formatMatch || options.formatItem; 
    30            
     33 
    3134          return this.each(function() { 
    3235               new $.Autocompleter(this, options); 
     
    6568     }; 
    6669 
     70     var globalFailure = null; 
     71     if(options.failure != null && typeof options.failure == "function") { 
     72       globalFailure = options.failure; 
     73     } 
     74 
    6775     // Create $ object for input element 
    6876     var $input = $(input).attr("autocomplete", "off").addClass(options.inputClass); 
     
    7785     }; 
    7886     var select = $.Autocompleter.Select(options, input, selectCurrent, config); 
    79       
     87 
    8088     var blockSubmit; 
    81       
     89 
    8290     // prevent form submit in opera when selecting with return key 
    83      $.browser.opera && $(input.form).bind("submit.autocomplete", function() { 
     91  navigator.userAgent.indexOf("Opera") != -1 && $(input.form).bind("submit.autocomplete", function() { 
    8492          if (blockSubmit) { 
    8593               blockSubmit = false; 
     
    8795          } 
    8896     }); 
    89       
    90      // only opera doesn't trigger keydown multiple times while pressed, others don't work with keypress at all 
    91      $input.bind(($.browser.opera ? "keypress" : "keydown") + ".autocomplete", function(event) { 
     97 
     98     // older versions of opera don't trigger keydown multiple times while pressed, others don't work with keypress at all 
     99     $input.bind((navigator.userAgent.indexOf("Opera") != -1 && !'KeyboardEvent' in window ? "keypress" : "keydown") + ".autocomplete", function(event) { 
    92100          // a keypress means the input has focus 
    93101          // avoids issue where input had focus before the autocomplete was applied 
     
    96104          lastKeyPressCode = event.keyCode; 
    97105          switch(event.keyCode) { 
    98            
     106 
    99107               case KEY.UP: 
    100                     event.preventDefault(); 
    101108                    if ( select.visible() ) { 
     109                         event.preventDefault(); 
    102110                         select.prev(); 
    103111                    } else { 
     
    105113                    } 
    106114                    break; 
    107                      
     115 
    108116               case KEY.DOWN: 
    109                     event.preventDefault(); 
    110117                    if ( select.visible() ) { 
     118                         event.preventDefault(); 
    111119                         select.next(); 
    112120                    } else { 
     
    114122                    } 
    115123                    break; 
    116                      
     124 
    117125               case KEY.PAGEUP: 
    118                     event.preventDefault(); 
    119126                    if ( select.visible() ) { 
     127                    event.preventDefault(); 
    120128                         select.pageUp(); 
    121129                    } else { 
     
    123131                    } 
    124132                    break; 
    125                      
     133 
    126134               case KEY.PAGEDOWN: 
    127                     event.preventDefault(); 
    128135                    if ( select.visible() ) { 
     136                    event.preventDefault(); 
    129137                         select.pageDown(); 
    130138                    } else { 
     
    132140                    } 
    133141                    break; 
    134                 
     142 
    135143               // matches also semicolon 
    136144               case options.multiple && $.trim(options.multipleSeparator) == "," && KEY.COMMA: 
     
    144152                    } 
    145153                    break; 
    146                      
     154 
    147155               case KEY.ESC: 
    148156                    select.hide(); 
    149157                    break; 
    150                      
     158 
    151159               default: 
    152160                    clearTimeout(timeout); 
     
    159167          hasFocus++; 
    160168     }).blur(function() { 
    161           hasFocus = 0; 
     169       hasFocus = 0; 
    162170          if (!config.mouseDownOnSelect) { 
    163171               hideResults(); 
     
    165173     }).click(function() { 
    166174          // show select when clicking in a focused field 
    167           if ( hasFocus++ > 1 && !select.visible() ) { 
    168                onChange(0, true); 
     175          // but if clickFire is true, don't require field 
     176          // to be focused to begin with; just show select 
     177          if( options.clickFire ) { 
     178            if ( !select.visible() ) { 
     179               onChange(0, true); 
     180          } 
     181          } else { 
     182            if ( hasFocus++ > 1 && !select.visible() ) { 
     183               onChange(0, true); 
     184          } 
    169185          } 
    170186     }).bind("search", function() { 
     
    190206          cache.flush(); 
    191207     }).bind("setOptions", function() { 
    192           $.extend(options, arguments[1]); 
     208          $.extend(true, options, arguments[1]); 
    193209          // if we've updated the data, repopulate 
    194210          if ( "data" in arguments[1] ) 
     
    199215          $(input.form).unbind(".autocomplete"); 
    200216     }); 
    201       
    202       
     217 
     218 
    203219     function selectCurrent() { 
    204220          var selected = select.selected(); 
    205221          if( !selected ) 
    206222               return false; 
    207            
     223 
    208224          var v = selected.result; 
    209225          previousValue = v; 
    210            
     226 
    211227          if ( options.multiple ) { 
    212228               var words = trimWords($input.val()); 
     
    230246               v += options.multipleSeparator; 
    231247          } 
    232            
     248 
    233249          $input.val(v); 
    234250          hideResultsNow(); 
     
    236252          return true; 
    237253     } 
    238       
     254 
    239255     function onChange(crap, skipPrevCheck) { 
    240256          if( lastKeyPressCode == KEY.DEL ) { 
     
    242258               return; 
    243259          } 
    244            
     260 
    245261          var currentValue = $input.val(); 
    246            
     262 
    247263          if ( !skipPrevCheck && currentValue == previousValue ) 
    248264               return; 
    249            
     265 
    250266          previousValue = currentValue; 
    251            
     267 
    252268          currentValue = lastWord(currentValue); 
    253269          if ( currentValue.length >= options.minChars) { 
     
    261277          } 
    262278     }; 
    263       
     279 
    264280     function trimWords(value) { 
    265281          if (!value) 
     
    271287          }); 
    272288     } 
    273       
     289 
    274290     function lastWord(value) { 
    275291          if ( !options.multiple ) 
    276292               return value; 
    277293          var words = trimWords(value); 
    278           if (words.length == 1)  
     294          if (words.length == 1) 
    279295               return words[0]; 
    280296          var cursorAt = $(input).selection().start; 
     
    286302          return words[words.length - 1]; 
    287303     } 
    288       
     304 
    289305     // fills in the input box w/the first match (assumed to be the best match) 
    290306     // q: the term entered 
     
    347363          var data = cache.load(term); 
    348364          // recieve the cached data 
    349           if (data && data.length) { 
    350                success(term, data); 
     365          if (data) { 
     366               if(data.length)     { 
     367                    success(term, data); 
     368               } 
     369               else{ 
     370                    var parsed = options.parse && options.parse(options.noRecord) || parse(options.noRecord);  
     371                    success(term,parsed); 
     372               } 
    351373          // if an AJAX url has been supplied, try loading the data now 
    352374          } else if( (typeof options.url == "string") && (options.url.length > 0) ){ 
    353                 
     375 
    354376               var extraParams = { 
    355377                    timestamp: +new Date() 
     
    358380                    extraParams[key] = typeof param == "function" ? param() : param; 
    359381               }); 
    360                 
     382 
    361383               $.ajax({ 
    362384                    // try to leverage ajaxQueue plugin to abort previous requests 
     
    379401               // if we have a failure, we need to empty the list -- this prevents the the [TAB] key from selecting the last successful match 
    380402               select.emptyList(); 
    381                failure(term); 
    382           } 
    383      }; 
    384       
     403               if(globalFailure != null) { 
     404        globalFailure(); 
     405      } 
     406      else { 
     407        failure(term); 
     408               } 
     409          } 
     410     }; 
     411 
    385412     function parse(data) { 
    386413          var parsed = []; 
     
    415442     matchSubset: true, 
    416443     matchContains: false, 
    417      cacheLength: 10, 
    418      max: 100, 
     444     cacheLength: 100, 
     445     max: 1000, 
    419446     mustMatch: false, 
    420447     extraParams: {}, 
     
    425452     width: 0, 
    426453     multiple: false, 
    427      multipleSeparator: ", ", 
     454     multipleSeparator: " ", 
     455     inputFocus: true, 
     456     clickFire: false, 
    428457     highlight: function(value, term) { 
    429458          return value.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + term.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi, "\\$1") + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "<strong>$1</strong>"); 
    430459     }, 
    431460    scroll: true, 
    432     scrollHeight: 180 
     461    scrollHeight: 180, 
     462    scrollJumpPosition: true 
    433463}; 
    434464 
     
    437467     var data = {}; 
    438468     var length = 0; 
    439       
     469 
    440470     function matchSubset(s, sub) { 
    441           if (!options.matchCase)  
     471          if (!options.matchCase) 
    442472               s = s.toLowerCase(); 
    443473          var i = s.indexOf(sub); 
     
    448478          return i == 0 || options.matchContains; 
    449479     }; 
    450       
     480 
    451481     function add(q, value) { 
    452482          if (length > options.cacheLength){ 
    453483               flush(); 
    454484          } 
    455           if (!data[q]){  
     485          if (!data[q]){ 
    456486               length++; 
    457487          } 
    458488          data[q] = value; 
    459489     } 
    460       
     490 
    461491     function populate(){ 
    462492          if( !options.data ) return false; 
     
    467497          // no url was specified, we need to adjust the cache length to make sure it fits the local data store 
    468498          if( !options.url ) options.cacheLength = 1; 
    469            
     499 
    470500          // track all options for minChars = 0 
    471501          stMatchSets[""] = []; 
    472            
     502 
    473503          // loop through the array and create a lookup structure 
    474504          for ( var i = 0, ol = options.data.length; i < ol; i++ ) { 
     
    476506               // if rawValue is a string, make an array otherwise just reference the array 
    477507               rawValue = (typeof rawValue == "string") ? [rawValue] : rawValue; 
    478                 
     508 
    479509               var value = options.formatMatch(rawValue, i+1, options.data.length); 
    480                if ( value === false ) 
     510               if ( typeof(value) === 'undefined' || value === false ) 
    481511                    continue; 
    482                      
     512 
    483513               var firstChar = value.charAt(0).toLowerCase(); 
    484514               // if no lookup array for this character exists, look it up now 
    485                if( !stMatchSets[firstChar] )  
     515               if( !stMatchSets[firstChar] ) 
    486516                    stMatchSets[firstChar] = []; 
    487517 
     
    492522                    result: options.formatResult && options.formatResult(rawValue) || value 
    493523               }; 
    494                 
     524 
    495525               // push the current match into the set list 
    496526               stMatchSets[firstChar].push(row); 
     
    510540          }); 
    511541     } 
    512       
     542 
    513543     // populate any existing data 
    514544     setTimeout(populate, 25); 
    515       
     545 
    516546     function flush(){ 
    517547          data = {}; 
    518548          length = 0; 
    519549     } 
    520       
     550 
    521551     return { 
    522552          flush: flush, 
     
    526556               if (!options.cacheLength || !length) 
    527557                    return null; 
    528                /*  
     558               /* 
    529559                * if dealing w/local data and matchContains than we must make sure 
    530560                * to loop through all the data collections looking for matches 
     
    546576                              }); 
    547577                         } 
    548                     }                    
     578                    } 
    549579                    return csub; 
    550                } else  
     580               } else 
    551581               // if the exact item exists, use it 
    552582               if (data[q]){ 
     
    576606          ACTIVE: "ac_over" 
    577607     }; 
    578       
     608 
    579609     var listItems, 
    580610          active = -1, 
     
    584614          element, 
    585615          list; 
    586       
     616 
    587617     // Create results 
    588618     function init() { 
     
    593623          .addClass(options.resultsClass) 
    594624          .css("position", "absolute") 
    595           .appendTo(document.body); 
    596       
     625          .appendTo(document.body) 
     626          .hover(function(event) { 
     627            // Browsers except FF do not fire mouseup event on scrollbars, resulting in mouseDownOnSelect remaining true, and results list not always hiding. 
     628            if($(this).is(":visible")) { 
     629              input.focus(); 
     630            } 
     631            config.mouseDownOnSelect = false; 
     632          }); 
     633 
    597634          list = $("<ul/>").appendTo(element).mouseover( function(event) { 
    598635               if(target(event).nodeName && target(event).nodeName.toUpperCase() == 'LI') { 
    599636                 active = $("li", list).removeClass(CLASSES.ACTIVE).index(target(event)); 
    600                    $(target(event)).addClass(CLASSES.ACTIVE);             
     637                   $(target(event)).addClass(CLASSES.ACTIVE); 
    601638             } 
    602639          }).click(function(event) { 
    603640               $(target(event)).addClass(CLASSES.ACTIVE); 
    604641               select(); 
    605                // TODO provide option to avoid setting focus again after selection? useful for cleanup-on-focus 
    606                input.focus(); 
     642               if( options.inputFocus ) 
     643                 input.focus(); 
    607644               return false; 
    608645          }).mousedown(function() { 
     
    611648               config.mouseDownOnSelect = false; 
    612649          }); 
    613            
     650 
    614651          if( options.width > 0 ) 
    615652               element.css("width", options.width); 
    616                 
     653 
    617654          needsInit = false; 
    618      }  
    619       
     655     } 
     656 
    620657     function target(event) { 
    621658          var element = event.target; 
     
    644681        } 
    645682     }; 
    646       
     683 
    647684     function movePosition(step) { 
    648           active += step; 
    649           if (active < 0) { 
    650                active = listItems.size() - 1; 
    651           } else if (active >= listItems.size()) { 
    652                active = 0; 
    653           } 
    654      } 
    655       
     685          if (options.scrollJumpPosition || (!options.scrollJumpPosition && !((step < 0 && active == 0) || (step > 0 && active == listItems.size() - 1)) )) { 
     686               active += step; 
     687               if (active < 0) { 
     688                    active = listItems.size() - 1; 
     689               } else if (active >= listItems.size()) { 
     690                    active = 0; 
     691               } 
     692          } 
     693     } 
     694 
     695 
    656696     function limitNumberOfItems(available) { 
    657697          return options.max && options.max < available 
     
    659699               : available; 
    660700     } 
    661       
     701 
    662702     function fillList() { 
    663703          list.empty(); 
     
    681721               list.bgiframe(); 
    682722     } 
    683       
     723 
    684724     return { 
    685725          display: function(d, q) { 
     
    733773                         overflow: 'auto' 
    734774                    }); 
    735                      
    736                 if($.browser.msie && typeof document.body.style.maxHeight === "undefined") { 
     775 
     776                if(navigator.userAgent.indexOf("MSIE") != -1 && typeof document.body.style.maxHeight === "undefined") { 
    737777                         var listHeight = 0; 
    738778                         listItems.each(function() { 
     
    746786                         } 
    747787                } 
    748                  
     788 
    749789            } 
    750790          }, 
  • plugins/themeEditor/codemirror.css

    r948 r2124  
    11.CodeMirror { 
    2      font-size: 1.4em; 
     2     font-size: 1.2em; 
    33     background: #fff; 
    44} 
Note: See TracChangeset for help on using the changeset viewer.

Sites map