Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вставка/удаление 4-х пробелов при нажатии, "Ctrl+]"/"Ctrl+[" 
:(
    Опции темы
pythonwin
Дата 25.9.2006, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 1
Всего: 36



Всем доброго времени суток!

помогите, пожалуйста сделать вставку отступов на форуме по питону!

есть определённый код - спасибо smartov, но у него есть одна ошибка которую нужно исправиль.

задача:
Цитата

А можно сделать так, чтобы при нажатии "Ctrl+]" в начало строки добавлялось 4 пробела, а при нажатии "Ctrl+[" - удалялось? Желательно чтобы это возможность работала и для целых блоков кода на питоне.


проблема:
Цитата

Единственная текущая проблема кода - то что он работает с выделением а не с линиями.

Если выделить любой один символ в середине строки и нажать Ctrl+], то пробелы будут добавляться перед этим символом, а не в начало строки.


Код:

Код

<html>
<body>
<script>
var tabSymbol;
//Change this value to needed
//tabSymbol = "    ";//tabulator
tabSymbol = "    ";//4spaces
//tabSymbol = "  ";//2 spaces
//----------
var cachedEvent;
var linesUpdated;
String.prototype.repeat = function(count) { 
    var tmp = this.valueOf();
    for (var i=1; i < count; i++)
    {
        tmp += this.valueOf();
    }
    return tmp;
};
function indentString($str)
{
    if (!$str)
        return "";
    $str_arr = $str.split(/\n/);
    for (var i=0; i < $str_arr.length; i++)
    {
        $str_arr[i] = tabSymbol + $str_arr[i];
    }
    
    linesUpdated = $str_arr.length;
    return $str_arr.join("\n");
}
function unindentString($str)
{
    if (!$str)
        return "";
    $str_arr = $str.split(/\n/);
    for (var i=0; i < $str_arr.length; i++)
    {
        if ($str_arr[i].indexOf(tabSymbol) == 0)
        {
            $str_arr[i] = $str_arr[i].replace(tabSymbol, '');
        }
    }
    linesUpdated = $str_arr.length;
    return $str_arr.join("\n");
}
function indentSelection(targetTextarea, unindent)
{
    if (document.selection) //IE, Opera 9
    {
        range = document.selection.createRange();
        range.text = unindent ? unindentString(range.text) : indentString(range.text);
    } 
    else //Mozilla
    {
        var selStart = targetTextarea.selectionStart;
        var selEnd = targetTextarea.selectionEnd;
        var selection = targetTextarea.value.substr(targetTextarea.selectionStart, targetTextarea.selectionEnd - targetTextarea.selectionStart);
        selection = unindent ? unindentString(selection) : indentString(selection);
        targetTextarea.value = targetTextarea.value.substr(0, targetTextarea.selectionStart) 
            + selection
            + targetTextarea.value.substr(targetTextarea.selectionEnd);
        
        var chars = tabSymbol.repeat(linesUpdated).length;
        selEnd = unindent ? (selEnd-chars) : (selEnd+chars);
        targetTextarea.setSelectionRange(selStart, selEnd);
    }
}
function getEvent(textarea, $event)
{
//219 - [
//221 - ]
    if (cachedEvent == 17 && $event == 219)
    {
        indentSelection(textarea, true);
        cachedEvent = 17;
        return;
    }
    if (cachedEvent == 17 && $event == 221)
    {
        indentSelection(textarea, false);
        cachedEvent = 17;
        return;
    }
    cachedEvent = $event;
}
</script>
<textarea id="asd" style="width:500px;height:500px;" onKeydown="getEvent(this, event.keyCode)">
myarray = new Array();
myarray.push('forum');
myarray.push('vingrad');
myarray.push('ru');
var str;
for (var i=0; i < count(myarray); i++)
{
str += myarray[i];//ident me;
str += '.';//ident me;
}
alert(str);
</textarea>
</body>
</html>


Более подробно:

4 пробела в форуме по питону
PM WWW GTalk Jabber   Вверх
sergejzr
Дата 25.9.2006, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 10
Всего: 360



Модератор: [B]pythonwin, не следует дублировать темы![/B]


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
pythonwin
Дата 25.9.2006, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 1
Всего: 36



Цитата(sergejzr @  25.9.2006,  19:15 Найти цитируемый пост)
Модератор: pythonwin, не следует дублировать темы! 

Прошу прощения за это, но это было так задумано:
1) поместил в JS, т.к. проблему в коде могут устранить JS-ники
2) поместил в "Центр помощи", т.к. сюда заходят форумчане, у которых есть свободное время + есть желание помочь ближнему. smile
3) устал нажимать 4 пробела в форуме по питону smile - решение вынести проблему из "обсуждения форума" было обосновано, тем что разработка в "27" остановилась, а проблема тормозит развитие форума по Python. smile
PM WWW GTalk Jabber   Вверх
pythonwin
Дата 25.9.2006, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 1
Всего: 36



решение этой проблемы поможет развитию форума по питону! smile

Это сообщение отредактировал(а) pythonwin - 26.9.2006, 11:51
PM WWW GTalk Jabber   Вверх
Cr@$h
Дата 26.9.2006, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
***


Профиль
Группа: Участник Клуба
Сообщений: 1693
Регистрация: 3.4.2005
Где: Санкт-Петербург, Россия

Репутация: нет
Всего: 41



Так или иначе, обсуждение реализации лучше делать в одном месте и лучше в Обсуждении ИМХО. smile 
PM MAIL ICQ   Вверх
Sardar
Дата 26.9.2006, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Нужно селекцией добежать до начала строки, затем как было, разбить по строкам добавить пробелы. Для мозиллы просто, бежим с selectionStart пока не упрёмся в \n (10). Для ИЕ геморно, вчера вечером игрался, так и не порешал безглючно.

Что бы к форуму прикрутить быстро нужно пользовать TextAreaSelectionHelper и HotKeyHandler обьекты. Пример на хоткеи:

Код
HotKeyHandler.keys = {
 //добавляем эти две строки в уже существующий .keys
 "\u00FB": function() { post.indentBlock("    "); },  //ctrl+[
 "\u00FD": function() { post.unindentBlock(); }  //ctrl+]
};


В TextAreaSelectionHelper добавляем два метода indentBlock и unindentBlock. Это кривое ad-hoc решение, т.к. никогда не думал что в TextAreaSelectionHelper потребуеться копировать селекцию. Копия (скрытая, виртуальная, называй как хочешь) селекция нужна для работы с текстом, не меняя позиции реального курсора.

