Z lenistwa cz. IV

03 września, 2007

Mam dziś do zaprezentowania swój kolejny UserJS, przygotowany znów z myślą o serwisie Wykop.pl.

Image Hosted by ImageShack.us

Całkiem niedawno Wykop zyskał nową zaawansowaną wyszukiwarkę - pozwala ona sortować rezultaty wyszukiwania. Jednak żeby skorzystać z bardziej zaawansowanych opcji trzeba wpierw wpisać hasło do wyszukiwania, przejść na stronę wyników i dopiero tam można wybrać bardziej zaawansowane parametry wyszukiwania.

Nie ukrywam, że jest to według mnie nieprzemyślane. I dlatego właśnie powstał mój skrypt. Dodaje on za przyciskiem "szukaj" nowy przycisk "opcje" - po jego kliknięciu pojawią się zaawansowane opcje wyszukiwania, znane ze strony do której przenosi nas wyszukiwarka.

Ponadto skrypt pozwala od razu określić domyślne wartości checkboksów z uwzględnianymi w wyszukiwaniu właściwościami linków za pomocą linijki:

var conf = [false,true,true,true,true];

Pierwszy element tablicy (true lub false) decyduje o tym czy zaawansowane opcje mają być pokazywane od razu czy dopiero po kliknięciu przycisku "opcje". Elementy od drugiego do piątego odpowiadają za domyślne zaznaczenie checkboksów pozostałych opcji wyszukiwania.

Po instalacji tego skryptu prezentowana linijka będzie miała wpływ na wyniki wyszukiwania bez względu na to czy skorzystamy z przycisku "opcje" czy nie. U mnie na przykład wyszukiwarka domyślnie nie korzystała z pola URL, a teraz dzięki wspomnianej linijce kodu to robi domyślnie.

Skrypt można pobrać w wersji dla Firefoksa ze strony userscripts.org .

Oczywiście przygotowałem też wersję dla Opery :

// ==UserScript==
// @name                        Wykop advanced search button
// @description         This script add advanced search options to standard search
// @author                      Dziudek
// @version             0.1
// @include             http://*wykop.pl*
// ==/UserScript==

window.addEventListener("DOMContentLoaded",function(){

var d = document;
var conf = [false,true,true,true,true];
function $add(el){return d.createElement(el);}
function $(el){return d.getElementById(el);}

var f = $("search-form");
f.setAttribute("style","text-align: right;");

var b = $add("input");
b.setAttribute("type","button");
b.setAttribute("class","submit-button");
b.setAttribute("value","opcje");
b.addEventListener("click",hide,false);
function hide(){(conf[0]) ? $("adv-search").style.display = "none" : $("adv-search").style.display = "block";conf[0] = !conf[0];}

f.childNodes[1].appendChild(b);

var fs = $add("fieldset");
function checked(i){i++;if(conf[i]){return 'checked="checked"';}else{return false;}}
if(conf[0]){var dis = 'block';}else{var dis = 'none';}
fs.setAttribute("style","display:"+dis+";margin-top: -17px;");
fs.setAttribute("id","adv-search");
fs.innerHTML = '<select name="zakres" id="select-zakres" style="margin-right: 0;">' + 
                                        '<option value="1" selected="selected">wszystkie</option>' + 
                                        '<option value="2">wykopane</option>' + 
                                        '<option value="3">nie wykopane</option>' +
                                '</select>' +
                                '<input type="checkbox" class="chk-box" name="pole[tytul]" id="poletytul" ' + checked(0) + '/><label for="poletytul">Tytu\u0142</label>' +
                                '<input type="checkbox" class="chk-box" name="pole[opis]" id="poleopis" ' + checked(1) + '/><label for="poleopis">Opis</label>' +
                                '<input type="checkbox" class="chk-box" name="pole[URL]" id="poleURL" ' + checked(2) + '/><label for="poleURL">URL</label>' +       
                                '<input type="checkbox" class="chk-box" name="pole[tag]" id="poletag" ' + checked(3) + '/><label for="poletag">Tagi</label>';
f.appendChild(fs);

},false);

Z lenistwa cz. III

02 września, 2007

W sumie po dzisiejszej nocy żałuję, że nigdy nie miałem okazji zauważyć iż Opera nie obsługuje natywnie metody forEach obiektu Array... I ta niewiedza była główną przyczyną tego, że niektóre z moich skryptów nie działały (chodzi oczywiście o UserJS).

