Changes in [2137:bb5fa2846e7d:2138:73902254112c]
- Files:
-
- 2 added
- 16 edited
Legend:
- Unmodified
- Added
- Removed
-
admin/categories.php
r1988 r2125 157 157 158 158 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.'">'. 161 161 sprintf(($rs->nb_post > 1 ? __('%d entries') : __('%d entry') ),$rs->nb_post).'</a>'. 162 162 ', '.__('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>'; 164 164 165 165 echo -
admin/category.php
r1571 r2117 182 182 '<form action="category.php" method="post" id="category-form">'. 183 183 '<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> '. 185 185 form::field('cat_title',40,255,html::escapeHTML($cat_title)). 186 186 '</p>'; -
admin/index.php
r2085 r2116 288 288 if (!empty($plugins_install['success'])) 289 289 { 290 echo '<div class="s tatic-msg">'.__('Following plugins have been installed:').'<ul>';290 echo '<div class="success">'.__('Following plugins have been installed:').'<ul>'; 291 291 foreach ($plugins_install['success'] as $k => $v) { 292 292 echo '<li>'.$k.'</li>'; … … 332 332 } 333 333 334 # Dashboard elements 335 echo '<div id="dashboard-main">'; 336 334 337 # Dashboard icons 335 echo '<div id=" dashboard-main"><div id="icons">';338 echo '<div id="icons">'; 336 339 foreach ($__dashboard_icons as $i) 337 340 { … … 403 406 } 404 407 405 //$class = ' '.(($dashboardItems != '') && ($dashboardContents != '') ? 'two-boxes' : 'one-box');406 407 408 if ($dashboardContents != '' || $dashboardItems != '') { 408 409 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>'. 418 412 '</div>'; 419 413 } 420 414 421 echo '</div>'; 415 echo '</div>'; #end dashboard-main 422 416 423 417 dcPage::close(); -
admin/js/jquery/jquery.autocomplete.js
r1035 r2114 1 1 /* 2 * jQuery Autocomplete plugin 1. 12 * jQuery Autocomplete plugin 1.2.3 3 3 * 4 4 * Copyright (c) 2009 Jörn Zaefferer … … 8 8 * http://www.gnu.org/licenses/gpl.html 9 9 * 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 * 11 13 */ 12 14 13 15 ;(function($) { 14 16 15 17 $.fn.extend({ 16 18 autocomplete: function(urlOrData, options) { … … 20 22 data: isUrl ? null : urlOrData, 21 23 delay: isUrl ? $.Autocompleter.defaults.delay : 10, 22 max: options && !options.scroll ? 10 : 150 24 max: options && !options.scroll ? 10 : 150, 25 noRecord: "No Records." 23 26 }, options); 24 27 25 28 // if highlight is set to false, replace it with a do-nothing function 26 29 options.highlight = options.highlight || function(value) { return value; }; 27 30 28 31 // if the formatMatch option is not specified, then use formatItem for backwards compatibility 29 32 options.formatMatch = options.formatMatch || options.formatItem; 30 33 31 34 return this.each(function() { 32 35 new $.Autocompleter(this, options); … … 65 68 }; 66 69 70 var globalFailure = null; 71 if(options.failure != null && typeof options.failure == "function") { 72 globalFailure = options.failure; 73 } 74 67 75 // Create $ object for input element 68 76 var $input = $(input).attr("autocomplete", "off").addClass(options.inputClass); … … 77 85 }; 78 86 var select = $.Autocompleter.Select(options, input, selectCurrent, config); 79 87 80 88 var blockSubmit; 81 89 82 90 // 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() { 84 92 if (blockSubmit) { 85 93 blockSubmit = false; … … 87 95 } 88 96 }); 89 90 // o nly opera doesn't trigger keydown multiple times while pressed, others don't work with keypress at all91 $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) { 92 100 // a keypress means the input has focus 93 101 // avoids issue where input had focus before the autocomplete was applied … … 96 104 lastKeyPressCode = event.keyCode; 97 105 switch(event.keyCode) { 98 106 99 107 case KEY.UP: 100 event.preventDefault();101 108 if ( select.visible() ) { 109 event.preventDefault(); 102 110 select.prev(); 103 111 } else { … … 105 113 } 106 114 break; 107 115 108 116 case KEY.DOWN: 109 event.preventDefault();110 117 if ( select.visible() ) { 118 event.preventDefault(); 111 119 select.next(); 112 120 } else { … … 114 122 } 115 123 break; 116 124 117 125 case KEY.PAGEUP: 118 event.preventDefault();119 126 if ( select.visible() ) { 127 event.preventDefault(); 120 128 select.pageUp(); 121 129 } else { … … 123 131 } 124 132 break; 125 133 126 134 case KEY.PAGEDOWN: 127 event.preventDefault();128 135 if ( select.visible() ) { 136 event.preventDefault(); 129 137 select.pageDown(); 130 138 } else { … … 132 140 } 133 141 break; 134 142 135 143 // matches also semicolon 136 144 case options.multiple && $.trim(options.multipleSeparator) == "," && KEY.COMMA: … … 144 152 } 145 153 break; 146 154 147 155 case KEY.ESC: 148 156 select.hide(); 149 157 break; 150 158 151 159 default: 152 160 clearTimeout(timeout); … … 159 167 hasFocus++; 160 168 }).blur(function() { 161 169 hasFocus = 0; 162 170 if (!config.mouseDownOnSelect) { 163 171 hideResults(); … … 165 173 }).click(function() { 166 174 // 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 } 169 185 } 170 186 }).bind("search", function() { … … 190 206 cache.flush(); 191 207 }).bind("setOptions", function() { 192 $.extend( options, arguments[1]);208 $.extend(true, options, arguments[1]); 193 209 // if we've updated the data, repopulate 194 210 if ( "data" in arguments[1] ) … … 199 215 $(input.form).unbind(".autocomplete"); 200 216 }); 201 202 217 218 203 219 function selectCurrent() { 204 220 var selected = select.selected(); 205 221 if( !selected ) 206 222 return false; 207 223 208 224 var v = selected.result; 209 225 previousValue = v; 210 226 211 227 if ( options.multiple ) { 212 228 var words = trimWords($input.val()); … … 230 246 v += options.multipleSeparator; 231 247 } 232 248 233 249 $input.val(v); 234 250 hideResultsNow(); … … 236 252 return true; 237 253 } 238 254 239 255 function onChange(crap, skipPrevCheck) { 240 256 if( lastKeyPressCode == KEY.DEL ) { … … 242 258 return; 243 259 } 244 260 245 261 var currentValue = $input.val(); 246 262 247 263 if ( !skipPrevCheck && currentValue == previousValue ) 248 264 return; 249 265 250 266 previousValue = currentValue; 251 267 252 268 currentValue = lastWord(currentValue); 253 269 if ( currentValue.length >= options.minChars) { … … 261 277 } 262 278 }; 263 279 264 280 function trimWords(value) { 265 281 if (!value) … … 271 287 }); 272 288 } 273 289 274 290 function lastWord(value) { 275 291 if ( !options.multiple ) 276 292 return value; 277 293 var words = trimWords(value); 278 if (words.length == 1) 294 if (words.length == 1) 279 295 return words[0]; 280 296 var cursorAt = $(input).selection().start; … … 286 302 return words[words.length - 1]; 287 303 } 288 304 289 305 // fills in the input box w/the first match (assumed to be the best match) 290 306 // q: the term entered … … 347 363 var data = cache.load(term); 348 364 // 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 } 351 373 // if an AJAX url has been supplied, try loading the data now 352 374 } else if( (typeof options.url == "string") && (options.url.length > 0) ){ 353 375 354 376 var extraParams = { 355 377 timestamp: +new Date() … … 358 380 extraParams[key] = typeof param == "function" ? param() : param; 359 381 }); 360 382 361 383 $.ajax({ 362 384 // try to leverage ajaxQueue plugin to abort previous requests … … 379 401 // if we have a failure, we need to empty the list -- this prevents the the [TAB] key from selecting the last successful match 380 402 select.emptyList(); 381 failure(term); 382 } 383 }; 384 403 if(globalFailure != null) { 404 globalFailure(); 405 } 406 else { 407 failure(term); 408 } 409 } 410 }; 411 385 412 function parse(data) { 386 413 var parsed = []; … … 415 442 matchSubset: true, 416 443 matchContains: false, 417 cacheLength: 10 ,418 max: 100 ,444 cacheLength: 100, 445 max: 1000, 419 446 mustMatch: false, 420 447 extraParams: {}, … … 425 452 width: 0, 426 453 multiple: false, 427 multipleSeparator: ", ", 454 multipleSeparator: " ", 455 inputFocus: true, 456 clickFire: false, 428 457 highlight: function(value, term) { 429 458 return value.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + term.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi, "\\$1") + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "<strong>$1</strong>"); 430 459 }, 431 460 scroll: true, 432 scrollHeight: 180 461 scrollHeight: 180, 462 scrollJumpPosition: true 433 463 }; 434 464 … … 437 467 var data = {}; 438 468 var length = 0; 439 469 440 470 function matchSubset(s, sub) { 441 if (!options.matchCase) 471 if (!options.matchCase) 442 472 s = s.toLowerCase(); 443 473 var i = s.indexOf(sub); … … 448 478 return i == 0 || options.matchContains; 449 479 }; 450 480 451 481 function add(q, value) { 452 482 if (length > options.cacheLength){ 453 483 flush(); 454 484 } 455 if (!data[q]){ 485 if (!data[q]){ 456 486 length++; 457 487 } 458 488 data[q] = value; 459 489 } 460 490 461 491 function populate(){ 462 492 if( !options.data ) return false; … … 467 497 // no url was specified, we need to adjust the cache length to make sure it fits the local data store 468 498 if( !options.url ) options.cacheLength = 1; 469 499 470 500 // track all options for minChars = 0 471 501 stMatchSets[""] = []; 472 502 473 503 // loop through the array and create a lookup structure 474 504 for ( var i = 0, ol = options.data.length; i < ol; i++ ) { … … 476 506 // if rawValue is a string, make an array otherwise just reference the array 477 507 rawValue = (typeof rawValue == "string") ? [rawValue] : rawValue; 478 508 479 509 var value = options.formatMatch(rawValue, i+1, options.data.length); 480 if ( value === false )510 if ( typeof(value) === 'undefined' || value === false ) 481 511 continue; 482 512 483 513 var firstChar = value.charAt(0).toLowerCase(); 484 514 // if no lookup array for this character exists, look it up now 485 if( !stMatchSets[firstChar] ) 515 if( !stMatchSets[firstChar] ) 486 516 stMatchSets[firstChar] = []; 487 517 … … 492 522 result: options.formatResult && options.formatResult(rawValue) || value 493 523 }; 494 524 495 525 // push the current match into the set list 496 526 stMatchSets[firstChar].push(row); … … 510 540 }); 511 541 } 512 542 513 543 // populate any existing data 514 544 setTimeout(populate, 25); 515 545 516 546 function flush(){ 517 547 data = {}; 518 548 length = 0; 519 549 } 520 550 521 551 return { 522 552 flush: flush, … … 526 556 if (!options.cacheLength || !length) 527 557 return null; 528 /* 558 /* 529 559 * if dealing w/local data and matchContains than we must make sure 530 560 * to loop through all the data collections looking for matches … … 546 576 }); 547 577 } 548 } 578 } 549 579 return csub; 550 } else 580 } else 551 581 // if the exact item exists, use it 552 582 if (data[q]){ … … 576 606 ACTIVE: "ac_over" 577 607 }; 578 608 579 609 var listItems, 580 610 active = -1, … … 584 614 element, 585 615 list; 586 616 587 617 // Create results 588 618 function init() { … … 593 623 .addClass(options.resultsClass) 594 624 .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 597 634 list = $("<ul/>").appendTo(element).mouseover( function(event) { 598 635 if(target(event).nodeName && target(event).nodeName.toUpperCase() == 'LI') { 599 636 active = $("li", list).removeClass(CLASSES.ACTIVE).index(target(event)); 600 $(target(event)).addClass(CLASSES.ACTIVE); 637 $(target(event)).addClass(CLASSES.ACTIVE); 601 638 } 602 639 }).click(function(event) { 603 640 $(target(event)).addClass(CLASSES.ACTIVE); 604 641 select(); 605 // TODO provide option to avoid setting focus again after selection? useful for cleanup-on-focus606 input.focus();642 if( options.inputFocus ) 643 input.focus(); 607 644 return false; 608 645 }).mousedown(function() { … … 611 648 config.mouseDownOnSelect = false; 612 649 }); 613 650 614 651 if( options.width > 0 ) 615 652 element.css("width", options.width); 616 653 617 654 needsInit = false; 618 } 619 655 } 656 620 657 function target(event) { 621 658 var element = event.target; … … 644 681 } 645 682 }; 646 683 647 684 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 656 696 function limitNumberOfItems(available) { 657 697 return options.max && options.max < available … … 659 699 : available; 660 700 } 661 701 662 702 function fillList() { 663 703 list.empty(); … … 681 721 list.bgiframe(); 682 722 } 683 723 684 724 return { 685 725 display: function(d, q) { … … 733 773 overflow: 'auto' 734 774 }); 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") { 737 777 var listHeight = 0; 738 778 listItems.each(function() { … … 746 786 } 747 787 } 748 788 749 789 } 750 790 }, -
admin/style/default.css
r2134 r2138 1218 1218 } 1219 1219 th.first img { 1220 padding-right: 24px;1220 padding-right: 34px; 1221 1221 } 1222 1222 tr.line img.expand, th img.expand { … … 1370 1370 box-sizing: border-box; 1371 1371 } 1372 #login-screen input.login {1372 #login-screen input.login, #login-screen input.login:focus { 1373 1373 padding-top: 6px; 1374 1374 padding-bottom: 6px; … … 1495 1495 .db-items li, .db-contents li { 1496 1496 margin: 0.25em 0 0 0; 1497 color: #676e78;1498 1497 } 1499 1498 #news dt { … … 1677 1676 padding: .66em 1em; 1678 1677 border: 1px solid #bbb; 1679 border-left: 6px solid #bbb;1680 1678 border-radius: 3px; 1681 1679 } 1680 .cat-line label { 1681 margin-right: .25em; 1682 } 1682 1683 .cat-line label a { 1683 1684 font-weight: bold; … … 1686 1687 margin: 0; 1687 1688 display: inline-block; 1689 } 1690 p.cat-title { 1691 margin-right: 1em; 1692 } 1693 .cat-nb-posts a { 1694 color: #333; 1688 1695 } 1689 1696 .cat-url { … … 1703 1710 margin-right: .25em; 1704 1711 } 1705 .cat-line label {1706 margin-right: .25em;1707 }1708 1712 .cat-buttons .reset { 1709 1713 padding-left: 4px; … … 1716 1720 .cat-line .cat-line { 1717 1721 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 } 1726 1723 .cat-actions { 1727 1724 line-height: 2; … … 1981 1978 float: left; 1982 1979 width: 100%; 1983 margin-right: -1 8em;1980 margin-right: -16em; 1984 1981 } 1985 1982 #entry-content { 1986 margin-right: 20em;1983 margin-right: 18em; 1987 1984 margin-left: 0; 1988 1985 } … … 1997 1994 } 1998 1995 #entry-sidebar { 1999 width: 1 8em;1996 width: 16em; 2000 1997 float: right; 2001 1998 } 1999 #entry-sidebar h4 { 2000 font-size: 13px; 2001 font-size: 1.3rem; 2002 margin-top: .3em; 2003 } 2002 2004 #entry-sidebar select { 2003 2005 width: 100%; … … 2567 2569 .colorEndValidatorMsg { 2568 2570 color: #ffcc00; 2569 } 2571 } -
inc/admin/lib.pager.php
r2135 r2138 185 185 '<th scope="col">'.__('Category').'</th>'. 186 186 '<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>'. 189 189 '<th scope="col">'.__('Status').'</th>'. 190 190 '</tr>%s</table></div>'; -
locales/fr/help/core_category.html
r1921 r2118 7 7 <h4>Créer une nouvelle catégorie</h4> 8 8 <dl> 9 <dt> Titre</dt>9 <dt>Nom</dt> 10 10 <dd>Choisissez le nom que vous souhaitez donner à votre nouvelle catégorie. 11 11 Ce champ est obligatoire.</dd> … … 29 29 </dl> 30 30 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 : 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> 53 32 <dl> 54 33 <dt>Catégorie parente</dt> 55 34 <dd>Il est possible de créer des sous-catégories. Dans ce cas, il faut choisir 56 la catégorie parente dans le champ sParent.</dd>35 la catégorie parente dans le champ Parent.</dd> 57 36 58 37 <dt>Catégorie voisine</dt> -
locales/fr/help/index.html
r2112 r2116 164 164 <div class="three-boxes first-child"> 165 165 <h4 class="pretty-title">Design & Thèmes</h4> 166 <ul >166 <ul class="from-left"> 167 167 <li><a href="/documentation/2.0/resources/themes">Thèmes</a> 168 168 <ul><li>Guide d'utilisation des thèmes</li><li>Les balises template</li><li>Annexes</a></li></ul></li> … … 176 176 <div class="three-boxes first-child"> 177 177 <h4 class="pretty-title">Code & Plugins</h4> 178 <ul >178 <ul class="from-left"> 179 179 <li><a href="/documentation/2.0/resources/tpl">Création d’une balise tpl pour un plugin ou un thème</a> 180 180 <ul><li>Introduction</li><li>Les valeurs</li><li>Les blocs d’instruction</li><li>Démonstration de l'influence du cache des templates</li></ul></li> … … 191 191 <div class="three-boxes"> 192 192 <h4 class="pretty-title">Contribution & Support</h4> 193 <ul >193 <ul class="from-left"> 194 194 <li><a href="/documentation/2.0/resources/contribute">Contribuer</a> 195 195 <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 2235 2235 2236 2236 msgid "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”."" 2237 msgstr "Pour réordonner les pages, déplacez les items par glisser déposer puis cliquez sur “Enregistrer l'ordre des pages”." 2238 2239 msgid "To rearrange pages order, change number at the begining of the line, then click on “Save pages order” button." 2240 msgstr "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 2242 msgid "Step #1" 2243 msgstr "Étape 1" 2244 2245 msgid "Step #2" 2246 msgstr "Étape 2" 2247 2248 msgid "Step #3" 2249 msgstr "Étape 3" 2250 2251 msgid "Back to filters list" 2252 msgstr "Retour à la liste des filtres" -
plugins/antispam/index.php
r2002 r2122 130 130 )); 131 131 132 echo '<p><a href="plugin.php?p=antispam" class="back">'.__('Back to filters list').'</a></p>'; 133 132 134 echo $filter_gui; 133 135 } -
plugins/blogroll/index.php
r2002 r2115 207 207 ?> 208 208 209 <div class="multi-part" title="<?php echo __('Blogroll'); ?>">209 <div class="multi-part" id="links-list" title="<?php echo __('Blogroll'); ?>"> 210 210 211 211 <?php if (!$rs->isEmpty()) { ?> -
plugins/maintenance/_admin.php
r2087 r2116 171 171 '<div id="maintenance-expired" class="box small">'. 172 172 '<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>'. 174 174 '<ul>'.implode('',$lines).'</ul>'. 175 175 '<p><a href="plugin.php?p=maintenance">'.__('Manage tasks').'</a></p>'. -
plugins/pages/class.listpage.php
r2055 r2127 33 33 '<div class="table-outer">'. 34 34 '<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>'. 41 41 '</tr></thead><tbody id="pageslist">%s</tbody></table></div>'; 42 42 … … 106 106 '<td class="nowrap">'. 107 107 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).'">'. 109 109 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>'. 112 111 '<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>'. 115 114 '<td class="nowrap status">'.$img_status.' '.$selected.' '.$protected.' '.$attach.'</td>'. 116 115 '</tr>'; -
plugins/simpleMenu/index.php
r2078 r2120 353 353 354 354 if ($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 } 355 372 echo dcPage::breadcrumb( 356 373 array( 357 374 html::escapeHTML($core->blog->name) => '', 358 375 $page_title => $p_url, 359 '<span class="page-title">'.__('Add item').'</span>' => '' 376 '<span class="page-title">'.__('Add item').'</span>' => '', 377 $step_label => '' 360 378 )); 361 379 } else { -
plugins/tags/js/jquery.autocomplete.js
r738 r2114 1 1 /* 2 * jQuery Autocomplete plugin 1. 12 * jQuery Autocomplete plugin 1.2.3 3 3 * 4 4 * Copyright (c) 2009 Jörn Zaefferer … … 8 8 * http://www.gnu.org/licenses/gpl.html 9 9 * 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 * 11 13 */ 12 14 13 15 ;(function($) { 14 16 15 17 $.fn.extend({ 16 18 autocomplete: function(urlOrData, options) { … … 20 22 data: isUrl ? null : urlOrData, 21 23 delay: isUrl ? $.Autocompleter.defaults.delay : 10, 22 max: options && !options.scroll ? 10 : 150 24 max: options && !options.scroll ? 10 : 150, 25 noRecord: "No Records." 23 26 }, options); 24 27 25 28 // if highlight is set to false, replace it with a do-nothing function 26 29 options.highlight = options.highlight || function(value) { return value; }; 27 30 28 31 // if the formatMatch option is not specified, then use formatItem for backwards compatibility 29 32 options.formatMatch = options.formatMatch || options.formatItem; 30 33 31 34 return this.each(function() { 32 35 new $.Autocompleter(this, options); … … 65 68 }; 66 69 70 var globalFailure = null; 71 if(options.failure != null && typeof options.failure == "function") { 72 globalFailure = options.failure; 73 } 74 67 75 // Create $ object for input element 68 76 var $input = $(input).attr("autocomplete", "off").addClass(options.inputClass); … … 77 85 }; 78 86 var select = $.Autocompleter.Select(options, input, selectCurrent, config); 79 87 80 88 var blockSubmit; 81 89 82 90 // 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() { 84 92 if (blockSubmit) { 85 93 blockSubmit = false; … … 87 95 } 88 96 }); 89 90 // o nly opera doesn't trigger keydown multiple times while pressed, others don't work with keypress at all91 $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) { 92 100 // a keypress means the input has focus 93 101 // avoids issue where input had focus before the autocomplete was applied … … 96 104 lastKeyPressCode = event.keyCode; 97 105 switch(event.keyCode) { 98 106 99 107 case KEY.UP: 100 event.preventDefault();101 108 if ( select.visible() ) { 109 event.preventDefault(); 102 110 select.prev(); 103 111 } else { … … 105 113 } 106 114 break; 107 115 108 116 case KEY.DOWN: 109 event.preventDefault();110 117 if ( select.visible() ) { 118 event.preventDefault(); 111 119 select.next(); 112 120 } else { … … 114 122 } 115 123 break; 116 124 117 125 case KEY.PAGEUP: 118 event.preventDefault();119 126 if ( select.visible() ) { 127 event.preventDefault(); 120 128 select.pageUp(); 121 129 } else { … … 123 131 } 124 132 break; 125 133 126 134 case KEY.PAGEDOWN: 127 event.preventDefault();128 135 if ( select.visible() ) { 136 event.preventDefault(); 129 137 select.pageDown(); 130 138 } else { … … 132 140 } 133 141 break; 134 142 135 143 // matches also semicolon 136 144 case options.multiple && $.trim(options.multipleSeparator) == "," && KEY.COMMA: … … 144 152 } 145 153 break; 146 154 147 155 case KEY.ESC: 148 156 select.hide(); 149 157 break; 150 158 151 159 default: 152 160 clearTimeout(timeout); … … 159 167 hasFocus++; 160 168 }).blur(function() { 161 169 hasFocus = 0; 162 170 if (!config.mouseDownOnSelect) { 163 171 hideResults(); … … 165 173 }).click(function() { 166 174 // 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 } 169 185 } 170 186 }).bind("search", function() { … … 190 206 cache.flush(); 191 207 }).bind("setOptions", function() { 192 $.extend( options, arguments[1]);208 $.extend(true, options, arguments[1]); 193 209 // if we've updated the data, repopulate 194 210 if ( "data" in arguments[1] ) … … 199 215 $(input.form).unbind(".autocomplete"); 200 216 }); 201 202 217 218 203 219 function selectCurrent() { 204 220 var selected = select.selected(); 205 221 if( !selected ) 206 222 return false; 207 223 208 224 var v = selected.result; 209 225 previousValue = v; 210 226 211 227 if ( options.multiple ) { 212 228 var words = trimWords($input.val()); … … 230 246 v += options.multipleSeparator; 231 247 } 232 248 233 249 $input.val(v); 234 250 hideResultsNow(); … … 236 252 return true; 237 253 } 238 254 239 255 function onChange(crap, skipPrevCheck) { 240 256 if( lastKeyPressCode == KEY.DEL ) { … … 242 258 return; 243 259 } 244 260 245 261 var currentValue = $input.val(); 246 262 247 263 if ( !skipPrevCheck && currentValue == previousValue ) 248 264 return; 249 265 250 266 previousValue = currentValue; 251 267 252 268 currentValue = lastWord(currentValue); 253 269 if ( currentValue.length >= options.minChars) { … … 261 277 } 262 278 }; 263 279 264 280 function trimWords(value) { 265 281 if (!value) … … 271 287 }); 272 288 } 273 289 274 290 function lastWord(value) { 275 291 if ( !options.multiple ) 276 292 return value; 277 293 var words = trimWords(value); 278 if (words.length == 1) 294 if (words.length == 1) 279 295 return words[0]; 280 296 var cursorAt = $(input).selection().start; … … 286 302 return words[words.length - 1]; 287 303 } 288 304 289 305 // fills in the input box w/the first match (assumed to be the best match) 290 306 // q: the term entered … … 347 363 var data = cache.load(term); 348 364 // 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 } 351 373 // if an AJAX url has been supplied, try loading the data now 352 374 } else if( (typeof options.url == "string") && (options.url.length > 0) ){ 353 375 354 376 var extraParams = { 355 377 timestamp: +new Date() … … 358 380 extraParams[key] = typeof param == "function" ? param() : param; 359 381 }); 360 382 361 383 $.ajax({ 362 384 // try to leverage ajaxQueue plugin to abort previous requests … … 379 401 // if we have a failure, we need to empty the list -- this prevents the the [TAB] key from selecting the last successful match 380 402 select.emptyList(); 381 failure(term); 382 } 383 }; 384 403 if(globalFailure != null) { 404 globalFailure(); 405 } 406 else { 407 failure(term); 408 } 409 } 410 }; 411 385 412 function parse(data) { 386 413 var parsed = []; … … 415 442 matchSubset: true, 416 443 matchContains: false, 417 cacheLength: 10 ,418 max: 100 ,444 cacheLength: 100, 445 max: 1000, 419 446 mustMatch: false, 420 447 extraParams: {}, … … 425 452 width: 0, 426 453 multiple: false, 427 multipleSeparator: ", ", 454 multipleSeparator: " ", 455 inputFocus: true, 456 clickFire: false, 428 457 highlight: function(value, term) { 429 458 return value.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + term.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi, "\\$1") + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "<strong>$1</strong>"); 430 459 }, 431 460 scroll: true, 432 scrollHeight: 180 461 scrollHeight: 180, 462 scrollJumpPosition: true 433 463 }; 434 464 … … 437 467 var data = {}; 438 468 var length = 0; 439 469 440 470 function matchSubset(s, sub) { 441 if (!options.matchCase) 471 if (!options.matchCase) 442 472 s = s.toLowerCase(); 443 473 var i = s.indexOf(sub); … … 448 478 return i == 0 || options.matchContains; 449 479 }; 450 480 451 481 function add(q, value) { 452 482 if (length > options.cacheLength){ 453 483 flush(); 454 484 } 455 if (!data[q]){ 485 if (!data[q]){ 456 486 length++; 457 487 } 458 488 data[q] = value; 459 489 } 460 490 461 491 function populate(){ 462 492 if( !options.data ) return false; … … 467 497 // no url was specified, we need to adjust the cache length to make sure it fits the local data store 468 498 if( !options.url ) options.cacheLength = 1; 469 499 470 500 // track all options for minChars = 0 471 501 stMatchSets[""] = []; 472 502 473 503 // loop through the array and create a lookup structure 474 504 for ( var i = 0, ol = options.data.length; i < ol; i++ ) { … … 476 506 // if rawValue is a string, make an array otherwise just reference the array 477 507 rawValue = (typeof rawValue == "string") ? [rawValue] : rawValue; 478 508 479 509 var value = options.formatMatch(rawValue, i+1, options.data.length); 480 if ( value === false )510 if ( typeof(value) === 'undefined' || value === false ) 481 511 continue; 482 512 483 513 var firstChar = value.charAt(0).toLowerCase(); 484 514 // if no lookup array for this character exists, look it up now 485 if( !stMatchSets[firstChar] ) 515 if( !stMatchSets[firstChar] ) 486 516 stMatchSets[firstChar] = []; 487 517 … … 492 522 result: options.formatResult && options.formatResult(rawValue) || value 493 523 }; 494 524 495 525 // push the current match into the set list 496 526 stMatchSets[firstChar].push(row); … … 510 540 }); 511 541 } 512 542 513 543 // populate any existing data 514 544 setTimeout(populate, 25); 515 545 516 546 function flush(){ 517 547 data = {}; 518 548 length = 0; 519 549 } 520 550 521 551 return { 522 552 flush: flush, … … 526 556 if (!options.cacheLength || !length) 527 557 return null; 528 /* 558 /* 529 559 * if dealing w/local data and matchContains than we must make sure 530 560 * to loop through all the data collections looking for matches … … 546 576 }); 547 577 } 548 } 578 } 549 579 return csub; 550 } else 580 } else 551 581 // if the exact item exists, use it 552 582 if (data[q]){ … … 576 606 ACTIVE: "ac_over" 577 607 }; 578 608 579 609 var listItems, 580 610 active = -1, … … 584 614 element, 585 615 list; 586 616 587 617 // Create results 588 618 function init() { … … 593 623 .addClass(options.resultsClass) 594 624 .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 597 634 list = $("<ul/>").appendTo(element).mouseover( function(event) { 598 635 if(target(event).nodeName && target(event).nodeName.toUpperCase() == 'LI') { 599 636 active = $("li", list).removeClass(CLASSES.ACTIVE).index(target(event)); 600 $(target(event)).addClass(CLASSES.ACTIVE); 637 $(target(event)).addClass(CLASSES.ACTIVE); 601 638 } 602 639 }).click(function(event) { 603 640 $(target(event)).addClass(CLASSES.ACTIVE); 604 641 select(); 605 // TODO provide option to avoid setting focus again after selection? useful for cleanup-on-focus606 input.focus();642 if( options.inputFocus ) 643 input.focus(); 607 644 return false; 608 645 }).mousedown(function() { … … 611 648 config.mouseDownOnSelect = false; 612 649 }); 613 650 614 651 if( options.width > 0 ) 615 652 element.css("width", options.width); 616 653 617 654 needsInit = false; 618 } 619 655 } 656 620 657 function target(event) { 621 658 var element = event.target; … … 644 681 } 645 682 }; 646 683 647 684 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 656 696 function limitNumberOfItems(available) { 657 697 return options.max && options.max < available … … 659 699 : available; 660 700 } 661 701 662 702 function fillList() { 663 703 list.empty(); … … 681 721 list.bgiframe(); 682 722 } 683 723 684 724 return { 685 725 display: function(d, q) { … … 733 773 overflow: 'auto' 734 774 }); 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") { 737 777 var listHeight = 0; 738 778 listItems.each(function() { … … 746 786 } 747 787 } 748 788 749 789 } 750 790 }, -
plugins/themeEditor/codemirror.css
r948 r2124 1 1 .CodeMirror { 2 font-size: 1. 4em;2 font-size: 1.2em; 3 3 background: #fff; 4 4 }
Note: See TracChangeset
for help on using the changeset viewer.