Каркас indent может выглядеть так:
Код
TextAreaSelectionHelper.prototype.indentBlock = function(indchrs) {
  if(this.iesel&&(window.opera || this.iesel.parentElement()==this.target)) {
     //здесь код для IE и опера (те кто поддерживает document.selection)
     //this.iesel - TextRange настоящей селекции, при работе нужно делать .duplicate()
  } else if(this.start>=0&&this.end>=this.start) {
     //mozilla code
     //здесь доступны this.start - начало селекции, this.end - конец селекции в символах
     //this.start нужно отодвинуть до начала строки, просто перебором символов
     //из this.target.value.charAt(this.start--)

     // в мозилле с текстом работаем так:
     var left=this.target.value.substring(0,this.start);  //текст до курсора/селекции
     var right=this.target.value.substr(this.end); //текст после курсора/селекции
     var scont=this.target.value.substring(this.start, this.end); //пусто или отселектированный текст

      //бьём scount по линиям, добавляем префикс indchrs, ставим
      this.target.value=left+scont+right;
      this.target.scrollTop=this.scroll; //необходимо, иначе прыгнем вверх/вниз
      this.target.focus(); //возвращаем фокус если убежал
  }
}


unindentBlock делаем точно также. Редизайном TextAreaSelectionHelper займусь позже (когда найду время smile ).

Собстно для ИЕ глючный может быть таким, читать коменты почему в простых текстовых приложениях docment.selection не рулит (но рулит когда работаем вообще с документом):

Код
//сие предназначено на место комента "здесь код для IE и опера..."
      //Узнать находимся ли мы на новой строке можно только одним способом:
      //пройти назад и посмотреть не лежит ли там символ \r. Символ \n сьедаеться ИЕ полностью.
      //Но! если мы находимся в начале текста (перед первым символом), то поход
      //назад вынесет селекцию из textarea. Эту жуткую хрень тоже надо обрабатывать.
      
      var d = document.getElementById("dbg");
      
      if(this.iesel.text.length == 0) {
          d.innerHTML+="<br>empty";
          var check = this.iesel.duplicate();
          check.moveStart("character", -1);
          if(check.parentElement() != this.target) {//[censored 2] , мы в начале текста!
              d.innerHTML+="<br>fixbegin";
              this.iesel.text = indchrs;
              return;
          } else this.iesel = check;
          d.innerHTML+="<br>on empty sel len: "+check.text.length;
          if(check.text.length == 0)
              check.moveStart("character", -1);
      }
      
      //мы точно имеем минимум 1 символ в селекции, но может быть это \r из предидущей строки
      var ch;
      while(((ch = this.iesel.text.charAt(0)) != '\r' && ch != '\n')) {
          d.innerHTML+="<br>charback: "+ch+", "+ch.charCodeAt(0);
          //двигаем селекцию, но тут кроеться лажа, если мы дойдём до начала текста,
          //то наша селекция может "выпасть" за пределы текстового поля.
          //грёбанные ИЕ программисты, ну нахрена так усложнять то?
          var temp = this.iesel.duplicate(); //ж сколько памяти хавает наверное...
          if(temp.moveStart("character", -1) == 0) break; //хорошо бы тут остановиться, но селекция в ИЕ пойдёт дальше, это условие на моей машине никогда не отрабатывает
          if(temp.parentElement() != this.target) break; //млин таки вылезли за текстовое поле, нафих всё отрубаем
          this.iesel = temp;
      }
      
      //если первый символ это \r, значит мы в середине текста
      if((ch = this.iesel.text.charAt(0)) == '\r' || ch == '\n') {
          d.innerHTML+="<br>forward to suppress line";
          this.iesel.moveStart("character", 1);
      }
      
      //и так у нас есть целиком текст, который можно отодвинуть блоко      
      var lines = this.iesel.text.split(/\n/);
      for (var i=0; i<lines.length; i++)
          lines[i] = indchrs + lines[i];
      this.iesel.text = lines.join("\n");


Сильно не пинать ибо спал вчера 4 часа (сегодня 6, голова гудит...  smile ), а в такой нирване я бывает мыслю не адекватно smile



--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
pythonwin
Дата 27.9.2006, 06:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 1
Всего: 36



Цитата(Cr@$h @  27.9.2006,  02:50 Найти цитируемый пост)
Так или иначе, обсуждение реализации лучше делать в одном месте и лучше в Обсуждении ИМХО. smile  

я был вынужден создать ещё темы на разных подфорумах, т.к. в обсуждении тема перестала развиваться. smile + smartov, разрешил размещать код где угодно smile

Добавлено @ 06:39 
Sardar, а есть полный код, чтобы я его потестировал? smile
PM WWW GTalk Jabber   Вверх
Cr@$h
Дата 27.9.2006, 08:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
***


Профиль
Группа: Участник Клуба
Сообщений: 1693
Регистрация: 3.4.2005
Где: Санкт-Петербург, Россия

Репутация: нет
Всего: 41



Цитата(pythonwin @  27.9.2006,  07:37 Найти цитируемый пост)
я был вынужден создать ещё темы на разных подфорумах, т.к. в обсуждении тема перестала развиваться.  + smartov, разрешил размещать код где угодно 

Хорошо, давайте добивать код в JS.
PM MAIL ICQ   Вверх
pythonwin
Дата 27.9.2006, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 1
Всего: 36



Цитата(Cr@$h @  27.9.2006,  15:49 Найти цитируемый пост)

Хорошо, давайте добивать код в JS.

Ура, администрация одобрила! smile
 smile 
PM WWW GTalk Jabber   Вверх
Sardar
Дата 27.9.2006, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Цитата(pythonwin @  27.9.2006,  05:37 Найти цитируемый пост)
Sardar, а есть полный код, чтобы я его потестировал?

Да какой полный код, мозилловскую часть напишет любой студент (не напишите сами, сделаю я, но позже). ИЕ'шную часть выложил выше, криво ибо набросок. Ссылкой тут, открываем в IE, ctrl+[ отодвигает как напоминание "не юзать" smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Cr@$h
Дата 27.9.2006, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
***


Профиль
Группа: Участник Клуба
Сообщений: 1693
Регистрация: 3.4.2005
Где: Санкт-Петербург, Россия

Репутация: нет
Всего: 41



Цитата(pythonwin @  27.9.2006,  12:05 Найти цитируемый пост)
Ура, администрация одобрила!

Скорее, я. smile  Когда код будет готов и отлажен, его нужно будет попросить поставить на обработку этих комбинаций клавиш. Это непременно полезно для всех тематических форумов. Уверен, многих, кто пишет прямо здесь, задалбывает ставить 4 пробела. Идея хорошая, а раз темы по ней ещё живы, значит перспективы радужные. smile Я надеюсь.
PM MAIL ICQ   Вверх
pythonwin
Дата 28.9.2006, 07:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 1
Всего: 36



Цитата(Cr@$h @  28.9.2006,  03:08 Найти цитируемый пост)
Уверен, многих, кто пишет прямо здесь, задалбывает ставить 4 пробела.

