mirror of
https://gitlab.com/freepascal.org/fpc/pas2js.git
synced 2025-08-24 22:09:24 +02:00
* Add Focus and ReplaceClasses/AddRemoveClasses
This commit is contained in:
parent
68b631ac85
commit
1308f6be51
@ -453,10 +453,16 @@ Type
|
|||||||
// Does this element allow childern ?
|
// Does this element allow childern ?
|
||||||
Class Function AllowChildren : Boolean; virtual;
|
Class Function AllowChildren : Boolean; virtual;
|
||||||
// Manipulate Classes
|
// Manipulate Classes
|
||||||
|
Class Function AddRemoveClasses(const Source, aAddClasses, aRemoveClasses : String; Normalize : Boolean = false) : String;
|
||||||
|
// Number of classes in search and replace must match.
|
||||||
|
Class Function ReplaceClasses(const Source, aSearchClasses, aReplaceClasses : String; Normalize : Boolean = false) : String;
|
||||||
Class Function RemoveClasses(const Source, aClasses : String; Normalize : Boolean = false) : String;
|
Class Function RemoveClasses(const Source, aClasses : String; Normalize : Boolean = false) : String;
|
||||||
Class Function RemoveClasses(el : TJSHTMLElement; const aClasses : String; Normalize : Boolean = false) : String;
|
Class Function RemoveClasses(el : TJSHTMLElement; const aClasses : String; Normalize : Boolean = false) : String;
|
||||||
Class Function AddClasses(const Source, aClasses : String; Normalize : Boolean = false) : String;
|
Class Function AddClasses(const Source, aClasses : String; Normalize : Boolean = false) : String;
|
||||||
Class Function AddClasses(el : TJSHTMLElement; const aClasses : String; Normalize : Boolean = false) : String;
|
Class Function AddClasses(el : TJSHTMLElement; const aClasses : String; Normalize : Boolean = false) : String;
|
||||||
|
Class Function AddRemoveClasses(el : TJSHTMLElement; const aAddClasses, aRemoveClasses : String; Normalize : Boolean = false) : String;
|
||||||
|
// Number of classes in search and replace must match.
|
||||||
|
Class Function ReplaceClasses(el : TJSHTMLElement; const aSearchClasses, aReplaceClasses : String; Normalize : Boolean = false) : String;
|
||||||
// Manipulate styles
|
// Manipulate styles
|
||||||
function EnsureStyle(const aName: String): TStyleItem;
|
function EnsureStyle(const aName: String): TStyleItem;
|
||||||
function AddStyle(const aName,aValue: String): TStyleItem;
|
function AddStyle(const aName,aValue: String): TStyleItem;
|
||||||
@ -469,7 +475,11 @@ Type
|
|||||||
Procedure Refresh;
|
Procedure Refresh;
|
||||||
// Unrender
|
// Unrender
|
||||||
Procedure Unrender; overload;
|
Procedure Unrender; overload;
|
||||||
|
// Focus
|
||||||
|
Procedure Focus;
|
||||||
// These work on the classes property, and on the current element if rendered. Returns the new value of classes.
|
// These work on the classes property, and on the current element if rendered. Returns the new value of classes.
|
||||||
|
Function AddRemoveClasses(const aAddClasses, aRemoveClasses : String; Normalize : Boolean = false) : String;
|
||||||
|
Function ReplaceClasses(const aSearchClasses, aReplaceClasses : String; Normalize : Boolean = false) : String;
|
||||||
Function RemoveClasses(const aClasses : String; Normalize : Boolean = false) : String;
|
Function RemoveClasses(const aClasses : String; Normalize : Boolean = false) : String;
|
||||||
Function AddClasses(const aClasses : String; Normalize : Boolean = false) : String;
|
Function AddClasses(const aClasses : String; Normalize : Boolean = false) : String;
|
||||||
// Finding widgets
|
// Finding widgets
|
||||||
@ -2755,6 +2765,14 @@ begin
|
|||||||
UnRender(P);
|
UnRender(P);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TCustomWebWidget.Focus;
|
||||||
|
begin
|
||||||
|
if not IsRendered then
|
||||||
|
ReFresh;
|
||||||
|
Element.Focus;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure TCustomWebWidget.ApplyWidgetSettings(aElement: TJSHTMLElement);
|
procedure TCustomWebWidget.ApplyWidgetSettings(aElement: TJSHTMLElement);
|
||||||
|
|
||||||
// Normally, this should be called BEFORE FElement is set.
|
// Normally, this should be called BEFORE FElement is set.
|
||||||
@ -2950,8 +2968,8 @@ begin
|
|||||||
Result:=True;
|
Result:=True;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
class function TCustomWebWidget.RemoveClasses(const Source, aClasses: String; Normalize : Boolean = false): String;
|
class function TCustomWebWidget.AddRemoveClasses(const Source, aAddClasses,
|
||||||
|
aRemoveClasses: String; Normalize: Boolean): String;
|
||||||
var
|
var
|
||||||
T : TJSStringDynArray;
|
T : TJSStringDynArray;
|
||||||
i : integer;
|
i : integer;
|
||||||
@ -2961,16 +2979,63 @@ begin
|
|||||||
if Normalize then
|
if Normalize then
|
||||||
Result:=TJSString(Result).replace(TJSRegexp.New('\s\s+','g'),' ');
|
Result:=TJSString(Result).replace(TJSRegexp.New('\s\s+','g'),' ');
|
||||||
T:=TJSString(Result).split(' ');
|
T:=TJSString(Result).split(' ');
|
||||||
For S in TJSString(aClasses).split(' ') do
|
For S in TJSString(aRemoveClasses).split(' ') do
|
||||||
if (S<>'') then
|
if (S<>'') then
|
||||||
begin
|
begin
|
||||||
I:=TJSArray(T).indexOf(S);
|
I:=TJSArray(T).indexOf(S);
|
||||||
if (I<>-1) then
|
if (I<>-1) then
|
||||||
TJSArray(T).splice(i,1);
|
TJSArray(T).splice(i,1);
|
||||||
end;
|
end;
|
||||||
|
For S in TJSString(aAddClasses).split(' ') do
|
||||||
|
if (S<>'') then
|
||||||
|
begin
|
||||||
|
I:=TJSArray(T).indexOf(S);
|
||||||
|
if (I=-1) then
|
||||||
|
TJSArray(T).Push(S);
|
||||||
|
end;
|
||||||
Result:=TJSArray(T).join(' ');
|
Result:=TJSArray(T).join(' ');
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
class function TCustomWebWidget.ReplaceClasses(const Source, aSearchClasses, aReplaceClasses : String; Normalize: Boolean): String;
|
||||||
|
var
|
||||||
|
Dest,Srch,Repl : TJSStringDynArray;
|
||||||
|
sIdx,I : integer;
|
||||||
|
S : String;
|
||||||
|
|
||||||
|
begin
|
||||||
|
Srch:=TJSString(aSearchClasses).split(' ');
|
||||||
|
Repl:=TJSString(aReplaceClasses).split(' ');
|
||||||
|
Result:=Source;
|
||||||
|
if Normalize then
|
||||||
|
Result:=TJSString(Result).replace(TJSRegexp.New('\s\s+','g'),' ');
|
||||||
|
Dest:=TJSString(Result).split(' ');
|
||||||
|
For sIdx:=0 to length(Srch)-1 do
|
||||||
|
begin
|
||||||
|
S:=Srch[sIdx];
|
||||||
|
if (S<>'') then
|
||||||
|
begin
|
||||||
|
I:=TJSArray(Dest).indexOf(S);
|
||||||
|
if (I<>-1) then
|
||||||
|
begin
|
||||||
|
TJSArray(Dest).splice(i,1);
|
||||||
|
if sIdx<Length(Repl) then
|
||||||
|
begin
|
||||||
|
I:=TJSArray(Dest).indexOf(Repl[sIdx]);
|
||||||
|
if I=-1 then
|
||||||
|
TJSArray(Dest).Push(Repl[sIdx]);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
Result:=TJSArray(Dest).join(' ');
|
||||||
|
end;
|
||||||
|
|
||||||
|
class function TCustomWebWidget.RemoveClasses(const Source, aClasses: String; Normalize : Boolean = false): String;
|
||||||
|
|
||||||
|
begin
|
||||||
|
Result:=AddRemoveClasses(Source,'',aClasses,Normalize);
|
||||||
|
end;
|
||||||
|
|
||||||
class function TCustomWebWidget.RemoveClasses(el: TJSHTMLElement; const aClasses: String; Normalize : Boolean = false): String;
|
class function TCustomWebWidget.RemoveClasses(el: TJSHTMLElement; const aClasses: String; Normalize : Boolean = false): String;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
@ -2980,23 +3045,8 @@ end;
|
|||||||
|
|
||||||
class function TCustomWebWidget.AddClasses(const Source, aClasses: String; Normalize : Boolean = false): String;
|
class function TCustomWebWidget.AddClasses(const Source, aClasses: String; Normalize : Boolean = false): String;
|
||||||
|
|
||||||
var
|
|
||||||
T : TJSStringDynArray;
|
|
||||||
S : String;
|
|
||||||
|
|
||||||
begin
|
begin
|
||||||
Result:=Source;
|
Result:=AddRemoveClasses(Source,aClasses,'',Normalize);
|
||||||
if Normalize then
|
|
||||||
Result:=TJSString(Result).replace(TJSRegexp.New('\s\s+','g'),' ');
|
|
||||||
if AClasses='' then exit;
|
|
||||||
T:=TJSString(Result).split(' ');
|
|
||||||
For S in TJSString(aClasses).split(' ') do
|
|
||||||
if (S<>'') then
|
|
||||||
begin
|
|
||||||
if (TJSArray(T).indexOf(S)=-1) then
|
|
||||||
TJSArray(T).Push(S);
|
|
||||||
end;
|
|
||||||
Result:=TJSArray(T).Join(' ');
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
class function TCustomWebWidget.AddClasses(el: TJSHTMLElement; const aClasses: String; Normalize : Boolean = false): String;
|
class function TCustomWebWidget.AddClasses(el: TJSHTMLElement; const aClasses: String; Normalize : Boolean = false): String;
|
||||||
@ -3006,6 +3056,38 @@ begin
|
|||||||
el.ClassName:=Trim(Result);
|
el.ClassName:=Trim(Result);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
class function TCustomWebWidget.AddRemoveClasses(el: TJSHTMLElement;
|
||||||
|
const aAddClasses, aRemoveClasses: String; Normalize: Boolean): String;
|
||||||
|
begin
|
||||||
|
Result:=AddRemoveClasses(el.ClassName,aAddClasses,aRemoveClasses,Normalize);
|
||||||
|
el.ClassName:=Trim(Result);
|
||||||
|
end;
|
||||||
|
|
||||||
|
class function TCustomWebWidget.ReplaceClasses(el: TJSHTMLElement;
|
||||||
|
const aSearchClasses, aReplaceClasses: String; Normalize: Boolean): String;
|
||||||
|
begin
|
||||||
|
Result:=ReplaceClasses(el.ClassName,aSearchClasses, aReplaceClasses,Normalize);
|
||||||
|
el.ClassName:=Trim(Result);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TCustomWebWidget.AddRemoveClasses(const aAddClasses,
|
||||||
|
aRemoveClasses: String; Normalize: Boolean): String;
|
||||||
|
begin
|
||||||
|
FClasses:=AddRemoveClasses(FClasses,aAddClasses,aRemoveClasses,Normalize);
|
||||||
|
Result:=FClasses;
|
||||||
|
if IsRendered then
|
||||||
|
Result:=AddRemoveClasses(FElement,aAddClasses,aRemoveClasses,Normalize)
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TCustomWebWidget.ReplaceClasses(const aSearchClasses,
|
||||||
|
aReplaceClasses: String; Normalize: Boolean): String;
|
||||||
|
begin
|
||||||
|
FClasses:=ReplaceClasses(FClasses,aSearchClasses,aReplaceClasses,Normalize);
|
||||||
|
Result:=FClasses;
|
||||||
|
if IsRendered then
|
||||||
|
Result:=ReplaceClasses(FElement,aSearchClasses,aReplaceClasses,Normalize)
|
||||||
|
end;
|
||||||
|
|
||||||
function TCustomWebWidget.RemoveClasses(const aClasses: String; Normalize : Boolean = false): String;
|
function TCustomWebWidget.RemoveClasses(const aClasses: String; Normalize : Boolean = false): String;
|
||||||
begin
|
begin
|
||||||
FClasses:=RemoveClasses(FClasses,aClasses,Normalize);
|
FClasses:=RemoveClasses(FClasses,aClasses,Normalize);
|
||||||
|
Loading…
Reference in New Issue
Block a user