1

Тема: HTA+JS: Поле ввода IP адреса (модуль)

Собственно, было несколько утилит с полями ввода IP, которые модифицировались в зависимости от пожеланий трудящихся по отдельности. Попробовал объединить наработки - получилось несколько громоздко, зато, вроде, универсально. Не знаю, понадобится ли кому такой зверёк, но мнение профессионалов услышать хотелось бы.

<job id="sfx"><comment>

!!!  Сохраните этот текст как файл с раширением .wsf и запустите  !!!

</comment><object id="a" progid="Shell.Application" />
<object id="f" progid="Scripting.FileSystemObject" />
<object id="s" progid="ADODB.Stream" />
<object id="x" progid="MSXML2.DOMDocument" />
<script type="text/jscript" language="JScript">
var c=getResource('b'),d=f.getBaseName(/filename="(.+)"/.exec(c)[1]),
r=x.createElement('root'),y=0,
z=f.getSpecialFolder(2)+'\\'+f.getBaseName(f.getTempName())+'.zip';
r.text=c.replace(/^\s*(.+\s+){4}/,''),r.dataType='bin.base64';
s.type=1,s.open(),s.write(r.nodeTypedValue),s.saveToFile(z),s.close();
if(f.fileExists(z)){while(f.folderExists(d+(y?' '+y:'')))y++;
f.createFolder(d+(y?' '+y:''));
for(var i=0;i<a.nameSpace(z).items().count;i++){
a.nameSpace(f.getAbsolutePathName(d+(y?' '+y:''))).copyHere(
a.nameSpace(z).items().item(i),0);}f.deleteFile(z);}
</script><resource id="b">

MIME-Version: 1.0
Content-Type: application/octet-stream; name="module IP edit.zip"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="module IP edit.zip"

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

</resource></job>

Комментарии, справку и пр. можно выкинуть - получится полегче.

2

Re: HTA+JS: Поле ввода IP адреса (модуль)

Нормально. Рекомендую добавить обработку стрелок: думаю, что было бы удобнее свободно двигаться влево, вправо. То есть у пользователя бы создавалось ощущение работы с целым полем ввода. Выделить нельзя поле ввода, а это печально.

Посмотрел код, я бы по-другому сделал: целое поле ввода (или 1 span с contentEditable), добавил бы обработчики нажатия клавиш (отдельно табов, стрелок), вставки с буфера обмена, отслеживание работы с выделенным содержимым (например, можно отличать когда пользователь кликает по одному октету от того, когда пользователь выделяет часть одного октета и соседнего).


UPD

Почитал справку, стало все понятно. Ну, сами решайте. В целом все нормально.

3

Re: HTA+JS: Поле ввода IP адреса (модуль)

Спасибо за отзыв! Про стрелки думал, но пока научился работать только с самим выделением, а определять, что слева/справа от него, но в пределах того же элемента - ещё нет. Задачка на потом