Согласен! я - один из них. smile

PM WWW GTalk Jabber   Вверх
Cr@$h
Дата 28.9.2006, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
***


Профиль
Группа: Участник Клуба
Сообщений: 1693
Регистрация: 3.4.2005
Где: Санкт-Петербург, Россия

Репутация: нет
Всего: 41



Как дело придвигается?
PM MAIL ICQ   Вверх
pythonwin
Дата 29.9.2006, 07:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 1
Всего: 36



Цитата(Cr@$h @  29.9.2006,  04:28 Найти цитируемый пост)
Как дело придвигается? 

уже потестировал и сейчас напишу результаты.

Добавлено @ 08:03 
Sardar, потестировал есть несколько багов:
1) по условию:
Цитата(pythonwin @  25.9.2006,  18:59 Найти цитируемый пост)

А можно сделать так, чтобы при нажатии "Ctrl+]" в начало строки добавлялось 4 пробела, а при нажатии "Ctrl+[" - удалялось? Желательно чтобы это возможность работала и для целых блоков кода на питоне.


а в реальности при нажатии "Ctrl+[" пробелы добавляются, хотя должны удаляться smile
2) если выделить блок (одна и более строк) и нажать "Ctrl+[", то после добавления пробелов строка ниже блока перемещается в конец последней строки выделеного блока, который сдвигали.

smile


Это сообщение отредактировал(а) pythonwin - 29.9.2006, 08:04
PM WWW GTalk Jabber   Вверх
Zeroglif
Дата 29.9.2006, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 28
Всего: 66



Набросал под IE6/OP9 only - http://www.404.googlepages.com/indent_in_textarea.html

- Отступы = 4 пробела.
- Добавляем отступы с помощью TAB или Ctrl+], удаляем с помошью SHIFT+TAB или CTRL+[.
- Если выделения нет, то и блока нет, просто добавляем/удаляем отступы слева от курсора.
- Если выделение есть, то появляется блок, расширяем блок влево (то есть можно не выделять строку полностью).
- Выделение постоянно на виду (мне так удобнее).

Отпишитесь пока, то или не то по функционалу, дальше будем в приличный вид приводить и проч.


PM MAIL WWW   Вверх
pythonwin
Дата 29.9.2006, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 1
Всего: 36



Цитата(Zeroglif @  29.9.2006,  17:07 Найти цитируемый пост)
- Добавляем отступы с помощью TAB или Ctrl+], удаляем с помошью SHIFT+TAB или CTRL+[.


Zeroglif, табы нельзя - только Ctrl+] и CTRL+[


Цитата(Zeroglif @  29.9.2006,  17:07 Найти цитируемый пост)
Набросал под IE6/OP9 only - http://www.404.googlepages.com/indent_in_textarea.html

спасибо, - потестирую! smile

Добавлено @ 11:06 
Цитата(Zeroglif @  29.9.2006,  17:07 Найти цитируемый пост)
- Если выделения нет, то и блока нет, просто добавляем/удаляем отступы слева от курсора.

это не правильно smile нужно добвлять/удалять пробеля в НАЧАЛЕ СТРОКИ smile

а также, если выделить блок (одна и более строк) и нажать "Ctrl+]" или "Ctrl+[", то после добавления/удаления пробелов строка ниже блока перемещается в конец последней строки выделеного блока, который сдвигали

Это сообщение отредактировал(а) pythonwin - 29.9.2006, 11:06
PM WWW GTalk Jabber   Вверх
Zeroglif
Дата 29.9.2006, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 28
Всего: 66



Цитата(pythonwin @  29.9.2006,  10:59 Найти цитируемый пост)
Zeroglif, табы нельзя - только Ctrl+] и CTRL+[


Цитата(pythonwin @  29.9.2006,  10:59 Найти цитируемый пост)
это не правильно  нужно добвлять/удалять пробеля в НАЧАЛЕ СТРОКИ


То есть это не должно быть похоже на обычное поведение текстового редактора для TAB/SHIFT+TAB? Где бы ни был курсор - нужно сдвигать всю строку на котрой курсор? Это можно сделать.

Цитата(pythonwin @  29.9.2006,  10:59 Найти цитируемый пост)
а также, если выделить блок (одна и более строк) и нажать "Ctrl+]" или "Ctrl+[", то после добавления/удаления пробелов строка ниже блока перемещается в конец последней строки выделеного блока, который сдвигали


Не наблюдаю. При выделении (любом) должны двигаться строки, в которых живёт это выделение. Или тут тоже своя специфика? 

PM MAIL WWW   Вверх
Zeroglif
Дата 29.9.2006, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 28
Всего: 66



Без кнопок TAB/SHIFT+TAB и простой курсор в строке тоже считает эту строку блоком (поведение как при выделении):
http://www.404.googlepages.com/indent_in_t...rea_no_tab.html
PM MAIL WWW   Вверх
pythonwin
Дата 29.9.2006, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 1
Всего: 36



Цитата(Zeroglif @  29.9.2006,  18:52 Найти цитируемый пост)
Без кнопок TAB/SHIFT+TAB и простой курсор в строке тоже считает эту строку блоком (поведение как при выделении):
http://www.404.googlepages.com/indent_in_t...rea_no_tab.html 

1) нужно сделать так чтобы после нажатия Ctrl+] или Ctrl+[ строка или блок которую "сдвигают" после "сдвига" полностью выделялись smile

Цитата(Zeroglif @  29.9.2006,  18:35 Найти цитируемый пост)


Не наблюдаю. При выделении (любом) должны двигаться строки, в которых живёт это выделение. Или тут тоже своя специфика? 

это баг:
Цитата(pythonwin @  29.9.2006,  17:59 Найти цитируемый пост)

а также, если выделить блок (одна и более строк) и нажать "Ctrl+]" или "Ctrl+[", то после добавления/удаления пробелов строка ниже блока перемещается в конец последней строки выделеного блока, который сдвигали

нужно чтобы строка следующая за выделенным блоком не перемещалась к верхней.
Эту ошибку можно повторить в IE6+ если дважды кликнуть по строке мышкой


IDLE для Python можно скачать здесь

PM WWW GTalk Jabber   Вверх
Zeroglif
Дата 29.9.2006, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 28
Всего: 66



Цитата(pythonwin @  29.9.2006,  12:13 Найти цитируемый пост)
нужно сделать так чтобы после нажатия Ctrl+] или Ctrl+[ строка или блок которую "сдвигают" после "сдвига" полностью выделялись


smile А как просто всё начиналось... Тебе это нужно, чтобы блок удалять? Потому как это выделение (справа) никак не влияет на суть добавления отступов (слева).

Цитата(pythonwin @  29.9.2006,  12:13 Найти цитируемый пост)
нужно чтобы строка следующая за выделенным блоком не перемещалась к верхней.
Эту ошибку можно повторить в IE6+ если дважды кликнуть по строке мышкой


Я бы рад повторить ошибку, но чего-то не срастается, гадом буду, строки ниже/выше блока молчат, как партизаны. smile Подожду, пока ещё кто-нибудь объяснит, чего править. По логике работы строка НИЖЕ блока не должна вообще колыхаться при добавлении/удалении отступов к блоку, потому как все изменения в блоке происходят между строкой ВЫШЕ и левой частью выделения. и у меня ничего не колыхается.

PM MAIL WWW   Вверх
pythonwin
Дата 29.9.2006, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 1
Всего: 36



Цитата(Zeroglif @  29.9.2006,  20:02 Найти цитируемый пост)

Я бы рад повторить ошибку, но чего-то не срастается, гадом буду, 

попробуй, так:
1) поставь курсор в начало строки
2) нажми Shift+End
3) нажми Ctrl+]