No ale mam to już za sobą i mam dla niektórych z Was - operowców i leniwych dobre wiadomości - dla operowców - przygotowałem Wykop Spam Cleaner 0.2 oraz skrypty do szybkiego dodawania skrótów i skrótowców na Joggerze w wersji dla Opery. Informacja dla leniwych (takich jak ja :P) - dzięki swojemu pomysłowi i radach ze strony Off'a stworzyłem jeszcze lepszą wersję skryptu do dodawania skrótów i skrótowców w panelu administracyjnym - tym razem naprawdę wymaga jednego kliknięcia, bo zamiast pokazywania listy dostępnych skrótów od razu podmienia te wcześniej zdefiniowane - szybciej już się chyba nie da :P

WAŻNA UWAGA: aby dany skrót został podmieniony musi zawierać bezpośrednio przed znak $ na przykład : $IMHO dzięki temu skrypt uniknie większości problemów użytkowych. Poza tym ów znak pozostawia nam wybór - czy chcemy ubrać dany skrót w tagi czy nie ;)

Czytaj dalej...

Z lenistwa cz. II

01 września, 2007

Chciałbym zaprezentować mój kolejny UserJS - tym razem napisany z myślą o panelu administracyjnym Joggera.

Nie wiem jak innych, ale mnie doprowadza do mdłości myśl, że przy formatowaniu wpisu wypadałoby opisać wszystkie skróty i skrótowce - i z reguły tego nie robię, bo wklepywanie rozwinięcia skrótu mnie drażni ;) Ale kto powiedział, że muszę to zawsze wklepywać ? Stworzyłem więc skrypt, który w edytorze wpisu dodaje nam dwa przyciski - ABBR i ACRONYM, po ich kliknięciu rozwinie się lista określonych przez użytkownika skryptu, skrótów i skrótowców. Domyślnie umieściłem kilka takowych w skrypcie, oczywiście listę można łatwo rozbudować według prezentowanego w skrypcie schematu:

var ABBR = [
        ["mln","milion(ów)"]
];

var ACRONYM = [
        ["IMHO","In My Humble Opinion"],
        ["TIA","Thanks In Advance"],
        ["OMG","Oh My God !"]
];

Myślę, że dzięki temu skryptowi dodanie skrótowca IMHO czy stworzenie zapisu 100 mln będzie o wiele wygodniejsze :)

Trzy uwagi użytkowe:

  • osoby korzystające z rozdzielczości mniejszych niż 1024x768 (są tacy ?) powinni się zainteresować linijkami 33. i 63., a dokładniej właściwością margin-left ;)
  • aby zamknąć otwartą listę trzeba albo wybrać jedną z pozycji na niej, albo kliknąć przycisk ją rozwijający - nie kombinowałem już z mouseover, a uzyskanie efektu hover wymagałoby dodania UserCSS (albo o czymś nie wiem :P)
  • przyciski są w pierwszym rzędzie przycisków, a nie w drugim, bo zwijanie drugiego rządka powodowało niedogodności związane z dostępem do rozwijanej listy.

Skrypt można pobrać ze strony userscripts.org. Wersji dla Opery póki co nie ma bo cały czas nie wiem dlaczego wszelkie skrypty wywalają mi się przy korzystaniu z metody forEach dla tablic i obiektów...

Mootools 1.1 - Sortables.js

01 września, 2007

Zajmiemy się dziś tworzeniem dającej się posortować grupy elementów - z pomocą przyjdzie nam plugin sortables.js . Plugin ten zawiera klasę Sortables, która w procesie tworzenia docelowego efektu odwali za nas czarną robotę - my musimy jedynie określić kilka opcji i argumentów. Lista (uporządkowana, nieuporządkowana, ewentualnie lista definicji) wydaje się w wypadku tego pluginu najbardziej odpowiednim elementem do uporządkowania.

Skupimy się więc na stworzeniu przykładu w którym użytkownik będzie mógł ustalić kolejność elementów listy nieuporządkowanej (mogłaby być to lista uporządkowana, ale wtedy mało logiczne wydaje się jej układanie w innej kolejności skoro jest już z założenia uporządkowana ;) ).

Czytaj dalej...