Zrobiłem skrypt który zmienia znaki, na razie taki prymitywny ale to dla tego ze nie znam JavaScript Wstawię, może komuś się przyda, na dniach się poduczę JS i zrobię OK.
kod JS ( zapisujemy jako: change-case.js w katalogu swoich skryptów )
kod:
opera.toUpperCase = function () {
for (i = 0 ; i < 100 ; i++) {
var textArea = document.getElementsByTagName('textarea')[i];
textArea.value = textArea.value.toUpperCase();
}
}
opera.toLowerCase = function () {
for (i = 0 ; i < 100 ; i++) {
var textArea = document.getElementsByTagName('textarea')[i];
textArea.value = textArea.value.toLowerCase();
}
}
a w menu.ini w sekcji: Edit Widget Popup Menu Spellcheck Word dodajemy:
Item, "NA WIELKIE LITERY" = "Go to page, "javascript:opera.toUpperCase()""
Item, "NA MAŁE LITERY" = "Go to page, "javascript:opera.toLowerCase()""
u mnie:
[Edit Widget Popup Menu Spellcheck Word]
Include, Internal Spellcheck Suggestions
Item, M_INTERNAL_SPELLCHECK_ADD_WORD = Add word
Item, M_INTERNAL_SPELLCHECK_IGNORE_WORD = Ignore word
Item, M_INTERNAL_SPELLCHECK_REMOVE_WORD = Remove word
Item, "NA WIELKIE LITERY" = "Go to page, "javascript:opera.toUpperCase()""
Item, "NA MAŁE LITERY" = "Go to page, "javascript:opera.toLowerCase()""
--------------------2
Include, Edit Widget Popup Menu Spellcheck Enabled
[edit2] zapisanie kodu w znacznikach BBCode - czytelniej i nawiasy kwadratowe są
Medium napisał(a):
Do wstawiania kodu na forum używaj znaczników [ CODE ] [ /CODE ] (spacje celowe)
Cr3dO napisał(a):
zapomniałem o bibikode, już lepiej, dziękuję
nowotny napisał(a):
Oj zaraz dostaniesz błędami po oczach... Tak powinno być:
opera.toUpperCase = function () {
var textArea = document.getElementsByTagName('textarea');
for (i = 0 ; i < textArea.length ; i++) {
textArea[i].value = textArea[i].value.toUpperCase();
}
}
opera.toLowerCase = function () {
var textArea = document.getElementsByTagName('textarea');
for (i = 0 ; i < textArea.length ; i++) {
textArea[i].value = textArea[i].value.toLowerCase();
}
}
Cr3dO napisał(a):
Originally posted by nowotny:
Oj zaraz dostaniesz błędami po oczach... Tak powinno być:
opera.toUpperCase = function () {
var textArea = document.getElementsByTagName('textarea');
for (i = 0 ; i < textArea.length ; i++) {
textArea.value = textArea.value.toUpperCase(); }
}
opera.toLowerCase = function () { var textArea = document.getElementsByTagName('textarea');
for (i = 0 ; i < textArea.length ; i++) { textArea.value = textArea.value.toLowerCase(); }
}
Mówiłem że nie znam się na JS ale masz racje, znacznie lepiej, dzięki.
p.s. @nowotny a wiesz jak operować TYLKO na zaznaczonym tekście?
Medium napisał(a):
Ja się nie znam JavaScript, ale podejrzewam, że nie jest to aż takie proste, skoro nie każdy edytor tę właściwość posiada.
"Podobne" to bardzo dobre określenie w tym przypadku, bo zamiast pola tekstowego jest tam ramka pływająca iframe, więc jest to tylko "podobne".
Jeśli chcesz pracować na zaznaczeniu z pola tekstowego, to możesz zobaczyć jak to jest np. na tym forum przy wstawianiu BBCode'u: http://static.myopera.com/community/js/postform.js , funkcja code i najbardziej istotny jej fragment:
var sel = false;
var selText = "";
//(...)
var textarea = document.forms['postform'].postcontent;
textarea.focus();
if ( textarea.selectionStart != textarea.selectionEnd ) {
selText = textarea.value.substring(textarea.selectionStart, textarea.selectionEnd);
sel = selText.length != 0;
}//(...)
Cr3dO napisał(a):
Originally posted by Saskatchewan:
"Podobne" to bardzo dobre określenie w tym przypadku, bo zamiast pola tekstowego jest tam ramka pływająca iframe, więc jest to tylko "podobne"...
Nie ważne że to ifram. Interakcje daje JS, nie jest to w HTMLu czy PHP. Może se być iframem gdyż to tylko osadzenie
Originally posted by Saskatchewan:
var sel = false;
var selText = "";
//(...)
var textarea = document.forms['postform'].postcontent;
textarea.focus();
if ( textarea.selectionStart != textarea.selectionEnd ) {
selText = textarea.value.substring(textarea.selectionStart, textarea.selectionEnd);
sel = selText.length != 0;
}//(...)
a to nie wprowadza tego co chce.
p.s.
Medium chciałaś to, więc dlaczego nie sprawdziłaś?
Medium chciałaś to, więc dlaczego nie sprawdziłaś?
Bo tylko czasem odczuwam taką potrzebę... Zwykle jednak szybciej wychodzi wyłączyć capslok i wpisać pól linijki od nowa.
Saskatchewan napisał(a):
Originally posted by Cr3dO:
a to nie wprowadza tego co chce.
Ale pobiera zaznaczenie z textarea, a chyba tego chciałeś?
nowotny napisał(a):
Ok... po paru dniach główkowania mam coś takiego:
// ==UserScript==
// @name Simple text formatter
// @author nowotny
// @version 0.1
// @include *
// ==/UserScript==
var modify_text;
document.addEventListener('DOMContentLoaded', function(){
var clear_selection = function (){
var elems = get_elems();
for(i=0;i<elems.length;i++){
if(this!=elems[i]) elems[i].selectionStart=elems[i].selectionEnd;
}
};
var elems = get_elems();
for(i=0;i<elems.length;i++){
elems[i].addEventListener('mousedown',clear_selection,false);
//tas[i].addEventListener('mouseup',clear_selection,false);
elems[i].addEventListener('keydown',clear_selection,false);
//tas[i].addEventListener('keyup',clear_selection,false);
}
function get_elems(){
var tas = document.getElementsByTagName('textarea').toArray();
var ins = document.getElementsByTagName('input').toArray();
ins = ins.filter(function(el,i,a){return (el.type=='text')});
elems=tas.concat(ins);
return elems;
}
function mod(type,text){
switch(type){
case 'upper':
return text.toUpperCase();break;
case 'lower':
return text.toLowerCase();break;
default:
return text;
}
}
modify_text = function (type){
var elems=get_elems();
for(i=0;i<elems.length;i++){
if(elems[i].selectionStart != elems[i].selectionEnd){
var star = elems[i].selectionStart;
var end = elems[i].selectionEnd;
var val = elems[i].value.substring(star,end);
val = mod(type,val);
elems[i].value = elems[i].value.substr(0, star) + val + elems[i].value.substr(end, elems[i].textLength);
elems[i].selectionStart = star;
elems[i].selectionEnd = end;
elems[i].focus();
}
}
}
},false);
NodeList.prototype.toArray = function(){
var ary = [];
for(var i=0, len = this.length; i < len; i++)
{
ary.push(this[i]);
}
return ary;
};
Do menu kontekstowego trzeba dodać wpisy w takiej postaci:
Item, "NA WIELKIE LITERY" = "Go to page, "javascript:modify_text('upper')""
Item, "NA MAŁE LITERY" = "Go to page, "javascript:modify_text('lower')""
Inne funkcje modyfikujące tekst można dodawać w switchu w funkcji mod()...
nowotny napisał(a):
Albo bardziej kompaktowy skrypt:
// ==UserScript==
// @name Simple text formatter
// @author nowotny
// @version 0.2
// @include *
// ==/UserScript==
var modify_text;
document.addEventListener('DOMContentLoaded', function(){
var elementClicked;
document.addEventListener('contextmenu', function(e){
elementClicked = e.target;
}, false);
function mod(type,text){
switch(type){
case 'upper':
return text.toUpperCase();break;
case 'lower':
return text.toLowerCase();break;
default:
return text;
}
}
modify_text = function (type){
if(elementClicked.selectionStart != elementClicked.selectionEnd){
var star = elementClicked.selectionStart;
var end = elementClicked.selectionEnd;
var val = elementClicked.value.substring(star,end);
val = mod(type,val);
elementClicked.value = elementClicked.value.substr(0, star) + val + elementClicked.value.substr(end, elementClicked.textLength);
elementClicked.selectionStart = star;
elementClicked.selectionEnd = end;
elementClicked.focus();
}
}
},false);
Medium napisał(a):
A odwróć małe/duże?
daroc napisał(a):
No i jeszcze "title case" i "sentence case". (Duże początki każdego wyrazu i zdania) W końcu nie damy spokoju, zanim nie będzie tak dobre jak chociażby ten prościutki Notepad2. Tutaj pewnie konieczna będzie pętla po wszystkich literkach. W pętli - zamiana duże <-> małe - zamiana na duże gdy literka jest pierwsza po jakimś białym znaku - zamiana na duże gdy literka jest pierwsza po jakimś białym znaku poprzedzonym znakiem interpunkcyjnym (lub gdy biały znak jest pierwszy w zaznaczonym ciągu) Chyba że jakiś prostszy pomysł?
Cr3dO napisał(a):
Originally posted by daroc:
No i jeszcze "title case" i "sentence case". (Duże początki każdego wyrazu i zdania) W końcu nie damy spokoju, zanim nie będzie tak dobre jak chociażby ten prościutki Notepad2. Tutaj pewnie konieczna będzie pętla po wszystkich literkach. W pętli - zamiana duże <-> małe - zamiana na duże gdy literka jest pierwsza po jakimś białym znaku - zamiana na duże gdy literka jest pierwsza po jakimś białym znaku poprzedzonym znakiem interpunkcyjnym (lub gdy biały znak jest pierwszy w zaznaczonym ciągu) Chyba że jakiś prostszy pomysł?
tak jak piszesz - operacje na białych znakach, ale zamiast pętli RegExp da rade chyba
[edit]
@nowotny dziękuje za kod, działa jak chce, przerobie zaraz by miał zdania, odwrotność, etc - pisał o tym daroc
daroc napisał(a):
Może i wygodniej regexpem, ale czy szybciej? Regexp też "za darmo" (bez użycia procesora) nie chodzi. Ale do takich zastosowań to w sumie jak komu wygodnie.
andol napisał(a):
Originally posted by daroc:
No i jeszcze "title case"
„Title case” w języku angielskim nie polega na zamianie pierwszych liter wszystkich wyrazów na wielki litery. Obowiązują tu ściśle określone zasady, które można łatwo znaleźć w sieci. W języku polskim w ogóle się tego nie stosuje.
Tutaj dali sobie radę, to i wy dacie.
daroc napisał(a):
Masz rację, na przykład prepositions (a, an, the) i przyimki (on, in itp) nie powinny być pisane wielką literą (chyba że są na początku zdania). Jednak w wielu programach tak to właśnie funkcjonuje. Przykładem jest chociażby Notepad2, czy program Directory Opus. W tym ostatnim do zmiany nazw plików został stworzony skrypt w VBScript o nazwie "True title case", który robi to tak jak trzeba. Jednak ze względu na duży stopień skomplikowania w programach oryginalnie tego nie ma, zresztą w języku polskim zestaw znaków [w zasadzie wyrazów - update], które jednak chcielibyśmy zostawić małe, jest inny, więc programy straciłyby na przenośności (brak tłumaczenia na wszystkie języki, zresztą wprowadzanie takich zasad dla różnych języków to już w ogóle masakra trochę).
andol napisał(a):
Originally posted by daroc:
zresztą w języku polskim zestaw znaków, które jednak chcielibyśmy zostawić małe
W języku polskim w ogóle nie ma czegoś takiego jak „title case”.
Cr3dO napisał(a):
W total komanderze w narzędziu: Narzędzie wielokrotnej zmiany do zmian liter są 4 ustawienia:
- Wszystkie z małej - Wszystkie z DUŻEJ - Pierwsza litera duża - Pierwsza W Słowie Z Dużej
p.s. w podstawówce na lekcjach języka polskiego uczono mnie że nie ma dużych liter tylko są to wielkie.
daroc napisał(a):
Uczyli też że mówi się "do stołówki", ale jakoś nie słyszałem takiego wyrażenia w życiu codziennym chyba nigdy (zresztą raczej wywołałoby uśmiech na twarzach ludzi), przynajmniej sobie takiego faktu teraz nie przypominam.
Originally posted by andol:
W języku polskim w ogóle nie ma czegoś takiego jak „title case”.
Mam na myśli na przykład tytuły piosenek, które chcielibyśmy mieć wyświetlane w programie muzycznym. Czy wielką literą powinien być napisany tylko pierwszy wyraz tytułu, czy wszystkie wyrazy wielką?
andol napisał(a):
Originally posted by daroc:
Mam na myśli na przykład tytuły piosenek, które chcielibyśmy mieć wyświetlane w programie muzycznym. Czy wielką literą powinien być napisany tylko pierwszy wyraz tytułu, czy wszystkie wyrazy wielką?
W przypadku polskich tytułów - tylko pierwsze wyrazy (oraz wszystkie te, które zawsze piszemy wielką literą). W przypadku anglojęzycznych - zgodnie zasadami obowiązującymi w języku angielskim, a więc „title case”.
daroc napisał(a):
Dobrze wiedzieć. Jednak takie rozróżnienie powoduje, że w programie jest takie wrażenie chaosu - raz słowa z wielkiej, raz z małej. Z ciekawości wpisałem pierwszy lepszy tytuł piosenki do Googli, aby sprawdzić na ile osoby dodające utwory muzyczne do różnych serwisów trzymają się tej zasady... i raczej wyszło to dość kiepsko... Po wpisaniu samego tytułu wychodzi to trochę lepiej, ale też można znaleźć pisanie wszystkich słów z wielkiej. Może wynika to z faktu, że programy do masowej zmiany tytułów piosenek w postaci plików często zmieniają właśnie na "title case" (bo niepolskie programy).