Это для IE

Добавлено @ 13:09 
Цитата(Zeroglif @  29.9.2006,  20:02 Найти цитируемый пост)

smile А как просто всё начиналось... 

а я и не говорил что будет просто  smile 
PM WWW GTalk Jabber   Вверх
Zeroglif
Дата 29.9.2006, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 28
Всего: 66



Цитата(pythonwin @  29.9.2006,  13:08 Найти цитируемый пост)
попробуй, так


Ага, теперь вижу, щас полечим...

PM MAIL WWW   Вверх
pythonwin
Дата 29.9.2006, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 1
Всего: 36



Цитата(Zeroglif @  29.9.2006,  20:33 Найти цитируемый пост)


Ага, теперь вижу, щас полечим...

Замечательно! Жду! smile
PM WWW GTalk Jabber   Вверх
Zeroglif
Дата 30.9.2006, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 28
Всего: 66



Полечил... Проверяй функционал. Индент/аниндент по CTRL+]/CTRL+[. Строка выделяется полностью от начала и до конца, если в ней курсор или её зацепило выделением. Баг IE с невидимым \r в конце  обошёл. 

http://www.404.googlepages.com/indent_in_t...ea_no_tab2.html
PM MAIL WWW   Вверх
pythonwin
Дата 1.10.2006, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 1
Всего: 36



Цитата(Zeroglif @  1.10.2006,  04:21 Найти цитируемый пост)
Полечил... Проверяй функционал. Индент/аниндент по CTRL+]/CTRL+[. Строка выделяется полностью от начала и до конца, если в ней курсор или её зацепило выделением. Баг IE с невидимым \r в конце  обошёл. 

багов под IE6+ не нашел. smile
Zeroglif, спасибо!

теперь нужно сделать под FF и Mozilla. smile
PM WWW GTalk Jabber   Вверх
Zeroglif
Дата 1.10.2006, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 28
Всего: 66



Цитата(pythonwin @  1.10.2006,  11:40 Найти цитируемый пост)
багов под IE6+ не нашел.

Радостно.

Цитата(pythonwin @  1.10.2006,  11:40 Найти цитируемый пост)
Zeroglif, спасибо

На здоровье.

Цитата(pythonwin @  1.10.2006,  11:40 Найти цитируемый пост)
теперь нужно сделать под FF и Mozilla

Я честно говоря случайно подвизался тут помогать, ибо мне стало жутко интересно, как будет выглядеть нормальная IE-реализация задачи, а вот FF меня совсем даже не греет (приколов дюже мало, не интересно), тем более, что:
Цитата(Sardar @  27.9.2006,  13:11 Найти цитируемый пост)
мозилловскую часть напишет любой студент (не напишите сами, сделаю я, но позже). 

Но набросал до кучи и для мозиллы, приколов не встретил, за исключением того, что выделение мышкой может захватывать \n строки на которой я её отпускаю, но браузер никак об этом не сигнализирует (не выделяет визуально). Может это уже известное поведение и я его (это известие) прохлопал... smile

http://www.404.googlepages.com/indent-in-t...y-zeroglif.html




PM MAIL WWW   Вверх
pythonwin
Дата 2.10.2006, 08:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 1
Всего: 36



Цитата(Zeroglif @  2.10.2006,  02:03 Найти цитируемый пост)

На здоровье.

я думаю что это не всё smile +1

Добавлено @ 08:41 
Zeroglif, спа
Цитата(Zeroglif @  2.10.2006,  02:03 Найти цитируемый пост)

Но набросал до кучи и для мозиллы, приколов не встретил, за исключением того, что выделение мышкой может захватывать \n строки на которой я её отпускаю, но браузер никак об этом не сигнализирует (не выделяет визуально). Может это уже известное поведение и я его (это известие) прохлопал... smile

http://www.404.googlepages.com/indent-in-t...y-zeroglif.html

спасибо, - потестирую! smile

Этот пример работает и для IE, FF, Opera и Mozilla?

Добавлено @ 08:43 
Цитата(pythonwin @  2.10.2006,  15:38 Найти цитируемый пост)

Этот пример работает и для IE, FF, Opera и Mozilla?


Zeroglif, в IE открыл ссылку и получил какой-то набор иероглифов. smile

PM WWW GTalk Jabber   Вверх
pythonwin
Дата 2.10.2006, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 1
Всего: 36



Цитата(pythonwin @  2.10.2006,  15:38 Найти цитируемый пост)
Zeroglif, в IE открыл ссылку и получил какой-то набор иероглифов. smile

баловался с разными кодировками, но ничего не получается smile
PM WWW GTalk Jabber   Вверх
Zeroglif
Дата 2.10.2006, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 28
Всего: 66



Цитата(pythonwin @  2.10.2006,  08:38 Найти цитируемый пост)
Этот пример работает и для IE, FF, Opera и Mozilla?

Да.

Цитата(pythonwin @  2.10.2006,  15:47 Найти цитируемый пост)
баловался с разными кодировками

В textarea мусор или вместо страницы мусор? Там шрифты заданы, может из-за этого... или googlepages плющит (бывает, он же в бете). Я переложу попозже.

PM MAIL WWW   Вверх
pythonwin
Дата 2.10.2006, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 1
Всего: 36



Цитата(Zeroglif @  2.10.2006,  22:58 Найти цитируемый пост)

В textarea мусор или вместо страницы мусор?

вместо страницы мусор


Цитата(Zeroglif @  2.10.2006,  22:58 Найти цитируемый пост)
Там шрифты заданы

какие?

Цитата(Zeroglif @  2.10.2006,  22:58 Найти цитируемый пост)
или googlepages плющит (бывает, он же в бете)


http://www.404.googlepages.com/indent-in-t...y-zeroglif.html нормально открывает в FF и Mozilla, но в IE вместо странички выдает иероглифы smile

Добавлено @ 16:35 
Zeroglifhttp://www.404.googlepages.com/indent-in-t...y-zeroglif.html - заработало! smile
PM WWW GTalk Jabber   Вверх
Cr@$h
Дата 2.10.2006, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
***


Профиль
Группа: Участник Клуба
Сообщений: 1693
Регистрация: 3.4.2005
Где: Санкт-Петербург, Россия

Репутация: нет
Всего: 41



У меня на ИЕ 6+ всё идеально.
PM MAIL ICQ   Вверх
pythonwin
Дата 2.10.2006, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 1
Всего: 36



Цитата(Cr@$h @  2.10.2006,  23:47 Найти цитируемый пост)
У меня на ИЕ 6+ всё идеально. 

у меня IE6+ и багов уже не вижу. smile

Добавлено @ 17:06 
надо ещё и под под оперой потестировать, но я оперой не пользуюсь и поэтому многих тонкостей не знаю - вопрос:

"Кто сможет потестировать под оперой?"
PM WWW GTalk Jabber   Вверх
Cr@$h
Дата 2.10.2006, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
***


Профиль
Группа: Участник Клуба
Сообщений: 1693
Регистрация: 3.4.2005
Где: Санкт-Петербург, Россия

Репутация: нет
Всего: 41



Цитата(pythonwin @  2.10.2006,  17:58 Найти цитируемый пост)
"Кто сможет потестировать под оперой?" 

Я, вечером.
PM MAIL ICQ   Вверх
pythonwin
Дата 2.10.2006, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 1
Всего: 36



Цитата(Cr@$h @  3.10.2006,  00:11 Найти цитируемый пост)

Я, вечером.

хорошо! smile
PM WWW GTalk Jabber   Вверх
pythonwin
Дата 3.10.2006, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 1
Всего: 36



Цитата(Cr@$h @  3.10.2006,  00:11 Найти цитируемый пост)

Я, вечером. 

Какие результаты? smile

Это сообщение отредактировал(а) pythonwin - 3.10.2006, 14:37
PM WWW GTalk Jabber   Вверх
S.A.P.
Дата 3.10.2006, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2664
Регистрация: 11.6.2004

Репутация: 8
Всего: 71



pythonwin, плачевные  smile . В опере ctrl [ и ctrl ] - это переход взад/вперед.
PM MAIL   Вверх
pythonwin
Дата 3.10.2006, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 1
Всего: 36



Цитата(S.A.P. @  3.10.2006,  21:41 Найти цитируемый пост)
pythonwin, плачевные  smile . В опере ctrl [ и ctrl ] - это переход взад/вперед. 

smile  
S.A.P., спасибо!
тогда можно будет для оперы их заменить на что-то другое.

Добавлено @ 14:53 
чем можно заменить в опере "Ctrl + ]" и "Ctrl + ["?
PM WWW GTalk Jabber   Вверх
Zeroglif
Дата 3.10.2006, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 28
Всего: 66



Цитата(pythonwin @  3.10.2006,  14:47 Найти цитируемый пост)
чем можно заменить в опере "Ctrl + ]" и "Ctrl + ["?

Чем угодно в настройках горячих клавиш Оперы. Это уже проблема пользователя. Или хочешь пользоваться привычными клавишами Оперы или привычными клавишами индента. smile 

PM MAIL WWW   Вверх
pythonwin
Дата 3.10.2006, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 1
Всего: 36



Цитата(Zeroglif @  3.10.2006,  22:07 Найти цитируемый пост)

Чем угодно в настройках горячих клавиш Оперы. Это уже проблема пользователя. Или хочешь пользоваться привычными клавишами Оперы или привычными клавишами индента.

т.е. предлагаешь пользователям перенастроить в опере горячие клавиши?
PM WWW GTalk Jabber   Вверх
Zeroglif
Дата 3.10.2006, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 28
Всего: 66



К примеру, в в Опере клавиши CTRL+J настроены на Ссылки на странице, а здесь, на форуме - это тег движущегося текста. Мне нужно просить винград переделать шорткат этого тега? Не думаю.

Это сообщение отредактировал(а) Zeroglif - 3.10.2006, 15:40
PM MAIL WWW   Вверх
pythonwin
Дата 3.10.2006, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 1
Всего: 36



Цитата(Zeroglif @  3.10.2006,  22:32 Найти цитируемый пост)
hgh 

не понял.  
PM WWW GTalk Jabber   Вверх
Zeroglif
Дата 3.10.2006, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 28
Всего: 66



Цитата(pythonwin @  3.10.2006,  15:35 Найти цитируемый пост)
не понял.

Сорри за абракадабру. Энтер нажал случайно. То ли локтем, то ли головой. smile

Я тебе предлагал вариант TAB/SHIFT+TAB, будет в опере работать без изменения горячих клавиш. Но проще настроить Оперу. smile

PM MAIL WWW   Вверх
pythonwin
Дата 3.10.2006, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 1
Всего: 36



Цитата(Zeroglif @  3.10.2006,  22:45 Найти цитируемый пост)

Сорри за абракадабру. Энтер нажал случайно. То ли локтем, то ли головой. smile

Бывает!  smile 
Цитата(Zeroglif @  3.10.2006,  22:45 Найти цитируемый пост)

Я тебе предлагал вариант TAB/SHIFT+TAB, будет в опере работать без изменения горячих клавиш. Но проще настроить Оперу. smile


Zeroglif, спасибо! я тебя понял! smile

Cr@$h, что скажешь?
PM WWW GTalk Jabber   Вверх
Cr@$h
Дата 3.10.2006, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
***


Профиль
Группа: Участник Клуба
Сообщений: 1693
Регистрация: 3.4.2005
Где: Санкт-Петербург, Россия

Репутация: нет
Всего: 41



Цитата(pythonwin @  3.10.2006,  15:36 Найти цитируемый пост)
Какие результаты? 

У меня всё работает.
Цитата(S.A.P. @  3.10.2006,  15:41 Найти цитируемый пост)
pythonwin, плачевные   . В опере ctrl [ и ctrl ] - это переход взад/вперед.

И такого не наблюдаю, всё нормально.
Цитата(Zeroglif @  3.10.2006,  16:45 Найти цитируемый пост)
 тебе предлагал вариант TAB/SHIFT+TAB

Tab в IE заставляет бегать по всем элементам страницы. ИМХО оставить как есть, зачем менять. В моей Опере почему-то всё нормально.
PM MAIL ICQ   Вверх
pythonwin
Дата 3.10.2006, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 1
Всего: 36



что собираем подписи и просим администрацию внедрить?
PM WWW GTalk Jabber   Вверх
Cr@$h
Дата 3.10.2006, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
***


Профиль
Группа: Участник Клуба
Сообщений: 1693
Регистрация: 3.4.2005
Где: Санкт-Петербург, Россия

Репутация: нет
Всего: 41



Цитата(pythonwin @  3.10.2006,  18:22 Найти цитируемый пост)
что собираем подписи и просим администрацию внедрить? 

Да, теперь всё готово, ядумаю. воя идея, предлагаю тебе же и создать тему в Обсуждении. Предоставить скрипт, указать темы, где всё обсуждалось, сказать, что он оттестировался. Попросить внедрить его в обработку этих клавиш на всех форумах. Потом после внедрения напишу в новостях Винграда и на шапке Python (с разработчиками).
PM MAIL ICQ   Вверх
pythonwin
Дата 3.10.2006, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 1
Всего: 36



Cr@$h, Хорошо!
Но только завтра - поздно уже smile




PM WWW GTalk Jabber   Вверх
Cr@$h
Дата 3.10.2006, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
***


Профиль
Группа: Участник Клуба
Сообщений: 1693
Регистрация: 3.4.2005
Где: Санкт-Петербург, Россия

Репутация: нет
Всего: 41



 smile Утро вечера мудренее.  smile 
PM MAIL ICQ   Вверх
pythonwin
Дата 4.10.2006, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 1
Всего: 36



Цитата(Cr@$h @  4.10.2006,  00:48 Найти цитируемый пост)

Да, теперь всё готово, ядумаю. воя идея, предлагаю тебе же и создать тему в Обсуждении. Предоставить скрипт, указать темы, где всё обсуждалось, сказать, что он оттестировался. Попросить внедрить его в обработку этих клавиш на всех форумах. Потом после внедрения напишу в новостях Винграда и на шапке Python (с разработчиками).

создал тему внедрение вставки/удалении 4-х пробелов при нажатии "Ctrl+]"/"Ctrl+["


PM WWW GTalk Jabber   Вверх
Zeroglif
Дата 4.10.2006, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 28
Всего: 66



Немножко прокомментировал скрипт, чтоб было понятно, если будут править, менять чего-нибудь, оптимизировать и т.п., внедрять, в общем. Всё. Пост сдал. smile

Код

    var ZRGLF = function () {
        /* собсно это и есть типа индент такой, 4 пробела, можно и 2 или 20...*/
        var p = '    ';
        /* инициализирующая функция, в ней вызов функции, прикрепляющей обработчик,
        первый аргумент - textarea, меняем его по-желанию или добавляем вызовы*/
        function I() {   
            E(document.getElementsByTagName('textarea')[0], 'keydown', F, 1);
        }
        /* функция, прикрепляющая обработчик, выглядит стрёмно, но я к ней привык
        последний параметр (s) может быть числом 1 (прикрепить) или 0 (открепить), 
        но этому скрипту это по-барабану, объяснил, чтоб не пугались, остальные 
        параметры обычные - объект, имя события, функция*/
        function E(o, e, f, s) {
            var p = '', b = ['remove', 'add', 'detach', 'attach'];
            (o[b[s]+'EventListener'] || (p = 'on', o[b[s+2]+'Event']))(p + e, f, false);
        }
        /* основная функция, в ней всё и происходит*/
        function F() {
            /* e - это объект события, он автоматом приходит в эту функцию первым аргументом,
            a - кнопки индента, b - кнопки анинтдента, n - textarea*/
            var e  = arguments[0],
                n = e.target,
                a = (e.ctrlKey && String.fromCharCode(e.keyCode).match(/^\u00FD|\]|\u042A$/i)),
                b = (e.ctrlKey && String.fromCharCode(e.keyCode).match(/^\u00FB|\[|\u0425$/i));           
            if (a || b) {
                /* если IE или Opera (они поддерживают selection)*/
                if (document.selection) {
                    var r = document.selection.createRange(), o = window.opera, r2, t, c = 'character';
                    /* идея в том, чтобы выделить ПОЛНОСТЬЮ строку (строки), где стоит курсор или где 
                    местами есть выделение, соответственно нам нужно расширить текстовый диапазон налево (направо) до
                    метки новой строки (\r в IE) или (\n в Opera) или до начала/конца textarea value. Функция работает
                    так: создаём дубликат диапазона, расширяем этот дубликат на 1 символ влево (вправо).
                    Затем запускаем цикл, который должен остановиться, когда мы или упрёмся в метку новой строки или
                    в начало (конец) textarea value. В цикле наращивается число шагов (i), на это самое число мы 
                    должны потом сдвинуть реальный диапазон (не дубликат). Параметр m - это или 'moveStart' (идём налево) 
                    или 'moveEnd' (идём направо), в первом случае шаг отрицательный, во втором - наоборот.*/                   
                    function F(m, n) {
                        var r2 = r.duplicate(), l = r.text.length, s = (n) ? -1 : 1, i = 0;
                        r2[m](c, s);
                        while (r2.text.length > l &&
                            r2.text.charAt(n || r2.text.length - 1) != ((o) ? '\n' : '\r')) {
                            l = r2.text.length;
                            r2[m](c, s);
                            i--;
                        } 
                       return i;
                    }
                    /* расширяем диапазон влево*/
                    r.moveStart(c, F('moveStart', '0'));
                    /* расширяем диапазон вправо, но предварительно определяем, не зацепили ли мы выделением скрытый
                    символ \r справа, для этого создаём дубликат, делаем шаг вправо на один символ и сразу сравниваем длины
                    текста в дубликате и текста в оригинале. Если разница = 3, то мы зацепили \r. В этом случае нам нет
                    необходимости расширять диапазон вправо, а нужно сделать один шаг влево, чтобы убрать \r из диапазона*/
                    (((r2 = r.duplicate()).moveEnd(c, 1), r2.text.length) - r.text.length != 3)
                        ? r.moveEnd(c, - F('moveEnd'))
                        : r.moveEnd(c, -1);
                    /*тут всё просто, меняем текст внутри текстового диапазона в зависимости от нажатых кнопок*/
                    r.text = (t = (b) 
                        ? r.text.split('\n' + p).join('\n').replace(eval('/^' + p + '/'), '')
                        : p + r.text.split('\n').join('\n' + p));
                    /*двигаем диапазон, для Оперы на длину нового текста, а для IE с поправкой на скрытые \r*/
                    r.moveStart(c, (!o)
                        ? t.split('\r').length - t.length - 1
                        : - t.length);
                    /*выделяем*/
                    r.select();
                /* если FF, Seamonkey и проч... (не поддерживают selection)*/
                } else {
                    /*по-моему всё более-менее понятно, выделяем вставляем, снова выделяем*/
                    var ss = 'selectionStart', se = 'selectionEnd', x = n[ss], y = n[se], l = n.value.length, z;                                   
                    x = (n[ss] = n.value.slice(0, x).lastIndexOf('\n') + 1);
                    y = (n[se] = (((z = n.value.slice(y, l)).indexOf('\n') != -1) ? y + z.indexOf('\n') : l));
                    if (a) {
                        n.value = n.value.slice(0, x) + p + n.value.slice(x, y).split('\n').join('\n' + p) + n.value.slice(y, l);
                        n[ss] = x;
                        n[se] = y + n.value.length - l;
                    } else {
                        n.value = n.value.slice(0, x) + n.value.slice(x, y).split('\n' + p).join('\n').replace(eval('/^' + p + '/'), '') + n.value.slice(y, n.value.length);                  
                        n[ss] = x;
                        n[se] = y - (l - n.value.length);
                    }               
                }
                /*отменяем стандартные действия для выбранных кнопок, Опера подглючивает*/                 
                e.preventDefault ? e.preventDefault() : e.returnValue = false;
                return false;
            }
        }
        /*вешаем обработчик на окно*/
        window.onload = I;
    /*вызываем самоё себя*/
    }();

PM MAIL WWW   Вверх
pythonwin
Дата 4.10.2006, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 1
Всего: 36



Zeroglif, спасибо!
+1
PM WWW GTalk Jabber   Вверх
12345c
Дата 4.10.2006, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



Почитал эту тему первый раз и поудивлялся - где используют такую кодировку клавиш? Обычно в редакторах (UltraEdit - пример) добавляют табы или пробелы, нажимая на клавишу Tab, если выделена строка или группа строк (выделение должно охватывать хотя бы 1 перенос строки). Удаление табов или группы пробелов - Shift+Tab.

Использование Ctrl+[ , когда курсор просто в строке - очень уж неочевидно.
PM WWW   Вверх
GIK
Дата 4.10.2006, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый человек
**


Профиль
Группа: Участник
Сообщений: 985
Регистрация: 3.6.2005
Где: я только не небыв ал

Репутация: 6
Всего: 14



А что-за конструкция в строке 15, зачем там две скобки?


--------------------
Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!!
Программирование - это не деятельнось! Программирование - это состояние души!
Бог - самый крутой программист.
PM MAIL ICQ   Вверх
pythonwin
Дата 4.10.2006, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 1
Всего: 36



Цитата(12345c @  4.10.2006,  23:07 Найти цитируемый пост)
Использование Ctrl+[ , когда курсор просто в строке - очень уж неочевидно. 

кому как, но питонщика например это нормально! smile
хотя возможно и в других языках используется.

12345c, сможешь внедрить этот скрипт к нам на форум?

Цитата(GIK @  4.10.2006,  23:19 Найти цитируемый пост)
А что-за конструкция в строке 15, зачем там две скобки? 

наверное - функциональное программирование в JS smile

Это сообщение отредактировал(а) pythonwin - 4.10.2006, 17:25
PM WWW GTalk Jabber   Вверх
12345c
Дата 4.10.2006, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



Скрипты JS к форуму писал Sardar, насколько я понимаю, поэтому внедрять лучше ему, чтобы не нарушить некоторые другие идеи.

Да и внедрять надо совсем не этот скрипт, а взять функционал кнопок Ж,Н,П,... и базироваться на нём. Вопросы совместимости браузеров решатся сами собой, так как имеющийся скрипт совместимый.

Потом, возникают вопросы отображения функциональности, затрагивается дизайн. И остаётся вопрос, почему обделять другие форумы и почему делать только по Ctrl+[ .
PM WWW   Вверх
Zeroglif
Дата 4.10.2006, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 28
Всего: 66



Цитата(12345c @  4.10.2006,  18:24 Найти цитируемый пост)
Да и внедрять надо совсем не этот скрипт, а взять функционал кнопок Ж,Н,П,... и базироваться на нём. Вопросы совместимости браузеров решатся сами собой, так как имеющийся скрипт совместимый.

Согласен. В принципе, хозяину всего js-наполнения форума (Sardar?) удобнее перебрать скрипт под себя или даже написать свой (решение проблем IE понятны), под свою модульную систему. Клавиши оттуда вытащить и проч.
Цитата(12345c @  4.10.2006,  16:07 Найти цитируемый пост)
Почитал эту тему первый раз и поудивлялся - где используют такую кодировку клавиш? Обычно в редакторах (UltraEdit - пример) добавляют табы или пробелы, нажимая на клавишу Tab, если выделена строка или группа строк (выделение должно охватывать хотя бы 1 перенос строки). Удаление табов или группы пробелов - Shift+Tab.

Мне было тоже енто весьма удивительно, изначально я вставил в скрипт дополнительно обычную схему индента по TAB, но заказчик заругался. smile Потому убрал. Но пока сам тестил непостижимым образом привык к этому сочетанию, клавиши неплохо под руку ложатся. Более того я вдруг осознал для себя, что мне не мешает, а наоборот, помогает то, что сдвигается вся строка при одиноком курсоре, а не только правая от него часть (может я где-то в глубине души питонщик?)...
Цитата(GIK @  4.10.2006,  16:19 Найти цитируемый пост)
А что-за конструкция в строке 15, зачем там две скобки?

Какие две из шести круглых и восьми квадратных? smile


Это сообщение отредактировал(а) Zeroglif - 4.10.2006, 22:40
PM MAIL WWW   Вверх
Sardar
Дата 4.10.2006, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Цитата(Zeroglif @  4.10.2006,  18:25 Найти цитируемый пост)
В принципе, хозяину всего js-наполнения форума (Sardar?) удобнее перебрать скрипт под себя или даже написать свой (решение проблем IE понятны), под свою модульную систему. Клавиши оттуда вытащить и проч.

Помимо меня писали скрипты sergej.z(транслит, подсветка, селекция и т.д.) и Girder (всё самое последнее вкусное). На досуге посмотрю, перенсу на текущие форумские скрипты.


Сейчас занят одной, на первый взгляд бесполезной, но интересной фичей - расширяю функционал TextAreaSelectionHelper'a, что бы человеческая селекция была. Для вас это может означать например ctrl+shift+T, появляються: [][/]; кусор в первом теге, пишем тег, он одновременно пишеться в обоих тегах; затем tab, курсор прыгает в текст между тегами, пишем содержимое; снова tab и мы после закрывающего тега (shift+tab - перед открывающим). Конечно многое можно на этом построить smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
pythonwin
Дата 5.10.2006, 07:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 1
Всего: 36



Цитата(12345c @  5.10.2006,  01:24 Найти цитируемый пост)
И остаётся вопрос, почему обделять другие форумы и почему делать только по Ctrl+[ . 


Цитата(pythonwin @  25.8.2006,  15:24 Найти цитируемый пост)
где можно применить 4 пробела для увеличиния читабельности кода:
1) Python (обязательно - основной принцип групировки операторов)
2) JavaScript
3) HTML
4) CSS
5) PHP
6) C++
7) Pascal и Delphi


теперь почему именно Ctrl+] и Ctrl+[
1) этот набор клавиш используется в IDLE питона и поэтому писать код питона привычней Ctrl+] и Ctrl+[
2) если заменить их на табы, то осложниться жизнь у пользователей, которые пользуются Tab, для навигации

Добавлено @ 07:28 
хотя лучше, чтобы пользователь мог сам для себя настраивать горячие клавиши. smile
PM WWW GTalk Jabber   Вверх
smartov
Дата 5.10.2006, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 7
Всего: 259



Zeroglif, красивый код! Здорово.
PM MAIL   Вверх
pythonwin
Дата 5.10.2006, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 1
Всего: 36



все кто за этот код и за внедрение его на форуме - поддержите пожалуйста внедрение вставки/удалении 4-х пробелов при нажатии "Ctrl+]"/"Ctrl+["
PM WWW GTalk Jabber   Вверх
pythonwin
Дата 5.10.2006, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 1
Всего: 36



http://forum.vingrad.ru/index.php?showtopi...st&p=878528

Цитата

Точто он сам посебе работает - хороши конечно. Вопрос в том, насколько это будет гармонировать с сущ. скриптами форума. Там и так хендлеров на поле ввода понавешено. Сделайте тестовую страничку форума и прикрепите туда скрипт. Потом тесты. Потом посмотрим...

PM WWW GTalk Jabber   Вверх
pythonwin
Дата 5.10.2006, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 1
Всего: 36



внедрение вставки/удалении 4-х пробелов при нажатии "Ctrl+]"/"Ctrl+["

Цитата(sergejzr @  5.10.2006,  20:41 Найти цитируемый пост)
Girder, если надо, то надо smile К тому же это только в питонском разделе будет вставлятся. Просто ребята должны дать готовый модульный вариант а-ля взять и поставить. А пока здесь только реализация самого алгоритма. Никто из нас адаптацией заниматься не будет.. 


PM WWW GTalk Jabber   Вверх
12345c
Дата 5.10.2006, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



В общем, если админы согласны, то задача такая. Вырезать страницу форума со скриптами и сделать добавку наподобие кнопок "Жирный" и т.п. Результат будет в виде кнопки с квадратными скобками в ряду других. Вот кто какую работу может выполнить - выполняйте.


Первую часть работы сделал - взял страницу, скопировал скрипты, и стили для красоты, а может, и для работы важны будут. Убрал рекламный мусор. Сменил пути к скриптам. Теперь страница ничего, кроме рисунков, дополнительно не просит. Но они неважны для скриптов.

Далее, смотрим, что кнопки генерируются скриптом (function getHtml_f), а функции, вызываемые по клику кнопки, лежат в ToolMenu.js (function ubbc_wrapTags, ...) и в MyLib.js . Например

Код
TextAreaSelectionHelper.prototype.setSelectedText=
function(a,b){if(this.iesel&&(window.opera||this.iesel.parentElement()
==this.target)){if(typeof(b)=="string"){var 
l=this.iesel.text.length;this.iesel.text=a+this.iesel.text+b;this.iesel.moveEnd("character",-b.length);this.iesel.moveStart("character",-l)}else this.iesel.text=a;this.iesel.select()}else if ...
Задача - сделать подобную и согласовать то, куда её включить - в общие скрипты или в отдельный для форума по Питону. Аналогично - включение кнопки вставки отступов - везде или в форум по Питону.

На основании скопированных файлов можно писать дополнение, согласовав вышеназванные вопросы.

(Заодно, я в форуме по JS в своё время сделал полезный скрипт поиска по группе разделов, который стоит сейчас в приветствии. Можно распространить возможность вставки скрипта в любой форум. Для каждого будет своя группа родственных разделов. Например, в теории веб-дизайна, надо охватывать поиск по вёрстке сайтов, по работе с готовыми скриптами и прочее.)

Ещё, если касаться JS-скриптов, то разработан скрипт группового выделения опций в мультиселект-списке (лежит в разделе "Наши скрипты"). Не мешало бы его использовать при выборе области поиска на странице поиска.

Эту тему тоже можно перенести в раздел "Наши скрипты", если (и когда) автор темы пожелает.

(Где тут файл прикрепляют? не нашёл, разместил на хостинге:  http://javascript.aho.ru/files/vingradScripts.rar )

Добавлено @ 18:08 
(27 КБа в архиве, пользуйтесь, если кто будет писать скрипт, для экономии времени на обработку примера страницы.)
PM WWW   Вверх
pythonwin
Дата 5.10.2006, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 1
Всего: 36



12345c, спасибо! smile

но разбираться буду завтра - поздно уже! smile
PM WWW GTalk Jabber   Вверх
12345c
Дата 5.10.2006, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



Кстати, если использовать только в Питоне, то скрипт можно разместить в "Правилах форума", для чего достаточно обратиться к модератору. Поэтому можно вставить и сделанный скрипт, разница будет в том, что он займёт больше примерно на 1 КБа кода на обработку курсора и выделения текста в разных бр-рах. А в имеющихся скриптах эта обработка уже есть. Нужно всего 2 числа - selStart и selEnd (или как их зовут здесь), чтобы указать начало и конец выделения в textarea или есть ли оно вообще (или при равенстве чисел - указание на наличие курсора). Остальное - не более 500 байт.
PM WWW   Вверх
pythonwin
Дата 5.10.2006, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 1
Всего: 36



12345c, этот скрипт можно использовать не только в питоне. smile
PM WWW GTalk Jabber   Вверх
Cr@$h
Дата 6.10.2006, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
***


Профиль
Группа: Участник Клуба
Сообщений: 1693
Регистрация: 3.4.2005
Где: Санкт-Петербург, Россия

Репутация: нет
Всего: 41



Вот именно. Предлагаю вводить везде. Создаю опросник, который обещал.
PM MAIL ICQ   Вверх
pythonwin
Дата 9.10.2006, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 1
Всего: 36



Цитата(Cr@$h @  7.10.2006,  00:34 Найти цитируемый пост)
Вот именно. Предлагаю вводить везде. Создаю опросник, который обещал. 


Cr@$h, ссылку дай пожалуйста. smile
PM WWW GTalk Jabber   Вверх
Cr@$h
Дата 10.10.2006, 00:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
***


Профиль
Группа: Участник Клуба
Сообщений: 1693
Регистрация: 3.4.2005
Где: Санкт-Петербург, Россия

Репутация: нет
Всего: 41



PM MAIL ICQ   Вверх
pythonwin
Дата 10.10.2006, 07:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 1
Всего: 36



Цитата(Cr@$h @  10.10.2006,  07:22 Найти цитируемый пост)
Автоматизация вставки/удаления 4-х пробелов 


Cr@$h, спасибо! smile
PM WWW GTalk Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.2467 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.