Merge pull request #6884 from keymanapp/feat/developer/touch-layout-editor-flick-and-multitap
feat(developer): Rework Touch Layout Editor to support flick and multitap 🙊
|
|
@ -42,7 +42,8 @@ The general structure of a .keyman-touch-layout file is:
|
|||
## `root` object
|
||||
|
||||
The `root` object may contain up to three properties, each being a [`platform`
|
||||
object](#platform-object), named `"phone"`, `"tablet"` or `"desktop"`.
|
||||
object](#platform-object), named `"phone"`, `"tablet"` or `"desktop"`. There
|
||||
must be at least one property.
|
||||
|
||||
## `platform` object
|
||||
|
||||
|
|
@ -68,7 +69,7 @@ optionally contain three additional properties: `font`, `fontsize`, and
|
|||
`displayUnderlying`.
|
||||
|
||||
* `layer`
|
||||
: An array of [`layer` objects](#layer-object). Required.
|
||||
: A non-empty array of [`layer` objects](#layer-object). Required.
|
||||
|
||||
* `font`
|
||||
: An optional CSS-style font-family specification, being the name of the font to
|
||||
|
|
@ -83,6 +84,29 @@ optionally contain three additional properties: `font`, `fontsize`, and
|
|||
: A boolean value, if `true`, then the base layout's key cap will be displayed
|
||||
in the top left of the key cap. Defaults to `false`.
|
||||
|
||||
* `defaultHint`
|
||||
|
||||
: A string value. Default is `"dot"`. Controls the display of the hint text on
|
||||
the key cap, which is shown at the top right of the key cap.
|
||||
|
||||
* `"none"`: show no hint on the key cap.
|
||||
* `"dot"`: show a dot on top-right of key cap if a longpress menu is
|
||||
available, default. Matches behavior for Keyman 15.0 and earlier.
|
||||
* `"longpress"`: show the default longpress key cap, if it exists.
|
||||
* `"multitap"`: show the first multitap key cap, if it exists.
|
||||
* `"flick"`: show the first flick key cap, selected in clockwise order,
|
||||
starting from North.
|
||||
* `"flick-n"`: show the key cap from the North flick, if it exists.
|
||||
* `"flick-ne"`: show the key cap from the North-East flick, if it exists.
|
||||
* `"flick-e"`: show the key cap from the East flick, if it exists.
|
||||
* `"flick-se"`: show the key cap from the South-East flick, if it exists.
|
||||
* `"flick-s"`: show the key cap from the South flick, if it exists.
|
||||
* `"flick-sw"`: show the key cap from the South-West flick, if it exists.
|
||||
* `"flick-w"`: show the key cap from the West flick, if it exists.
|
||||
* `"flick-nw"`: show the key cap from the North-West flick, if it exists.
|
||||
|
||||
Introduced in Keyman 16.0.
|
||||
|
||||
## `layer` object
|
||||
|
||||
The `layer` object describes one visible layer on a touch keyboard. It has two
|
||||
|
|
@ -140,7 +164,7 @@ affect the modifiers in any key events generated by keys on the layer.
|
|||
|
||||
* `row`
|
||||
|
||||
: An array of [`row` objects](#row-object). Required.
|
||||
: A non-empty array of [`row` objects](#row-object). Required.
|
||||
|
||||
## `row` object
|
||||
|
||||
|
|
@ -150,19 +174,19 @@ properties: `id` and `key`.
|
|||
* `id`
|
||||
|
||||
: An non-negative integer denoting where the row appears, with `0` being the top
|
||||
row.
|
||||
row. Required.
|
||||
|
||||
Legacy: this value was sometimes an integer in a string. This string format is
|
||||
deprecated and will not be supported in future versions of Keyman Developer.
|
||||
|
||||
* `key`
|
||||
|
||||
: An array of [`key` objects](#key-object).
|
||||
: A non-empty array of [`key` objects](#key-object). Required.
|
||||
|
||||
## `key` object
|
||||
|
||||
Describes a single key on a touch layout row. See also [`sk`
|
||||
object](#sk-object). A `key` object has no required properties.
|
||||
object](#sk-object). A `key` object must include either an `id` or `sp` property.
|
||||
|
||||
* `id`
|
||||
|
||||
|
|
@ -201,6 +225,13 @@ object](#sk-object). A `key` object has no required properties.
|
|||
|
||||
: String. The string displayed on the key cap.
|
||||
|
||||
* `hint`
|
||||
|
||||
: String. If present, a small hint, often shown at top right of key cap.
|
||||
|
||||
Introduced in Keyman 16.0.
|
||||
|
||||
|
||||
* `layer`
|
||||
|
||||
: String. If specified, overrides the modifier associated with the layer (this
|
||||
|
|
@ -291,19 +322,24 @@ object](#sk-object). A `key` object has no required properties.
|
|||
|
||||
: If present, defines additional keys that may be selected when using a
|
||||
flick gesture on the key, with a [`flick` object](#flick-object). Flicks
|
||||
should not be used on modifier keys, special keys, or the Spacebar. Keyman 16+.
|
||||
should not be used on modifier keys, special keys, or the Spacebar.
|
||||
|
||||
Introduced in Keyman 16.0.
|
||||
|
||||
* `multitap`
|
||||
|
||||
: If present, defines an array of keys that may be selected sequentially when
|
||||
tapping multiple times on the key, an array of [`sk` objects](#sk-object).
|
||||
Multitaps generally should not be used on modifier keys, special keys, or the
|
||||
Multitaps may not be used on layer switch keys, special keys such as the globe key, or the
|
||||
Spacebar. Beware of mixing multitaps with layer switching, as this can lead to
|
||||
a confusing user experience. Keyman 16+.
|
||||
a confusing user experience.
|
||||
|
||||
Keyman 15+: the Shift key has a predefined multitap sequence to access the
|
||||
`caps` layer, which is available if the `caps` layer is present. This is the
|
||||
only multitap sequence supported in Keyman 15.
|
||||
only multitap sequence supported in Keyman 15. This multitap sequence cannot
|
||||
be overridden, and is the sole case where multitap input may cause a layer switch.
|
||||
|
||||
Introduced in Keyman 16.0.
|
||||
|
||||
## `sk` object
|
||||
|
||||
|
|
@ -314,7 +350,9 @@ properties are not fully supported as of Keyman 15: `font`, `fontsize`, `pad`,
|
|||
and `width`.
|
||||
|
||||
* `id`
|
||||
: A string identifier for the longpress key. See `key` object for details.
|
||||
|
||||
: String. Required. An identifier for the longpress key. See `key` object for
|
||||
details.
|
||||
|
||||
* `text`
|
||||
|
||||
|
|
@ -408,7 +446,7 @@ string") into the appropriate spec format.
|
|||
# .keyman-touch-layout version history
|
||||
|
||||
## 2022-06-30 2.0 stable
|
||||
* Add support for flick and multitap. Aligns with Keyman 16.0.
|
||||
* Add support for flick, multitap, hint, defaultHint. Aligns with Keyman 16.0.
|
||||
|
||||
## 2022-06-27 1.0 stable
|
||||
* Initial schema version and full documentation
|
||||
|
|
|
|||
|
|
@ -11,7 +11,9 @@
|
|||
"tablet": { "$ref": "#/definitions/platform" },
|
||||
"phone": { "$ref": "#/definitions/platform" },
|
||||
"desktop": { "$ref": "#/definitions/platform" }
|
||||
}
|
||||
},
|
||||
"minProperties": 1,
|
||||
"additionalProperties": false
|
||||
},
|
||||
|
||||
"platform": {
|
||||
|
|
@ -20,7 +22,8 @@
|
|||
"font": { "$ref": "#/definitions/font-spec" },
|
||||
"fontsize": { "$ref": "#/definitions/fontsize-spec" },
|
||||
"layer": { "$ref": "#/definitions/layers" },
|
||||
"displayUnderlying": { "type": "boolean" }
|
||||
"displayUnderlying": { "type": "boolean" },
|
||||
"defaultHint": { "type": "string", "enum": ["none","dot","longpress","multitap","flick","flick-n","flick-ne","flick-e","flick-se","flick-s","flick-sw","flick-w","flick-nw"] }
|
||||
},
|
||||
"required": ["layer"],
|
||||
"additionalProperties": false
|
||||
|
|
@ -28,7 +31,8 @@
|
|||
|
||||
"layers": {
|
||||
"type": "array",
|
||||
"items": { "$ref": "#/definitions/layer" }
|
||||
"items": { "$ref": "#/definitions/layer" },
|
||||
"minItems": 1
|
||||
},
|
||||
|
||||
"layer": {
|
||||
|
|
@ -48,7 +52,8 @@
|
|||
|
||||
"rows": {
|
||||
"type": "array",
|
||||
"items": { "$ref": "#/definitions/row" }
|
||||
"items": { "$ref": "#/definitions/row" },
|
||||
"minItems": 1
|
||||
},
|
||||
|
||||
"row": {
|
||||
|
|
@ -69,7 +74,8 @@
|
|||
|
||||
"keys": {
|
||||
"type": "array",
|
||||
"items": { "$ref": "#/definitions/key" }
|
||||
"items": { "$ref": "#/definitions/key" },
|
||||
"minItems": 1
|
||||
},
|
||||
|
||||
"key": {
|
||||
|
|
@ -86,8 +92,16 @@
|
|||
"width": { "$ref" : "#/definitions/key-width" },
|
||||
"sk": { "$ref": "#/definitions/subkeys" },
|
||||
"flick": { "$ref": "#/definitions/flick" },
|
||||
"multitap": { "$ref": "#/definitions/subkeys" }
|
||||
"multitap": { "$ref": "#/definitions/subkeys" },
|
||||
"hint": { "type": "string" }
|
||||
},
|
||||
"anyOf": [
|
||||
{"required": ["id"]},
|
||||
{"required": ["sp"]},
|
||||
{"required": ["sk"]},
|
||||
{"required": ["flick"]},
|
||||
{"required": ["multitap"]}
|
||||
],
|
||||
"additionalProperties": false
|
||||
},
|
||||
|
||||
|
|
@ -98,24 +112,25 @@
|
|||
|
||||
"key-sp": {
|
||||
"type": "integer",
|
||||
"enum": [0, 1, 2, 8, 9, 10],
|
||||
"enum": [0, 1, 2, 8, 9, 10]
|
||||
},
|
||||
|
||||
"key-pad": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"maximum": 10000
|
||||
"maximum": 100000
|
||||
},
|
||||
|
||||
"key-width": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"maximum": 1000
|
||||
"maximum": 100000
|
||||
},
|
||||
|
||||
"subkeys": {
|
||||
"type": "array",
|
||||
"items": { "$ref": "#/definitions/subkey" }
|
||||
"items": { "$ref": "#/definitions/subkey" },
|
||||
"minItems": 1
|
||||
},
|
||||
|
||||
"subkey": {
|
||||
|
|
@ -140,6 +155,7 @@
|
|||
"patternProperties": {
|
||||
"^(n|s|e|w|ne|nw|se|sw)$": { "$ref": "#/definitions/subkey" }
|
||||
},
|
||||
"minProperties": 1,
|
||||
"additionalProperties": false
|
||||
},
|
||||
|
||||
|
|
|
|||
|
|
@ -20,7 +20,8 @@
|
|||
"font": { "$ref": "#/definitions/font-spec" },
|
||||
"fontsize": { "$ref": "#/definitions/fontsize-spec" },
|
||||
"layer": { "$ref": "#/definitions/layers" },
|
||||
"displayUnderlying": { "type": "boolean" }
|
||||
"displayUnderlying": { "type": "boolean" },
|
||||
"defaultHint": { "type": "string", "enum": ["none","dot","longpress","multitap","flick","flick-n","flick-ne","flick-e","flick-se","flick-s","flick-sw","flick-w","flick-nw"] }
|
||||
},
|
||||
"required": ["layer"],
|
||||
"additionalProperties": false
|
||||
|
|
@ -95,7 +96,8 @@
|
|||
"width": { "$ref" : "#/definitions/numeric" },
|
||||
"sk": { "$ref": "#/definitions/subkeys" },
|
||||
"flick": { "$ref": "#/definitions/flick" },
|
||||
"multitap": { "$ref": "#/definitions/subkeys" }
|
||||
"multitap": { "$ref": "#/definitions/subkeys" },
|
||||
"hint": { "type": "string" }
|
||||
},
|
||||
"additionalProperties": false
|
||||
},
|
||||
|
|
|
|||
|
|
@ -3323,6 +3323,7 @@ begin
|
|||
PromptChange := APromptChange;
|
||||
if ShowModal = mrOk then
|
||||
begin
|
||||
frameTouchLayout.SaveToString;
|
||||
frameTouchLayout.TemplateFileName := TemplateFileName;
|
||||
frameTouchLayout.Load('', True, False); // I4034
|
||||
Self.Modified := True;
|
||||
|
|
|
|||
|
|
@ -1672,6 +1672,7 @@ var
|
|||
FSubKey: TTouchLayoutSubKey;
|
||||
FRequiredKeys: set of TRequiredKey;
|
||||
FDictionary: TStringList;
|
||||
FDirection: TTouchLayoutFlickDirection;
|
||||
|
||||
function IsValidUnicodeValue(ch: Integer): Boolean; // I4198
|
||||
begin
|
||||
|
|
@ -1873,6 +1874,11 @@ begin
|
|||
CheckKey(FKey.Id, FKey.Text, FKey.NextLayer, FKey.SpT); // I4119
|
||||
for FSubKey in FKey.Sk do
|
||||
CheckKey(FSubKey.Id, FKey.Text, FSubKey.NextLayer, FSubKey.SpT); // I4119
|
||||
for FDirection in FKey.Flick.Keys do
|
||||
CheckKey(FKey.Flick[FDirection].Id, FKey.Flick[FDirection].Text,
|
||||
FKey.Flick[FDirection].NextLayer, FKey.Flick[FDirection].SpT);
|
||||
for FSubKey in FKey.MultiTap do
|
||||
CheckKey(FSubKey.Id, FKey.Text, FSubKey.NextLayer, FSubKey.SpT);
|
||||
end;
|
||||
|
||||
if FRequiredKeys <> CRequiredKeys then
|
||||
|
|
|
|||
|
|
@ -191,7 +191,7 @@ var
|
|||
begin
|
||||
doc := ARequestInfo.Document;
|
||||
Delete(doc, 1, Length('/app/source/toucheditor/lib/'));
|
||||
if (Pos('/', doc) > 0) or (Pos('\', doc) > 0) then
|
||||
if Pos('..', doc) > 0 then
|
||||
Respond404(AContext, ARequestInfo, AResponseInfo)
|
||||
else
|
||||
RespondFile(GetLayoutBuilderPath + doc, AContext, ARequestInfo, AResponseInfo);
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ var
|
|||
KeymanRoot: string;
|
||||
begin
|
||||
if TKeymanPaths.RunningFromSource(KeymanRoot)
|
||||
then Result := KeymanRoot + 'developer\src\inst\dist\node.exe'
|
||||
then Result := KeymanRoot + 'developer\src\inst\node\dist\node.exe'
|
||||
else Result := ExtractFilePath(ParamStr(0)) + 'node.js\node.exe';
|
||||
end;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,18 +1,18 @@
|
|||
(*
|
||||
Name: TouchLayout
|
||||
Copyright: Copyright (C) SIL International.
|
||||
Documentation:
|
||||
Description:
|
||||
Documentation:
|
||||
Description:
|
||||
Create Date: 29 Nov 2013
|
||||
|
||||
Modified Date: 27 May 2015
|
||||
Authors: mcdurdin
|
||||
Related Files:
|
||||
Dependencies:
|
||||
Related Files:
|
||||
Dependencies:
|
||||
|
||||
Bugs:
|
||||
Todo:
|
||||
Notes:
|
||||
Bugs:
|
||||
Todo:
|
||||
Notes:
|
||||
History: 29 Nov 2013 - mcdurdin - I3982 - V9.0 - Touch layout editor should not override special keys when swapping layouts
|
||||
07 Feb 2014 - mcdurdin - I4035 - V9.0 - Parsing of UTF-8 in JSON layout file crashes TIKE
|
||||
21 Feb 2014 - mcdurdin - I4060 - V9.0 - KeymanWeb compiler should validate the layout file
|
||||
|
|
@ -34,6 +34,19 @@ type
|
|||
ETouchLayoutValidate = class(Exception)
|
||||
end;
|
||||
|
||||
TTouchLayoutFlickDirection = (
|
||||
tlfdNorth, tlfdSouth, tlfdEast, tlfdWest,
|
||||
tlfdNorthEast, tlfdNorthWest,
|
||||
tlfdSouthEast, tlfdSouthWest
|
||||
);
|
||||
|
||||
const
|
||||
STouchLayoutFlickDirectionName: array[TTouchLayoutFlickDirection] of string = (
|
||||
'n', 's', 'e', 'w',
|
||||
'ne', 'nw',
|
||||
'se', 'sw'
|
||||
);
|
||||
|
||||
type
|
||||
// TouchKeyType
|
||||
TTouchKeyType = (tktNormal = 0, tktSpecial = 1, tktSpecialActive = 2, tktDeadkey = 8, tktBlank = 9, tktSpacer = 10); // I4119
|
||||
|
|
@ -105,6 +118,12 @@ type
|
|||
TTouchLayoutSubKeys = class(TObjectList<TTouchLayoutSubKey>)
|
||||
end;
|
||||
|
||||
TTouchLayoutMultiTaps = class(TObjectList<TTouchLayoutSubKey>)
|
||||
end;
|
||||
|
||||
TTouchLayoutFlicks = class(TObjectDictionary<TTouchLayoutFlickDirection, TTouchLayoutSubKey>)
|
||||
end;
|
||||
|
||||
TTouchLayoutKey = class(TTouchLayoutObject)
|
||||
private
|
||||
FNextLayer: string;
|
||||
|
|
@ -117,7 +136,10 @@ type
|
|||
FPad: Integer;
|
||||
FSp: Integer;
|
||||
FSk: TTouchlayoutSubKeys;
|
||||
FFlick: TTouchLayoutFlicks;
|
||||
FMultiTap: TTouchLayoutMultiTaps;
|
||||
FText: string;
|
||||
FHint: string;
|
||||
function GetSpT: TTouchKeyType; // I4119
|
||||
procedure SetSpT(const Value: TTouchKeyType); // I4119
|
||||
protected
|
||||
|
|
@ -128,6 +150,7 @@ type
|
|||
destructor Destroy; override;
|
||||
property Id: string read FId write FId;
|
||||
property Text: string read FText write FText;
|
||||
property Hint: string read FHint write FHint;
|
||||
property Sp: Integer read FSp write FSp;
|
||||
property SpT: TTouchKeyType read GetSpT write SetSpT; // I4119
|
||||
property Width: Integer read FWidth write FWidth;
|
||||
|
|
@ -138,6 +161,8 @@ type
|
|||
property Font: string read FFont write FFont;
|
||||
property FontSize: string read FFontSize write FFontSize;
|
||||
property Sk: TTouchlayoutSubKeys read FSk;
|
||||
property Flick: TTouchLayoutFlicks read FFlick;
|
||||
property MultiTap: TTouchLayoutMultiTaps read FMultiTap;
|
||||
end;
|
||||
|
||||
TTouchLayoutKeys = class(TObjectList<TTouchLayoutKey>)
|
||||
|
|
@ -181,12 +206,26 @@ type
|
|||
function IndexOfId(const AId: string): Integer;
|
||||
end;
|
||||
|
||||
TTouchLayoutDefaultHint = (
|
||||
tldhNone, tldhLongpress, tldhMultitap, tldhFlick,
|
||||
tldhFlickN, tldhFlickNE, tldhFlickE, tldhFlickSE, tldhFlickS, tldhFlickSW, tldhFlickW, tldhFlickNW
|
||||
);
|
||||
|
||||
const
|
||||
STouchLayoutDefaultHintName: array[TTouchLayoutDefaultHint] of string =
|
||||
('none','longpress','multitap','flick','flick-n','flick-ne','flick-e','flick-se','flick-s','flick-sw','flick-w','flick-nw');
|
||||
|
||||
|
||||
function DefaultHintFromString(const s: string): TTouchLayoutDefaultHint;
|
||||
|
||||
type
|
||||
TTouchLayoutPlatform = class(TTouchLayoutObject)
|
||||
private
|
||||
FName: string;
|
||||
FLayers: TTouchLayoutLayers;
|
||||
FFontSize: string; // I4062
|
||||
FDisplayUnderlying: Boolean;
|
||||
FDefaultHint: TTouchLayoutDefaultHint;
|
||||
FFont: string;
|
||||
protected
|
||||
procedure DoRead; override;
|
||||
|
|
@ -195,6 +234,7 @@ type
|
|||
constructor Create(AParent: TTouchLayoutObject); override;
|
||||
destructor Destroy; override;
|
||||
property DisplayUnderlying: Boolean read FDisplayUnderlying write FDisplayUnderlying;
|
||||
property DefaultHint: TTouchLayoutDefaultHint read FDefaultHint write FDefaultHint;
|
||||
property Name: string read FName write FName;
|
||||
property Font: string read FFont write FFont;
|
||||
property FontSize: string read FFontSize write FFontSize; // I4062
|
||||
|
|
@ -747,10 +787,15 @@ begin
|
|||
end;
|
||||
|
||||
procedure TTouchLayoutPlatform.DoRead;
|
||||
var
|
||||
s: string;
|
||||
begin
|
||||
GetValue('font', FFont);
|
||||
GetValue('fontsize', FFontSize);
|
||||
GetValue('displayUnderlying', FDisplayUnderlying);
|
||||
if GetValue('defaultHint', s)
|
||||
then FDefaultHint := DefaultHintFromString(s)
|
||||
else FDefaultHint := tldhNone;
|
||||
ReadArray('layer', TTouchLayoutLayer,
|
||||
procedure (obj: TTouchLayoutObject) begin FLayers.Add(obj as TTouchLayoutLayer); end);
|
||||
end;
|
||||
|
|
@ -764,6 +809,8 @@ begin
|
|||
AddJSONValue(JSON, 'font', FFont);
|
||||
AddJSONValue(JSON, 'fontsize', FFontSize);
|
||||
AddJSONValue(JSON, 'displayUnderlying', FDisplayUnderlying);
|
||||
if FDefaultHint <> tldhNone then
|
||||
AddJSONValue(JSON, 'defaultHint', STouchLayoutDefaultHintName[FDefaultHint]);
|
||||
|
||||
if FLayers.Count > 0 then
|
||||
begin
|
||||
|
|
@ -831,15 +878,24 @@ constructor TTouchLayoutKey.Create(AParent: TTouchLayoutObject);
|
|||
begin
|
||||
inherited Create(AParent);
|
||||
FSk := TTouchLayoutSubKeys.Create;
|
||||
FFlick := TTouchLayoutFlicks.Create;
|
||||
FMultiTap := TTouchLayoutMultiTaps.Create;
|
||||
end;
|
||||
|
||||
destructor TTouchLayoutKey.Destroy;
|
||||
begin
|
||||
FreeAndNil(FSk);
|
||||
FreeAndNil(FFlick);
|
||||
FreeAndNil(FMultiTap);
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
procedure TTouchLayoutKey.DoRead;
|
||||
var
|
||||
v: TJSONValue;
|
||||
o: TJSONObject;
|
||||
d: TTouchLayoutFlickDirection;
|
||||
sk: TTouchLayoutSubKey;
|
||||
begin
|
||||
GetValue('nextlayer', FNextLayer);
|
||||
GetValue('fontsize', FFontSize);
|
||||
|
|
@ -851,15 +907,33 @@ begin
|
|||
GetValue('pad', FPad);
|
||||
GetValue('sp', FSp);
|
||||
GetValue('text', FText);
|
||||
GetValue('hint', FHint);
|
||||
ReadArray('sk', TTouchLayoutSubKey,
|
||||
procedure (obj: TTouchLayoutObject) begin FSk.Add(obj as TTouchLayoutSubKey); end);
|
||||
if GetValue('flick', v) and (v is TJSONObject) then
|
||||
begin
|
||||
o := v as TJSONObject;
|
||||
for d := Low(TTouchLayoutFlickDirection) to High(TTouchLayoutFlickDirection) do
|
||||
begin
|
||||
v := o.GetValue(STouchLayoutFlickDirectionName[d]);
|
||||
if Assigned(v) and (v is TJSONObject) then
|
||||
begin
|
||||
sk := TTouchLayoutSubKey.Create(Self);
|
||||
sk.Read(v as TJSONObject);
|
||||
FFlick.Add(d, sk);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
ReadArray('multitap', TTouchLayoutSubKey,
|
||||
procedure (obj: TTouchLayoutObject) begin FMultiTap.Add(obj as TTouchLayoutSubKey); end);
|
||||
end;
|
||||
|
||||
procedure TTouchLayoutKey.DoWrite(JSON: TJSONObject);
|
||||
var
|
||||
i: Integer;
|
||||
v: TJSONArray;
|
||||
o: TJSONObject;
|
||||
o, f: TJSONObject;
|
||||
d: TTouchLayoutFlickDirection;
|
||||
begin
|
||||
AddJSONValue(JSON, 'nextlayer', FNextLayer);
|
||||
AddJSONValue(JSON, 'fontsize', FFontSize);
|
||||
|
|
@ -871,6 +945,7 @@ begin
|
|||
if FPad <> 0 then AddJSONValue(JSON, 'pad', IntToStr(FPad));
|
||||
if FSp <> 0 then AddJSONValue(JSON, 'sp', IntToStr(FSp));
|
||||
AddJSONValue(JSON, 'text', FText);
|
||||
AddJSONValue(JSON, 'hint', FHint);
|
||||
|
||||
if FSk.Count > 0 then
|
||||
begin
|
||||
|
|
@ -883,6 +958,31 @@ begin
|
|||
end;
|
||||
JSON.AddPair('sk', v);
|
||||
end;
|
||||
|
||||
if FFlick.Count > 0 then
|
||||
begin
|
||||
f := TJSONObject.Create;
|
||||
for d in FFlick.Keys do
|
||||
begin
|
||||
o := TJSONObject.Create;
|
||||
FFlick[d].Write(o);
|
||||
f.AddPair(STouchLayoutFlickDirectionName[d], o);
|
||||
end;
|
||||
JSON.AddPair('flick', f);
|
||||
end;
|
||||
|
||||
if FMultiTap.Count > 0 then
|
||||
begin
|
||||
v := TJSONArray.Create;
|
||||
for i := 0 to FMultiTap.Count - 1 do
|
||||
begin
|
||||
o := TJSONObject.Create;
|
||||
FMultiTap[i].Write(o);
|
||||
v.Add(o);
|
||||
end;
|
||||
JSON.AddPair('multitap', v);
|
||||
end;
|
||||
|
||||
end;
|
||||
|
||||
function TTouchLayoutKey.GetSpT: TTouchKeyType; // I4119
|
||||
|
|
@ -1016,4 +1116,11 @@ begin
|
|||
Result := -1;
|
||||
end;
|
||||
|
||||
function DefaultHintFromString(const s: string): TTouchLayoutDefaultHint;
|
||||
begin
|
||||
for Result := Low(TTouchLayoutDefaultHint) to High(TTouchLayoutDefaultHint) do
|
||||
if s = STouchLayoutDefaultHintName[Result] then Exit;
|
||||
Result := tldhNone;
|
||||
end;
|
||||
|
||||
end.
|
||||
|
|
|
|||
|
|
@ -49,9 +49,21 @@ const
|
|||
(Name: 'fontsize'; ClassType: TJSONString)
|
||||
);
|
||||
|
||||
KeyDef: array[0..10] of TJSONDef = (
|
||||
FlickDef: array[0..7] of TJSONDef = (
|
||||
(Name: 'nw'; ClassType: TJSONObject; Value: @SKDef; ValueSize: Length(SkDef)),
|
||||
(Name: 'n'; ClassType: TJSONObject; Value: @SKDef; ValueSize: Length(SkDef)),
|
||||
(Name: 'ne'; ClassType: TJSONObject; Value: @SKDef; ValueSize: Length(SkDef)),
|
||||
(Name: 'w'; ClassType: TJSONObject; Value: @SKDef; ValueSize: Length(SkDef)),
|
||||
(Name: 'e'; ClassType: TJSONObject; Value: @SKDef; ValueSize: Length(SkDef)),
|
||||
(Name: 'sw'; ClassType: TJSONObject; Value: @SKDef; ValueSize: Length(SkDef)),
|
||||
(Name: 's'; ClassType: TJSONObject; Value: @SKDef; ValueSize: Length(SkDef)),
|
||||
(Name: 'se'; ClassType: TJSONObject; Value: @SKDef; ValueSize: Length(SkDef))
|
||||
);
|
||||
|
||||
KeyDef: array[0..13] of TJSONDef = (
|
||||
(Name: 'id'; ClassType: TJSONString),
|
||||
(Name: 'text'; ClassType: TJSONString),
|
||||
(Name: 'hint'; ClassType: TJSONString),
|
||||
(Name: 'sp'; ClassType: TJSONValue),
|
||||
(Name: 'width'; ClassType: TJSONValue),
|
||||
(Name: 'pad'; ClassType: TJSONValue),
|
||||
|
|
@ -60,7 +72,9 @@ const
|
|||
(Name: 'nextlayer'; ClassType: TJSONString),
|
||||
(Name: 'font'; ClassType: TJSONString),
|
||||
(Name: 'fontsize'; ClassType: TJSONString),
|
||||
(Name: 'sk'; ClassType: TJSONArray; Value: @SkDef[0]; ValueSize: Length(SkDef))
|
||||
(Name: 'sk'; ClassType: TJSONArray; Value: @SkDef[0]; ValueSize: Length(SkDef)),
|
||||
(Name: 'flick'; ClassType: TJSONObject; Value: @FlickDef[0]; ValueSize: Length(FlickDef)),
|
||||
(Name: 'multitap'; ClassType: TJSONArray; Value: @SkDef[0]; ValueSize: Length(SkDef))
|
||||
);
|
||||
|
||||
RowDef: array[0..1] of TJSONDef = (
|
||||
|
|
@ -73,10 +87,11 @@ const
|
|||
(Name: 'row'; ClassType: TJSONArray; Required: True; Value: @RowDef[0]; ValueSize: Length(RowDef))
|
||||
);
|
||||
|
||||
PlatformDef: array[0..3] of TJSONDef = (
|
||||
PlatformDef: array[0..4] of TJSONDef = (
|
||||
(Name: 'font'; ClassType: TJSONString),
|
||||
(Name: 'fontsize'; ClassType: TJSONString), // I4062
|
||||
(Name: 'displayUnderlying'; ClassType: TJSONBool),
|
||||
(Name: 'defaultHint'; ClassType: TJSONString),
|
||||
(Name: 'layer'; ClassType: TJSONArray; Required: True; Value: @LayerDef[0]; ValueSize: Length(LayerDef))
|
||||
);
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
builder.dragDrop = {};
|
||||
(function(builder, dragDrop) {
|
||||
dragDrop.isSubKey = function(key) {
|
||||
return key.parent().attr('id') == 'sk';
|
||||
return key.data('type') != 'key';
|
||||
};
|
||||
|
||||
dragDrop.getKeyElementFromElement = function(elem) {
|
||||
|
|
@ -26,21 +26,24 @@ builder.dragDrop = {};
|
|||
|
||||
dragDrop.getKeyElementFromDragTarget = function(target) {
|
||||
let key = dragDrop.getKeyElementFromElement(target);
|
||||
let isIdField = false;
|
||||
let fieldType = 'text';
|
||||
|
||||
if(key) {
|
||||
key = $(key);
|
||||
} else {
|
||||
if(target.id == 'inpKeyCap') {
|
||||
if(target.id == 'inpKeyCap' || target.id == 'inpKeyCapUnicode') {
|
||||
key = builder.selectedKey();
|
||||
} else if(target.id == 'inpKeyName') {
|
||||
key = builder.selectedKey();
|
||||
isIdField = true;
|
||||
} else if(target.id == 'inpSubKeyCap') {
|
||||
fieldType = 'id';
|
||||
} else if(target.id == 'inpKeyHint' || target.id == 'inpKeyHintUnicode') {
|
||||
key = builder.selectedKey();
|
||||
fieldType = 'hint';
|
||||
} else if(target.id == 'inpSubKeyCap' || target.id == 'inpSubKeyCapUnicode') {
|
||||
key = builder.selectedSubKey();
|
||||
} else if(target.id == 'inpSubKeyName') {
|
||||
key = builder.selectedSubKey();
|
||||
isIdField = true;
|
||||
fieldType = 'id';
|
||||
}
|
||||
|
||||
if(!key) {
|
||||
|
|
@ -48,7 +51,7 @@ builder.dragDrop = {};
|
|||
}
|
||||
}
|
||||
|
||||
return { key: key, isIdField: isIdField };
|
||||
return { key: key, fieldType: fieldType };
|
||||
};
|
||||
|
||||
dragDrop.charToUnicodeValue = function(s) {
|
||||
|
|
@ -126,9 +129,12 @@ builder.dragDrop = {};
|
|||
}
|
||||
} else {
|
||||
// Double-click insertion, so use last focused control
|
||||
key = { key: builder.selectedSubKey(), isIdField: false };
|
||||
if(!key.key || !key.key.length) {
|
||||
key = { key: builder.selectedKey(), isIdField: false };
|
||||
if(builder.lastFocus?.id == '#inpKeyHint' || builder.lastFocus?.id == '#inpKeyHintUnicode') {
|
||||
key = { key: builder.selectedKey(), fieldType: 'hint' };
|
||||
} else if($.contains($('#subKeyToolbar')[0], builder.lastFocus)) {
|
||||
key = { key: builder.selectedSubKey(), fieldType: 'text' };
|
||||
} else {
|
||||
key = { key: builder.selectedKey(), fieldType: 'text' };
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -136,23 +142,27 @@ builder.dragDrop = {};
|
|||
return false;
|
||||
}
|
||||
|
||||
const target = $(dragDrop.isSubKey(key.key) ? '#inpSubKeyCap' : '#inpKeyCap');
|
||||
const target = $(
|
||||
key.fieldType == 'hint' ? '#inpKeyHint' :
|
||||
dragDrop.isSubKey(key.key) ? '#inpSubKeyCap' :
|
||||
'#inpKeyCap');
|
||||
|
||||
const text = (o.shift ? target.val() : '') + o.text;
|
||||
|
||||
// Focus the control and add the text
|
||||
if(key.isIdField || key.key.data('id').startsWith('T_new_') || o.ctrl) {
|
||||
if(key.fieldType == 'id' || key.key.data('id').startsWith('T_new_') || o.ctrl) {
|
||||
const idTarget = $(dragDrop.isSubKey(key.key) ? '#inpSubKeyName' : '#inpKeyName');
|
||||
const chars = [...text]; // Split o.text into array of codepoints, keeping surrogate pairs together
|
||||
let id = chars.reduce((prev,curr) => prev+'_'+dragDrop.charToUnicodeValue(curr).toUpperCase(), 'U');
|
||||
idTarget.val(id);
|
||||
|
||||
if(key.isIdField) {
|
||||
if(key.fieldType == 'id') {
|
||||
idTarget.focus();
|
||||
}
|
||||
idTarget.change();
|
||||
}
|
||||
|
||||
if(!key.isIdField) {
|
||||
if(!key.fieldType != 'id') {
|
||||
target.focus();
|
||||
target.val(text);
|
||||
target.change();
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
@font-face {
|
||||
font-family: KeymanwebOsk;
|
||||
font-style: normal;
|
||||
|
|
@ -6,11 +5,23 @@
|
|||
src: url('keymanweb-osk.ttf') format('truetype');
|
||||
}
|
||||
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
#selKeyCapType,
|
||||
#selSubKeyCapType {
|
||||
font-family: KeymanwebOsk, Tahoma;
|
||||
font-size: 10pt;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: Tahoma;
|
||||
font-size: 18pt;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
display: grid;
|
||||
grid-template-columns: 152px 1fr;
|
||||
}
|
||||
|
||||
.ui-dialog {
|
||||
|
|
@ -33,6 +44,7 @@ body {
|
|||
padding-left: 97px;
|
||||
padding-bottom: 88px;
|
||||
padding-right: 108px;
|
||||
width: 1024px;
|
||||
}
|
||||
|
||||
#kbd.tablet-ipad-portrait {
|
||||
|
|
@ -42,7 +54,8 @@ body {
|
|||
padding-top: 34px;
|
||||
padding-left: 99px;
|
||||
padding-bottom: 98px;
|
||||
padding-right: 200px;
|
||||
padding-right: 168px;
|
||||
width: 800px;
|
||||
}
|
||||
|
||||
#kbd.phone-iphone5-landscape {
|
||||
|
|
@ -52,7 +65,8 @@ body {
|
|||
padding-left: 144px;
|
||||
padding-bottom: 40px;
|
||||
padding-top: 66px;
|
||||
padding-right: 158px;
|
||||
padding-right: 88px;
|
||||
width: 1042px;
|
||||
}
|
||||
|
||||
#kbd.phone-iphone5-portrait {
|
||||
|
|
@ -62,7 +76,39 @@ body {
|
|||
padding-left: 92px;
|
||||
padding-bottom: 170px;
|
||||
padding-top: 70px;
|
||||
padding-right: 108px;
|
||||
padding-right: 116px;
|
||||
width: 200px;
|
||||
}
|
||||
|
||||
.toolbar-item {
|
||||
display: grid;
|
||||
grid-template-columns: 90px 1fr;
|
||||
vertical-align: baseline;
|
||||
padding-bottom: 2px;
|
||||
}
|
||||
|
||||
.toolbar-item.toolbar-single-column {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
.toolbar-item.toolbar-2-small-buttons {
|
||||
grid-template-columns: 1fr 24px 24px;
|
||||
column-gap: 4px;
|
||||
}
|
||||
|
||||
.toolbar-item label {
|
||||
padding: 0.75em 0;
|
||||
}
|
||||
|
||||
.toolbar-item select,
|
||||
.toolbar-item input,
|
||||
.toolbar-item button {
|
||||
padding: 6px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.toolbar-item button.emoji-button {
|
||||
padding: 6px 0;
|
||||
}
|
||||
|
||||
.key-droppable
|
||||
|
|
@ -83,7 +129,8 @@ body {
|
|||
.key-droppable-hover {
|
||||
border: solid 1px #cccccc;
|
||||
margin-left: 3px;
|
||||
width: 50px;
|
||||
width: 75px;
|
||||
background: #eeffee;
|
||||
}
|
||||
|
||||
.key-dragging
|
||||
|
|
@ -91,7 +138,8 @@ body {
|
|||
background: #cccccc !important;
|
||||
}
|
||||
|
||||
.key {
|
||||
.key,
|
||||
.key-placeholder {
|
||||
box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
display: inline-block;
|
||||
|
|
@ -109,13 +157,26 @@ body {
|
|||
left: 0; top: 0;
|
||||
}
|
||||
|
||||
.key-placeholder {
|
||||
border-radius: 24px;
|
||||
border-color: #cccccc;
|
||||
color: #cccccc;
|
||||
}
|
||||
|
||||
.key-placeholder:hover {
|
||||
background: #80ff80;
|
||||
color: rgb(75, 185, 75);
|
||||
border-color: rgb(75, 185, 75);
|
||||
box-shadow: 0px 0px 20px rgba(75, 185, 75, 0.5);
|
||||
}
|
||||
|
||||
.key .id {
|
||||
font-family: Tahoma;
|
||||
font-size: 10px;
|
||||
color: #8080f0;
|
||||
position: absolute;
|
||||
bottom: 2px;
|
||||
right: 4px;
|
||||
bottom: 4px;
|
||||
right: 3px;
|
||||
text-align: right;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
|
@ -130,25 +191,118 @@ body {
|
|||
text-align: left;
|
||||
}
|
||||
|
||||
.key .hint {
|
||||
font-size: 12px;
|
||||
position: absolute;
|
||||
top: 2px;
|
||||
right: 4px;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.key .hint.custom-hint {
|
||||
color: #0cb901;
|
||||
}
|
||||
|
||||
.key.key-modifier .id {
|
||||
color: #808080;
|
||||
}
|
||||
|
||||
.key .text {
|
||||
|
||||
.has-multitap {
|
||||
background: no-repeat url('multitap.svg') 0 0 / 100%;
|
||||
position: absolute;
|
||||
right: 2px;
|
||||
bottom: 12px;
|
||||
width: 10px;
|
||||
height: 6px;
|
||||
}
|
||||
|
||||
.hasSubKeyArray {
|
||||
background-image: url('skflag.png');
|
||||
background-position: top right;
|
||||
background-repeat: no-repeat;
|
||||
.has-longpress {
|
||||
background: no-repeat url('longpress.svg') 0 0 / 100%;
|
||||
position: absolute;
|
||||
margin-left: 50%;
|
||||
left: -5px;
|
||||
top: 1px;
|
||||
width: 10px;
|
||||
height: 10px;
|
||||
}
|
||||
|
||||
.hasSubKeyArray.selected {
|
||||
background-image: url('skflags.png');
|
||||
/* If we have both flick-n and longpress, we need to move the longpress icon down */
|
||||
.has-flick-n ~ .has-longpress {
|
||||
top: 5px;
|
||||
}
|
||||
|
||||
.has-flick {
|
||||
position: absolute;
|
||||
display: block;
|
||||
width: 5px;
|
||||
height: 5px;
|
||||
}
|
||||
|
||||
.has-flick-nw {
|
||||
background:no-repeat url('flick-nw.svg') 0 0 / 100%;
|
||||
left: 1px;
|
||||
top: 1px;
|
||||
}
|
||||
|
||||
.has-flick-n {
|
||||
background:no-repeat url('flick-n.svg') 0 0 / 100%;
|
||||
left: 50%;
|
||||
margin-left: -2.5px;
|
||||
top: 1px;
|
||||
}
|
||||
|
||||
.has-flick-ne {
|
||||
background:no-repeat url('flick-ne.svg') 0 0 / 100%;
|
||||
right: 1px;
|
||||
top: 1px;
|
||||
}
|
||||
|
||||
.has-flick-w {
|
||||
background:no-repeat url('flick-w.svg') 0 0 / 50%;
|
||||
left: 1px;
|
||||
top: 50%;
|
||||
width: 7.5px;
|
||||
height: 7.5px;
|
||||
margin-top: -2.5px;
|
||||
}
|
||||
|
||||
.has-flick-e {
|
||||
background:no-repeat url('flick-e.svg') 0 0 / 50%;
|
||||
right: -1px;
|
||||
top: 50%;
|
||||
width: 7.5px;
|
||||
height: 7.5px;
|
||||
margin-top: -2.5px;
|
||||
}
|
||||
|
||||
.has-flick-sw {
|
||||
background:no-repeat url('flick-sw.svg') 0 0 / 100%;
|
||||
left: 1px;
|
||||
bottom: 1px;
|
||||
}
|
||||
|
||||
.has-flick-s {
|
||||
background:no-repeat url('flick-s.svg') 0 0 / 100%;
|
||||
left: 50%;
|
||||
margin-left: -2.5px;
|
||||
bottom: -1px;
|
||||
}
|
||||
|
||||
.has-flick-se {
|
||||
background:no-repeat url('flick-se.svg') 0 0 / 100%;
|
||||
right: 1px;
|
||||
bottom: 1px;
|
||||
}
|
||||
|
||||
.key:hover {
|
||||
background: #e0e0ff;
|
||||
color: #8080ff;
|
||||
border-color: #8080ff !important;
|
||||
box-shadow: 0px 0px 20px rgba(150, 150, 255, 0.5);
|
||||
}
|
||||
|
||||
.key.selected {
|
||||
background: #d0d0ff;
|
||||
border-color: #4040ff !important;
|
||||
box-shadow: 0px 0px 20px rgba(100, 100, 255, 0.5);
|
||||
}
|
||||
|
|
@ -159,34 +313,105 @@ body {
|
|||
position: relative;
|
||||
}
|
||||
|
||||
#sk {
|
||||
clear:left;
|
||||
#sub-key-container {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 250px;
|
||||
white-space: nowrap;
|
||||
border-bottom: solid 1px black;
|
||||
border-top: solid 1px black;
|
||||
}
|
||||
|
||||
#sub-key-groups > div,
|
||||
#subKeyToolbar {
|
||||
background-color: white;
|
||||
}
|
||||
|
||||
#sub-key-groups {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr 1fr;
|
||||
column-gap: 1px;
|
||||
background-color: black;
|
||||
}
|
||||
|
||||
#longpress,
|
||||
#multitap {
|
||||
padding: 8px;
|
||||
margin: 0px 0px 8px;
|
||||
min-height: 69px;
|
||||
background: #eeeeee;
|
||||
min-height: 64px;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
#longpress,
|
||||
#multitap,
|
||||
#flick {
|
||||
padding: 8px 0 8px 8px;
|
||||
min-width: 256px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
#longpress .key-placeholder,
|
||||
#multitap .key-placeholder {
|
||||
order: 1;
|
||||
}
|
||||
|
||||
#kbd-container {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 250px;
|
||||
}
|
||||
|
||||
#kbd-scroll-container {
|
||||
overflow-x: auto;
|
||||
white-space: nowrap;
|
||||
border-top: solid 1px #333333;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
#kbd {
|
||||
float: left;
|
||||
padding: 8px;
|
||||
margin: 0px 0px 8px;
|
||||
background: #eeeeee;
|
||||
overflow-x: auto;
|
||||
white-space: nowrap;
|
||||
min-width: 770px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
#sk .key
|
||||
{
|
||||
#longpress .key,
|
||||
#flick .key,
|
||||
.key-placeholder,
|
||||
#multitap .key {
|
||||
height: 48px;
|
||||
padding-top: 5px;
|
||||
margin-left: 3px;
|
||||
}
|
||||
|
||||
#longpress .key,
|
||||
#flick .key,
|
||||
#multitap .key {
|
||||
padding-top: 5px;
|
||||
}
|
||||
|
||||
#flick {
|
||||
display: grid;
|
||||
grid-template-columns: max-content max-content max-content;
|
||||
padding: 8px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
#longpress .key,
|
||||
#flick .key,
|
||||
#multitap .key,
|
||||
.key-placeholder {
|
||||
width: 70px;
|
||||
margin-right: 6px;
|
||||
margin-bottom: 6px;
|
||||
margin-top: 3px;
|
||||
}
|
||||
|
||||
.key-placeholder#flick-center,
|
||||
.key-placeholder#flick-center:hover {
|
||||
background-color: #cccccc;
|
||||
border-color: #cccccc;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.key-modifier { background: #dddddd; }
|
||||
.key-modifier-selected { background: #ddddff; }
|
||||
.key-deadkey { color: #000080; }
|
||||
|
|
@ -210,23 +435,36 @@ br.clear {
|
|||
clear: both;
|
||||
}
|
||||
|
||||
#kbd-container,
|
||||
#sub-key-container {
|
||||
min-width: 1020px;
|
||||
}
|
||||
|
||||
#toolbar div {
|
||||
background: #DCDCDD;
|
||||
margin: -1px -1px -1px 0;
|
||||
padding: 8px;
|
||||
float: left;
|
||||
}
|
||||
|
||||
#toolbar h3 {
|
||||
margin: 0;
|
||||
padding: 0 0 4px 0;
|
||||
font-size: 10pt;
|
||||
}
|
||||
|
||||
#toolbar #controlToolbar > div {
|
||||
margin: 4px 0;
|
||||
padding: 4px;
|
||||
line-height: 1.4em;
|
||||
}
|
||||
|
||||
#toolbar #layoutToolbar > div {
|
||||
margin: 0;
|
||||
padding: 0 8px;
|
||||
border-left: 1px solid #444444;
|
||||
line-height: 24px;
|
||||
margin: 4px 0;
|
||||
padding: 4px;
|
||||
border-top: 1px solid #444444;
|
||||
line-height: 1.4em;
|
||||
}
|
||||
|
||||
button, input, select {
|
||||
font: 9pt Tahoma;
|
||||
margin: 1px 2px;
|
||||
}
|
||||
|
||||
button {
|
||||
|
|
@ -240,9 +478,7 @@ button {
|
|||
}
|
||||
|
||||
#keyToolbar, #subKeyToolbar {
|
||||
margin: -9px 0px 0;
|
||||
padding: 8px;
|
||||
clear: left;
|
||||
}
|
||||
|
||||
#data {
|
||||
|
|
@ -315,11 +551,11 @@ div#btnDelKey, div#btnDelSubKey {
|
|||
color: #FFFFFF;
|
||||
font-family: Tahoma;
|
||||
font-size: 10px;
|
||||
height: 9px;
|
||||
line-height: 6px;
|
||||
height: 13px;
|
||||
line-height: 8px;
|
||||
position: absolute;
|
||||
text-align: center;
|
||||
width: 9px;
|
||||
width: 13px;
|
||||
}
|
||||
|
||||
div#btnDelKey:hover, div#btnDelSubKey:hover {
|
||||
|
|
@ -327,7 +563,13 @@ div#btnDelKey:hover, div#btnDelSubKey:hover {
|
|||
border: 1px solid #ff0000;
|
||||
}
|
||||
|
||||
input#inpKeyCap, input#inpSubKeyCap {
|
||||
body:not(.text-controls-in-toolbar) #key-cap-toolbar-item label,
|
||||
body:not(.text-controls-in-toolbar) #sub-key-cap-toolbar-item label {
|
||||
display: none;
|
||||
}
|
||||
|
||||
body:not(.text-controls-in-toolbar) input#inpKeyCap,
|
||||
body:not(.text-controls-in-toolbar) input#inpSubKeyCap {
|
||||
font-size: 24px;
|
||||
z-index: 100;
|
||||
position: absolute;
|
||||
|
|
@ -337,32 +579,90 @@ input#inpKeyCap, input#inpSubKeyCap {
|
|||
}
|
||||
|
||||
.key-size {
|
||||
color: white;
|
||||
font: 9pt Calibri;
|
||||
left: 100%;
|
||||
margin-left: 16px;
|
||||
margin-top: 16px;
|
||||
font-family: Calibri;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
z-index: 10;
|
||||
line-height: 1em;
|
||||
}
|
||||
|
||||
#kbd.phone-iphone5-portrait .key-size {
|
||||
color: black;
|
||||
margin-left: 48px;
|
||||
left: 567px;
|
||||
top: 16px;
|
||||
font-size: 8pt;
|
||||
color: black;
|
||||
}
|
||||
|
||||
#kbd.phone-iphone5-landscape .key-size {
|
||||
left: 737px;
|
||||
top: 8px;
|
||||
font-size: 8pt;
|
||||
margin-left: 16px;
|
||||
margin-top: 8px;
|
||||
background: rgba(0,0,0,0.5);
|
||||
border-radius: 2px;
|
||||
color: white;
|
||||
}
|
||||
|
||||
#kbd.tablet-ipad-portrait .key-size {
|
||||
color: black;
|
||||
margin-left: 90px;
|
||||
left: 607px;
|
||||
top: 20px;
|
||||
font-size: 8pt;
|
||||
color: white;
|
||||
}
|
||||
|
||||
#kbd.tablet-ipad-landscape .key-size {
|
||||
left: 836px;
|
||||
top: 16px;
|
||||
font-size: 9pt;
|
||||
color: white;
|
||||
}
|
||||
|
||||
/* Position flick keys relative to the flick grid, by hand */
|
||||
|
||||
#flick .key {
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
.key.flick-nw {
|
||||
left: 8px;
|
||||
top: 8px;
|
||||
}
|
||||
|
||||
.key.flick-n {
|
||||
left: 87px;
|
||||
top: 8px;
|
||||
}
|
||||
|
||||
.key.flick-ne {
|
||||
left: 166px;
|
||||
top: 8px;
|
||||
}
|
||||
|
||||
.key.flick-w {
|
||||
left: 8px;
|
||||
top: 65px;
|
||||
}
|
||||
|
||||
.key.flick-e {
|
||||
left: 166px;
|
||||
top: 65px;
|
||||
}
|
||||
|
||||
.key.flick-sw {
|
||||
left: 8px;
|
||||
top: 122px;
|
||||
}
|
||||
|
||||
.key.flick-s {
|
||||
left: 87px;
|
||||
top: 122px;
|
||||
}
|
||||
|
||||
.key.flick-se {
|
||||
left: 166px;
|
||||
top: 122px;
|
||||
}
|
||||
|
||||
.tab {
|
||||
font-size: 16px;
|
||||
padding: 4px 0 0 4px;
|
||||
display: block;
|
||||
background: #DCDCDD;
|
||||
padding: 4px 8px;
|
||||
}
|
||||
|
|
@ -2,131 +2,343 @@
|
|||
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
|
||||
>
|
||||
<xsl:output method="html" indent="yes" encoding="utf-8" />
|
||||
<xsl:output method="html" indent="yes" encoding="utf-8" />
|
||||
|
||||
<xsl:template match="/TouchLayoutBuilder">
|
||||
<xsl:text disable-output-escaping='yes'><!DOCTYPE html></xsl:text>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<script src="/app/lib/sentry/bundle.min.js"><xsl:text> </xsl:text></script>
|
||||
<script src="/app/lib/sentry/init.js"><xsl:text> </xsl:text></script>
|
||||
<title>On Screen Keyboard Builder</title>
|
||||
<link rel="stylesheet" type='text/css'><xsl:attribute name="href"><xsl:value-of select="/TouchLayoutBuilder/LibPath"/>jquery-ui.css</xsl:attribute></link>
|
||||
<link rel='stylesheet' type='text/css'><xsl:attribute name="href"><xsl:value-of select="/TouchLayoutBuilder/LibPath"/>builder.css</xsl:attribute></link>
|
||||
<script><xsl:attribute name="src"><xsl:value-of select="/TouchLayoutBuilder/LibPath"/>jquery-1.10.2.js</xsl:attribute></script>
|
||||
<script><xsl:attribute name="src"><xsl:value-of select="/TouchLayoutBuilder/LibPath"/>jquery-ui.js</xsl:attribute></script>
|
||||
<script>var KVKL = <xsl:value-of select='/TouchLayoutBuilder/LayoutJS' />;</script>
|
||||
<script><xsl:attribute name="src"><xsl:value-of select="/TouchLayoutBuilder/LibPath"/>builder.js</xsl:attribute></script>
|
||||
<script><xsl:attribute name="src"><xsl:value-of select="/TouchLayoutBuilder/LibPath"/>builder-charmap.js</xsl:attribute></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="wedgeAddRowAbove" class="kcontrol wedge-horz"><span>+</span></div>
|
||||
<div id="wedgeAddRowBelow" class="kcontrol wedge-horz"><span>+</span></div>
|
||||
<div id="wedgeAddKeyLeft" class="kcontrol wedge-vert"><span>+</span></div>
|
||||
<div id="wedgeAddKeyRight" class="kcontrol wedge-vert"><span>+</span></div>
|
||||
<div id="btnDelKey">x</div>
|
||||
<xsl:template match="/TouchLayoutBuilder">
|
||||
|
||||
<div id='toolbar'>
|
||||
<div id='controlToolbar'>
|
||||
<button id='btnTemplate'>Template...</button>
|
||||
<button id='btnImport'>Import from On Screen</button>
|
||||
</div>
|
||||
<div id='layoutToolbar'>
|
||||
<div>
|
||||
Platform: <select id='selPlatform'></select>
|
||||
<button id='btnAddPlatform'>Add</button>
|
||||
<button id='btnDelPlatform'>Del</button>
|
||||
<input type='checkbox' id='chkDisplayUnderlying'/> <label for='chkDisplayUnderlying'>Display underlying</label>
|
||||
</div>
|
||||
<div>
|
||||
Layer: <select id='selLayer'></select>
|
||||
<button id='btnAddLayer'>Add</button>
|
||||
<button id='btnDelLayer'>Del</button>
|
||||
<button id='btnEditLayer'>Edit</button>
|
||||
</div>
|
||||
<div>
|
||||
Presentation: <select id='selPlatformPresentation'></select>
|
||||
<input type='checkbox' id='chkShowAllModifierOptions'/> <label for='chkShowAllModifierOptions'>Show all modifier options</label>
|
||||
</div>
|
||||
</div>
|
||||
<br class='clear' />
|
||||
</div>
|
||||
<div id='kbd'></div>
|
||||
<div id='keyToolbar'>
|
||||
<label for='selKeyType'>Key Type:</label> <select id='selKeyType'>
|
||||
<option value='0'>Default</option>
|
||||
<option value='1'>Special</option>
|
||||
<option value='2'>Special (active)</option>
|
||||
<option value='8'>Deadkey</option>
|
||||
<option value='9'>Blank</option>
|
||||
<option value='10'>Spacer</option>
|
||||
</select>
|
||||
<label for='selKeyLayerOverride'>Modifier:</label> <select id='selKeyLayerOverride'></select>
|
||||
<label for='inpKeyName'>ID:</label> <input id='inpKeyName' type='text' size='16' maxlength='64' />
|
||||
<input id='inpKeyCap' type='text' size='8' maxlength='16' />
|
||||
<label for='inpKeyPadding'>Padding Left:</label>
|
||||
<input id='inpKeyPadding' size='5' maxlength='5' />
|
||||
<label for='inpKeyWidth'>Width:</label>
|
||||
<input id='inpKeyWidth' size='5' maxlength='5' />
|
||||
<label for='selKeyNextLayer'>Next Layer:</label> <select id='selKeyNextLayer'></select>
|
||||
<button id='btnAddSubKeyArray'>Add longpress popup</button>
|
||||
<button id='btnDelSubKeyArray'>Remove longpress popup</button>
|
||||
<br class='clear' />
|
||||
</div>
|
||||
<xsl:text disable-output-escaping='yes'><!DOCTYPE html></xsl:text>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<script src="/app/lib/sentry/bundle.min.js"><xsl:text> </xsl:text></script>
|
||||
<script src="/app/lib/sentry/init.js"><xsl:text> </xsl:text></script>
|
||||
<title>On Screen Keyboard Builder</title>
|
||||
<link rel="stylesheet" type='text/css'><xsl:attribute name="href"><xsl:value-of select="/TouchLayoutBuilder/LibPath"/>jquery-ui/jquery-ui.css</xsl:attribute></link>
|
||||
<link rel='stylesheet' type='text/css'><xsl:attribute name="href"><xsl:value-of select="/TouchLayoutBuilder/LibPath"/>builder.css</xsl:attribute></link>
|
||||
<script><xsl:attribute name="src"><xsl:value-of select="/TouchLayoutBuilder/LibPath"/>jquery-1.10.2.js</xsl:attribute></script>
|
||||
<script><xsl:attribute name="src"><xsl:value-of select="/TouchLayoutBuilder/LibPath"/>jquery-ui/jquery-ui.js</xsl:attribute></script>
|
||||
<script>
|
||||
var KVKL = <xsl:value-of select='/TouchLayoutBuilder/LayoutJS' />;
|
||||
window.builder = {};
|
||||
</script>
|
||||
<script><xsl:attribute name="src"><xsl:value-of select="/TouchLayoutBuilder/LibPath"/>constants.js</xsl:attribute></script>
|
||||
<script><xsl:attribute name="src"><xsl:value-of select="/TouchLayoutBuilder/LibPath"/>builder.js</xsl:attribute></script>
|
||||
<script><xsl:attribute name="src"><xsl:value-of select="/TouchLayoutBuilder/LibPath"/>undo.js</xsl:attribute></script>
|
||||
<script><xsl:attribute name="src"><xsl:value-of select="/TouchLayoutBuilder/LibPath"/>prepare-key.js</xsl:attribute></script>
|
||||
<script><xsl:attribute name="src"><xsl:value-of select="/TouchLayoutBuilder/LibPath"/>subkeys.js</xsl:attribute></script>
|
||||
<script><xsl:attribute name="src"><xsl:value-of select="/TouchLayoutBuilder/LibPath"/>view-controls.js</xsl:attribute></script>
|
||||
<script><xsl:attribute name="src"><xsl:value-of select="/TouchLayoutBuilder/LibPath"/>platform-controls.js</xsl:attribute></script>
|
||||
<script><xsl:attribute name="src"><xsl:value-of select="/TouchLayoutBuilder/LibPath"/>layer-controls.js</xsl:attribute></script>
|
||||
<script><xsl:attribute name="src"><xsl:value-of select="/TouchLayoutBuilder/LibPath"/>builder-charmap.js</xsl:attribute></script>
|
||||
<script><xsl:attribute name="src"><xsl:value-of select="/TouchLayoutBuilder/LibPath"/>drag-drop.js</xsl:attribute></script>
|
||||
<script><xsl:attribute name="src"><xsl:value-of select="/TouchLayoutBuilder/LibPath"/>cleanup.js</xsl:attribute></script>
|
||||
<script>initBuilder();</script>
|
||||
</head>
|
||||
<body class='text-controls-in-toolbar'>
|
||||
<div id='toolbar'>
|
||||
<div id='controlToolbar'>
|
||||
<div>
|
||||
<div class='toolbar-item toolbar-single-column'>
|
||||
<button id='btnTemplate'>Template...</button>
|
||||
</div>
|
||||
<div class='toolbar-item toolbar-single-column'>
|
||||
<button id='btnImport'>Import from On Screen</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id='layoutToolbar'>
|
||||
<div>
|
||||
<h3>View Controls</h3>
|
||||
<div class='toolbar-item toolbar-single-column'>
|
||||
<select id='selPlatformPresentation'></select>
|
||||
</div>
|
||||
<div class='toolbar-item toolbar-single-column'>
|
||||
<button id='btnViewOptions'>View options...</button>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<h3>Platform</h3>
|
||||
<div class='toolbar-item toolbar-2-small-buttons'>
|
||||
<select id='selPlatform'></select>
|
||||
<button id='btnAddPlatform' class='emoji-button'>➕</button>
|
||||
<button id='btnDelPlatform' class='emoji-button'>➖</button>
|
||||
</div>
|
||||
<div class='toolbar-item toolbar-single-column'>
|
||||
<button id='btnEditPlatform'>Edit...</button>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<h3>Layer</h3>
|
||||
<div class='toolbar-item toolbar-2-small-buttons'>
|
||||
<select id='selLayer'></select>
|
||||
<button id='btnAddLayer' class='emoji-button'>➕</button>
|
||||
<button id='btnDelLayer' class='emoji-button'>➖</button>
|
||||
</div>
|
||||
<div class='toolbar-item toolbar-single-column'>
|
||||
<button id='btnEditLayer'>Edit...</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<br class='clear' />
|
||||
</div>
|
||||
|
||||
<div id="wedgeAddSubKeyLeft" class="skcontrol wedge-vert"><span>+</span></div>
|
||||
<div id="wedgeAddSubKeyRight" class="skcontrol wedge-vert"><span>+</span></div>
|
||||
<div id="btnDelSubKey">x</div>
|
||||
<div id='container'>
|
||||
|
||||
<div id='sk'></div>
|
||||
<div id='subKeyToolbar'>
|
||||
<label for='selSubKeyType'>Key Type:</label> <select id='selSubKeyType'>
|
||||
<option value='0'>Default</option>
|
||||
<option value='1'>Special</option>
|
||||
<option value='2'>Special (active)</option>
|
||||
<option value='8'>Deadkey</option>
|
||||
<option value='9'>Blank</option>
|
||||
<option value='10'>Spacer</option>
|
||||
</select>
|
||||
<label for='selSubKeyLayerOverride'>Modifier:</label> <select id='selSubKeyLayerOverride'></select>
|
||||
<label for='inpSubKeyName'>ID:</label> <input id='inpSubKeyName' type='text' size='16' maxlength='64' />
|
||||
<input id='inpSubKeyCap' type='text' size='8' maxlength='16' />
|
||||
<label for='selSubKeyNextLayer'>Next Layer:</label> <select id='selSubKeyNextLayer'></select>
|
||||
<br class='clear' />
|
||||
</div>
|
||||
<!-- Keyboard Container -->
|
||||
|
||||
<div id='addPlatformDialog' title='Add platform'>
|
||||
<form>
|
||||
<fieldset>
|
||||
Platform: <select id='selAddPlatform'></select>
|
||||
</fieldset>
|
||||
</form>
|
||||
</div>
|
||||
<div id='addLayerDialog' title='Add layer'>
|
||||
<form>
|
||||
<fieldset>
|
||||
<label for='addLayerList'>Modifier-based layer:</label> <select id='addLayerList'></select><br />
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<label for='addLayerName'>Name:</label> <input type='text' id='addLayerName' size='16' maxlength='64' /><br/>
|
||||
<span id='addLayerNote'></span>
|
||||
</fieldset>
|
||||
</form>
|
||||
</div>
|
||||
<div id='selectKeyDialog' title='Select key'>
|
||||
Press any key to select it on the keyboard
|
||||
</div>
|
||||
<div id='layerPropertiesDialog' title='Layer properties'>
|
||||
<form>
|
||||
<fieldset>
|
||||
Name: <input type='text' id='layerName' size='16' maxlength='64' />
|
||||
</fieldset>
|
||||
</form>
|
||||
</div>
|
||||
<textarea id='data' cols='80' rows='30'></textarea>
|
||||
</body>
|
||||
</html>
|
||||
<div id='kbd-container'>
|
||||
<div id='kbd-scroll-container'>
|
||||
<div id='kbd'></div>
|
||||
</div>
|
||||
|
||||
<!-- Keyboard Toolbar -->
|
||||
|
||||
<div id='keyToolbar'>
|
||||
|
||||
<div class='toolbar-item'>
|
||||
<label for='selKeyCapType'>Keycap Value:</label>
|
||||
<select id='selKeyCapType'>
|
||||
<option value=''>Text</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class='toolbar-item' id='key-cap-toolbar-item'>
|
||||
<label for='inpKeyCap'>Text:</label>
|
||||
<input id='inpKeyCap' type='text' size='16' />
|
||||
</div>
|
||||
|
||||
<div class='toolbar-item' id='key-cap-unicode-toolbar-item'>
|
||||
<label for='inpKeyCapUnicode'>Unicode:</label>
|
||||
<input id='inpKeyCapUnicode' type='text' size='16' />
|
||||
</div>
|
||||
|
||||
<div class='toolbar-item' id='key-hint-toolbar-item'>
|
||||
<label for='inpKeyHint'>Hint:</label>
|
||||
<input id='inpKeyHint' type='text' size='16' />
|
||||
</div>
|
||||
|
||||
<div class='toolbar-item' id='key-hint-unicode-toolbar-item'>
|
||||
<label for='inpKeyHintUnicode'>Unicode:</label>
|
||||
<input id='inpKeyHintUnicode' type='text' size='16' />
|
||||
</div>
|
||||
|
||||
<div class='toolbar-item'>
|
||||
<label for='selKeyType'>Key Type:</label>
|
||||
<select id='selKeyType'>
|
||||
<option value='0'>Default</option>
|
||||
<option value='1'>Special</option>
|
||||
<option value='2'>Special (active)</option>
|
||||
<option value='8'>Deadkey</option>
|
||||
<option value='9'>Blank</option>
|
||||
<option value='10'>Spacer</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class='toolbar-item'>
|
||||
<label for='selKeyLayerOverride'>Modifier:</label>
|
||||
<select id='selKeyLayerOverride'></select>
|
||||
</div>
|
||||
|
||||
<div class='toolbar-item'>
|
||||
<label for='inpKeyName'>ID:</label>
|
||||
<input id='inpKeyName' type='text' size='16' maxlength='64' />
|
||||
</div>
|
||||
|
||||
<div class='toolbar-item'>
|
||||
<label for='inpKeyPadding'>Padding Left:</label>
|
||||
<input id='inpKeyPadding' size='5' maxlength='5' />
|
||||
</div>
|
||||
|
||||
<div class='toolbar-item'>
|
||||
<label for='inpKeyWidth'>Width:</label>
|
||||
<input id='inpKeyWidth' size='5' maxlength='5' />
|
||||
</div>
|
||||
|
||||
<div class='toolbar-item'>
|
||||
<label for='selKeyNextLayer'>Next Layer:</label>
|
||||
<select id='selKeyNextLayer'></select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Keyboard Controls -->
|
||||
|
||||
<div id="wedgeAddRowAbove" class="kcontrol wedge-horz"><span>+</span></div>
|
||||
<div id="wedgeAddRowBelow" class="kcontrol wedge-horz"><span>+</span></div>
|
||||
<div id="wedgeAddKeyLeft" class="kcontrol wedge-vert"><span>+</span></div>
|
||||
<div id="wedgeAddKeyRight" class="kcontrol wedge-vert"><span>+</span></div>
|
||||
<div id="btnDelKey">x</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- Longpress Container -->
|
||||
|
||||
<div id='sub-key-container'>
|
||||
<div id='sub-key-groups'>
|
||||
<div>
|
||||
<span class='tab' id='tab-longpress'>Longpress Keys</span>
|
||||
|
||||
<div id='longpress'>
|
||||
<div class='key-placeholder' id='btnAddLongpress'>+</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<span class='tab' id='tab-flick'>Flicks</span>
|
||||
<div id='flick'>
|
||||
<div class='key-placeholder btn-add-flick' id='flick-nw'>+</div>
|
||||
<div class='key-placeholder btn-add-flick' id='flick-n'>+</div>
|
||||
<div class='key-placeholder btn-add-flick' id='flick-ne'>+</div>
|
||||
<div class='key-placeholder btn-add-flick' id='flick-w'>+</div>
|
||||
<div class='key-placeholder' id='flick-center'></div>
|
||||
<div class='key-placeholder btn-add-flick' id='flick-e'>+</div>
|
||||
<div class='key-placeholder btn-add-flick' id='flick-sw'>+</div>
|
||||
<div class='key-placeholder btn-add-flick' id='flick-s'>+</div>
|
||||
<div class='key-placeholder btn-add-flick' id='flick-se'>+</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<span class='tab' id='tab-multitap'>Multitaps</span>
|
||||
<div id='multitap'>
|
||||
<div class='key-placeholder' id='btnAddMultitap'>+</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id='subKeyToolbar'>
|
||||
<div class='toolbar-item'>
|
||||
<label for='inpSubKeyGestureType'>Gesture Type:</label>
|
||||
<input id='inpSubKeyGestureType' type='text' size='16' disabled='disabled' />
|
||||
</div>
|
||||
<div class='toolbar-item'>
|
||||
<label for='selSubKeyCapType'>Keycap Value:</label>
|
||||
<select id='selSubKeyCapType'>
|
||||
<option value=''>Text</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class='toolbar-item' id='sub-key-cap-toolbar-item'>
|
||||
<label>Text:</label>
|
||||
<input id='inpSubKeyCap' type='text' size='8' />
|
||||
</div>
|
||||
<div class='toolbar-item' id='sub-key-cap-unicode-toolbar-item'>
|
||||
<label>Unicode:</label>
|
||||
<input id='inpSubKeyCapUnicode' type='text' size='16' />
|
||||
</div>
|
||||
<div class='toolbar-item'>
|
||||
<label for='selSubKeyType'>Key Type:</label>
|
||||
<select id='selSubKeyType'>
|
||||
<option value='0'>Default</option>
|
||||
<option value='1'>Special</option>
|
||||
<option value='2'>Special (active)</option>
|
||||
<option value='8'>Deadkey</option>
|
||||
<option value='9'>Blank</option>
|
||||
<option value='10'>Spacer</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class='toolbar-item'>
|
||||
<label for='selSubKeyLayerOverride'>Modifier:</label>
|
||||
<select id='selSubKeyLayerOverride'></select>
|
||||
</div>
|
||||
<div class='toolbar-item'>
|
||||
<label for='inpSubKeyName'>ID:</label>
|
||||
<input id='inpSubKeyName' type='text' size='16' maxlength='64' />
|
||||
</div>
|
||||
<div class='toolbar-item'>
|
||||
<label for='selSubKeyNextLayer'>Next Layer:</label>
|
||||
<select id='selSubKeyNextLayer'></select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Subkey Controls -->
|
||||
|
||||
<div id="wedgeAddSubKeyLeft" class="skcontrol wedge-vert"><span>+</span></div>
|
||||
<div id="wedgeAddSubKeyRight" class="skcontrol wedge-vert"><span>+</span></div>
|
||||
<div id="btnDelSubKey">x</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div id='addPlatformDialog' title='Add platform'>
|
||||
<form>
|
||||
<fieldset>
|
||||
Platform: <select id='selAddPlatform'></select>
|
||||
</fieldset>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div id='addLayerDialog' title='Add layer'>
|
||||
<form>
|
||||
<fieldset>
|
||||
<label for='addLayerList'>Modifier-based layer:</label> <select id='addLayerList'></select><br />
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<label for='addLayerName'>Name:</label> <input type='text' id='addLayerName' size='16' maxlength='64' /><br/>
|
||||
<span id='addLayerNote'></span>
|
||||
</fieldset>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div id='selectKeyDialog' title='Select key'>
|
||||
Press any key to select it on the keyboard
|
||||
</div>
|
||||
|
||||
<div id='viewOptionsDialog' title='View options'>
|
||||
<form>
|
||||
<fieldset>
|
||||
<div>By default, only common modifiers are shown in the modifier lists. If
|
||||
access to more unusual modifier combinations are required, check this option.<br/><br/>
|
||||
This option only affects the controls within the Touch Layout Editor; it has no impact on the layout itself.<br/><br/>
|
||||
</div>
|
||||
<input type='checkbox' id='chkShowAllModifierOptions'/>
|
||||
<label for='chkShowAllModifierOptions'>Show all modifier options</label>
|
||||
</fieldset>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div id='platformPropertiesDialog' title='Platform properties'>
|
||||
<form>
|
||||
<fieldset>
|
||||
<div>Displays the underlying keyboard label on top-left of the key<br/><br/></div>
|
||||
<input type='checkbox' id='chkDisplayUnderlying'/>
|
||||
<label for='chkDisplayUnderlying'>Display underlying key label</label>
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<div>Default hint source for keys for this platform. These can be
|
||||
overridden on a key-by-key basis. "Show a dot if a longpress is present"
|
||||
is the behavior in Keyman 15 and earlier versions and is the default option.<br/><br/>
|
||||
</div>
|
||||
<label for='selDefaultHint'>Default hint source:</label>
|
||||
<select id='selDefaultHint'>
|
||||
<option value='none'>No default hint</option>
|
||||
<option value='dot'>Show a dot if a longpress is present</option>
|
||||
<option value='longpress'>Use first longpress key cap</option>
|
||||
<option value='multitap'>Use first multitap key cap</option>
|
||||
<option value='flick'>Use first flick key cap (priority: n,ne,e,se,s,sw,w,nw)</option>
|
||||
<option value='flick-n'>Use flick north key cap</option>
|
||||
<option value='flick-ne'>Use flick north-east key cap</option>
|
||||
<option value='flick-e'>Use flick east key cap</option>
|
||||
<option value='flick-se'>Use flick south-east key cap</option>
|
||||
<option value='flick-s'>Use flick south key cap</option>
|
||||
<option value='flick-sw'>Use flick south-west key cap</option>
|
||||
<option value='flick-w'>Use flick west key cap</option>
|
||||
<option value='flick-nw'>Use flick north-west key cap</option>
|
||||
</select>
|
||||
</fieldset>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div id='layerPropertiesDialog' title='Layer properties'>
|
||||
<form>
|
||||
<fieldset>
|
||||
Name: <input type='text' id='layerName' size='16' maxlength='64' />
|
||||
</fieldset>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<textarea id='data' cols='80' rows='30'></textarea>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
</xsl:template>
|
||||
</xsl:stylesheet>
|
||||
|
|
|
|||
79
developer/src/tike/xml/layoutbuilder/cleanup.js
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
$(function() {
|
||||
|
||||
builder.cleanupKVKL = function() {
|
||||
let cleanupEmptyArrays = function() {
|
||||
for (let platform in KVKL) {
|
||||
for (let layer of KVKL[platform].layer) {
|
||||
let newRow = [], n = 1;
|
||||
for(let row of layer.row) {
|
||||
if(row.key && Array.isArray(row.key)) {
|
||||
for(let key of row.key) {
|
||||
if(key.sk && (!Array.isArray(key.sk) || key.sk.length == 0)) {
|
||||
delete key.sk;
|
||||
}
|
||||
}
|
||||
if(row.key.length > 0) {
|
||||
row.id = n;
|
||||
n++;
|
||||
newRow.push(row);
|
||||
}
|
||||
}
|
||||
}
|
||||
layer.row = newRow;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
};
|
||||
|
||||
let cleanupNumericField = function(obj, prop) {
|
||||
if(typeof obj[prop] == 'number') {
|
||||
return true;
|
||||
}
|
||||
if(typeof obj[prop] == 'string') {
|
||||
let v = obj[prop].trim();
|
||||
if(v != '') {
|
||||
v = parseInt(v, 10);
|
||||
if(isFinite(v)) {
|
||||
obj[prop] = v;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
delete obj[prop];
|
||||
return true;
|
||||
}
|
||||
|
||||
let cleanupKeyTypes = function(key) {
|
||||
// Delete empty strings for id
|
||||
if(typeof key.id != 'undefined') {
|
||||
if(typeof key.id != 'string') delete key.id;
|
||||
else if(key.id.trim() == '') delete key.id;
|
||||
}
|
||||
// Enforce numeric types for sp, pad, width
|
||||
return cleanupNumericField(key, 'sp') &&
|
||||
cleanupNumericField(key, 'pad') &&
|
||||
cleanupNumericField(key, 'width');
|
||||
}
|
||||
|
||||
let cleanupTypes = function() {
|
||||
for(let platform in KVKL) {
|
||||
for(let layer of KVKL[platform].layer) {
|
||||
for(let row of layer.row) {
|
||||
for(let key of row.key) {
|
||||
cleanupKeyTypes(key);
|
||||
if(key.sk) {
|
||||
for(let sk of key.sk) {
|
||||
cleanupKeyTypes(sk);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
return cleanupEmptyArrays() && cleanupTypes();
|
||||
};
|
||||
|
||||
}.bind(builder));
|
||||
711
developer/src/tike/xml/layoutbuilder/constants.js
Normal file
|
|
@ -0,0 +1,711 @@
|
|||
$(function() {
|
||||
|
||||
this.standardKeyNames = [
|
||||
'K_?00', // &H0
|
||||
'K_LBUTTON', // &H1
|
||||
'K_RBUTTON', // &H2
|
||||
'K_CANCEL', // &H3
|
||||
'K_MBUTTON', // &H4
|
||||
'K_?05', // &H5
|
||||
'K_?06', // &H6
|
||||
'K_?07', // &H7
|
||||
'K_BKSP', // &H8
|
||||
'K_TAB', // &H9
|
||||
'K_?0A', // &HA
|
||||
'K_?0B', // &HB
|
||||
'K_KP5', // &HC
|
||||
'K_ENTER', // &HD
|
||||
'K_?0E', // &HE
|
||||
'K_?0F', // &HF
|
||||
'K_SHIFT', // &H10
|
||||
'K_CONTROL', // &H11
|
||||
'K_ALT', // &H12
|
||||
'K_PAUSE', // &H13
|
||||
'K_CAPS', // &H14
|
||||
'K_KANJI?15', // &H15
|
||||
'K_KANJI?16', // &H16
|
||||
'K_KANJI?17', // &H17
|
||||
'K_KANJI?18', // &H18
|
||||
'K_KANJI?19', // &H19
|
||||
'K_?1A', // &H1A
|
||||
'K_ESC', // &H1B
|
||||
'K_KANJI?1C', // &H1C
|
||||
'K_KANJI?1D', // &H1D
|
||||
'K_KANJI?1E', // &H1E
|
||||
'K_KANJI?1F', // &H1F
|
||||
'K_SPACE', // &H20
|
||||
'K_PGUP', // &H21
|
||||
'K_PGDN', // &H22
|
||||
'K_END', // &H23
|
||||
'K_HOME', // &H24
|
||||
'K_LEFT', // &H25
|
||||
'K_UP', // &H26
|
||||
'K_RIGHT', // &H27
|
||||
'K_DOWN', // &H28
|
||||
'K_SEL', // &H29
|
||||
'K_PRINT', // &H2A
|
||||
'K_EXEC', // &H2B
|
||||
'K_PRTSCN', // &H2C
|
||||
'K_INS', // &H2D
|
||||
'K_DEL', // &H2E
|
||||
'K_HELP', // &H2F
|
||||
'K_0', // &H30
|
||||
'K_1', // &H31
|
||||
'K_2', // &H32
|
||||
'K_3', // &H33
|
||||
'K_4', // &H34
|
||||
'K_5', // &H35
|
||||
'K_6', // &H36
|
||||
'K_7', // &H37
|
||||
'K_8', // &H38
|
||||
'K_9', // &H39
|
||||
'K_?3A', // &H3A
|
||||
'K_?3B', // &H3B
|
||||
'K_?3C', // &H3C
|
||||
'K_?3D', // &H3D
|
||||
'K_?3E', // &H3E
|
||||
'K_?3F', // &H3F
|
||||
'K_?40', // &H40
|
||||
|
||||
'K_A', // &H41
|
||||
'K_B', // &H42
|
||||
'K_C', // &H43
|
||||
'K_D', // &H44
|
||||
'K_E', // &H45
|
||||
'K_F', // &H46
|
||||
'K_G', // &H47
|
||||
'K_H', // &H48
|
||||
'K_I', // &H49
|
||||
'K_J', // &H4A
|
||||
'K_K', // &H4B
|
||||
'K_L', // &H4C
|
||||
'K_M', // &H4D
|
||||
'K_N', // &H4E
|
||||
'K_O', // &H4F
|
||||
'K_P', // &H50
|
||||
'K_Q', // &H51
|
||||
'K_R', // &H52
|
||||
'K_S', // &H53
|
||||
'K_T', // &H54
|
||||
'K_U', // &H55
|
||||
'K_V', // &H56
|
||||
'K_W', // &H57
|
||||
'K_X', // &H58
|
||||
'K_Y', // &H59
|
||||
'K_Z', // &H5A
|
||||
'K_?5B', // &H5B
|
||||
'K_?5C', // &H5C
|
||||
'K_?5D', // &H5D
|
||||
'K_?5E', // &H5E
|
||||
'K_?5F', // &H5F
|
||||
'K_NP0', // &H60
|
||||
'K_NP1', // &H61
|
||||
'K_NP2', // &H62
|
||||
'K_NP3', // &H63
|
||||
'K_NP4', // &H64
|
||||
'K_NP5', // &H65
|
||||
'K_NP6', // &H66
|
||||
'K_NP7', // &H67
|
||||
'K_NP8', // &H68
|
||||
'K_NP9', // &H69
|
||||
'K_NPSTAR', // &H6A
|
||||
'K_NPPLUS', // &H6B
|
||||
'K_SEPARATOR', // &H6C
|
||||
'K_NPMINUS', // &H6D
|
||||
'K_NPDOT', // &H6E
|
||||
'K_NPSLASH', // &H6F
|
||||
'K_F1', // &H70
|
||||
'K_F2', // &H71
|
||||
'K_F3', // &H72
|
||||
'K_F4', // &H73
|
||||
'K_F5', // &H74
|
||||
'K_F6', // &H75
|
||||
'K_F7', // &H76
|
||||
'K_F8', // &H77
|
||||
'K_F9', // &H78
|
||||
'K_F10', // &H79
|
||||
'K_F11', // &H7A
|
||||
'K_F12', // &H7B
|
||||
'K_F13', // &H7C
|
||||
'K_F14', // &H7D
|
||||
'K_F15', // &H7E
|
||||
'K_F16', // &H7F
|
||||
'K_F17', // &H80
|
||||
'K_F18', // &H81
|
||||
'K_F19', // &H82
|
||||
'K_F20', // &H83
|
||||
'K_F21', // &H84
|
||||
'K_F22', // &H85
|
||||
'K_F23', // &H86
|
||||
'K_F24', // &H87
|
||||
|
||||
'K_?88', // &H88
|
||||
'K_?89', // &H89
|
||||
'K_?8A', // &H8A
|
||||
'K_?8B', // &H8B
|
||||
'K_?8C', // &H8C
|
||||
'K_?8D', // &H8D
|
||||
'K_?8E', // &H8E
|
||||
'K_?8F', // &H8F
|
||||
|
||||
'K_NUMLOCK', // &H90
|
||||
'K_SCROLL', // &H91
|
||||
|
||||
'K_?92', // &H92
|
||||
'K_?93', // &H93
|
||||
'K_?94', // &H94
|
||||
'K_?95', // &H95
|
||||
'K_?96', // &H96
|
||||
'K_?97', // &H97
|
||||
'K_?98', // &H98
|
||||
'K_?99', // &H99
|
||||
'K_?9A', // &H9A
|
||||
'K_?9B', // &H9B
|
||||
'K_?9C', // &H9C
|
||||
'K_?9D', // &H9D
|
||||
'K_?9E', // &H9E
|
||||
'K_?9F', // &H9F
|
||||
'K_?A0', // &HA0
|
||||
'K_?A1', // &HA1
|
||||
'K_?A2', // &HA2
|
||||
'K_?A3', // &HA3
|
||||
'K_?A4', // &HA4
|
||||
'K_?A5', // &HA5
|
||||
'K_?A6', // &HA6
|
||||
'K_?A7', // &HA7
|
||||
'K_?A8', // &HA8
|
||||
'K_?A9', // &HA9
|
||||
'K_?AA', // &HAA
|
||||
'K_?AB', // &HAB
|
||||
'K_?AC', // &HAC
|
||||
'K_?AD', // &HAD
|
||||
'K_?AE', // &HAE
|
||||
'K_?AF', // &HAF
|
||||
'K_?B0', // &HB0
|
||||
'K_?B1', // &HB1
|
||||
'K_?B2', // &HB2
|
||||
'K_?B3', // &HB3
|
||||
'K_?B4', // &HB4
|
||||
'K_?B5', // &HB5
|
||||
'K_?B6', // &HB6
|
||||
'K_?B7', // &HB7
|
||||
'K_?B8', // &HB8
|
||||
'K_?B9', // &HB9
|
||||
|
||||
'K_COLON', // &HBA
|
||||
'K_EQUAL', // &HBB
|
||||
'K_COMMA', // &HBC
|
||||
'K_HYPHEN', // &HBD
|
||||
'K_PERIOD', // &HBE
|
||||
'K_SLASH', // &HBF
|
||||
'K_BKQUOTE', // &HC0
|
||||
|
||||
'K_?C1', // &HC1
|
||||
'K_?C2', // &HC2
|
||||
'K_?C3', // &HC3
|
||||
'K_?C4', // &HC4
|
||||
'K_?C5', // &HC5
|
||||
'K_?C6', // &HC6
|
||||
'K_?C7', // &HC7
|
||||
'K_?C8', // &HC8
|
||||
'K_?C9', // &HC9
|
||||
'K_?CA', // &HCA
|
||||
'K_?CB', // &HCB
|
||||
'K_?CC', // &HCC
|
||||
'K_?CD', // &HCD
|
||||
'K_?CE', // &HCE
|
||||
'K_?CF', // &HCF
|
||||
'K_?D0', // &HD0
|
||||
'K_?D1', // &HD1
|
||||
'K_?D2', // &HD2
|
||||
'K_?D3', // &HD3
|
||||
'K_?D4', // &HD4
|
||||
'K_?D5', // &HD5
|
||||
'K_?D6', // &HD6
|
||||
'K_?D7', // &HD7
|
||||
'K_?D8', // &HD8
|
||||
'K_?D9', // &HD9
|
||||
'K_?DA', // &HDA
|
||||
|
||||
'K_LBRKT', // &HDB
|
||||
'K_BKSLASH', // &HDC
|
||||
'K_RBRKT', // &HDD
|
||||
'K_QUOTE', // &HDE
|
||||
'K_oDF', // &HDF
|
||||
'K_oE0', // &HE0
|
||||
'K_oE1', // &HE1
|
||||
'K_oE2', // &HE2
|
||||
'K_oE3', // &HE3
|
||||
'K_oE4', // &HE4
|
||||
|
||||
'K_?E5', // &HE5
|
||||
|
||||
'K_oE6', // &HE6
|
||||
|
||||
'K_?E7', // &HE7
|
||||
'K_?E8', // &HE8
|
||||
|
||||
'K_oE9', // &HE9
|
||||
'K_oEA', // &HEA
|
||||
'K_oEB', // &HEB
|
||||
'K_oEC', // &HEC
|
||||
'K_oED', // &HED
|
||||
'K_oEE', // &HEE
|
||||
'K_oEF', // &HEF
|
||||
'K_oF0', // &HF0
|
||||
'K_oF1', // &HF1
|
||||
'K_oF2', // &HF2
|
||||
'K_oF3', // &HF3
|
||||
'K_oF4', // &HF4
|
||||
'K_oF5', // &HF5
|
||||
|
||||
'K_?F6', // &HF6
|
||||
'K_?F7', // &HF7
|
||||
'K_?F8', // &HF8
|
||||
'K_?F9', // &HF9
|
||||
'K_?FA', // &HFA
|
||||
'K_?FB', // &HFB
|
||||
'K_?FC', // &HFC
|
||||
'K_?FD', // &HFD
|
||||
'K_?FE', // &HFE
|
||||
'K_?FF' // &HFF
|
||||
];
|
||||
|
||||
this.standardKeyCaps = [
|
||||
['',''], // 'K_?00', // &H0
|
||||
['',''], // 'K_LBUTTON', // &H1
|
||||
['',''], // 'K_RBUTTON', // &H2
|
||||
['',''], // 'K_CANCEL', // &H3
|
||||
['',''], // 'K_MBUTTON', // &H4
|
||||
['',''], // 'K_?05', // &H5
|
||||
['',''], // 'K_?06', // &H6
|
||||
['',''], // 'K_?07', // &H7
|
||||
['',''], // 'K_BKSP', // &H8
|
||||
['',''], // 'K_TAB', // &H9
|
||||
['',''], // 'K_?0A', // &HA
|
||||
['',''], // 'K_?0B', // &HB
|
||||
['',''], // 'K_KP5', // &HC
|
||||
['',''], // 'K_ENTER', // &HD
|
||||
['',''], // 'K_?0E', // &HE
|
||||
['',''], // 'K_?0F', // &HF
|
||||
['',''], // 'K_SHIFT', // &H10
|
||||
['',''], // 'K_CONTROL', // &H11
|
||||
['',''], // 'K_ALT', // &H12
|
||||
['',''], // 'K_PAUSE', // &H13
|
||||
['',''], // 'K_CAPS', // &H14
|
||||
['',''], // 'K_KANJI?15', // &H15
|
||||
['',''], // 'K_KANJI?16', // &H16
|
||||
['',''], // 'K_KANJI?17', // &H17
|
||||
['',''], // 'K_KANJI?18', // &H18
|
||||
['',''], // 'K_KANJI?19', // &H19
|
||||
['',''], // 'K_?1A', // &H1A
|
||||
['',''], // 'K_ESC', // &H1B
|
||||
['',''], // 'K_KANJI?1C', // &H1C
|
||||
['',''], // 'K_KANJI?1D', // &H1D
|
||||
['',''], // 'K_KANJI?1E', // &H1E
|
||||
['',''], // 'K_KANJI?1F', // &H1F
|
||||
[' ',' '], // 'K_SPACE', // &H20
|
||||
['',''], // 'K_PGUP', // &H21
|
||||
['',''], // 'K_PGDN', // &H22
|
||||
['',''], // 'K_END', // &H23
|
||||
['',''], // 'K_HOME', // &H24
|
||||
['',''], // 'K_LEFT', // &H25
|
||||
['',''], // 'K_UP', // &H26
|
||||
['',''], // 'K_RIGHT', // &H27
|
||||
['',''], // 'K_DOWN', // &H28
|
||||
['',''], // 'K_SEL', // &H29
|
||||
['',''], // 'K_PRINT', // &H2A
|
||||
['',''], // 'K_EXEC', // &H2B
|
||||
['',''], // 'K_PRTSCN', // &H2C
|
||||
['',''], // 'K_INS', // &H2D
|
||||
['',''], // 'K_DEL', // &H2E
|
||||
['',''], // 'K_HELP', // &H2F
|
||||
['0',')'], // 'K_0', // &H30
|
||||
['1','!'], // 'K_1', // &H31
|
||||
['2','@'], // 'K_2', // &H32
|
||||
['3','#'], // 'K_3', // &H33
|
||||
['4','$'], // 'K_4', // &H34
|
||||
['5','%'], // 'K_5', // &H35
|
||||
['6','^'], // 'K_6', // &H36
|
||||
['7','&'], // 'K_7', // &H37
|
||||
['8','*'], // 'K_8', // &H38
|
||||
['9','('], // 'K_9', // &H39
|
||||
['',''], // 'K_?3A', // &H3A
|
||||
['',''], // 'K_?3B', // &H3B
|
||||
['',''], // 'K_?3C', // &H3C
|
||||
['',''], // 'K_?3D', // &H3D
|
||||
['',''], // 'K_?3E', // &H3E
|
||||
['',''], // 'K_?3F', // &H3F
|
||||
['',''], // 'K_?40', // &H40
|
||||
|
||||
['a','A'], // 'K_A', // &H41
|
||||
['b','B'], // 'K_B', // &H42
|
||||
['c','C'], // 'K_C', // &H43
|
||||
['d','D'], // 'K_D', // &H44
|
||||
['e','E'], // 'K_E', // &H45
|
||||
['f','F'], // 'K_F', // &H46
|
||||
['g','G'], // 'K_G', // &H47
|
||||
['h','H'], // 'K_H', // &H48
|
||||
['i','I'], // 'K_I', // &H49
|
||||
['j','J'], // 'K_J', // &H4A
|
||||
['k','K'], // 'K_K', // &H4B
|
||||
['l','L'], // 'K_L', // &H4C
|
||||
['m','M'], // 'K_M', // &H4D
|
||||
['n','N'], // 'K_N', // &H4E
|
||||
['o','O'], // 'K_O', // &H4F
|
||||
['p','P'], // 'K_P', // &H50
|
||||
['q','Q'], // 'K_Q', // &H51
|
||||
['r','R'], // 'K_R', // &H52
|
||||
['s','S'], // 'K_S', // &H53
|
||||
['t','T'], // 'K_T', // &H54
|
||||
['u','U'], // 'K_U', // &H55
|
||||
['v','V'], // 'K_V', // &H56
|
||||
['w','W'], // 'K_W', // &H57
|
||||
['x','X'], // 'K_X', // &H58
|
||||
['y','Y'], // 'K_Y', // &H59
|
||||
['z','Z'], // 'K_Z', // &H5A
|
||||
['',''], // 'K_?5B', // &H5B
|
||||
['',''], // 'K_?5C', // &H5C
|
||||
['',''], // 'K_?5D', // &H5D
|
||||
['',''], // 'K_?5E', // &H5E
|
||||
['',''], // 'K_?5F', // &H5F
|
||||
['',''], // 'K_NP0', // &H60
|
||||
['',''], // 'K_NP1', // &H61
|
||||
['',''], // 'K_NP2', // &H62
|
||||
['',''], // 'K_NP3', // &H63
|
||||
['',''], // 'K_NP4', // &H64
|
||||
['',''], // 'K_NP5', // &H65
|
||||
['',''], // 'K_NP6', // &H66
|
||||
['',''], // 'K_NP7', // &H67
|
||||
['',''], // 'K_NP8', // &H68
|
||||
['',''], // 'K_NP9', // &H69
|
||||
['',''], // 'K_NPSTAR', // &H6A
|
||||
['',''], // 'K_NPPLUS', // &H6B
|
||||
['',''], // 'K_SEPARATOR', // &H6C
|
||||
['',''], // 'K_NPMINUS', // &H6D
|
||||
['',''], // 'K_NPDOT', // &H6E
|
||||
['',''], // 'K_NPSLASH', // &H6F
|
||||
['',''], // 'K_F1', // &H70
|
||||
['',''], // 'K_F2', // &H71
|
||||
['',''], // 'K_F3', // &H72
|
||||
['',''], // 'K_F4', // &H73
|
||||
['',''], // 'K_F5', // &H74
|
||||
['',''], // 'K_F6', // &H75
|
||||
['',''], // 'K_F7', // &H76
|
||||
['',''], // 'K_F8', // &H77
|
||||
['',''], // 'K_F9', // &H78
|
||||
['',''], // 'K_F10', // &H79
|
||||
['',''], // 'K_F11', // &H7A
|
||||
['',''], // 'K_F12', // &H7B
|
||||
['',''], // 'K_F13', // &H7C
|
||||
['',''], // 'K_F14', // &H7D
|
||||
['',''], // 'K_F15', // &H7E
|
||||
['',''], // 'K_F16', // &H7F
|
||||
['',''], // 'K_F17', // &H80
|
||||
['',''], // 'K_F18', // &H81
|
||||
['',''], // 'K_F19', // &H82
|
||||
['',''], // 'K_F20', // &H83
|
||||
['',''], // 'K_F21', // &H84
|
||||
['',''], // 'K_F22', // &H85
|
||||
['',''], // 'K_F23', // &H86
|
||||
['',''], // 'K_F24', // &H87
|
||||
|
||||
['',''], // 'K_?88', // &H88
|
||||
['',''], // 'K_?89', // &H89
|
||||
['',''], // 'K_?8A', // &H8A
|
||||
['',''], // 'K_?8B', // &H8B
|
||||
['',''], // 'K_?8C', // &H8C
|
||||
['',''], // 'K_?8D', // &H8D
|
||||
['',''], // 'K_?8E', // &H8E
|
||||
['',''], // 'K_?8F', // &H8F
|
||||
|
||||
['',''], // 'K_NUMLOCK', // &H90
|
||||
['',''], // 'K_SCROLL', // &H91
|
||||
|
||||
['',''], // 'K_?92', // &H92
|
||||
['',''], // 'K_?93', // &H93
|
||||
['',''], // 'K_?94', // &H94
|
||||
['',''], // 'K_?95', // &H95
|
||||
['',''], // 'K_?96', // &H96
|
||||
['',''], // 'K_?97', // &H97
|
||||
['',''], // 'K_?98', // &H98
|
||||
['',''], // 'K_?99', // &H99
|
||||
['',''], // 'K_?9A', // &H9A
|
||||
['',''], // 'K_?9B', // &H9B
|
||||
['',''], // 'K_?9C', // &H9C
|
||||
['',''], // 'K_?9D', // &H9D
|
||||
['',''], // 'K_?9E', // &H9E
|
||||
['',''], // 'K_?9F', // &H9F
|
||||
['',''], // 'K_?A0', // &HA0
|
||||
['',''], // 'K_?A1', // &HA1
|
||||
['',''], // 'K_?A2', // &HA2
|
||||
['',''], // 'K_?A3', // &HA3
|
||||
['',''], // 'K_?A4', // &HA4
|
||||
['',''], // 'K_?A5', // &HA5
|
||||
['',''], // 'K_?A6', // &HA6
|
||||
['',''], // 'K_?A7', // &HA7
|
||||
['',''], // 'K_?A8', // &HA8
|
||||
['',''], // 'K_?A9', // &HA9
|
||||
['',''], // 'K_?AA', // &HAA
|
||||
['',''], // 'K_?AB', // &HAB
|
||||
['',''], // 'K_?AC', // &HAC
|
||||
['',''], // 'K_?AD', // &HAD
|
||||
['',''], // 'K_?AE', // &HAE
|
||||
['',''], // 'K_?AF', // &HAF
|
||||
['',''], // 'K_?B0', // &HB0
|
||||
['',''], // 'K_?B1', // &HB1
|
||||
['',''], // 'K_?B2', // &HB2
|
||||
['',''], // 'K_?B3', // &HB3
|
||||
['',''], // 'K_?B4', // &HB4
|
||||
['',''], // 'K_?B5', // &HB5
|
||||
['',''], // 'K_?B6', // &HB6
|
||||
['',''], // 'K_?B7', // &HB7
|
||||
['',''], // 'K_?B8', // &HB8
|
||||
['',''], // 'K_?B9', // &HB9
|
||||
|
||||
[';',':'], // 'K_COLON', // &HBA
|
||||
['=','+'], // 'K_EQUAL', // &HBB
|
||||
[',','<'], // 'K_COMMA', // &HBC
|
||||
['-','_'], // 'K_HYPHEN', // &HBD
|
||||
['.','>'], // 'K_PERIOD', // &HBE
|
||||
['/','?'], // 'K_SLASH', // &HBF
|
||||
['`','~'], // 'K_BKQUOTE', // &HC0
|
||||
|
||||
['',''], // 'K_?C1', // &HC1
|
||||
['',''], // 'K_?C2', // &HC2
|
||||
['',''], // 'K_?C3', // &HC3
|
||||
['',''], // 'K_?C4', // &HC4
|
||||
['',''], // 'K_?C5', // &HC5
|
||||
['',''], // 'K_?C6', // &HC6
|
||||
['',''], // 'K_?C7', // &HC7
|
||||
['',''], // 'K_?C8', // &HC8
|
||||
['',''], // 'K_?C9', // &HC9
|
||||
['',''], // 'K_?CA', // &HCA
|
||||
['',''], // 'K_?CB', // &HCB
|
||||
['',''], // 'K_?CC', // &HCC
|
||||
['',''], // 'K_?CD', // &HCD
|
||||
['',''], // 'K_?CE', // &HCE
|
||||
['',''], // 'K_?CF', // &HCF
|
||||
['',''], // 'K_?D0', // &HD0
|
||||
['',''], // 'K_?D1', // &HD1
|
||||
['',''], // 'K_?D2', // &HD2
|
||||
['',''], // 'K_?D3', // &HD3
|
||||
['',''], // 'K_?D4', // &HD4
|
||||
['',''], // 'K_?D5', // &HD5
|
||||
['',''], // 'K_?D6', // &HD6
|
||||
['',''], // 'K_?D7', // &HD7
|
||||
['',''], // 'K_?D8', // &HD8
|
||||
['',''], // 'K_?D9', // &HD9
|
||||
['',''], // 'K_?DA', // &HDA
|
||||
|
||||
['[','{'], // 'K_LBRKT', // &HDB
|
||||
['\\','|'], // 'K_BKSLASH', // &HDC
|
||||
[']','}'], // 'K_RBRKT', // &HDD
|
||||
['\'','"'], // 'K_QUOTE', // &HDE
|
||||
['',''], // 'K_oDF', // &HDF
|
||||
['',''], // 'K_oE0', // &HE0
|
||||
['',''], // 'K_oE1', // &HE1
|
||||
['\\','|'], // 'K_oE2', // &HE2
|
||||
['',''], // 'K_oE3', // &HE3
|
||||
['',''], // 'K_oE4', // &HE4
|
||||
|
||||
['',''], // 'K_?E5', // &HE5
|
||||
|
||||
['',''], // 'K_oE6', // &HE6
|
||||
|
||||
['',''], // 'K_?E7', // &HE7
|
||||
['',''], // 'K_?E8', // &HE8
|
||||
|
||||
['',''], // 'K_oE9', // &HE9
|
||||
['',''], // 'K_oEA', // &HEA
|
||||
['',''], // 'K_oEB', // &HEB
|
||||
['',''], // 'K_oEC', // &HEC
|
||||
['',''], // 'K_oED', // &HED
|
||||
['',''], // 'K_oEE', // &HEE
|
||||
['',''], // 'K_oEF', // &HEF
|
||||
['',''], // 'K_oF0', // &HF0
|
||||
['',''], // 'K_oF1', // &HF1
|
||||
['',''], // 'K_oF2', // &HF2
|
||||
['',''], // 'K_oF3', // &HF3
|
||||
['',''], // 'K_oF4', // &HF4
|
||||
['',''], // 'K_oF5', // &HF5
|
||||
|
||||
['',''], // 'K_?F6', // &HF6
|
||||
['',''], // 'K_?F7', // &HF7
|
||||
['',''], // 'K_?F8', // &HF8
|
||||
['',''], // 'K_?F9', // &HF9
|
||||
['',''], // 'K_?FA', // &HFA
|
||||
['',''], // 'K_?FB', // &HFB
|
||||
['',''], // 'K_?FC', // &HFC
|
||||
['',''], // 'K_?FD', // &HFD
|
||||
['',''], // 'K_?FE', // &HFE
|
||||
['',''], // 'K_?FF' // &HFF
|
||||
];
|
||||
|
||||
this.lookupKeyNames = [];
|
||||
|
||||
for (var i = 0; i < this.standardKeyNames.length; i++) {
|
||||
if (this.standardKeyNames[i].indexOf('?') < 0) {
|
||||
this.lookupKeyNames.push(this.standardKeyNames[i]);
|
||||
}
|
||||
}
|
||||
this.lookupKeyNames.sort();
|
||||
|
||||
// Defines the PUA code mapping for the various 'special' modifier/control keys on keyboards.
|
||||
// This is lifted directly from visualKeyboard.ts and must be kept in sync. See also CompileKeymanWeb.pas: CSpecialText10
|
||||
this.specialCharacters = {
|
||||
'*Shift*': 8,
|
||||
'*Enter*': 5,
|
||||
'*Tab*': 6,
|
||||
'*BkSp*': 4,
|
||||
'*Menu*': 11,
|
||||
'*Hide*': 10,
|
||||
'*Alt*': 25,
|
||||
'*Ctrl*': 1,
|
||||
'*Caps*': 3,
|
||||
'*ABC*': 16,
|
||||
'*abc*': 17,
|
||||
'*123*': 19,
|
||||
'*Symbol*': 21,
|
||||
'*Currency*': 20,
|
||||
'*Shifted*': 9,
|
||||
'*AltGr*': 2,
|
||||
'*TabLeft*': 7,
|
||||
'*LAlt*': 0x56,
|
||||
'*RAlt*': 0x57,
|
||||
'*LCtrl*': 0x58,
|
||||
'*RCtrl*': 0x59,
|
||||
'*LAltCtrl*': 0x60,
|
||||
'*RAltCtrl*': 0x61,
|
||||
'*LAltCtrlShift*': 0x62,
|
||||
'*RAltCtrlShift*': 0x63,
|
||||
'*AltShift*': 0x64,
|
||||
'*CtrlShift*': 0x65,
|
||||
'*AltCtrlShift*': 0x66,
|
||||
'*LAltShift*': 0x67,
|
||||
'*RAltShift*': 0x68,
|
||||
'*LCtrlShift*': 0x69,
|
||||
'*RCtrlShift*': 0x70,
|
||||
// Following codes introduced in Keyman 14.0
|
||||
'*RTLEnter*': 0x71,
|
||||
'*RTLBkSp*': 0x72,
|
||||
'*ShiftLock*': 0x73,
|
||||
'*ShiftedLock*': 0x74,
|
||||
'*ZWNJ*': 0x75, // * If this one is specified, auto-detection will kick in.
|
||||
'*ZWNJiOS*': 0x75, // The iOS version will be used by default, but the
|
||||
'*ZWNJAndroid*': 0x76, // Android platform has its own default glyph.
|
||||
'*LTREnter*': 5, // * Forces LTR shaping for the Enter/BkSp keys regardless
|
||||
'*LTRBkSp*': 4, // of layout's directionality.
|
||||
};
|
||||
|
||||
this.specialKeyNames = Object.entries(this.specialCharacters).map(ch => ch[0]);
|
||||
|
||||
this.presentations = {
|
||||
"tablet-ipad-landscape": { "x": 829, "y": 299, "name": "iPad (landscape)" }, // 829x622 = iPad tablet box size; (97,101)-(926,723)
|
||||
"tablet-ipad-portrait": { "x": 605, "y": 300, "name": "iPad (portrait)" }, // 605x806 = iPad tablet box size; (98,94)-(703,900)
|
||||
"phone-iphone5-landscape": { "x": 731, "y": 196, "name": "iPhone 5 (landscape)" }, // 731x412 = iPhone box size; (144,39)-(875,451)
|
||||
"phone-iphone5-portrait": { "x": 526, "y": 266, "name": "iPhone 5 (portrait)"} // 528x936 = iPhone box size; (90,204)-(618,1040)
|
||||
};
|
||||
|
||||
this.keyMargin = 15;
|
||||
|
||||
// from kmwosk.js:
|
||||
this.modifierCodes = {
|
||||
"LCTRL":0x0001,
|
||||
"RCTRL":0x0002,
|
||||
"LALT":0x0004,
|
||||
"RALT":0x0008,
|
||||
"SHIFT":0x0010,
|
||||
"CTRL":0x0020,
|
||||
"ALT":0x0040,
|
||||
"CAPS":0x0100,
|
||||
"NO_CAPS":0x0200
|
||||
/*"NUM_LOCK":0x0400, We don't support these in the designer
|
||||
"NO_NUM_LOCK":0x0800,
|
||||
"SCROLL_LOCK":0x1000,
|
||||
"NO_SCROLL_LOCK":0x2000,
|
||||
"VIRTUAL_KEY":0x4000*/
|
||||
};
|
||||
|
||||
// Lists the combinations that we allow users to use. Some are mutually exclusive,
|
||||
// such as Left+Right modifiers, or chiral and non-chiral modifiers (excl. Shift)
|
||||
this.validModifierCombinations = [
|
||||
0,
|
||||
|
||||
this.modifierCodes.LCTRL,
|
||||
this.modifierCodes.RCTRL,
|
||||
|
||||
this.modifierCodes.LALT,
|
||||
this.modifierCodes.LCTRL | this.modifierCodes.LALT,
|
||||
|
||||
this.modifierCodes.RALT,
|
||||
this.modifierCodes.RCTRL | this.modifierCodes.RALT,
|
||||
|
||||
this.modifierCodes.SHIFT,
|
||||
|
||||
this.modifierCodes.LCTRL | this.modifierCodes.SHIFT,
|
||||
this.modifierCodes.LALT | this.modifierCodes.SHIFT,
|
||||
this.modifierCodes.LCTRL | this.modifierCodes.LALT | this.modifierCodes.SHIFT,
|
||||
|
||||
this.modifierCodes.RCTRL | this.modifierCodes.SHIFT,
|
||||
this.modifierCodes.RALT | this.modifierCodes.SHIFT,
|
||||
this.modifierCodes.RCTRL | this.modifierCodes.RALT | this.modifierCodes.SHIFT,
|
||||
|
||||
this.modifierCodes.CTRL,
|
||||
this.modifierCodes.CTRL | this.modifierCodes.SHIFT,
|
||||
|
||||
this.modifierCodes.ALT,
|
||||
this.modifierCodes.CTRL | this.modifierCodes.ALT,
|
||||
this.modifierCodes.SHIFT | this.modifierCodes.ALT,
|
||||
this.modifierCodes.SHIFT | this.modifierCodes.CTRL | this.modifierCodes.ALT,
|
||||
this.modifierCodes.CAPS
|
||||
];
|
||||
|
||||
this.minimalModifierCombinations = [
|
||||
0,
|
||||
this.modifierCodes.RALT,
|
||||
this.modifierCodes.SHIFT,
|
||||
this.modifierCodes.RALT | this.modifierCodes.SHIFT,
|
||||
this.modifierCodes.CAPS
|
||||
];
|
||||
|
||||
this.showAllModifierCombinations = false;
|
||||
|
||||
// Add CAPS and NO_CAPS variants for all of the above
|
||||
(function(c, codes) {
|
||||
var i, n = c.length;
|
||||
for(i = 0; i < n; i++)
|
||||
c.push(c[i] | codes.CAPS);
|
||||
for(i = 0; i < n; i++)
|
||||
c.push(c[i] | codes.NO_CAPS);
|
||||
})(this.validModifierCombinations, this.modifierCodes);
|
||||
|
||||
this.modifierNames = [
|
||||
'leftctrl', // 0x001
|
||||
'rightctrl', // 0x002
|
||||
'leftalt', // 0x004
|
||||
'rightalt', // 0x008
|
||||
'shift', // 0x010
|
||||
'ctrl', // 0x020
|
||||
'alt', // 0x040
|
||||
'', // 0x080 - reserved
|
||||
'caps', // 0x100
|
||||
'nocaps' // 0x200
|
||||
];
|
||||
|
||||
/**
|
||||
* Get kebab-cased full name of a modifier combination given a bitmask
|
||||
*
|
||||
* @param {Number} c
|
||||
* @return {string}
|
||||
**/
|
||||
this.getModifierCombinationName = function(c) {
|
||||
var r = '';
|
||||
if(c == 0) return 'default';
|
||||
for(var i = 0; i < this.modifierNames.length; i++) {
|
||||
if(c & (1<<i)) r += (r == '' ? '' : '-') + this.modifierNames[i];
|
||||
}
|
||||
return r;
|
||||
};
|
||||
|
||||
}.bind(builder));
|
||||
69
developer/src/tike/xml/layoutbuilder/drag-drop.js
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
$(function() {
|
||||
// Key drag and drop functionality
|
||||
|
||||
builder.makeKeyDraggable = function(key) {
|
||||
const selectedKeyType = $(key).data('type');
|
||||
if(!selectedKeyType.match(/^(key|longpress|multitap)$/)) return;
|
||||
|
||||
$(key).draggable({
|
||||
revert: "invalid",
|
||||
stack: ".key",
|
||||
zIndex: 100,
|
||||
helper: "clone",
|
||||
start: function (event, ui) {
|
||||
const elements =
|
||||
selectedKeyType == 'key' ? ['#kbd', '.row'] :
|
||||
selectedKeyType == 'longpress' ? ['#longpress', '#longpress'] :
|
||||
/* selectedKeyType == 'multitap' */ ['#multitap', '#multitap'];
|
||||
|
||||
if (selectedKeyType == 'key') {
|
||||
builder.selectKey(null, false);
|
||||
} else {
|
||||
builder.selectSubKey(null);
|
||||
}
|
||||
|
||||
var drag = this;
|
||||
drag.overList = [];
|
||||
var pos = $(this).position();
|
||||
$(this).addClass('key-dragging');
|
||||
$(elements[0] + ' .key').before(function (index) {
|
||||
if (this == drag) return '';
|
||||
if ($(this).prev()[0] == drag) return '<div class="key-droppable key-current"></div>';
|
||||
return '<div class="key-droppable"></div>';
|
||||
});
|
||||
$(elements[1]).append('<div class="key-droppable"></div>');
|
||||
|
||||
$('.key-droppable').css('margin-top', $(this).css('margin-top')).css('height', $(this).css('height')).droppable({
|
||||
accept: ".key",
|
||||
tolerance: "touch",
|
||||
over: function (_event, _ui) {
|
||||
drag.overList.push(this);
|
||||
$(drag.overList[0]).addClass('key-droppable-hover');
|
||||
},
|
||||
out: function (_event, _ui) {
|
||||
var n = drag.overList.indexOf(this);
|
||||
if (n >= 0)
|
||||
drag.overList.splice(n, 1);
|
||||
$(this).removeClass('key-droppable-hover');
|
||||
if (drag.overList.length > 0) $(drag.overList[0]).addClass('key-droppable-hover');
|
||||
},
|
||||
drop: function (_event, _ui) {
|
||||
//
|
||||
// Drop the selected key into its new position
|
||||
//
|
||||
builder.saveUndo();
|
||||
$(drag).detach().removeClass('key-dragging');
|
||||
$(drag.overList[0]).after(drag);
|
||||
if (selectedKeyType == 'key') builder.rescale(); else builder.generateSubKeys();
|
||||
builder.generate();
|
||||
}
|
||||
});
|
||||
$('.key-current').css('width', $(drag).width() + 'px').css('margin-left', -($(drag).width()) + 'px');
|
||||
},
|
||||
stop: function (_event, _ui) {
|
||||
$('.key-droppable').remove();
|
||||
$(this).removeClass('key-dragging');
|
||||
}
|
||||
});
|
||||
}
|
||||
}.bind(builder));
|
||||
3
developer/src/tike/xml/layoutbuilder/flick-e.svg
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
<svg xmlns='http://www.w3.org/2000/svg' viewBox="0 0 10 16" width="4">
|
||||
<path style="fill: #aaaaaa; stroke: #aaaaaa;" d="M 1 1 L 1 15 L 8.5 8.5 L 1 1 Z" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 164 B |
3
developer/src/tike/xml/layoutbuilder/flick-n.svg
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
<svg xmlns='http://www.w3.org/2000/svg' viewBox="0 0 16 10" width="4">
|
||||
<path style="fill: #aaaaaa; stroke: #aaaaaa;" d="M 1 8.5 L 15 8.5 L 8.5 1 L 1 8.5 Z" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 168 B |
3
developer/src/tike/xml/layoutbuilder/flick-ne.svg
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
<svg xmlns='http://www.w3.org/2000/svg' viewBox="0 0 12 12" width="4">
|
||||
<path style="fill: #aaaaaa; stroke: #aaaaaa;" d="M 1 1 L 10 1 L 10 10 L 1 1 Z" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 162 B |
3
developer/src/tike/xml/layoutbuilder/flick-nw.svg
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
<svg xmlns='http://www.w3.org/2000/svg' viewBox="0 0 12 12" width="4">
|
||||
<path style="fill: #aaaaaa; stroke: #aaaaaa;" d="M 1 1 L 10 1 L 1 10 L 1 1 Z" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 161 B |
3
developer/src/tike/xml/layoutbuilder/flick-s.svg
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
<svg xmlns='http://www.w3.org/2000/svg' viewBox="0 0 16 10" width="4">
|
||||
<path style="fill: #aaaaaa; stroke: #aaaaaa;" d="M 1 1 L 15 1 L 8.5 8.5 L 1 1 Z" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 164 B |
3
developer/src/tike/xml/layoutbuilder/flick-se.svg
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
<svg xmlns='http://www.w3.org/2000/svg' viewBox="0 0 12 12" width="4">
|
||||
<path style="fill: #aaaaaa; stroke: #aaaaaa;" d="M 10 1 L 10 10 L 1 10 L 10 1 Z" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 164 B |
3
developer/src/tike/xml/layoutbuilder/flick-sw.svg
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
<svg xmlns='http://www.w3.org/2000/svg' viewBox="0 0 12 12" width="4">
|
||||
<path style="fill: #aaaaaa; stroke: #aaaaaa;" d="M 1 1 L 10 10 L 1 10 L 1 1 Z" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 162 B |
3
developer/src/tike/xml/layoutbuilder/flick-w.svg
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
<svg xmlns='http://www.w3.org/2000/svg' viewBox="0 0 10 16" width="4">
|
||||
<path style="fill: #aaaaaa; stroke: #aaaaaa;" d="M 8.5 1 L 8.5 15 L 1 8.5 L 8.5 1 Z" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 168 B |
|
After Width: | Height: | Size: 212 B |
|
After Width: | Height: | Size: 208 B |
|
After Width: | Height: | Size: 335 B |
|
After Width: | Height: | Size: 207 B |
|
After Width: | Height: | Size: 262 B |
|
After Width: | Height: | Size: 262 B |
|
After Width: | Height: | Size: 332 B |
|
After Width: | Height: | Size: 280 B |
|
After Width: | Height: | Size: 6.8 KiB |
|
After Width: | Height: | Size: 4.4 KiB |
|
After Width: | Height: | Size: 6.8 KiB |
|
After Width: | Height: | Size: 6.8 KiB |
|
After Width: | Height: | Size: 4.4 KiB |
15003
developer/src/tike/xml/layoutbuilder/jquery-ui.js
vendored
367
developer/src/tike/xml/layoutbuilder/jquery-ui/AUTHORS.txt
Normal file
|
|
@ -0,0 +1,367 @@
|
|||
Authors ordered by first contribution
|
||||
A list of current team members is available at http://jqueryui.com/about
|
||||
|
||||
Paul Bakaus <paul.bakaus@gmail.com>
|
||||
Richard Worth <rdworth@gmail.com>
|
||||
Yehuda Katz <wycats@gmail.com>
|
||||
Sean Catchpole <sean@sunsean.com>
|
||||
John Resig <jeresig@gmail.com>
|
||||
Tane Piper <piper.tane@gmail.com>
|
||||
Dmitri Gaskin <dmitrig01@gmail.com>
|
||||
Klaus Hartl <klaus.hartl@gmail.com>
|
||||
Stefan Petre <stefan.petre@gmail.com>
|
||||
Gilles van den Hoven <gilles@webunity.nl>
|
||||
Micheil Bryan Smith <micheil@brandedcode.com>
|
||||
Jörn Zaefferer <joern.zaefferer@gmail.com>
|
||||
Marc Grabanski <m@marcgrabanski.com>
|
||||
Keith Wood <kbwood@iinet.com.au>
|
||||
Brandon Aaron <brandon.aaron@gmail.com>
|
||||
Scott González <scott.gonzalez@gmail.com>
|
||||
Eduardo Lundgren <eduardolundgren@gmail.com>
|
||||
Aaron Eisenberger <aaronchi@gmail.com>
|
||||
Joan Piedra <theneojp@gmail.com>
|
||||
Bruno Basto <b.basto@gmail.com>
|
||||
Remy Sharp <remy@leftlogic.com>
|
||||
Bohdan Ganicky <bohdan.ganicky@gmail.com>
|
||||
David Bolter <david.bolter@gmail.com>
|
||||
Chi Cheng <cloudream@gmail.com>
|
||||
Ca-Phun Ung <pazu2k@gmail.com>
|
||||
Ariel Flesler <aflesler@gmail.com>
|
||||
Maggie Wachs <maggie@filamentgroup.com>
|
||||
Scott Jehl <scottjehl@gmail.com>
|
||||
Todd Parker <todd@filamentgroup.com>
|
||||
Andrew Powell <andrew@shellscape.org>
|
||||
Brant Burnett <btburnett3@gmail.com>
|
||||
Douglas Neiner <doug@dougneiner.com>
|
||||
Paul Irish <paul.irish@gmail.com>
|
||||
Ralph Whitbeck <ralph.whitbeck@gmail.com>
|
||||
Thibault Duplessis <thibault.duplessis@gmail.com>
|
||||
Dominique Vincent <dominique.vincent@toitl.com>
|
||||
Jack Hsu <jack.hsu@gmail.com>
|
||||
Adam Sontag <ajpiano@ajpiano.com>
|
||||
Carl Fürstenberg <carl@excito.com>
|
||||
Kevin Dalman <development@allpro.net>
|
||||
Alberto Fernández Capel <afcapel@gmail.com>
|
||||
Jacek Jędrzejewski (http://jacek.jedrzejewski.name)
|
||||
Ting Kuei <ting@kuei.com>
|
||||
Samuel Cormier-Iijima <sam@chide.it>
|
||||
Jon Palmer <jonspalmer@gmail.com>
|
||||
Ben Hollis <bhollis@amazon.com>
|
||||
Justin MacCarthy <Justin@Rubystars.biz>
|
||||
Eyal Kobrigo <kobrigo@hotmail.com>
|
||||
Tiago Freire <tiago.freire@gmail.com>
|
||||
Diego Tres <diegotres@gmail.com>
|
||||
Holger Rüprich <holger@rueprich.de>
|
||||
Ziling Zhao <zilingzhao@gmail.com>
|
||||
Mike Alsup <malsup@gmail.com>
|
||||
Robson Braga Araujo <robsonbraga@gmail.com>
|
||||
Pierre-Henri Ausseil <ph.ausseil@gmail.com>
|
||||
Christopher McCulloh <cmcculloh@gmail.com>
|
||||
Andrew Newcomb <ext.github@preceptsoftware.co.uk>
|
||||
Lim Chee Aun <cheeaun@gmail.com>
|
||||
Jorge Barreiro <yortx.barry@gmail.com>
|
||||
Daniel Steigerwald <daniel@steigerwald.cz>
|
||||
John Firebaugh <john_firebaugh@bigfix.com>
|
||||
John Enters <github@darkdark.net>
|
||||
Andrey Kapitcyn <ru.m157y@gmail.com>
|
||||
Dmitry Petrov <dpetroff@gmail.com>
|
||||
Eric Hynds <eric@hynds.net>
|
||||
Chairat Sunthornwiphat <pipo@sixhead.com>
|
||||
Josh Varner <josh.varner@gmail.com>
|
||||
Stéphane Raimbault <stephane.raimbault@gmail.com>
|
||||
Jay Merrifield <fracmak@gmail.com>
|
||||
J. Ryan Stinnett <jryans@gmail.com>
|
||||
Peter Heiberg <peter@heiberg.se>
|
||||
Alex Dovenmuehle <adovenmuehle@gmail.com>
|
||||
Jamie Gegerson <git@jamiegegerson.com>
|
||||
Raymond Schwartz <skeetergraphics@gmail.com>
|
||||
Phillip Barnes <philbar@gmail.com>
|
||||
Kyle Wilkinson <kai@wikyd.org>
|
||||
Khaled AlHourani <me@khaledalhourani.com>
|
||||
Marian Rudzynski <mr@impaled.org>
|
||||
Jean-Francois Remy <jeff@melix.org>
|
||||
Doug Blood <dougblood@gmail.com>
|
||||
Filippo Cavallarin <filippo.cavallarin@codseq.it>
|
||||
Heiko Henning <heiko@thehennings.ch>
|
||||
Aliaksandr Rahalevich <saksmlz@gmail.com>
|
||||
Mario Visic <mario@mariovisic.com>
|
||||
Xavi Ramirez <xavi.rmz@gmail.com>
|
||||
Max Schnur <max.schnur@gmail.com>
|
||||
Saji Nediyanchath <saji89@gmail.com>
|
||||
Corey Frang <gnarf37@gmail.com>
|
||||
Aaron Peterson <aaronp123@yahoo.com>
|
||||
Ivan Peters <ivan@ivanpeters.com>
|
||||
Mohamed Cherif Bouchelaghem <cherifbouchelaghem@yahoo.fr>
|
||||
Marcos Sousa <falecomigo@marcossousa.com>
|
||||
Michael DellaNoce <mdellanoce@mailtrust.com>
|
||||
George Marshall <echosx@gmail.com>
|
||||
Tobias Brunner <tobias@strongswan.org>
|
||||
Martin Solli <msolli@gmail.com>
|
||||
David Petersen <public@petersendidit.com>
|
||||
Dan Heberden <danheberden@gmail.com>
|
||||
William Kevin Manire <williamkmanire@gmail.com>
|
||||
Gilmore Davidson <gilmoreorless@gmail.com>
|
||||
Michael Wu <michaelmwu@gmail.com>
|
||||
Adam Parod <mystic414@gmail.com>
|
||||
Guillaume Gautreau <guillaume+github@ghusse.com>
|
||||
Marcel Toele <EleotleCram@gmail.com>
|
||||
Dan Streetman <ddstreet@ieee.org>
|
||||
Matt Hoskins <matt@nipltd.com>
|
||||
Giovanni Giacobbi <giovanni@giacobbi.net>
|
||||
Kyle Florence <kyle.florence@gmail.com>
|
||||
Pavol Hluchý <lopo@losys.sk>
|
||||
Hans Hillen <hans.hillen@gmail.com>
|
||||
Mark Johnson <virgofx@live.com>
|
||||
Trey Hunner <treyhunner@gmail.com>
|
||||
Shane Whittet <whittet@gmail.com>
|
||||
Edward A Faulkner <ef@alum.mit.edu>
|
||||
Adam Baratz <adam@adambaratz.com>
|
||||
Kato Kazuyoshi <kato.kazuyoshi@gmail.com>
|
||||
Eike Send <eike.send@gmail.com>
|
||||
Kris Borchers <kris.borchers@gmail.com>
|
||||
Eddie Monge <eddie@eddiemonge.com>
|
||||
Israel Tsadok <itsadok@gmail.com>
|
||||
Carson McDonald <carson@ioncannon.net>
|
||||
Jason Davies <jason@jasondavies.com>
|
||||
Garrison Locke <gplocke@gmail.com>
|
||||
David Murdoch <david@davidmurdoch.com>
|
||||
Benjamin Scott Boyle <benjamins.boyle@gmail.com>
|
||||
Jesse Baird <jebaird@gmail.com>
|
||||
Jonathan Vingiano <jvingiano@gmail.com>
|
||||
Dylan Just <dev@ephox.com>
|
||||
Hiroshi Tomita <tomykaira@gmail.com>
|
||||
Glenn Goodrich <glenn.goodrich@gmail.com>
|
||||
Tarafder Ashek-E-Elahi <mail.ashek@gmail.com>
|
||||
Ryan Neufeld <ryan@neufeldmail.com>
|
||||
Marc Neuwirth <marc.neuwirth@gmail.com>
|
||||
Philip Graham <philip.robert.graham@gmail.com>
|
||||
Benjamin Sterling <benjamin.sterling@kenzomedia.com>
|
||||
Wesley Walser <waw325@gmail.com>
|
||||
Kouhei Sutou <kou@clear-code.com>
|
||||
Karl Kirch <karlkrch@gmail.com>
|
||||
Chris Kelly <ckdake@ckdake.com>
|
||||
Jason Oster <jay@kodewerx.org>
|
||||
Felix Nagel <info@felixnagel.com>
|
||||
Alexander Polomoshnov <alex.polomoshnov@gmail.com>
|
||||
David Leal <dgleal@gmail.com>
|
||||
Igor Milla <igor.fsp.milla@gmail.com>
|
||||
Dave Methvin <dave.methvin@gmail.com>
|
||||
Florian Gutmann <f.gutmann@chronimo.com>
|
||||
Marwan Al Jubeh <marwan.aljubeh@gmail.com>
|
||||
Milan Broum <midlis@googlemail.com>
|
||||
Sebastian Sauer <info@dynpages.de>
|
||||
Gaëtan Muller <m.gaetan89@gmail.com>
|
||||
Michel Weimerskirch <michel@weimerskirch.net>
|
||||
William Griffiths <william@ycymro.com>
|
||||
Stojce Slavkovski <stojce@gmail.com>
|
||||
David Soms <david.soms@gmail.com>
|
||||
David De Sloovere <david.desloovere@outlook.com>
|
||||
Michael P. Jung <michael.jung@terreon.de>
|
||||
Shannon Pekary <spekary@gmail.com>
|
||||
Dan Wellman <danwellman@hotmail.com>
|
||||
Matthew Edward Hutton <meh@corefiling.co.uk>
|
||||
James Khoury <james@jameskhoury.com>
|
||||
Rob Loach <robloach@gmail.com>
|
||||
Alberto Monteiro <betimbrasil@gmail.com>
|
||||
Alex Rhea <alex.rhea@gmail.com>
|
||||
Krzysztof Rosiński <rozwell69@gmail.com>
|
||||
Ryan Olton <oltonr@gmail.com>
|
||||
Genie <386@mail.com>
|
||||
Rick Waldron <waldron.rick@gmail.com>
|
||||
Ian Simpson <spoonlikesham@gmail.com>
|
||||
Lev Kitsis <spam4lev@gmail.com>
|
||||
TJ VanToll <tj.vantoll@gmail.com>
|
||||
Justin Domnitz <jdomnitz@gmail.com>
|
||||
Douglas Cerna <douglascerna@yahoo.com>
|
||||
Bert ter Heide <bertjh@hotmail.com>
|
||||
Jasvir Nagra <jasvir@gmail.com>
|
||||
Yuriy Khabarov <13real008@gmail.com>
|
||||
Harri Kilpiö <harri.kilpio@gmail.com>
|
||||
Lado Lomidze <lado.lomidze@gmail.com>
|
||||
Amir E. Aharoni <amir.aharoni@mail.huji.ac.il>
|
||||
Simon Sattes <simon.sattes@gmail.com>
|
||||
Jo Liss <joliss42@gmail.com>
|
||||
Guntupalli Karunakar <karunakarg@yahoo.com>
|
||||
Shahyar Ghobadpour <shahyar@gmail.com>
|
||||
Lukasz Lipinski <uzza17@gmail.com>
|
||||
Timo Tijhof <krinklemail@gmail.com>
|
||||
Jason Moon <jmoon@socialcast.com>
|
||||
Martin Frost <martinf55@hotmail.com>
|
||||
Eneko Illarramendi <eneko@illarra.com>
|
||||
EungJun Yi <semtlenori@gmail.com>
|
||||
Courtland Allen <courtlandallen@gmail.com>
|
||||
Viktar Varvanovich <non4eg@gmail.com>
|
||||
Danny Trunk <dtrunk90@gmail.com>
|
||||
Pavel Stetina <pavel.stetina@nangu.tv>
|
||||
Michael Stay <metaweta@gmail.com>
|
||||
Steven Roussey <sroussey@gmail.com>
|
||||
Michael Hollis <hollis21@gmail.com>
|
||||
Lee Rowlands <lee.rowlands@previousnext.com.au>
|
||||
Timmy Willison <timmywillisn@gmail.com>
|
||||
Karl Swedberg <kswedberg@gmail.com>
|
||||
Baoju Yuan <the_guy_1987@hotmail.com>
|
||||
Maciej Mroziński <maciej.k.mrozinski@gmail.com>
|
||||
Luis Dalmolin <luis.nh@gmail.com>
|
||||
Mark Aaron Shirley <maspwr@gmail.com>
|
||||
Martin Hoch <martin@fidion.de>
|
||||
Jiayi Yang <tr870829@gmail.com>
|
||||
Philipp Benjamin Köppchen <xgxtpbk@gws.ms>
|
||||
Sindre Sorhus <sindresorhus@gmail.com>
|
||||
Bernhard Sirlinger <bernhard.sirlinger@tele2.de>
|
||||
Jared A. Scheel <jared@jaredscheel.com>
|
||||
Rafael Xavier de Souza <rxaviers@gmail.com>
|
||||
John Chen <zhang.z.chen@intel.com>
|
||||
Robert Beuligmann <robertbeuligmann@gmail.com>
|
||||
Dale Kocian <dale.kocian@gmail.com>
|
||||
Mike Sherov <mike.sherov@gmail.com>
|
||||
Andrew Couch <andy@couchand.com>
|
||||
Marc-Andre Lafortune <github@marc-andre.ca>
|
||||
Nate Eagle <nate.eagle@teamaol.com>
|
||||
David Souther <davidsouther@gmail.com>
|
||||
Mathias Stenbom <mathias@stenbom.com>
|
||||
Sergey Kartashov <ebishkek@yandex.ru>
|
||||
Avinash R <nashpapa@gmail.com>
|
||||
Ethan Romba <ethanromba@gmail.com>
|
||||
Cory Gackenheimer <cory.gack@gmail.com>
|
||||
Juan Pablo Kaniefsky <jpkaniefsky@gmail.com>
|
||||
Roman Salnikov <bardt.dz@gmail.com>
|
||||
Anika Henke <anika@selfthinker.org>
|
||||
Samuel Bovée <samycookie2000@yahoo.fr>
|
||||
Fabrício Matté <ult_combo@hotmail.com>
|
||||
Viktor Kojouharov <vkojouharov@gmail.com>
|
||||
Pawel Maruszczyk (http://hrabstwo.net)
|
||||
Pavel Selitskas <p.selitskas@gmail.com>
|
||||
Bjørn Johansen <post@bjornjohansen.no>
|
||||
Matthieu Penant <thieum22@hotmail.com>
|
||||
Dominic Barnes <dominic@dbarnes.info>
|
||||
David Sullivan <david.sullivan@gmail.com>
|
||||
Thomas Jaggi <thomas@responsive.ch>
|
||||
Vahid Sohrabloo <vahid4134@gmail.com>
|
||||
Travis Carden <travis.carden@gmail.com>
|
||||
Bruno M. Custódio <bruno@brunomcustodio.com>
|
||||
Nathanael Silverman <nathanael.silverman@gmail.com>
|
||||
Christian Wenz <christian@wenz.org>
|
||||
Steve Urmston <steve@urm.st>
|
||||
Zaven Muradyan <megalivoithos@gmail.com>
|
||||
Woody Gilk <shadowhand@deviantart.com>
|
||||
Zbigniew Motyka <zbigniew.motyka@gmail.com>
|
||||
Suhail Alkowaileet <xsoh.k7@gmail.com>
|
||||
Toshi MARUYAMA <marutosijp2@yahoo.co.jp>
|
||||
David Hansen <hansede@gmail.com>
|
||||
Brian Grinstead <briangrinstead@gmail.com>
|
||||
Christian Klammer <christian314159@gmail.com>
|
||||
Steven Luscher <jquerycla@steveluscher.com>
|
||||
Gan Eng Chin <engchin.gan@gmail.com>
|
||||
Gabriel Schulhof <gabriel.schulhof@intel.com>
|
||||
Alexander Schmitz <arschmitz@gmail.com>
|
||||
Vilhjálmur Skúlason <vis@dmm.is>
|
||||
Siebrand Mazeland <siebrand@kitano.nl>
|
||||
Mohsen Ekhtiari <mohsenekhtiari@yahoo.com>
|
||||
Pere Orga <gotrunks@gmail.com>
|
||||
Jasper de Groot <mail@ugomobi.com>
|
||||
Stephane Deschamps <stephane.deschamps@gmail.com>
|
||||
Jyoti Deka <dekajp@gmail.com>
|
||||
Andrei Picus <office.nightcrawler@gmail.com>
|
||||
Ondrej Novy <novy@ondrej.org>
|
||||
Jacob McCutcheon <jacob.mccutcheon@gmail.com>
|
||||
Monika Piotrowicz <monika.piotrowicz@gmail.com>
|
||||
Imants Horsts <imants.horsts@inbox.lv>
|
||||
Eric Dahl <eric.c.dahl@gmail.com>
|
||||
Dave Stein <dave@behance.com>
|
||||
Dylan Barrell <dylan@barrell.com>
|
||||
Daniel DeGroff <djdegroff@gmail.com>
|
||||
Michael Wiencek <mwtuea@gmail.com>
|
||||
Thomas Meyer <meyertee@gmail.com>
|
||||
Ruslan Yakhyaev <ruslan@ruslan.io>
|
||||
Brian J. Dowling <bjd-dev@simplicity.net>
|
||||
Ben Higgins <ben@extrahop.com>
|
||||
Yermo Lamers <yml@yml.com>
|
||||
Patrick Stapleton <github@gdi2290.com>
|
||||
Trisha Crowley <trisha.crowley@gmail.com>
|
||||
Usman Akeju <akeju00+github@gmail.com>
|
||||
Rodrigo Menezes <rod333@gmail.com>
|
||||
Jacques Perrault <jacques_perrault@us.ibm.com>
|
||||
Frederik Elvhage <frederik.elvhage@googlemail.com>
|
||||
Will Holley <willholley@gmail.com>
|
||||
Uri Gilad <antishok@gmail.com>
|
||||
Richard Gibson <richard.gibson@gmail.com>
|
||||
Simen Bekkhus <sbekkhus91@gmail.com>
|
||||
Chen Eshchar <eshcharc@gmail.com>
|
||||
Bruno Pérel <brunoperel@gmail.com>
|
||||
Mohammed Alshehri <m@dralshehri.com>
|
||||
Lisa Seacat DeLuca <ldeluca@us.ibm.com>
|
||||
Anne-Gaelle Colom <coloma@westminster.ac.uk>
|
||||
Adam Foster <slimfoster@gmail.com>
|
||||
Luke Page <luke.a.page@gmail.com>
|
||||
Daniel Owens <daniel@matchstickmixup.com>
|
||||
Michael Orchard <morchard@scottlogic.co.uk>
|
||||
Marcus Warren <marcus@envoke.com>
|
||||
Nils Heuermann <nils@world-of-scripts.de>
|
||||
Marco Ziech <marco@ziech.net>
|
||||
Patricia Juarez <patrixd@gmail.com>
|
||||
Ben Mosher <me@benmosher.com>
|
||||
Ablay Keldibek <atomio.ak@gmail.com>
|
||||
Thomas Applencourt <thomas.applencourt@irsamc.ups-tlse.fr>
|
||||
Jiabao Wu <jiabao.foss@gmail.com>
|
||||
Eric Lee Carraway <github@ericcarraway.com>
|
||||
Victor Homyakov <vkhomyackov@gmail.com>
|
||||
Myeongjin Lee <aranet100@gmail.com>
|
||||
Liran Sharir <lsharir@gmail.com>
|
||||
Weston Ruter <weston@xwp.co>
|
||||
Mani Mishra <manimishra902@gmail.com>
|
||||
Hannah Methvin <hannahmethvin@gmail.com>
|
||||
Leonardo Balter <leonardo.balter@gmail.com>
|
||||
Benjamin Albert <benjamin_a5@yahoo.com>
|
||||
Michał Gołębiowski-Owczarek <m.goleb@gmail.com>
|
||||
Alyosha Pushak <alyosha.pushak@gmail.com>
|
||||
Fahad Ahmad <fahadahmad41@hotmail.com>
|
||||
Matt Brundage <github@mattbrundage.com>
|
||||
Francesc Baeta <francesc.baeta@gmail.com>
|
||||
Piotr Baran <piotros@wp.pl>
|
||||
Mukul Hase <mukulhase@gmail.com>
|
||||
Konstantin Dinev <kdinev@mail.bw.edu>
|
||||
Rand Scullard <rand@randscullard.com>
|
||||
Dan Strohl <dan@wjcg.net>
|
||||
Maksim Ryzhikov <rv.maksim@gmail.com>
|
||||
Amine HADDAD <haddad@allegorie.tv>
|
||||
Amanpreet Singh <apsdehal@gmail.com>
|
||||
Alexey Balchunas <bleshik@gmail.com>
|
||||
Peter Kehl <peter.kehl@gmail.com>
|
||||
Peter Dave Hello <hsu@peterdavehello.org>
|
||||
Johannes Schäfer <johnschaefer@gmx.de>
|
||||
Ville Skyttä <ville.skytta@iki.fi>
|
||||
Ryan Oriecuia <ryan.oriecuia@visioncritical.com>
|
||||
Sergei Ratnikov <sergeir82@gmail.com>
|
||||
milk54 <milk851@gmail.com>
|
||||
Evelyn Masso <evoutofambit@gmail.com>
|
||||
Robin <mail@robin-fowler.com>
|
||||
Simon Asika <asika32764@gmail.com>
|
||||
Kevin Cupp <kevin.cupp@gmail.com>
|
||||
Jeremy Mickelson <Jeremy.Mickelson@gmail.com>
|
||||
Kyle Rosenberg <kyle.rosenberg@gmail.com>
|
||||
Petri Partio <petri.partio@gmail.com>
|
||||
pallxk <github@pallxk.com>
|
||||
Luke Brookhart <luke@onjax.com>
|
||||
claudi <hirt-claudia@gmx.de>
|
||||
Eirik Sletteberg <eiriksletteberg@gmail.com>
|
||||
Albert Johansson <albert@intervaro.se>
|
||||
A. Wells <borgboyone@users.noreply.github.com>
|
||||
Robert Brignull <robertbrignull@gmail.com>
|
||||
Horus68 <pauloizidoro@gmail.com>
|
||||
Maksymenkov Eugene <foatei@gmail.com>
|
||||
OskarNS <soerensen.oskar@gmail.com>
|
||||
Gez Quinn <holla@gezquinn.design>
|
||||
jigar gala <jigar.gala140291@gmail.com>
|
||||
Florian Wegscheider <flo.wegscheider@gmail.com>
|
||||
Fatér Zsolt <fater.zsolt@gmail.com>
|
||||
Szabolcs Szabolcsi-Toth <nec@shell8.net>
|
||||
Jérémy Munsch <github@jeremydev.ovh>
|
||||
Hrvoje Novosel <hrvoje.novosel@gmail.com>
|
||||
Paul Capron <PaulCapron@users.noreply.github.com>
|
||||
Micah Miller <mikhey@runbox.com>
|
||||
sakshi87 <53863764+sakshi87@users.noreply.github.com>
|
||||
Mikolaj Wolicki <wolicki.mikolaj@gmail.com>
|
||||
Patrick McKay <patrick.mckay@vumc.org>
|
||||
c-lambert <58025159+c-lambert@users.noreply.github.com>
|
||||
Josep Sanz <josepsanzcamp@gmail.com>
|
||||
Ben Mullins <benm@umich.edu>
|
||||
43
developer/src/tike/xml/layoutbuilder/jquery-ui/LICENSE.txt
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
Copyright jQuery Foundation and other contributors, https://jquery.org/
|
||||
|
||||
This software consists of voluntary contributions made by many
|
||||
individuals. For exact contribution history, see the revision history
|
||||
available at https://github.com/jquery/jquery-ui
|
||||
|
||||
The following license applies to all parts of this software except as
|
||||
documented below:
|
||||
|
||||
====
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
====
|
||||
|
||||
Copyright and related rights for sample code are waived via CC0. Sample
|
||||
code is defined as all source code contained within the demos directory.
|
||||
|
||||
CC0: http://creativecommons.org/publicdomain/zero/1.0/
|
||||
|
||||
====
|
||||
|
||||
All files located in the node_modules and external directories are
|
||||
externally maintained libraries used by this software which have their
|
||||
own licenses; we recommend you read them, as their terms may differ from
|
||||
the terms above.
|
||||
10881
developer/src/tike/xml/layoutbuilder/jquery-ui/external/jquery/jquery.js
vendored
Normal file
|
After Width: | Height: | Size: 6.9 KiB |
|
After Width: | Height: | Size: 6.9 KiB |
|
After Width: | Height: | Size: 4.5 KiB |
|
After Width: | Height: | Size: 6.9 KiB |
|
After Width: | Height: | Size: 4.5 KiB |
|
After Width: | Height: | Size: 6.3 KiB |
503
developer/src/tike/xml/layoutbuilder/jquery-ui/index.html
Normal file
|
|
@ -0,0 +1,503 @@
|
|||
<!doctype html>
|
||||
<html lang="us">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>jQuery UI Example Page</title>
|
||||
<link href="jquery-ui.css" rel="stylesheet">
|
||||
<style>
|
||||
body{
|
||||
font-family: "Trebuchet MS", sans-serif;
|
||||
margin: 50px;
|
||||
}
|
||||
.demoHeaders {
|
||||
margin-top: 2em;
|
||||
}
|
||||
#dialog-link {
|
||||
padding: .4em 1em .4em 20px;
|
||||
text-decoration: none;
|
||||
position: relative;
|
||||
}
|
||||
#dialog-link span.ui-icon {
|
||||
margin: 0 5px 0 0;
|
||||
position: absolute;
|
||||
left: .2em;
|
||||
top: 50%;
|
||||
margin-top: -8px;
|
||||
}
|
||||
#icons {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
#icons li {
|
||||
margin: 2px;
|
||||
position: relative;
|
||||
padding: 4px 0;
|
||||
cursor: pointer;
|
||||
float: left;
|
||||
list-style: none;
|
||||
}
|
||||
#icons span.ui-icon {
|
||||
float: left;
|
||||
margin: 0 4px;
|
||||
}
|
||||
.fakewindowcontain .ui-widget-overlay {
|
||||
position: absolute;
|
||||
}
|
||||
select {
|
||||
width: 200px;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<h1>Welcome to jQuery UI!</h1>
|
||||
|
||||
<div class="ui-widget">
|
||||
<p>This page demonstrates the widgets and theme you selected in Download Builder. Please make sure you are using them with a compatible jQuery version.</p>
|
||||
</div>
|
||||
|
||||
<h1>YOUR COMPONENTS:</h1>
|
||||
|
||||
<!-- Accordion -->
|
||||
<h2 class="demoHeaders">Accordion</h2>
|
||||
<div id="accordion">
|
||||
<h3>First</h3>
|
||||
<div>Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.</div>
|
||||
<h3>Second</h3>
|
||||
<div>Phasellus mattis tincidunt nibh.</div>
|
||||
<h3>Third</h3>
|
||||
<div>Nam dui erat, auctor a, dignissim quis.</div>
|
||||
</div>
|
||||
|
||||
<!-- Autocomplete -->
|
||||
<h2 class="demoHeaders">Autocomplete</h2>
|
||||
<div>
|
||||
<input id="autocomplete" title="type "a"">
|
||||
</div>
|
||||
|
||||
<!-- Button -->
|
||||
<h2 class="demoHeaders">Button</h2>
|
||||
<button id="button">A button element</button>
|
||||
<button id="button-icon">An icon-only button</button>
|
||||
|
||||
<!-- Checkboxradio -->
|
||||
<h2 class="demoHeaders">Checkboxradio</h2>
|
||||
<form style="margin-top: 1em;">
|
||||
<div id="radioset">
|
||||
<input type="radio" id="radio1" name="radio"><label for="radio1">Choice 1</label>
|
||||
<input type="radio" id="radio2" name="radio" checked="checked"><label for="radio2">Choice 2</label>
|
||||
<input type="radio" id="radio3" name="radio"><label for="radio3">Choice 3</label>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<!-- Controlgroup -->
|
||||
<h2 class="demoHeaders">Controlgroup</h2>
|
||||
<fieldset>
|
||||
<legend>Rental Car</legend>
|
||||
<div id="controlgroup">
|
||||
<select id="car-type">
|
||||
<option>Compact car</option>
|
||||
<option>Midsize car</option>
|
||||
<option>Full size car</option>
|
||||
<option>SUV</option>
|
||||
<option>Luxury</option>
|
||||
<option>Truck</option>
|
||||
<option>Van</option>
|
||||
</select>
|
||||
<label for="transmission-standard">Standard</label>
|
||||
<input type="radio" name="transmission" id="transmission-standard">
|
||||
<label for="transmission-automatic">Automatic</label>
|
||||
<input type="radio" name="transmission" id="transmission-automatic">
|
||||
<label for="insurance">Insurance</label>
|
||||
<input type="checkbox" name="insurance" id="insurance">
|
||||
<label for="horizontal-spinner" class="ui-controlgroup-label"># of cars</label>
|
||||
<input id="horizontal-spinner" class="ui-spinner-input">
|
||||
<button>Book Now!</button>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<!-- Tabs -->
|
||||
<h2 class="demoHeaders">Tabs</h2>
|
||||
<div id="tabs">
|
||||
<ul>
|
||||
<li><a href="#tabs-1">First</a></li>
|
||||
<li><a href="#tabs-2">Second</a></li>
|
||||
<li><a href="#tabs-3">Third</a></li>
|
||||
</ul>
|
||||
<div id="tabs-1">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</div>
|
||||
<div id="tabs-2">Phasellus mattis tincidunt nibh. Cras orci urna, blandit id, pretium vel, aliquet ornare, felis. Maecenas scelerisque sem non nisl. Fusce sed lorem in enim dictum bibendum.</div>
|
||||
<div id="tabs-3">Nam dui erat, auctor a, dignissim quis, sollicitudin eu, felis. Pellentesque nisi urna, interdum eget, sagittis et, consequat vestibulum, lacus. Mauris porttitor ullamcorper augue.</div>
|
||||
</div>
|
||||
|
||||
<h2 class="demoHeaders">Dialog</h2>
|
||||
<p>
|
||||
<button id="dialog-link" class="ui-button ui-corner-all ui-widget">
|
||||
<span class="ui-icon ui-icon-newwin"></span>Open Dialog
|
||||
</button>
|
||||
</p>
|
||||
|
||||
<h2 class="demoHeaders">Overlay and Shadow Classes</h2>
|
||||
<div style="position: relative; width: 96%; height: 200px; padding:1% 2%; overflow:hidden;" class="fakewindowcontain">
|
||||
<p>Lorem ipsum dolor sit amet, Nulla nec tortor. Donec id elit quis purus consectetur consequat. </p><p>Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. Aliquam ante. Suspendisse scelerisque dui nec velit. Duis augue augue, gravida euismod, vulputate ac, facilisis id, sem. Morbi in orci. </p><p>Nulla purus lacus, pulvinar vel, malesuada ac, mattis nec, quam. Nam molestie scelerisque quam. Nullam feugiat cursus lacus.orem ipsum dolor sit amet, consectetur adipiscing elit. Donec libero risus, commodo vitae, pharetra mollis, posuere eu, pede. Nulla nec tortor. Donec id elit quis purus consectetur consequat. </p><p>Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. Aliquam ante. Suspendisse scelerisque dui nec velit. Duis augue augue, gravida euismod, vulputate ac, facilisis id, sem. Morbi in orci. Nulla purus lacus, pulvinar vel, malesuada ac, mattis nec, quam. Nam molestie scelerisque quam. </p><p>Nullam feugiat cursus lacus.orem ipsum dolor sit amet, consectetur adipiscing elit. Donec libero risus, commodo vitae, pharetra mollis, posuere eu, pede. Nulla nec tortor. Donec id elit quis purus consectetur consequat. Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. Aliquam ante. </p><p>Suspendisse scelerisque dui nec velit. Duis augue augue, gravida euismod, vulputate ac, facilisis id, sem. Morbi in orci. Nulla purus lacus, pulvinar vel, malesuada ac, mattis nec, quam. Nam molestie scelerisque quam. Nullam feugiat cursus lacus.orem ipsum dolor sit amet, consectetur adipiscing elit. Donec libero risus, commodo vitae, pharetra mollis, posuere eu, pede. Nulla nec tortor. Donec id elit quis purus consectetur consequat. Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. </p>
|
||||
|
||||
<!-- ui-dialog -->
|
||||
<div class="ui-widget-overlay ui-front"></div>
|
||||
<div style="position: absolute; width: 320px; left: 50px; top: 30px; padding: 1.2em" class="ui-widget ui-front ui-widget-content ui-corner-all ui-widget-shadow">
|
||||
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- ui-dialog -->
|
||||
<div id="dialog" title="Dialog Title">
|
||||
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
|
||||
</div>
|
||||
|
||||
|
||||
<h2 class="demoHeaders">Framework Icons (content color preview)</h2>
|
||||
<ul id="icons" class="ui-widget ui-helper-clearfix">
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-caret-1-n"><span class="ui-icon ui-icon-caret-1-n"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-caret-1-ne"><span class="ui-icon ui-icon-caret-1-ne"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-caret-1-e"><span class="ui-icon ui-icon-caret-1-e"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-caret-1-se"><span class="ui-icon ui-icon-caret-1-se"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-caret-1-s"><span class="ui-icon ui-icon-caret-1-s"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-caret-1-sw"><span class="ui-icon ui-icon-caret-1-sw"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-caret-1-w"><span class="ui-icon ui-icon-caret-1-w"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-caret-1-nw"><span class="ui-icon ui-icon-caret-1-nw"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-caret-2-n-s"><span class="ui-icon ui-icon-caret-2-n-s"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-caret-2-e-w"><span class="ui-icon ui-icon-caret-2-e-w"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-n"><span class="ui-icon ui-icon-triangle-1-n"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-ne"><span class="ui-icon ui-icon-triangle-1-ne"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-e"><span class="ui-icon ui-icon-triangle-1-e"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-se"><span class="ui-icon ui-icon-triangle-1-se"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-s"><span class="ui-icon ui-icon-triangle-1-s"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-sw"><span class="ui-icon ui-icon-triangle-1-sw"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-w"><span class="ui-icon ui-icon-triangle-1-w"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-nw"><span class="ui-icon ui-icon-triangle-1-nw"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-2-n-s"><span class="ui-icon ui-icon-triangle-2-n-s"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-2-e-w"><span class="ui-icon ui-icon-triangle-2-e-w"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-n"><span class="ui-icon ui-icon-arrow-1-n"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-ne"><span class="ui-icon ui-icon-arrow-1-ne"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-e"><span class="ui-icon ui-icon-arrow-1-e"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-se"><span class="ui-icon ui-icon-arrow-1-se"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-s"><span class="ui-icon ui-icon-arrow-1-s"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-sw"><span class="ui-icon ui-icon-arrow-1-sw"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-w"><span class="ui-icon ui-icon-arrow-1-w"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-nw"><span class="ui-icon ui-icon-arrow-1-nw"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-2-n-s"><span class="ui-icon ui-icon-arrow-2-n-s"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-2-ne-sw"><span class="ui-icon ui-icon-arrow-2-ne-sw"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-2-e-w"><span class="ui-icon ui-icon-arrow-2-e-w"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-2-se-nw"><span class="ui-icon ui-icon-arrow-2-se-nw"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowstop-1-n"><span class="ui-icon ui-icon-arrowstop-1-n"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowstop-1-e"><span class="ui-icon ui-icon-arrowstop-1-e"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowstop-1-s"><span class="ui-icon ui-icon-arrowstop-1-s"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowstop-1-w"><span class="ui-icon ui-icon-arrowstop-1-w"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-n"><span class="ui-icon ui-icon-arrowthick-1-n"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-ne"><span class="ui-icon ui-icon-arrowthick-1-ne"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-e"><span class="ui-icon ui-icon-arrowthick-1-e"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-se"><span class="ui-icon ui-icon-arrowthick-1-se"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-s"><span class="ui-icon ui-icon-arrowthick-1-s"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-sw"><span class="ui-icon ui-icon-arrowthick-1-sw"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-w"><span class="ui-icon ui-icon-arrowthick-1-w"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-nw"><span class="ui-icon ui-icon-arrowthick-1-nw"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-2-n-s"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-2-ne-sw"><span class="ui-icon ui-icon-arrowthick-2-ne-sw"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-2-e-w"><span class="ui-icon ui-icon-arrowthick-2-e-w"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-2-se-nw"><span class="ui-icon ui-icon-arrowthick-2-se-nw"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthickstop-1-n"><span class="ui-icon ui-icon-arrowthickstop-1-n"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthickstop-1-e"><span class="ui-icon ui-icon-arrowthickstop-1-e"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthickstop-1-s"><span class="ui-icon ui-icon-arrowthickstop-1-s"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthickstop-1-w"><span class="ui-icon ui-icon-arrowthickstop-1-w"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturnthick-1-w"><span class="ui-icon ui-icon-arrowreturnthick-1-w"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturnthick-1-n"><span class="ui-icon ui-icon-arrowreturnthick-1-n"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturnthick-1-e"><span class="ui-icon ui-icon-arrowreturnthick-1-e"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturnthick-1-s"><span class="ui-icon ui-icon-arrowreturnthick-1-s"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturn-1-w"><span class="ui-icon ui-icon-arrowreturn-1-w"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturn-1-n"><span class="ui-icon ui-icon-arrowreturn-1-n"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturn-1-e"><span class="ui-icon ui-icon-arrowreturn-1-e"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturn-1-s"><span class="ui-icon ui-icon-arrowreturn-1-s"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowrefresh-1-w"><span class="ui-icon ui-icon-arrowrefresh-1-w"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowrefresh-1-n"><span class="ui-icon ui-icon-arrowrefresh-1-n"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowrefresh-1-e"><span class="ui-icon ui-icon-arrowrefresh-1-e"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowrefresh-1-s"><span class="ui-icon ui-icon-arrowrefresh-1-s"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-4"><span class="ui-icon ui-icon-arrow-4"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-4-diag"><span class="ui-icon ui-icon-arrow-4-diag"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-extlink"><span class="ui-icon ui-icon-extlink"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-newwin"><span class="ui-icon ui-icon-newwin"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-refresh"><span class="ui-icon ui-icon-refresh"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-shuffle"><span class="ui-icon ui-icon-shuffle"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-transfer-e-w"><span class="ui-icon ui-icon-transfer-e-w"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-transferthick-e-w"><span class="ui-icon ui-icon-transferthick-e-w"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-folder-collapsed"><span class="ui-icon ui-icon-folder-collapsed"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-folder-open"><span class="ui-icon ui-icon-folder-open"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-document"><span class="ui-icon ui-icon-document"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-document-b"><span class="ui-icon ui-icon-document-b"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-note"><span class="ui-icon ui-icon-note"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-mail-closed"><span class="ui-icon ui-icon-mail-closed"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-mail-open"><span class="ui-icon ui-icon-mail-open"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-suitcase"><span class="ui-icon ui-icon-suitcase"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-comment"><span class="ui-icon ui-icon-comment"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-person"><span class="ui-icon ui-icon-person"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-print"><span class="ui-icon ui-icon-print"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-trash"><span class="ui-icon ui-icon-trash"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-locked"><span class="ui-icon ui-icon-locked"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-unlocked"><span class="ui-icon ui-icon-unlocked"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-bookmark"><span class="ui-icon ui-icon-bookmark"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-tag"><span class="ui-icon ui-icon-tag"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-home"><span class="ui-icon ui-icon-home"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-flag"><span class="ui-icon ui-icon-flag"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-calculator"><span class="ui-icon ui-icon-calculator"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-cart"><span class="ui-icon ui-icon-cart"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-pencil"><span class="ui-icon ui-icon-pencil"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-clock"><span class="ui-icon ui-icon-clock"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-disk"><span class="ui-icon ui-icon-disk"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-calendar"><span class="ui-icon ui-icon-calendar"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-zoomin"><span class="ui-icon ui-icon-zoomin"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-zoomout"><span class="ui-icon ui-icon-zoomout"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-search"><span class="ui-icon ui-icon-search"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-wrench"><span class="ui-icon ui-icon-wrench"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-gear"><span class="ui-icon ui-icon-gear"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-heart"><span class="ui-icon ui-icon-heart"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-star"><span class="ui-icon ui-icon-star"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-link"><span class="ui-icon ui-icon-link"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-cancel"><span class="ui-icon ui-icon-cancel"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-plus"><span class="ui-icon ui-icon-plus"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-plusthick"><span class="ui-icon ui-icon-plusthick"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-minus"><span class="ui-icon ui-icon-minus"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-minusthick"><span class="ui-icon ui-icon-minusthick"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-close"><span class="ui-icon ui-icon-close"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-closethick"><span class="ui-icon ui-icon-closethick"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-key"><span class="ui-icon ui-icon-key"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-lightbulb"><span class="ui-icon ui-icon-lightbulb"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-scissors"><span class="ui-icon ui-icon-scissors"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-clipboard"><span class="ui-icon ui-icon-clipboard"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-copy"><span class="ui-icon ui-icon-copy"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-contact"><span class="ui-icon ui-icon-contact"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-image"><span class="ui-icon ui-icon-image"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-video"><span class="ui-icon ui-icon-video"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-script"><span class="ui-icon ui-icon-script"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-alert"><span class="ui-icon ui-icon-alert"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-info"><span class="ui-icon ui-icon-info"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-notice"><span class="ui-icon ui-icon-notice"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-help"><span class="ui-icon ui-icon-help"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-check"><span class="ui-icon ui-icon-check"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-bullet"><span class="ui-icon ui-icon-bullet"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-radio-off"><span class="ui-icon ui-icon-radio-off"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-radio-on"><span class="ui-icon ui-icon-radio-on"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-pin-w"><span class="ui-icon ui-icon-pin-w"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-pin-s"><span class="ui-icon ui-icon-pin-s"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-play"><span class="ui-icon ui-icon-play"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-pause"><span class="ui-icon ui-icon-pause"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-seek-next"><span class="ui-icon ui-icon-seek-next"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-seek-prev"><span class="ui-icon ui-icon-seek-prev"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-seek-end"><span class="ui-icon ui-icon-seek-end"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-seek-first"><span class="ui-icon ui-icon-seek-first"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-stop"><span class="ui-icon ui-icon-stop"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-eject"><span class="ui-icon ui-icon-eject"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-volume-off"><span class="ui-icon ui-icon-volume-off"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-volume-on"><span class="ui-icon ui-icon-volume-on"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-power"><span class="ui-icon ui-icon-power"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-signal-diag"><span class="ui-icon ui-icon-signal-diag"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-signal"><span class="ui-icon ui-icon-signal"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-battery-0"><span class="ui-icon ui-icon-battery-0"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-battery-1"><span class="ui-icon ui-icon-battery-1"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-battery-2"><span class="ui-icon ui-icon-battery-2"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-battery-3"><span class="ui-icon ui-icon-battery-3"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-plus"><span class="ui-icon ui-icon-circle-plus"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-minus"><span class="ui-icon ui-icon-circle-minus"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-close"><span class="ui-icon ui-icon-circle-close"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-triangle-e"><span class="ui-icon ui-icon-circle-triangle-e"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-triangle-s"><span class="ui-icon ui-icon-circle-triangle-s"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-triangle-w"><span class="ui-icon ui-icon-circle-triangle-w"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-triangle-n"><span class="ui-icon ui-icon-circle-triangle-n"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-arrow-e"><span class="ui-icon ui-icon-circle-arrow-e"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-arrow-s"><span class="ui-icon ui-icon-circle-arrow-s"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-arrow-w"><span class="ui-icon ui-icon-circle-arrow-w"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-arrow-n"><span class="ui-icon ui-icon-circle-arrow-n"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-zoomin"><span class="ui-icon ui-icon-circle-zoomin"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-zoomout"><span class="ui-icon ui-icon-circle-zoomout"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-check"><span class="ui-icon ui-icon-circle-check"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-circlesmall-plus"><span class="ui-icon ui-icon-circlesmall-plus"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-circlesmall-minus"><span class="ui-icon ui-icon-circlesmall-minus"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-circlesmall-close"><span class="ui-icon ui-icon-circlesmall-close"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-squaresmall-plus"><span class="ui-icon ui-icon-squaresmall-plus"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-squaresmall-minus"><span class="ui-icon ui-icon-squaresmall-minus"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-squaresmall-close"><span class="ui-icon ui-icon-squaresmall-close"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-grip-dotted-vertical"><span class="ui-icon ui-icon-grip-dotted-vertical"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-grip-dotted-horizontal"><span class="ui-icon ui-icon-grip-dotted-horizontal"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-grip-solid-vertical"><span class="ui-icon ui-icon-grip-solid-vertical"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-grip-solid-horizontal"><span class="ui-icon ui-icon-grip-solid-horizontal"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-gripsmall-diagonal-se"><span class="ui-icon ui-icon-gripsmall-diagonal-se"></span></li>
|
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-grip-diagonal-se"><span class="ui-icon ui-icon-grip-diagonal-se"></span></li>
|
||||
</ul>
|
||||
|
||||
<!-- Slider -->
|
||||
<h2 class="demoHeaders">Slider</h2>
|
||||
<div id="slider"></div>
|
||||
|
||||
<!-- Datepicker -->
|
||||
<h2 class="demoHeaders">Datepicker</h2>
|
||||
<div id="datepicker"></div>
|
||||
|
||||
<!-- Progressbar -->
|
||||
<h2 class="demoHeaders">Progressbar</h2>
|
||||
<div id="progressbar"></div>
|
||||
|
||||
<!-- Progressbar -->
|
||||
<h2 class="demoHeaders">Selectmenu</h2>
|
||||
<select id="selectmenu">
|
||||
<option>Slower</option>
|
||||
<option>Slow</option>
|
||||
<option selected="selected">Medium</option>
|
||||
<option>Fast</option>
|
||||
<option>Faster</option>
|
||||
</select>
|
||||
|
||||
<!-- Spinner -->
|
||||
<h2 class="demoHeaders">Spinner</h2>
|
||||
<input id="spinner">
|
||||
|
||||
<!-- Menu -->
|
||||
<h2 class="demoHeaders">Menu</h2>
|
||||
<ul style="width:100px;" id="menu">
|
||||
<li><div>Item 1</div></li>
|
||||
<li><div>Item 2</div></li>
|
||||
<li><div>Item 3</div>
|
||||
<ul>
|
||||
<li><div>Item 3-1</div></li>
|
||||
<li><div>Item 3-2</div></li>
|
||||
<li><div>Item 3-3</div></li>
|
||||
<li><div>Item 3-4</div></li>
|
||||
<li><div>Item 3-5</div></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><div>Item 4</div></li>
|
||||
<li><div>Item 5</div></li>
|
||||
</ul>
|
||||
|
||||
<!-- Tooltip -->
|
||||
<h2 class="demoHeaders">Tooltip</h2>
|
||||
<p id="tooltip">
|
||||
<a href="#" title="That's what this widget is">Tooltips</a> can be attached to any element. When you hover
|
||||
the element with your mouse, the title attribute is displayed in a little box next to the element, just like a native tooltip.
|
||||
</p>
|
||||
|
||||
<!-- Highlight / Error -->
|
||||
<h2 class="demoHeaders">Highlight / Error</h2>
|
||||
<div class="ui-widget">
|
||||
<div class="ui-state-highlight ui-corner-all" style="margin-top: 20px; padding: 0 .7em;">
|
||||
<p><span class="ui-icon ui-icon-info" style="float: left; margin-right: .3em;"></span>
|
||||
<strong>Hey!</strong> Sample ui-state-highlight style.</p>
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="ui-widget">
|
||||
<div class="ui-state-error ui-corner-all" style="padding: 0 .7em;">
|
||||
<p><span class="ui-icon ui-icon-alert" style="float: left; margin-right: .3em;"></span>
|
||||
<strong>Alert:</strong> Sample ui-state-error style.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="external/jquery/jquery.js"></script>
|
||||
<script src="jquery-ui.js"></script>
|
||||
<script>
|
||||
$( "#accordion" ).accordion();
|
||||
|
||||
var availableTags = [
|
||||
"ActionScript",
|
||||
"AppleScript",
|
||||
"Asp",
|
||||
"BASIC",
|
||||
"C",
|
||||
"C++",
|
||||
"Clojure",
|
||||
"COBOL",
|
||||
"ColdFusion",
|
||||
"Erlang",
|
||||
"Fortran",
|
||||
"Groovy",
|
||||
"Haskell",
|
||||
"Java",
|
||||
"JavaScript",
|
||||
"Lisp",
|
||||
"Perl",
|
||||
"PHP",
|
||||
"Python",
|
||||
"Ruby",
|
||||
"Scala",
|
||||
"Scheme"
|
||||
];
|
||||
$( "#autocomplete" ).autocomplete({
|
||||
source: availableTags
|
||||
});
|
||||
|
||||
$( "#button" ).button();
|
||||
$( "#button-icon" ).button({
|
||||
icon: "ui-icon-gear",
|
||||
showLabel: false
|
||||
});
|
||||
|
||||
$( "#radioset" ).buttonset();
|
||||
|
||||
$( "#controlgroup" ).controlgroup();
|
||||
|
||||
$( "#tabs" ).tabs();
|
||||
|
||||
$( "#dialog" ).dialog({
|
||||
autoOpen: false,
|
||||
width: 400,
|
||||
buttons: [
|
||||
{
|
||||
text: "Ok",
|
||||
click: function() {
|
||||
$( this ).dialog( "close" );
|
||||
}
|
||||
},
|
||||
{
|
||||
text: "Cancel",
|
||||
click: function() {
|
||||
$( this ).dialog( "close" );
|
||||
}
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
// Link to open the dialog
|
||||
$( "#dialog-link" ).click(function( event ) {
|
||||
$( "#dialog" ).dialog( "open" );
|
||||
event.preventDefault();
|
||||
});
|
||||
|
||||
$( "#datepicker" ).datepicker({
|
||||
inline: true
|
||||
});
|
||||
|
||||
$( "#slider" ).slider({
|
||||
range: true,
|
||||
values: [ 17, 67 ]
|
||||
});
|
||||
|
||||
$( "#progressbar" ).progressbar({
|
||||
value: 20
|
||||
});
|
||||
|
||||
$( "#spinner" ).spinner();
|
||||
|
||||
$( "#menu" ).menu();
|
||||
|
||||
$( "#tooltip" ).tooltip();
|
||||
|
||||
$( "#selectmenu" ).selectmenu();
|
||||
|
||||
// Hover states on the static widgets
|
||||
$( "#dialog-link, #icons li" ).hover(
|
||||
function() {
|
||||
$( this ).addClass( "ui-state-hover" );
|
||||
},
|
||||
function() {
|
||||
$( this ).removeClass( "ui-state-hover" );
|
||||
}
|
||||
);
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
19057
developer/src/tike/xml/layoutbuilder/jquery-ui/jquery-ui.js
vendored
Normal file
7
developer/src/tike/xml/layoutbuilder/jquery-ui/jquery-ui.min.css
vendored
Normal file
6
developer/src/tike/xml/layoutbuilder/jquery-ui/jquery-ui.min.js
vendored
Normal file
886
developer/src/tike/xml/layoutbuilder/jquery-ui/jquery-ui.structure.css
vendored
Normal file
|
|
@ -0,0 +1,886 @@
|
|||
/*!
|
||||
* jQuery UI CSS Framework 1.13.1
|
||||
* http://jqueryui.com
|
||||
*
|
||||
* Copyright jQuery Foundation and other contributors
|
||||
* Released under the MIT license.
|
||||
* http://jquery.org/license
|
||||
*
|
||||
* http://api.jqueryui.com/category/theming/
|
||||
*/
|
||||
.ui-draggable-handle {
|
||||
-ms-touch-action: none;
|
||||
touch-action: none;
|
||||
}
|
||||
/* Layout helpers
|
||||
----------------------------------*/
|
||||
.ui-helper-hidden {
|
||||
display: none;
|
||||
}
|
||||
.ui-helper-hidden-accessible {
|
||||
border: 0;
|
||||
clip: rect(0 0 0 0);
|
||||
height: 1px;
|
||||
margin: -1px;
|
||||
overflow: hidden;
|
||||
padding: 0;
|
||||
position: absolute;
|
||||
width: 1px;
|
||||
}
|
||||
.ui-helper-reset {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
outline: 0;
|
||||
line-height: 1.3;
|
||||
text-decoration: none;
|
||||
font-size: 100%;
|
||||
list-style: none;
|
||||
}
|
||||
.ui-helper-clearfix:before,
|
||||
.ui-helper-clearfix:after {
|
||||
content: "";
|
||||
display: table;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
.ui-helper-clearfix:after {
|
||||
clear: both;
|
||||
}
|
||||
.ui-helper-zfix {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
top: 0;
|
||||
left: 0;
|
||||
position: absolute;
|
||||
opacity: 0;
|
||||
-ms-filter: "alpha(opacity=0)"; /* support: IE8 */
|
||||
}
|
||||
|
||||
.ui-front {
|
||||
z-index: 100;
|
||||
}
|
||||
|
||||
|
||||
/* Interaction Cues
|
||||
----------------------------------*/
|
||||
.ui-state-disabled {
|
||||
cursor: default !important;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
|
||||
/* Icons
|
||||
----------------------------------*/
|
||||
.ui-icon {
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
margin-top: -.25em;
|
||||
position: relative;
|
||||
text-indent: -99999px;
|
||||
overflow: hidden;
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
|
||||
.ui-widget-icon-block {
|
||||
left: 50%;
|
||||
margin-left: -8px;
|
||||
display: block;
|
||||
}
|
||||
|
||||
/* Misc visuals
|
||||
----------------------------------*/
|
||||
|
||||
/* Overlays */
|
||||
.ui-widget-overlay {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
.ui-resizable {
|
||||
position: relative;
|
||||
}
|
||||
.ui-resizable-handle {
|
||||
position: absolute;
|
||||
font-size: 0.1px;
|
||||
display: block;
|
||||
-ms-touch-action: none;
|
||||
touch-action: none;
|
||||
}
|
||||
.ui-resizable-disabled .ui-resizable-handle,
|
||||
.ui-resizable-autohide .ui-resizable-handle {
|
||||
display: none;
|
||||
}
|
||||
.ui-resizable-n {
|
||||
cursor: n-resize;
|
||||
height: 7px;
|
||||
width: 100%;
|
||||
top: -5px;
|
||||
left: 0;
|
||||
}
|
||||
.ui-resizable-s {
|
||||
cursor: s-resize;
|
||||
height: 7px;
|
||||
width: 100%;
|
||||
bottom: -5px;
|
||||
left: 0;
|
||||
}
|
||||
.ui-resizable-e {
|
||||
cursor: e-resize;
|
||||
width: 7px;
|
||||
right: -5px;
|
||||
top: 0;
|
||||
height: 100%;
|
||||
}
|
||||
.ui-resizable-w {
|
||||
cursor: w-resize;
|
||||
width: 7px;
|
||||
left: -5px;
|
||||
top: 0;
|
||||
height: 100%;
|
||||
}
|
||||
.ui-resizable-se {
|
||||
cursor: se-resize;
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
right: 1px;
|
||||
bottom: 1px;
|
||||
}
|
||||
.ui-resizable-sw {
|
||||
cursor: sw-resize;
|
||||
width: 9px;
|
||||
height: 9px;
|
||||
left: -5px;
|
||||
bottom: -5px;
|
||||
}
|
||||
.ui-resizable-nw {
|
||||
cursor: nw-resize;
|
||||
width: 9px;
|
||||
height: 9px;
|
||||
left: -5px;
|
||||
top: -5px;
|
||||
}
|
||||
.ui-resizable-ne {
|
||||
cursor: ne-resize;
|
||||
width: 9px;
|
||||
height: 9px;
|
||||
right: -5px;
|
||||
top: -5px;
|
||||
}
|
||||
.ui-selectable {
|
||||
-ms-touch-action: none;
|
||||
touch-action: none;
|
||||
}
|
||||
.ui-selectable-helper {
|
||||
position: absolute;
|
||||
z-index: 100;
|
||||
border: 1px dotted black;
|
||||
}
|
||||
.ui-sortable-handle {
|
||||
-ms-touch-action: none;
|
||||
touch-action: none;
|
||||
}
|
||||
.ui-accordion .ui-accordion-header {
|
||||
display: block;
|
||||
cursor: pointer;
|
||||
position: relative;
|
||||
margin: 2px 0 0 0;
|
||||
padding: .5em .5em .5em .7em;
|
||||
font-size: 100%;
|
||||
}
|
||||
.ui-accordion .ui-accordion-content {
|
||||
padding: 1em 2.2em;
|
||||
border-top: 0;
|
||||
overflow: auto;
|
||||
}
|
||||
.ui-autocomplete {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
cursor: default;
|
||||
}
|
||||
.ui-menu {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
display: block;
|
||||
outline: 0;
|
||||
}
|
||||
.ui-menu .ui-menu {
|
||||
position: absolute;
|
||||
}
|
||||
.ui-menu .ui-menu-item {
|
||||
margin: 0;
|
||||
cursor: pointer;
|
||||
/* support: IE10, see #8844 */
|
||||
list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");
|
||||
}
|
||||
.ui-menu .ui-menu-item-wrapper {
|
||||
position: relative;
|
||||
padding: 3px 1em 3px .4em;
|
||||
}
|
||||
.ui-menu .ui-menu-divider {
|
||||
margin: 5px 0;
|
||||
height: 0;
|
||||
font-size: 0;
|
||||
line-height: 0;
|
||||
border-width: 1px 0 0 0;
|
||||
}
|
||||
.ui-menu .ui-state-focus,
|
||||
.ui-menu .ui-state-active {
|
||||
margin: -1px;
|
||||
}
|
||||
|
||||
/* icon support */
|
||||
.ui-menu-icons {
|
||||
position: relative;
|
||||
}
|
||||
.ui-menu-icons .ui-menu-item-wrapper {
|
||||
padding-left: 2em;
|
||||
}
|
||||
|
||||
/* left-aligned */
|
||||
.ui-menu .ui-icon {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: .2em;
|
||||
margin: auto 0;
|
||||
}
|
||||
|
||||
/* right-aligned */
|
||||
.ui-menu .ui-menu-icon {
|
||||
left: auto;
|
||||
right: 0;
|
||||
}
|
||||
.ui-button {
|
||||
padding: .4em 1em;
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
line-height: normal;
|
||||
margin-right: .1em;
|
||||
cursor: pointer;
|
||||
vertical-align: middle;
|
||||
text-align: center;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
|
||||
/* Support: IE <= 11 */
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
.ui-button,
|
||||
.ui-button:link,
|
||||
.ui-button:visited,
|
||||
.ui-button:hover,
|
||||
.ui-button:active {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
/* to make room for the icon, a width needs to be set here */
|
||||
.ui-button-icon-only {
|
||||
width: 2em;
|
||||
box-sizing: border-box;
|
||||
text-indent: -9999px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
/* no icon support for input elements */
|
||||
input.ui-button.ui-button-icon-only {
|
||||
text-indent: 0;
|
||||
}
|
||||
|
||||
/* button icon element(s) */
|
||||
.ui-button-icon-only .ui-icon {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
margin-top: -8px;
|
||||
margin-left: -8px;
|
||||
}
|
||||
|
||||
.ui-button.ui-icon-notext .ui-icon {
|
||||
padding: 0;
|
||||
width: 2.1em;
|
||||
height: 2.1em;
|
||||
text-indent: -9999px;
|
||||
white-space: nowrap;
|
||||
|
||||
}
|
||||
|
||||
input.ui-button.ui-icon-notext .ui-icon {
|
||||
width: auto;
|
||||
height: auto;
|
||||
text-indent: 0;
|
||||
white-space: normal;
|
||||
padding: .4em 1em;
|
||||
}
|
||||
|
||||
/* workarounds */
|
||||
/* Support: Firefox 5 - 40 */
|
||||
input.ui-button::-moz-focus-inner,
|
||||
button.ui-button::-moz-focus-inner {
|
||||
border: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.ui-controlgroup {
|
||||
vertical-align: middle;
|
||||
display: inline-block;
|
||||
}
|
||||
.ui-controlgroup > .ui-controlgroup-item {
|
||||
float: left;
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
}
|
||||
.ui-controlgroup > .ui-controlgroup-item:focus,
|
||||
.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus {
|
||||
z-index: 9999;
|
||||
}
|
||||
.ui-controlgroup-vertical > .ui-controlgroup-item {
|
||||
display: block;
|
||||
float: none;
|
||||
width: 100%;
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
text-align: left;
|
||||
}
|
||||
.ui-controlgroup-vertical .ui-controlgroup-item {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.ui-controlgroup .ui-controlgroup-label {
|
||||
padding: .4em 1em;
|
||||
}
|
||||
.ui-controlgroup .ui-controlgroup-label span {
|
||||
font-size: 80%;
|
||||
}
|
||||
.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item {
|
||||
border-left: none;
|
||||
}
|
||||
.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item {
|
||||
border-top: none;
|
||||
}
|
||||
.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content {
|
||||
border-right: none;
|
||||
}
|
||||
.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
/* Spinner specific style fixes */
|
||||
.ui-controlgroup-vertical .ui-spinner-input {
|
||||
|
||||
/* Support: IE8 only, Android < 4.4 only */
|
||||
width: 75%;
|
||||
width: calc( 100% - 2.4em );
|
||||
}
|
||||
.ui-controlgroup-vertical .ui-spinner .ui-spinner-up {
|
||||
border-top-style: solid;
|
||||
}
|
||||
|
||||
.ui-checkboxradio-label .ui-icon-background {
|
||||
box-shadow: inset 1px 1px 1px #ccc;
|
||||
border-radius: .12em;
|
||||
border: none;
|
||||
}
|
||||
.ui-checkboxradio-radio-label .ui-icon-background {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
border-radius: 1em;
|
||||
overflow: visible;
|
||||
border: none;
|
||||
}
|
||||
.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon,
|
||||
.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon {
|
||||
background-image: none;
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
border-width: 4px;
|
||||
border-style: solid;
|
||||
}
|
||||
.ui-checkboxradio-disabled {
|
||||
pointer-events: none;
|
||||
}
|
||||
.ui-datepicker {
|
||||
width: 17em;
|
||||
padding: .2em .2em 0;
|
||||
display: none;
|
||||
}
|
||||
.ui-datepicker .ui-datepicker-header {
|
||||
position: relative;
|
||||
padding: .2em 0;
|
||||
}
|
||||
.ui-datepicker .ui-datepicker-prev,
|
||||
.ui-datepicker .ui-datepicker-next {
|
||||
position: absolute;
|
||||
top: 2px;
|
||||
width: 1.8em;
|
||||
height: 1.8em;
|
||||
}
|
||||
.ui-datepicker .ui-datepicker-prev-hover,
|
||||
.ui-datepicker .ui-datepicker-next-hover {
|
||||
top: 1px;
|
||||
}
|
||||
.ui-datepicker .ui-datepicker-prev {
|
||||
left: 2px;
|
||||
}
|
||||
.ui-datepicker .ui-datepicker-next {
|
||||
right: 2px;
|
||||
}
|
||||
.ui-datepicker .ui-datepicker-prev-hover {
|
||||
left: 1px;
|
||||
}
|
||||
.ui-datepicker .ui-datepicker-next-hover {
|
||||
right: 1px;
|
||||
}
|
||||
.ui-datepicker .ui-datepicker-prev span,
|
||||
.ui-datepicker .ui-datepicker-next span {
|
||||
display: block;
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
margin-left: -8px;
|
||||
top: 50%;
|
||||
margin-top: -8px;
|
||||
}
|
||||
.ui-datepicker .ui-datepicker-title {
|
||||
margin: 0 2.3em;
|
||||
line-height: 1.8em;
|
||||
text-align: center;
|
||||
}
|
||||
.ui-datepicker .ui-datepicker-title select {
|
||||
font-size: 1em;
|
||||
margin: 1px 0;
|
||||
}
|
||||
.ui-datepicker select.ui-datepicker-month,
|
||||
.ui-datepicker select.ui-datepicker-year {
|
||||
width: 45%;
|
||||
}
|
||||
.ui-datepicker table {
|
||||
width: 100%;
|
||||
font-size: .9em;
|
||||
border-collapse: collapse;
|
||||
margin: 0 0 .4em;
|
||||
}
|
||||
.ui-datepicker th {
|
||||
padding: .7em .3em;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
border: 0;
|
||||
}
|
||||
.ui-datepicker td {
|
||||
border: 0;
|
||||
padding: 1px;
|
||||
}
|
||||
.ui-datepicker td span,
|
||||
.ui-datepicker td a {
|
||||
display: block;
|
||||
padding: .2em;
|
||||
text-align: right;
|
||||
text-decoration: none;
|
||||
}
|
||||
.ui-datepicker .ui-datepicker-buttonpane {
|
||||
background-image: none;
|
||||
margin: .7em 0 0 0;
|
||||
padding: 0 .2em;
|
||||
border-left: 0;
|
||||
border-right: 0;
|
||||
border-bottom: 0;
|
||||
}
|
||||
.ui-datepicker .ui-datepicker-buttonpane button {
|
||||
float: right;
|
||||
margin: .5em .2em .4em;
|
||||
cursor: pointer;
|
||||
padding: .2em .6em .3em .6em;
|
||||
width: auto;
|
||||
overflow: visible;
|
||||
}
|
||||
.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
|
||||
float: left;
|
||||
}
|
||||
|
||||
/* with multiple calendars */
|
||||
.ui-datepicker.ui-datepicker-multi {
|
||||
width: auto;
|
||||
}
|
||||
.ui-datepicker-multi .ui-datepicker-group {
|
||||
float: left;
|
||||
}
|
||||
.ui-datepicker-multi .ui-datepicker-group table {
|
||||
width: 95%;
|
||||
margin: 0 auto .4em;
|
||||
}
|
||||
.ui-datepicker-multi-2 .ui-datepicker-group {
|
||||
width: 50%;
|
||||
}
|
||||
.ui-datepicker-multi-3 .ui-datepicker-group {
|
||||
width: 33.3%;
|
||||
}
|
||||
.ui-datepicker-multi-4 .ui-datepicker-group {
|
||||
width: 25%;
|
||||
}
|
||||
.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
|
||||
.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
|
||||
border-left-width: 0;
|
||||
}
|
||||
.ui-datepicker-multi .ui-datepicker-buttonpane {
|
||||
clear: left;
|
||||
}
|
||||
.ui-datepicker-row-break {
|
||||
clear: both;
|
||||
width: 100%;
|
||||
font-size: 0;
|
||||
}
|
||||
|
||||
/* RTL support */
|
||||
.ui-datepicker-rtl {
|
||||
direction: rtl;
|
||||
}
|
||||
.ui-datepicker-rtl .ui-datepicker-prev {
|
||||
right: 2px;
|
||||
left: auto;
|
||||
}
|
||||
.ui-datepicker-rtl .ui-datepicker-next {
|
||||
left: 2px;
|
||||
right: auto;
|
||||
}
|
||||
.ui-datepicker-rtl .ui-datepicker-prev:hover {
|
||||
right: 1px;
|
||||
left: auto;
|
||||
}
|
||||
.ui-datepicker-rtl .ui-datepicker-next:hover {
|
||||
left: 1px;
|
||||
right: auto;
|
||||
}
|
||||
.ui-datepicker-rtl .ui-datepicker-buttonpane {
|
||||
clear: right;
|
||||
}
|
||||
.ui-datepicker-rtl .ui-datepicker-buttonpane button {
|
||||
float: left;
|
||||
}
|
||||
.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
|
||||
.ui-datepicker-rtl .ui-datepicker-group {
|
||||
float: right;
|
||||
}
|
||||
.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
|
||||
.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
|
||||
border-right-width: 0;
|
||||
border-left-width: 1px;
|
||||
}
|
||||
|
||||
/* Icons */
|
||||
.ui-datepicker .ui-icon {
|
||||
display: block;
|
||||
text-indent: -99999px;
|
||||
overflow: hidden;
|
||||
background-repeat: no-repeat;
|
||||
left: .5em;
|
||||
top: .3em;
|
||||
}
|
||||
.ui-dialog {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
padding: .2em;
|
||||
outline: 0;
|
||||
}
|
||||
.ui-dialog .ui-dialog-titlebar {
|
||||
padding: .4em 1em;
|
||||
position: relative;
|
||||
}
|
||||
.ui-dialog .ui-dialog-title {
|
||||
float: left;
|
||||
margin: .1em 0;
|
||||
white-space: nowrap;
|
||||
width: 90%;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
.ui-dialog .ui-dialog-titlebar-close {
|
||||
position: absolute;
|
||||
right: .3em;
|
||||
top: 50%;
|
||||
width: 20px;
|
||||
margin: -10px 0 0 0;
|
||||
padding: 1px;
|
||||
height: 20px;
|
||||
}
|
||||
.ui-dialog .ui-dialog-content {
|
||||
position: relative;
|
||||
border: 0;
|
||||
padding: .5em 1em;
|
||||
background: none;
|
||||
overflow: auto;
|
||||
}
|
||||
.ui-dialog .ui-dialog-buttonpane {
|
||||
text-align: left;
|
||||
border-width: 1px 0 0 0;
|
||||
background-image: none;
|
||||
margin-top: .5em;
|
||||
padding: .3em 1em .5em .4em;
|
||||
}
|
||||
.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
|
||||
float: right;
|
||||
}
|
||||
.ui-dialog .ui-dialog-buttonpane button {
|
||||
margin: .5em .4em .5em 0;
|
||||
cursor: pointer;
|
||||
}
|
||||
.ui-dialog .ui-resizable-n {
|
||||
height: 2px;
|
||||
top: 0;
|
||||
}
|
||||
.ui-dialog .ui-resizable-e {
|
||||
width: 2px;
|
||||
right: 0;
|
||||
}
|
||||
.ui-dialog .ui-resizable-s {
|
||||
height: 2px;
|
||||
bottom: 0;
|
||||
}
|
||||
.ui-dialog .ui-resizable-w {
|
||||
width: 2px;
|
||||
left: 0;
|
||||
}
|
||||
.ui-dialog .ui-resizable-se,
|
||||
.ui-dialog .ui-resizable-sw,
|
||||
.ui-dialog .ui-resizable-ne,
|
||||
.ui-dialog .ui-resizable-nw {
|
||||
width: 7px;
|
||||
height: 7px;
|
||||
}
|
||||
.ui-dialog .ui-resizable-se {
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
}
|
||||
.ui-dialog .ui-resizable-sw {
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
}
|
||||
.ui-dialog .ui-resizable-ne {
|
||||
right: 0;
|
||||
top: 0;
|
||||
}
|
||||
.ui-dialog .ui-resizable-nw {
|
||||
left: 0;
|
||||
top: 0;
|
||||
}
|
||||
.ui-draggable .ui-dialog-titlebar {
|
||||
cursor: move;
|
||||
}
|
||||
.ui-progressbar {
|
||||
height: 2em;
|
||||
text-align: left;
|
||||
overflow: hidden;
|
||||
}
|
||||
.ui-progressbar .ui-progressbar-value {
|
||||
margin: -1px;
|
||||
height: 100%;
|
||||
}
|
||||
.ui-progressbar .ui-progressbar-overlay {
|
||||
background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");
|
||||
height: 100%;
|
||||
-ms-filter: "alpha(opacity=25)"; /* support: IE8 */
|
||||
opacity: 0.25;
|
||||
}
|
||||
.ui-progressbar-indeterminate .ui-progressbar-value {
|
||||
background-image: none;
|
||||
}
|
||||
.ui-selectmenu-menu {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
display: none;
|
||||
}
|
||||
.ui-selectmenu-menu .ui-menu {
|
||||
overflow: auto;
|
||||
overflow-x: hidden;
|
||||
padding-bottom: 1px;
|
||||
}
|
||||
.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {
|
||||
font-size: 1em;
|
||||
font-weight: bold;
|
||||
line-height: 1.5;
|
||||
padding: 2px 0.4em;
|
||||
margin: 0.5em 0 0 0;
|
||||
height: auto;
|
||||
border: 0;
|
||||
}
|
||||
.ui-selectmenu-open {
|
||||
display: block;
|
||||
}
|
||||
.ui-selectmenu-text {
|
||||
display: block;
|
||||
margin-right: 20px;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
.ui-selectmenu-button.ui-button {
|
||||
text-align: left;
|
||||
white-space: nowrap;
|
||||
width: 14em;
|
||||
}
|
||||
.ui-selectmenu-icon.ui-icon {
|
||||
float: right;
|
||||
margin-top: 0;
|
||||
}
|
||||
.ui-slider {
|
||||
position: relative;
|
||||
text-align: left;
|
||||
}
|
||||
.ui-slider .ui-slider-handle {
|
||||
position: absolute;
|
||||
z-index: 2;
|
||||
width: 1.2em;
|
||||
height: 1.2em;
|
||||
cursor: pointer;
|
||||
-ms-touch-action: none;
|
||||
touch-action: none;
|
||||
}
|
||||
.ui-slider .ui-slider-range {
|
||||
position: absolute;
|
||||
z-index: 1;
|
||||
font-size: .7em;
|
||||
display: block;
|
||||
border: 0;
|
||||
background-position: 0 0;
|
||||
}
|
||||
|
||||
/* support: IE8 - See #6727 */
|
||||
.ui-slider.ui-state-disabled .ui-slider-handle,
|
||||
.ui-slider.ui-state-disabled .ui-slider-range {
|
||||
filter: inherit;
|
||||
}
|
||||
|
||||
.ui-slider-horizontal {
|
||||
height: .8em;
|
||||
}
|
||||
.ui-slider-horizontal .ui-slider-handle {
|
||||
top: -.3em;
|
||||
margin-left: -.6em;
|
||||
}
|
||||
.ui-slider-horizontal .ui-slider-range {
|
||||
top: 0;
|
||||
height: 100%;
|
||||
}
|
||||
.ui-slider-horizontal .ui-slider-range-min {
|
||||
left: 0;
|
||||
}
|
||||
.ui-slider-horizontal .ui-slider-range-max {
|
||||
right: 0;
|
||||
}
|
||||
|
||||
.ui-slider-vertical {
|
||||
width: .8em;
|
||||
height: 100px;
|
||||
}
|
||||
.ui-slider-vertical .ui-slider-handle {
|
||||
left: -.3em;
|
||||
margin-left: 0;
|
||||
margin-bottom: -.6em;
|
||||
}
|
||||
.ui-slider-vertical .ui-slider-range {
|
||||
left: 0;
|
||||
width: 100%;
|
||||
}
|
||||
.ui-slider-vertical .ui-slider-range-min {
|
||||
bottom: 0;
|
||||
}
|
||||
.ui-slider-vertical .ui-slider-range-max {
|
||||
top: 0;
|
||||
}
|
||||
.ui-spinner {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
overflow: hidden;
|
||||
padding: 0;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.ui-spinner-input {
|
||||
border: none;
|
||||
background: none;
|
||||
color: inherit;
|
||||
padding: .222em 0;
|
||||
margin: .2em 0;
|
||||
vertical-align: middle;
|
||||
margin-left: .4em;
|
||||
margin-right: 2em;
|
||||
}
|
||||
.ui-spinner-button {
|
||||
width: 1.6em;
|
||||
height: 50%;
|
||||
font-size: .5em;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
text-align: center;
|
||||
position: absolute;
|
||||
cursor: default;
|
||||
display: block;
|
||||
overflow: hidden;
|
||||
right: 0;
|
||||
}
|
||||
/* more specificity required here to override default borders */
|
||||
.ui-spinner a.ui-spinner-button {
|
||||
border-top-style: none;
|
||||
border-bottom-style: none;
|
||||
border-right-style: none;
|
||||
}
|
||||
.ui-spinner-up {
|
||||
top: 0;
|
||||
}
|
||||
.ui-spinner-down {
|
||||
bottom: 0;
|
||||
}
|
||||
.ui-tabs {
|
||||
position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
|
||||
padding: .2em;
|
||||
}
|
||||
.ui-tabs .ui-tabs-nav {
|
||||
margin: 0;
|
||||
padding: .2em .2em 0;
|
||||
}
|
||||
.ui-tabs .ui-tabs-nav li {
|
||||
list-style: none;
|
||||
float: left;
|
||||
position: relative;
|
||||
top: 0;
|
||||
margin: 1px .2em 0 0;
|
||||
border-bottom-width: 0;
|
||||
padding: 0;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.ui-tabs .ui-tabs-nav .ui-tabs-anchor {
|
||||
float: left;
|
||||
padding: .5em 1em;
|
||||
text-decoration: none;
|
||||
}
|
||||
.ui-tabs .ui-tabs-nav li.ui-tabs-active {
|
||||
margin-bottom: -1px;
|
||||
padding-bottom: 1px;
|
||||
}
|
||||
.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,
|
||||
.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,
|
||||
.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
|
||||
cursor: text;
|
||||
}
|
||||
.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
|
||||
cursor: pointer;
|
||||
}
|
||||
.ui-tabs .ui-tabs-panel {
|
||||
display: block;
|
||||
border-width: 0;
|
||||
padding: 1em 1.4em;
|
||||
background: none;
|
||||
}
|
||||
.ui-tooltip {
|
||||
padding: 8px;
|
||||
position: absolute;
|
||||
z-index: 9999;
|
||||
max-width: 300px;
|
||||
}
|
||||
body .ui-tooltip {
|
||||
border-width: 2px;
|
||||
}
|
||||
5
developer/src/tike/xml/layoutbuilder/jquery-ui/jquery-ui.structure.min.css
vendored
Normal file
446
developer/src/tike/xml/layoutbuilder/jquery-ui/jquery-ui.theme.css
vendored
Normal file
|
|
@ -0,0 +1,446 @@
|
|||
/*!
|
||||
* jQuery UI CSS Framework 1.13.1
|
||||
* http://jqueryui.com
|
||||
*
|
||||
* Copyright jQuery Foundation and other contributors
|
||||
* Released under the MIT license.
|
||||
* http://jquery.org/license
|
||||
*
|
||||
* http://api.jqueryui.com/category/theming/
|
||||
*
|
||||
* To view and modify this theme, visit http://jqueryui.com/themeroller/?scope=&folderName=base&cornerRadiusShadow=8px&offsetLeftShadow=0px&offsetTopShadow=0px&thicknessShadow=5px&opacityShadow=30&bgImgOpacityShadow=0&bgTextureShadow=flat&bgColorShadow=666666&opacityOverlay=30&bgImgOpacityOverlay=0&bgTextureOverlay=flat&bgColorOverlay=aaaaaa&iconColorError=cc0000&fcError=5f3f3f&borderColorError=f1a899&bgTextureError=flat&bgColorError=fddfdf&iconColorHighlight=777620&fcHighlight=777620&borderColorHighlight=dad55e&bgTextureHighlight=flat&bgColorHighlight=fffa90&iconColorActive=ffffff&fcActive=ffffff&borderColorActive=003eff&bgTextureActive=flat&bgColorActive=007fff&iconColorHover=555555&fcHover=2b2b2b&borderColorHover=cccccc&bgTextureHover=flat&bgColorHover=ededed&iconColorDefault=777777&fcDefault=454545&borderColorDefault=c5c5c5&bgTextureDefault=flat&bgColorDefault=f6f6f6&iconColorContent=444444&fcContent=333333&borderColorContent=dddddd&bgTextureContent=flat&bgColorContent=ffffff&iconColorHeader=444444&fcHeader=333333&borderColorHeader=dddddd&bgTextureHeader=flat&bgColorHeader=e9e9e9&cornerRadius=3px&fwDefault=normal&fsDefault=1em&ffDefault=Arial%2CHelvetica%2Csans-serif
|
||||
*/
|
||||
|
||||
|
||||
/* Component containers
|
||||
----------------------------------*/
|
||||
.ui-widget {
|
||||
font-family: Arial,Helvetica,sans-serif;
|
||||
font-size: 1em;
|
||||
}
|
||||
.ui-widget .ui-widget {
|
||||
font-size: 1em;
|
||||
}
|
||||
.ui-widget input,
|
||||
.ui-widget select,
|
||||
.ui-widget textarea,
|
||||
.ui-widget button {
|
||||
font-family: Arial,Helvetica,sans-serif;
|
||||
font-size: 1em;
|
||||
}
|
||||
.ui-widget.ui-widget-content {
|
||||
border: 1px solid #c5c5c5;
|
||||
}
|
||||
.ui-widget-content {
|
||||
border: 1px solid #dddddd;
|
||||
background: #ffffff;
|
||||
color: #333333;
|
||||
}
|
||||
.ui-widget-content a {
|
||||
color: #333333;
|
||||
}
|
||||
.ui-widget-header {
|
||||
border: 1px solid #dddddd;
|
||||
background: #e9e9e9;
|
||||
color: #333333;
|
||||
font-weight: bold;
|
||||
}
|
||||
.ui-widget-header a {
|
||||
color: #333333;
|
||||
}
|
||||
|
||||
/* Interaction states
|
||||
----------------------------------*/
|
||||
.ui-state-default,
|
||||
.ui-widget-content .ui-state-default,
|
||||
.ui-widget-header .ui-state-default,
|
||||
.ui-button,
|
||||
|
||||
/* We use html here because we need a greater specificity to make sure disabled
|
||||
works properly when clicked or hovered */
|
||||
html .ui-button.ui-state-disabled:hover,
|
||||
html .ui-button.ui-state-disabled:active {
|
||||
border: 1px solid #c5c5c5;
|
||||
background: #f6f6f6;
|
||||
font-weight: normal;
|
||||
color: #454545;
|
||||
}
|
||||
.ui-state-default a,
|
||||
.ui-state-default a:link,
|
||||
.ui-state-default a:visited,
|
||||
a.ui-button,
|
||||
a:link.ui-button,
|
||||
a:visited.ui-button,
|
||||
.ui-button {
|
||||
color: #454545;
|
||||
text-decoration: none;
|
||||
}
|
||||
.ui-state-hover,
|
||||
.ui-widget-content .ui-state-hover,
|
||||
.ui-widget-header .ui-state-hover,
|
||||
.ui-state-focus,
|
||||
.ui-widget-content .ui-state-focus,
|
||||
.ui-widget-header .ui-state-focus,
|
||||
.ui-button:hover,
|
||||
.ui-button:focus {
|
||||
border: 1px solid #cccccc;
|
||||
background: #ededed;
|
||||
font-weight: normal;
|
||||
color: #2b2b2b;
|
||||
}
|
||||
.ui-state-hover a,
|
||||
.ui-state-hover a:hover,
|
||||
.ui-state-hover a:link,
|
||||
.ui-state-hover a:visited,
|
||||
.ui-state-focus a,
|
||||
.ui-state-focus a:hover,
|
||||
.ui-state-focus a:link,
|
||||
.ui-state-focus a:visited,
|
||||
a.ui-button:hover,
|
||||
a.ui-button:focus {
|
||||
color: #2b2b2b;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.ui-visual-focus {
|
||||
box-shadow: 0 0 3px 1px rgb(94, 158, 214);
|
||||
}
|
||||
.ui-state-active,
|
||||
.ui-widget-content .ui-state-active,
|
||||
.ui-widget-header .ui-state-active,
|
||||
a.ui-button:active,
|
||||
.ui-button:active,
|
||||
.ui-button.ui-state-active:hover {
|
||||
border: 1px solid #003eff;
|
||||
background: #007fff;
|
||||
font-weight: normal;
|
||||
color: #ffffff;
|
||||
}
|
||||
.ui-icon-background,
|
||||
.ui-state-active .ui-icon-background {
|
||||
border: #003eff;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
.ui-state-active a,
|
||||
.ui-state-active a:link,
|
||||
.ui-state-active a:visited {
|
||||
color: #ffffff;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
/* Interaction Cues
|
||||
----------------------------------*/
|
||||
.ui-state-highlight,
|
||||
.ui-widget-content .ui-state-highlight,
|
||||
.ui-widget-header .ui-state-highlight {
|
||||
border: 1px solid #dad55e;
|
||||
background: #fffa90;
|
||||
color: #777620;
|
||||
}
|
||||
.ui-state-checked {
|
||||
border: 1px solid #dad55e;
|
||||
background: #fffa90;
|
||||
}
|
||||
.ui-state-highlight a,
|
||||
.ui-widget-content .ui-state-highlight a,
|
||||
.ui-widget-header .ui-state-highlight a {
|
||||
color: #777620;
|
||||
}
|
||||
.ui-state-error,
|
||||
.ui-widget-content .ui-state-error,
|
||||
.ui-widget-header .ui-state-error {
|
||||
border: 1px solid #f1a899;
|
||||
background: #fddfdf;
|
||||
color: #5f3f3f;
|
||||
}
|
||||
.ui-state-error a,
|
||||
.ui-widget-content .ui-state-error a,
|
||||
.ui-widget-header .ui-state-error a {
|
||||
color: #5f3f3f;
|
||||
}
|
||||
.ui-state-error-text,
|
||||
.ui-widget-content .ui-state-error-text,
|
||||
.ui-widget-header .ui-state-error-text {
|
||||
color: #5f3f3f;
|
||||
}
|
||||
.ui-priority-primary,
|
||||
.ui-widget-content .ui-priority-primary,
|
||||
.ui-widget-header .ui-priority-primary {
|
||||
font-weight: bold;
|
||||
}
|
||||
.ui-priority-secondary,
|
||||
.ui-widget-content .ui-priority-secondary,
|
||||
.ui-widget-header .ui-priority-secondary {
|
||||
opacity: .7;
|
||||
-ms-filter: "alpha(opacity=70)"; /* support: IE8 */
|
||||
font-weight: normal;
|
||||
}
|
||||
.ui-state-disabled,
|
||||
.ui-widget-content .ui-state-disabled,
|
||||
.ui-widget-header .ui-state-disabled {
|
||||
opacity: .35;
|
||||
-ms-filter: "alpha(opacity=35)"; /* support: IE8 */
|
||||
background-image: none;
|
||||
}
|
||||
.ui-state-disabled .ui-icon {
|
||||
-ms-filter: "alpha(opacity=35)"; /* support: IE8 - See #6059 */
|
||||
}
|
||||
|
||||
/* Icons
|
||||
----------------------------------*/
|
||||
|
||||
/* states and images */
|
||||
.ui-icon {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
}
|
||||
.ui-icon,
|
||||
.ui-widget-content .ui-icon {
|
||||
background-image: url("images/ui-icons_444444_256x240.png");
|
||||
}
|
||||
.ui-widget-header .ui-icon {
|
||||
background-image: url("images/ui-icons_444444_256x240.png");
|
||||
}
|
||||
.ui-state-hover .ui-icon,
|
||||
.ui-state-focus .ui-icon,
|
||||
.ui-button:hover .ui-icon,
|
||||
.ui-button:focus .ui-icon {
|
||||
background-image: url("images/ui-icons_555555_256x240.png");
|
||||
}
|
||||
.ui-state-active .ui-icon,
|
||||
.ui-button:active .ui-icon {
|
||||
background-image: url("images/ui-icons_ffffff_256x240.png");
|
||||
}
|
||||
.ui-state-highlight .ui-icon,
|
||||
.ui-button .ui-state-highlight.ui-icon {
|
||||
background-image: url("images/ui-icons_777620_256x240.png");
|
||||
}
|
||||
.ui-state-error .ui-icon,
|
||||
.ui-state-error-text .ui-icon {
|
||||
background-image: url("images/ui-icons_cc0000_256x240.png");
|
||||
}
|
||||
.ui-button .ui-icon {
|
||||
background-image: url("images/ui-icons_777777_256x240.png");
|
||||
}
|
||||
|
||||
/* positioning */
|
||||
/* Three classes needed to override `.ui-button:hover .ui-icon` */
|
||||
.ui-icon-blank.ui-icon-blank.ui-icon-blank {
|
||||
background-image: none;
|
||||
}
|
||||
.ui-icon-caret-1-n { background-position: 0 0; }
|
||||
.ui-icon-caret-1-ne { background-position: -16px 0; }
|
||||
.ui-icon-caret-1-e { background-position: -32px 0; }
|
||||
.ui-icon-caret-1-se { background-position: -48px 0; }
|
||||
.ui-icon-caret-1-s { background-position: -65px 0; }
|
||||
.ui-icon-caret-1-sw { background-position: -80px 0; }
|
||||
.ui-icon-caret-1-w { background-position: -96px 0; }
|
||||
.ui-icon-caret-1-nw { background-position: -112px 0; }
|
||||
.ui-icon-caret-2-n-s { background-position: -128px 0; }
|
||||
.ui-icon-caret-2-e-w { background-position: -144px 0; }
|
||||
.ui-icon-triangle-1-n { background-position: 0 -16px; }
|
||||
.ui-icon-triangle-1-ne { background-position: -16px -16px; }
|
||||
.ui-icon-triangle-1-e { background-position: -32px -16px; }
|
||||
.ui-icon-triangle-1-se { background-position: -48px -16px; }
|
||||
.ui-icon-triangle-1-s { background-position: -65px -16px; }
|
||||
.ui-icon-triangle-1-sw { background-position: -80px -16px; }
|
||||
.ui-icon-triangle-1-w { background-position: -96px -16px; }
|
||||
.ui-icon-triangle-1-nw { background-position: -112px -16px; }
|
||||
.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
|
||||
.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
|
||||
.ui-icon-arrow-1-n { background-position: 0 -32px; }
|
||||
.ui-icon-arrow-1-ne { background-position: -16px -32px; }
|
||||
.ui-icon-arrow-1-e { background-position: -32px -32px; }
|
||||
.ui-icon-arrow-1-se { background-position: -48px -32px; }
|
||||
.ui-icon-arrow-1-s { background-position: -65px -32px; }
|
||||
.ui-icon-arrow-1-sw { background-position: -80px -32px; }
|
||||
.ui-icon-arrow-1-w { background-position: -96px -32px; }
|
||||
.ui-icon-arrow-1-nw { background-position: -112px -32px; }
|
||||
.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
|
||||
.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
|
||||
.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
|
||||
.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
|
||||
.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
|
||||
.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
|
||||
.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
|
||||
.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
|
||||
.ui-icon-arrowthick-1-n { background-position: 1px -48px; }
|
||||
.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
|
||||
.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
|
||||
.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
|
||||
.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
|
||||
.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
|
||||
.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
|
||||
.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
|
||||
.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
|
||||
.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
|
||||
.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
|
||||
.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
|
||||
.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
|
||||
.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
|
||||
.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
|
||||
.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
|
||||
.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
|
||||
.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
|
||||
.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
|
||||
.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
|
||||
.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
|
||||
.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
|
||||
.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
|
||||
.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
|
||||
.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
|
||||
.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
|
||||
.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
|
||||
.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
|
||||
.ui-icon-arrow-4 { background-position: 0 -80px; }
|
||||
.ui-icon-arrow-4-diag { background-position: -16px -80px; }
|
||||
.ui-icon-extlink { background-position: -32px -80px; }
|
||||
.ui-icon-newwin { background-position: -48px -80px; }
|
||||
.ui-icon-refresh { background-position: -64px -80px; }
|
||||
.ui-icon-shuffle { background-position: -80px -80px; }
|
||||
.ui-icon-transfer-e-w { background-position: -96px -80px; }
|
||||
.ui-icon-transferthick-e-w { background-position: -112px -80px; }
|
||||
.ui-icon-folder-collapsed { background-position: 0 -96px; }
|
||||
.ui-icon-folder-open { background-position: -16px -96px; }
|
||||
.ui-icon-document { background-position: -32px -96px; }
|
||||
.ui-icon-document-b { background-position: -48px -96px; }
|
||||
.ui-icon-note { background-position: -64px -96px; }
|
||||
.ui-icon-mail-closed { background-position: -80px -96px; }
|
||||
.ui-icon-mail-open { background-position: -96px -96px; }
|
||||
.ui-icon-suitcase { background-position: -112px -96px; }
|
||||
.ui-icon-comment { background-position: -128px -96px; }
|
||||
.ui-icon-person { background-position: -144px -96px; }
|
||||
.ui-icon-print { background-position: -160px -96px; }
|
||||
.ui-icon-trash { background-position: -176px -96px; }
|
||||
.ui-icon-locked { background-position: -192px -96px; }
|
||||
.ui-icon-unlocked { background-position: -208px -96px; }
|
||||
.ui-icon-bookmark { background-position: -224px -96px; }
|
||||
.ui-icon-tag { background-position: -240px -96px; }
|
||||
.ui-icon-home { background-position: 0 -112px; }
|
||||
.ui-icon-flag { background-position: -16px -112px; }
|
||||
.ui-icon-calendar { background-position: -32px -112px; }
|
||||
.ui-icon-cart { background-position: -48px -112px; }
|
||||
.ui-icon-pencil { background-position: -64px -112px; }
|
||||
.ui-icon-clock { background-position: -80px -112px; }
|
||||
.ui-icon-disk { background-position: -96px -112px; }
|
||||
.ui-icon-calculator { background-position: -112px -112px; }
|
||||
.ui-icon-zoomin { background-position: -128px -112px; }
|
||||
.ui-icon-zoomout { background-position: -144px -112px; }
|
||||
.ui-icon-search { background-position: -160px -112px; }
|
||||
.ui-icon-wrench { background-position: -176px -112px; }
|
||||
.ui-icon-gear { background-position: -192px -112px; }
|
||||
.ui-icon-heart { background-position: -208px -112px; }
|
||||
.ui-icon-star { background-position: -224px -112px; }
|
||||
.ui-icon-link { background-position: -240px -112px; }
|
||||
.ui-icon-cancel { background-position: 0 -128px; }
|
||||
.ui-icon-plus { background-position: -16px -128px; }
|
||||
.ui-icon-plusthick { background-position: -32px -128px; }
|
||||
.ui-icon-minus { background-position: -48px -128px; }
|
||||
.ui-icon-minusthick { background-position: -64px -128px; }
|
||||
.ui-icon-close { background-position: -80px -128px; }
|
||||
.ui-icon-closethick { background-position: -96px -128px; }
|
||||
.ui-icon-key { background-position: -112px -128px; }
|
||||
.ui-icon-lightbulb { background-position: -128px -128px; }
|
||||
.ui-icon-scissors { background-position: -144px -128px; }
|
||||
.ui-icon-clipboard { background-position: -160px -128px; }
|
||||
.ui-icon-copy { background-position: -176px -128px; }
|
||||
.ui-icon-contact { background-position: -192px -128px; }
|
||||
.ui-icon-image { background-position: -208px -128px; }
|
||||
.ui-icon-video { background-position: -224px -128px; }
|
||||
.ui-icon-script { background-position: -240px -128px; }
|
||||
.ui-icon-alert { background-position: 0 -144px; }
|
||||
.ui-icon-info { background-position: -16px -144px; }
|
||||
.ui-icon-notice { background-position: -32px -144px; }
|
||||
.ui-icon-help { background-position: -48px -144px; }
|
||||
.ui-icon-check { background-position: -64px -144px; }
|
||||
.ui-icon-bullet { background-position: -80px -144px; }
|
||||
.ui-icon-radio-on { background-position: -96px -144px; }
|
||||
.ui-icon-radio-off { background-position: -112px -144px; }
|
||||
.ui-icon-pin-w { background-position: -128px -144px; }
|
||||
.ui-icon-pin-s { background-position: -144px -144px; }
|
||||
.ui-icon-play { background-position: 0 -160px; }
|
||||
.ui-icon-pause { background-position: -16px -160px; }
|
||||
.ui-icon-seek-next { background-position: -32px -160px; }
|
||||
.ui-icon-seek-prev { background-position: -48px -160px; }
|
||||
.ui-icon-seek-end { background-position: -64px -160px; }
|
||||
.ui-icon-seek-start { background-position: -80px -160px; }
|
||||
/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
|
||||
.ui-icon-seek-first { background-position: -80px -160px; }
|
||||
.ui-icon-stop { background-position: -96px -160px; }
|
||||
.ui-icon-eject { background-position: -112px -160px; }
|
||||
.ui-icon-volume-off { background-position: -128px -160px; }
|
||||
.ui-icon-volume-on { background-position: -144px -160px; }
|
||||
.ui-icon-power { background-position: 0 -176px; }
|
||||
.ui-icon-signal-diag { background-position: -16px -176px; }
|
||||
.ui-icon-signal { background-position: -32px -176px; }
|
||||
.ui-icon-battery-0 { background-position: -48px -176px; }
|
||||
.ui-icon-battery-1 { background-position: -64px -176px; }
|
||||
.ui-icon-battery-2 { background-position: -80px -176px; }
|
||||
.ui-icon-battery-3 { background-position: -96px -176px; }
|
||||
.ui-icon-circle-plus { background-position: 0 -192px; }
|
||||
.ui-icon-circle-minus { background-position: -16px -192px; }
|
||||
.ui-icon-circle-close { background-position: -32px -192px; }
|
||||
.ui-icon-circle-triangle-e { background-position: -48px -192px; }
|
||||
.ui-icon-circle-triangle-s { background-position: -64px -192px; }
|
||||
.ui-icon-circle-triangle-w { background-position: -80px -192px; }
|
||||
.ui-icon-circle-triangle-n { background-position: -96px -192px; }
|
||||
.ui-icon-circle-arrow-e { background-position: -112px -192px; }
|
||||
.ui-icon-circle-arrow-s { background-position: -128px -192px; }
|
||||
.ui-icon-circle-arrow-w { background-position: -144px -192px; }
|
||||
.ui-icon-circle-arrow-n { background-position: -160px -192px; }
|
||||
.ui-icon-circle-zoomin { background-position: -176px -192px; }
|
||||
.ui-icon-circle-zoomout { background-position: -192px -192px; }
|
||||
.ui-icon-circle-check { background-position: -208px -192px; }
|
||||
.ui-icon-circlesmall-plus { background-position: 0 -208px; }
|
||||
.ui-icon-circlesmall-minus { background-position: -16px -208px; }
|
||||
.ui-icon-circlesmall-close { background-position: -32px -208px; }
|
||||
.ui-icon-squaresmall-plus { background-position: -48px -208px; }
|
||||
.ui-icon-squaresmall-minus { background-position: -64px -208px; }
|
||||
.ui-icon-squaresmall-close { background-position: -80px -208px; }
|
||||
.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
|
||||
.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
|
||||
.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
|
||||
.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
|
||||
.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
|
||||
.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
|
||||
|
||||
|
||||
/* Misc visuals
|
||||
----------------------------------*/
|
||||
|
||||
/* Corner radius */
|
||||
.ui-corner-all,
|
||||
.ui-corner-top,
|
||||
.ui-corner-left,
|
||||
.ui-corner-tl {
|
||||
border-top-left-radius: 3px;
|
||||
}
|
||||
.ui-corner-all,
|
||||
.ui-corner-top,
|
||||
.ui-corner-right,
|
||||
.ui-corner-tr {
|
||||
border-top-right-radius: 3px;
|
||||
}
|
||||
.ui-corner-all,
|
||||
.ui-corner-bottom,
|
||||
.ui-corner-left,
|
||||
.ui-corner-bl {
|
||||
border-bottom-left-radius: 3px;
|
||||
}
|
||||
.ui-corner-all,
|
||||
.ui-corner-bottom,
|
||||
.ui-corner-right,
|
||||
.ui-corner-br {
|
||||
border-bottom-right-radius: 3px;
|
||||
}
|
||||
|
||||
/* Overlays */
|
||||
.ui-widget-overlay {
|
||||
background: #aaaaaa;
|
||||
opacity: .3;
|
||||
-ms-filter: Alpha(Opacity=30); /* support: IE8 */
|
||||
}
|
||||
.ui-widget-shadow {
|
||||
-webkit-box-shadow: 0px 0px 5px #666666;
|
||||
box-shadow: 0px 0px 5px #666666;
|
||||
}
|
||||
5
developer/src/tike/xml/layoutbuilder/jquery-ui/jquery-ui.theme.min.css
vendored
Normal file
74
developer/src/tike/xml/layoutbuilder/jquery-ui/package.json
Normal file
|
|
@ -0,0 +1,74 @@
|
|||
{
|
||||
"name": "jquery-ui",
|
||||
"title": "jQuery UI",
|
||||
"description": "A curated set of user interface interactions, effects, widgets, and themes built on top of the jQuery JavaScript Library.",
|
||||
"version": "1.13.1",
|
||||
"homepage": "http://jqueryui.com",
|
||||
"author": {
|
||||
"name": "jQuery Foundation and other contributors",
|
||||
"url": "https://github.com/jquery/jquery-ui/blob/1.13.1/AUTHORS.txt"
|
||||
},
|
||||
"main": "ui/widget.js",
|
||||
"maintainers": [
|
||||
{
|
||||
"name": "Jörn Zaefferer",
|
||||
"email": "joern.zaefferer@gmail.com",
|
||||
"url": "http://bassistance.de"
|
||||
},
|
||||
{
|
||||
"name": "Mike Sherov",
|
||||
"email": "mike.sherov@gmail.com",
|
||||
"url": "http://mike.sherov.com"
|
||||
},
|
||||
{
|
||||
"name": "TJ VanToll",
|
||||
"email": "tj.vantoll@gmail.com",
|
||||
"url": "http://tjvantoll.com"
|
||||
},
|
||||
{
|
||||
"name": "Felix Nagel",
|
||||
"email": "info@felixnagel.com",
|
||||
"url": "http://www.felixnagel.com"
|
||||
},
|
||||
{
|
||||
"name": "Alex Schmitz",
|
||||
"email": "arschmitz@gmail.com",
|
||||
"url": "https://github.com/arschmitz"
|
||||
}
|
||||
],
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/jquery/jquery-ui.git"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/jquery/jquery-ui/issues"
|
||||
},
|
||||
"license": "MIT",
|
||||
"scripts": {
|
||||
"test": "grunt"
|
||||
},
|
||||
"dependencies": {
|
||||
"jquery": ">=1.8.0 <4.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"commitplease": "3.2.0",
|
||||
"eslint-config-jquery": "3.0.0",
|
||||
"glob": "7.2.0",
|
||||
"grunt": "1.4.1",
|
||||
"grunt-bowercopy": "1.2.5",
|
||||
"grunt-cli": "1.4.3",
|
||||
"grunt-compare-size": "0.4.2",
|
||||
"grunt-contrib-concat": "1.0.1",
|
||||
"grunt-contrib-csslint": "2.0.0",
|
||||
"grunt-contrib-qunit": "5.1.1",
|
||||
"grunt-contrib-requirejs": "1.0.0",
|
||||
"grunt-contrib-uglify": "5.0.1",
|
||||
"grunt-eslint": "23.0.0",
|
||||
"grunt-git-authors": "3.2.0",
|
||||
"grunt-html": "14.5.0",
|
||||
"load-grunt-tasks": "5.1.0",
|
||||
"rimraf": "3.0.2",
|
||||
"testswarm": "1.1.2"
|
||||
},
|
||||
"keywords": []
|
||||
}
|
||||
166
developer/src/tike/xml/layoutbuilder/layer-controls.js
Normal file
|
|
@ -0,0 +1,166 @@
|
|||
$(function() {
|
||||
|
||||
$('#addLayerName').on('input', function() {
|
||||
var layerName = $(this).val();
|
||||
$('#addLayerList').val(layerName);
|
||||
if($('#addLayerList')[0].selectedIndex < 0) {
|
||||
$('#addLayerList').val('(custom)');
|
||||
$('#addLayerNote').text('');
|
||||
} else {
|
||||
$('#addLayerNote').text(layerName+' is a recognised modifier-aware layer name.');
|
||||
}
|
||||
});
|
||||
|
||||
$('#addLayerList').change(function() {
|
||||
var v = $(this).val();
|
||||
if(v == '(custom)') {
|
||||
$('#addLayerName').val('');
|
||||
$('#addLayerNote').text('');
|
||||
} else {
|
||||
$('#addLayerName').val(v);
|
||||
$('#addLayerNote').text(v+' is a recognised modifier-aware layer name.');
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
|
||||
$('#btnAddLayer').click(function () {
|
||||
$('#addLayerDialog').dialog('open');
|
||||
});
|
||||
|
||||
$('#btnDelLayer').click(function () {
|
||||
if ($('#selLayer option').length == 1) return;
|
||||
builder.saveUndo();
|
||||
KVKL[builder.lastPlatform].layer.splice(builder.lastLayerIndex, 1);
|
||||
builder.selectPlatform();
|
||||
builder.generate(false,true);
|
||||
});
|
||||
|
||||
$('#btnEditLayer').click(function () {
|
||||
$('#layerName').val(KVKL[builder.lastPlatform].layer[builder.lastLayerIndex].id);
|
||||
$('#layerPropertiesDialog').dialog('open');
|
||||
});
|
||||
|
||||
//
|
||||
// Layer dialogs
|
||||
//
|
||||
|
||||
$('#layerPropertiesDialog').dialog({
|
||||
autoOpen: false,
|
||||
height: 300,
|
||||
width: 350,
|
||||
modal: true,
|
||||
buttons: {
|
||||
"OK": function () {
|
||||
var newLayerName = $('#layerName').val();
|
||||
if (!newLayerName.match(/^[a-zA-Z0-9_-]+$/)) {
|
||||
alert('Layer name must contain only alphanumerics, underscore and hyphen.');
|
||||
return;
|
||||
}
|
||||
|
||||
builder.saveUndo();
|
||||
builder.generate();
|
||||
|
||||
var platform = KVKL[builder.lastPlatform];
|
||||
var oldLayerName = platform.layer[builder.lastLayerIndex].id;
|
||||
|
||||
let fixup = function(key) {
|
||||
if (key.layer == oldLayerName) {
|
||||
key.layer = newLayerName;
|
||||
}
|
||||
if (key.nextlayer == oldLayerName) {
|
||||
key.nextlayer = newLayerName;
|
||||
}
|
||||
}
|
||||
|
||||
platform.layer.forEach(layer => {
|
||||
if (layer.row) {
|
||||
layer.row.forEach(row => {
|
||||
if (row.key) {
|
||||
row.key.forEach(key => {
|
||||
fixup(key);
|
||||
|
||||
if (key.sk) {
|
||||
key.sk.forEach(k => fixup(k));
|
||||
}
|
||||
if (key.flick) {
|
||||
fkey.flick.forEach(k => fixup(k));
|
||||
}
|
||||
if (key.multitap) {
|
||||
fkey.multitap.forEach(k => fixup(k));
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
platform.layer[builder.lastLayerIndex].id = newLayerName;
|
||||
builder.prepareLayers();
|
||||
$('#selLayer').val(builder.lastLayerIndex);
|
||||
builder.selectLayer();
|
||||
builder.generate();
|
||||
$(this).dialog('close');
|
||||
},
|
||||
"Cancel": function () {
|
||||
$(this).dialog('close');
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
$('#addLayerDialog').dialog({
|
||||
autoOpen: false,
|
||||
height: 300,
|
||||
width: 350,
|
||||
modal: true,
|
||||
buttons: {
|
||||
"OK": function () {
|
||||
var id = $('#addLayerName').val();
|
||||
if (!id.match(/^[a-zA-Z0-9_-]+$/)) {
|
||||
alert('Layer name must contain only alphanumerics, underscore and hyphen.');
|
||||
return;
|
||||
}
|
||||
for(var i = 0; i < KVKL[builder.lastPlatform].layer.length; i++) {
|
||||
if(KVKL[builder.lastPlatform].layer[i].id == id) {
|
||||
alert('Layer name must not already be in use for the current platform.');
|
||||
return;
|
||||
}
|
||||
}
|
||||
builder.saveUndo();
|
||||
var layer = $.extend(true, {}, KVKL[builder.lastPlatform].layer[builder.lastLayerIndex]);
|
||||
layer.id = id;
|
||||
var n = KVKL[builder.lastPlatform].layer.push(layer) - 1;
|
||||
builder.selectPlatform();
|
||||
$('#selLayer').val(n);
|
||||
builder.selectLayer();
|
||||
builder.generate(false,true);
|
||||
$(this).dialog('close');
|
||||
},
|
||||
"Cancel": function () {
|
||||
$(this).dialog('close');
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
$('#selectKeyDialog').dialog({
|
||||
autoOpen: false,
|
||||
height: 140,
|
||||
width: 240,
|
||||
modal: true,
|
||||
buttons: {
|
||||
"Cancel": function () {
|
||||
builder.nextKeySelects = false;
|
||||
$(this).dialog('close');
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
$('#selLayer').change(function () {
|
||||
if (builder.lastPlatform) builder.generate(false,false);
|
||||
let selection = builder.saveSelection();
|
||||
builder.selectLayer();
|
||||
builder.restoreSelection(selection);
|
||||
builder.saveState();
|
||||
});
|
||||
|
||||
}.bind(builder));
|
||||
27
developer/src/tike/xml/layoutbuilder/longpress.svg
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
<svg xmlns='http://www.w3.org/2000/svg' viewBox="77 210 59 40" width="10">
|
||||
<path style="fill: rgb(216, 216, 216); stroke: rgb(64, 64, 64);"
|
||||
d="M 81 211 L 132 211
|
||||
A 3 3 0 0 1 135 214
|
||||
L 135 230
|
||||
A 3 3 0 0 1 132 233
|
||||
|
||||
L 116 233
|
||||
L 116 243
|
||||
A 3 3 0 0 1 113 246
|
||||
|
||||
L 100 246
|
||||
A 3 3 0 0 1 97 243
|
||||
|
||||
L 97 233
|
||||
|
||||
L 81 233
|
||||
A 3 3 0 0 1 78 230
|
||||
|
||||
L 78 214
|
||||
A 3 3 0 0 1 81 211
|
||||
|
||||
Z"></path>
|
||||
<rect x="82" y="215" rx="3" width="13" height="14" style="fill: rgb(240, 240, 240); stroke: rgb(64, 64, 64);"></rect>
|
||||
<rect x="100" y="215" rx="3" width="13" height="14" style="fill: rgb(240, 240, 240); stroke: rgb(64, 64, 64);"></rect>
|
||||
<rect x="118" y="215" rx="3" width="13" height="14" style="fill: rgb(240, 240, 240); stroke: rgb(64, 64, 64);"></rect>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 836 B |
5
developer/src/tike/xml/layoutbuilder/multitap.svg
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
<svg xmlns='http://www.w3.org/2000/svg' viewBox="77 210 59 40" width="10">
|
||||
<rect x="82" y="215" rx="3" width="13" height="14" style="fill: rgb(240, 240, 240); stroke: rgb(64, 64, 64);"></rect>
|
||||
<rect x="100" y="215" rx="3" width="13" height="14" style="fill: rgb(240, 240, 240); stroke: rgb(64, 64, 64);"></rect>
|
||||
<rect x="118" y="215" rx="3" width="13" height="14" style="fill: rgb(240, 240, 240); stroke: rgb(64, 64, 64);"></rect>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 444 B |
110
developer/src/tike/xml/layoutbuilder/platform-controls.js
Normal file
|
|
@ -0,0 +1,110 @@
|
|||
$(function() {
|
||||
$('#btnAddPlatform').click(function () {
|
||||
$('#selAddPlatform option').remove();
|
||||
var platforms = { 'tablet': 1, 'desktop': 1, 'phone': 1 };
|
||||
for (var platform in KVKL) {
|
||||
platforms[platform] = 0;
|
||||
}
|
||||
for (platform in platforms) {
|
||||
if (platforms[platform]) {
|
||||
var opt = document.createElement('option');
|
||||
$(opt).text(platform);
|
||||
$('#selAddPlatform').append(opt);
|
||||
}
|
||||
}
|
||||
$('#addPlatformDialog').dialog('open')
|
||||
});
|
||||
|
||||
$('#btnDelPlatform').click(function () {
|
||||
if ($('#selPlatform option').length == 1) return;
|
||||
builder.saveUndo();
|
||||
var platform = $('#selPlatform').val();
|
||||
delete KVKL[platform];
|
||||
builder.lastPlatform = null;
|
||||
builder.preparePlatforms();
|
||||
builder.generate(false,true);
|
||||
});
|
||||
|
||||
$('#selPlatform').change(function () {
|
||||
if (builder.lastPlatform) builder.generate(false,false);
|
||||
let selection = builder.saveSelection();
|
||||
builder.selectPlatform();
|
||||
builder.restoreSelection(selection);
|
||||
builder.saveState();
|
||||
});
|
||||
|
||||
$('#btnEditPlatform').click(function () {
|
||||
$('#chkDisplayUnderlying')[0].checked = KVKL[builder.lastPlatform].displayUnderlying;
|
||||
$('#selDefaultHint').val(KVKL[builder.lastPlatform].defaultHint ?? 'dot');
|
||||
$('#platformPropertiesDialog').dialog('open');
|
||||
});
|
||||
|
||||
//
|
||||
// Platform dialogs
|
||||
//
|
||||
|
||||
$('#addPlatformDialog').dialog({
|
||||
autoOpen: false,
|
||||
height: 300,
|
||||
width: 350,
|
||||
modal: true,
|
||||
buttons: {
|
||||
"OK": function () {
|
||||
builder.saveUndo();
|
||||
|
||||
var platform = $('#selAddPlatform').val();
|
||||
KVKL[platform] = $.extend(true, {}, KVKL[builder.lastPlatform]); // copy existing platform
|
||||
|
||||
builder.preparePlatforms();
|
||||
$('#selPlatform').val(platform);
|
||||
builder.selectPlatform();
|
||||
|
||||
builder.generate(false,true);
|
||||
|
||||
$(this).dialog('close');
|
||||
},
|
||||
"Cancel": function () {
|
||||
$(this).dialog('close');
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
//
|
||||
// Platform Properties Dialog
|
||||
//
|
||||
|
||||
$('#chkDisplayUnderlying').click(function (event) {
|
||||
event.stopImmediatePropagation();
|
||||
let selection = builder.saveSelection();
|
||||
builder.saveUndo();
|
||||
KVKL[builder.lastPlatform].displayUnderlying = $('#chkDisplayUnderlying')[0].checked;
|
||||
builder.generate();
|
||||
builder.prepareLayer();
|
||||
builder.restoreSelection(selection);
|
||||
});
|
||||
|
||||
$('#selDefaultHint').change(function () {
|
||||
let selection = builder.saveSelection();
|
||||
builder.saveUndo();
|
||||
KVKL[builder.lastPlatform].defaultHint = $('#selDefaultHint').val();
|
||||
if(KVKL[builder.lastPlatform].defaultHint == 'dot') {
|
||||
delete KVKL[builder.lastPlatform].defaultHint;
|
||||
}
|
||||
builder.generate();
|
||||
builder.prepareLayer();
|
||||
builder.restoreSelection(selection);
|
||||
});
|
||||
|
||||
$('#platformPropertiesDialog').dialog({
|
||||
autoOpen: false,
|
||||
height: 400,
|
||||
width: 450,
|
||||
modal: true,
|
||||
buttons: {
|
||||
"Close": function () {
|
||||
$(this).dialog('close');
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
}.bind(builder));
|
||||
188
developer/src/tike/xml/layoutbuilder/prepare-key.js
Normal file
|
|
@ -0,0 +1,188 @@
|
|||
$(function() {
|
||||
|
||||
this.addKey = function (type, position, sp) {
|
||||
var key = document.createElement('div');
|
||||
var ktext = document.createElement('div');
|
||||
var khint = document.createElement('div');
|
||||
var kid = document.createElement('div');
|
||||
var kunderlying = document.createElement('div');
|
||||
$(kid).addClass('id');
|
||||
$(ktext).addClass('text');
|
||||
$(khint).addClass('hint');
|
||||
$(kunderlying).addClass('underlying');
|
||||
$(key).append(kid);
|
||||
$(key).append(ktext);
|
||||
$(key).append(khint);
|
||||
$(key).append(kunderlying);
|
||||
$(key).addClass('key');
|
||||
$(key).data('id', 'T_new_' + this.uniqId);
|
||||
$(key).data('type', type);
|
||||
builder.uniqId++;
|
||||
builder.updateKeyId(key);
|
||||
|
||||
if (type != 'key') {
|
||||
$(key).click(function (event) {
|
||||
event.stopPropagation();
|
||||
builder.selectSubKey(this);
|
||||
$(builder.lastFocus ?? '#inpSubKeyCap').focus().select();
|
||||
}).dblclick(function (event) {
|
||||
event.stopPropagation();
|
||||
var layer = $(this).data('nextlayer');
|
||||
if (layer) builder.selectLayerByName(layer);
|
||||
});
|
||||
$(kid).click(function (event) {
|
||||
event.stopPropagation();
|
||||
builder.selectSubKey(key);
|
||||
$('#inpSubKeyName').focus().select();
|
||||
});
|
||||
} else {
|
||||
$(key).click(function (event) {
|
||||
event.stopPropagation();
|
||||
builder.selectKey(this);
|
||||
$(builder.lastFocus ?? '#inpKeyCap').focus().select();
|
||||
}).dblclick(function (event) {
|
||||
event.stopPropagation();
|
||||
var layer = $(this).data('nextlayer');
|
||||
if (layer) builder.selectLayerByName(layer);
|
||||
});
|
||||
$(kid).click(function (event) {
|
||||
event.stopPropagation();
|
||||
builder.selectKey(key);
|
||||
$('#inpKeyName').focus().select();
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
if (position == 'before') {
|
||||
builder.selectedKey().before(key);
|
||||
} else if (position == 'after') {
|
||||
builder.selectedKey().after(key);
|
||||
} else if (position == 'before-subkey') {
|
||||
builder.selectedSubKey().before(key);
|
||||
} else if (position == 'after-subkey') {
|
||||
builder.selectedSubKey().after(key);
|
||||
} else {
|
||||
$(position).append(key);
|
||||
}
|
||||
|
||||
builder.makeKeyDraggable(key);
|
||||
builder.formatKey(key, sp);
|
||||
|
||||
return key;
|
||||
};
|
||||
|
||||
this.formatKey = function (key, sp) {
|
||||
$(key)
|
||||
.removeClass('key-modifier')
|
||||
.removeClass('key-modifier-selected')
|
||||
.removeClass('key-deadkey')
|
||||
.removeClass('key-blank')
|
||||
.removeClass('key-spacer');
|
||||
if (sp) {
|
||||
switch (parseInt(sp, 10)) {
|
||||
case 1: $(key).addClass('key-modifier'); break;
|
||||
case 2: $(key).addClass('key-modifier-selected'); break;
|
||||
case 8: $(key).addClass('key-deadkey'); break;
|
||||
case 9: $(key).addClass('key-blank'); break;
|
||||
case 10: $(key).addClass('key-spacer'); break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this.prepareKey = function () {
|
||||
var key = builder.selectedKey();
|
||||
builder.hasSavedKeyUndo = false;
|
||||
let val = $(key).data('text');
|
||||
$('#selKeyCapType').val(builder.specialCharacters[val] ? val : '');
|
||||
$('#inpKeyCap').val(val);
|
||||
$('#inpKeyCapUnicode').val(builder.toUnicodeString(val));
|
||||
|
||||
val = $(key).data('hint');
|
||||
$('#inpKeyHint')[0].placeholder = builder.inferKeyHintText(null, $(key).data('longpress'), $(key).data('flick'), $(key).data('multitap'));
|
||||
$('#inpKeyHint').val(val);
|
||||
$('#inpKeyHintUnicode').val(builder.toUnicodeString(val));
|
||||
$('#inpKeyHintUnicode')[0].placeholder = builder.toUnicodeString($('#inpKeyHint')[0].placeholder);
|
||||
|
||||
$('#inpKeyName').val($(key).data('id'));
|
||||
$('#inpKeyWidth').val($(key).data('width'));
|
||||
$('#inpKeyPadding').val($(key).data('pad'));
|
||||
$('#selKeyType').val($(key).data('sp') ? $(key).data('sp') : 0);
|
||||
$('#selKeyNextLayer').val($(key).data('nextlayer'));
|
||||
$('#selKeyLayerOverride').val($(key).data('layer'));
|
||||
|
||||
builder.makeKeyResizable(key);
|
||||
|
||||
//
|
||||
// Prepare presentation of longpress keys, flicks and multitaps
|
||||
//
|
||||
|
||||
builder.removeAllSubKeys();
|
||||
let longpress = $(key).data('longpress'), flick = $(key).data('flick'), multitap = $(key).data('multitap');
|
||||
const hasLongpress = Array.isArray(longpress) && !!longpress.length;
|
||||
const hasFlick = Array.isArray(flick) && !!flick.length;
|
||||
const hasMultitap = Array.isArray(multitap) && !!multitap.length;
|
||||
|
||||
function addSubKeys(keys, type) {
|
||||
for(let key of keys) {
|
||||
let nkey = builder.addKey(type, '#'+type);
|
||||
let text = builder.inferKeyText(key);
|
||||
|
||||
if(key.direction) $(nkey).addClass('flick-'+key.direction);
|
||||
|
||||
$(nkey)
|
||||
.data('text', text)
|
||||
.data('id', key.id)
|
||||
.data('sp', key.sp)
|
||||
.data('font', key.font)
|
||||
.data('fontsize', key.fontsize)
|
||||
.data('nextlayer', key.nextlayer)
|
||||
.data('layer', key.layer)
|
||||
.data('direction', key.direction) // used only by flicks
|
||||
.css('width', (100 * 0.7) + 'px')
|
||||
.css('font-family', key.font)
|
||||
.css('font-size', key.fontsize);
|
||||
|
||||
if(builder.specialCharacters[text]) {
|
||||
$(nkey).addClass('key-special-text');
|
||||
}
|
||||
|
||||
$('.text', nkey).text(builder.renameSpecialKey(text));
|
||||
builder.updateKeyId(nkey);
|
||||
}
|
||||
}
|
||||
|
||||
if(hasLongpress) addSubKeys(longpress, 'longpress');
|
||||
if(hasFlick) addSubKeys(flick, 'flick');
|
||||
if(hasMultitap) addSubKeys(multitap, 'multitap');
|
||||
builder.addKeyAnnotations(key);
|
||||
builder.prepareSubKey();
|
||||
builder.enableKeyControls();
|
||||
builder.enableSubKeyControls();
|
||||
}
|
||||
|
||||
builder.makeKeyResizable = function(key) {
|
||||
$(key).resizable({
|
||||
minWidth: 10 * this.xscale,
|
||||
minHeight: 100 * this.yscale,
|
||||
maxWidth: 500 * this.xscale,
|
||||
maxHeight: 100 * this.yscale,
|
||||
ghost: false,
|
||||
handles: "e",
|
||||
resize: function (_event, ui) {
|
||||
let newWidth = Math.round(ui.size.width / builder.xscale, 0);
|
||||
builder.selectedKey().data('width', newWidth);
|
||||
$('#inpKeyWidth').val(newWidth);
|
||||
builder.updateKeySizeInfo();
|
||||
},
|
||||
start: function (_event, ui) {
|
||||
builder.saveUndo();
|
||||
$(ui.originalElement).css('position', 'relative');
|
||||
$(ui.originalElement).css('left', '');
|
||||
},
|
||||
stop: function (_event, _ui) {
|
||||
builder.rescale();
|
||||
builder.generate();
|
||||
}
|
||||
});
|
||||
}
|
||||
}.bind(builder));
|
||||
|
Before Width: | Height: | Size: 225 B |
|
Before Width: | Height: | Size: 230 B |
283
developer/src/tike/xml/layoutbuilder/subkeys.js
Normal file
|
|
@ -0,0 +1,283 @@
|
|||
$(function() {
|
||||
|
||||
//
|
||||
// Popup keys
|
||||
//
|
||||
|
||||
this.delSelectedSubKey = function () {
|
||||
let key = builder.selectedSubKey();
|
||||
if (key.length == 0) return;
|
||||
let nextKey = $(key).next('.key');
|
||||
if (nextKey.length == 0) nextKey = $(key).prev('.key');
|
||||
if (nextKey.length == 0) {
|
||||
$(builder.selectedKey()).removeData($(key).data('type'));
|
||||
builder.prepareKey();
|
||||
builder.selectSubKey(null);
|
||||
builder.enableSubKeyControls();
|
||||
builder.enableKeyControls();
|
||||
return;
|
||||
}
|
||||
$(key).remove();
|
||||
builder.selectSubKey(nextKey);
|
||||
builder.generateSubKeys();
|
||||
builder.addKeyAnnotations(builder.selectedKey());
|
||||
};
|
||||
|
||||
this.selectedSubKey = function () {
|
||||
return $('#sub-key-groups .selected');
|
||||
};
|
||||
|
||||
this.generateSubKeys = function () {
|
||||
|
||||
function generateItems(parent) {
|
||||
let keys = $(parent+' > div.key').filter(':not(.ui-draggable-dragging)').get();
|
||||
let items = [];
|
||||
for (let key of keys) {
|
||||
items.push({
|
||||
text: $(key).data('text'),
|
||||
id: $(key).data('id'),
|
||||
sp: $(key).data('sp'),
|
||||
font: $(key).data('font'),
|
||||
fontsize: $(key).data('fontsize'),
|
||||
nextlayer: $(key).data('nextlayer'),
|
||||
layer: $(key).data('layer'),
|
||||
direction: $(key).data('direction')
|
||||
});
|
||||
}
|
||||
return items;
|
||||
}
|
||||
|
||||
let key = builder.selectedKey();
|
||||
key.data('longpress', generateItems('#longpress'));
|
||||
key.data('flick', generateItems('#flick'));
|
||||
key.data('multitap', generateItems('#multitap'));
|
||||
}
|
||||
|
||||
this.prepareSubKey = function () {
|
||||
var key = builder.selectedSubKey();
|
||||
|
||||
let type = $(key).data('type'), gestureType = '';
|
||||
switch(type) {
|
||||
case 'flick': gestureType = 'Flick ('+$(key).data('direction').toUpperCase()+')'; break;
|
||||
case 'longpress': gestureType = 'Longpress'; break;
|
||||
case 'multitap': gestureType = 'Multitap'; break;
|
||||
}
|
||||
|
||||
$('#inpSubKeyGestureType').val(gestureType);
|
||||
let val = $(key).data('text');
|
||||
$('#selSubKeyCapType').val(builder.specialCharacters[val] ? val : '');
|
||||
$('#inpSubKeyCap').val(val);
|
||||
$('#inpSubKeyCapUnicode').val(builder.toUnicodeString(val));
|
||||
$('#inpSubKeyName').val($(key).data('id'));
|
||||
$('#selSubKeyType').val($(key).data('sp') ? $(key).data('sp') : 0);
|
||||
$('#selSubKeyNextLayer').val($(key).data('nextlayer'));
|
||||
$('#selSubKeyLayerOverride').val($(key).data('layer'));
|
||||
}
|
||||
|
||||
const subKeyNameChange = builder.wrapChange(function () {
|
||||
var nkey = builder.selectedSubKey();
|
||||
if (nkey.length == 0) return;
|
||||
nkey.data('id', $(this).val());
|
||||
builder.generateSubKeys();
|
||||
builder.updateKeyId(nkey);
|
||||
}, {saveOnce: true});
|
||||
|
||||
$('#inpSubKeyName')
|
||||
.change(subKeyNameChange)
|
||||
.on('input', subKeyNameChange)
|
||||
.autocomplete({
|
||||
source: builder.lookupKeyNames,
|
||||
change: subKeyNameChange,
|
||||
select: builder.wrapInstant(subKeyNameChange)
|
||||
}).blur(function () {
|
||||
builder.hasSavedKeyUndo = false;
|
||||
});
|
||||
|
||||
const subKeyCapChange = function(val) {
|
||||
var k = builder.selectedSubKey();
|
||||
if (k.length == 0) return;
|
||||
$('.text', k).text(builder.renameSpecialKey(val));
|
||||
k.data('text', val);
|
||||
if(builder.specialCharacters[val]) {
|
||||
k.addClass('key-special-text');
|
||||
} else {
|
||||
k.removeClass('key-special-text');
|
||||
}
|
||||
builder.updateCharacterMap(val, true);
|
||||
builder.generateSubKeys();
|
||||
}
|
||||
|
||||
const inpSubKeyCapChange = builder.wrapChange(function () {
|
||||
let val = $(this).val();
|
||||
$('#inpSubKeyCapUnicode').val(builder.toUnicodeString(val));
|
||||
subKeyCapChange(val);
|
||||
}, {saveOnce: true});
|
||||
|
||||
const inpSubKeyCapUnicodeChange = builder.wrapChange(function () {
|
||||
const val = builder.fromUnicodeString($(this).val());
|
||||
$('#inpSubKeyCap').val(val);
|
||||
subKeyCapChange(val);
|
||||
}, {saveOnce: true});
|
||||
|
||||
$('#inpSubKeyCap')
|
||||
.change(inpSubKeyCapChange)
|
||||
.on('input', inpSubKeyCapChange)
|
||||
.mouseup(function () {
|
||||
builder.updateCharacterMap($(this).val(), false);
|
||||
}).focus(function () {
|
||||
builder.updateCharacterMap($(this).val(), false);
|
||||
}).blur(function () {
|
||||
builder.hasSavedSubKeyUndo = false;
|
||||
});
|
||||
|
||||
$('#inpSubKeyCapUnicode')
|
||||
.change(inpSubKeyCapUnicodeChange)
|
||||
.on('input', inpSubKeyCapUnicodeChange)
|
||||
.mouseup(function () {
|
||||
builder.updateCharacterMap(builder.fromUnicodeString($(this).val()), false);
|
||||
}).focus(function () {
|
||||
builder.updateCharacterMap(builder.fromUnicodeString($(this).val()), false);
|
||||
}).blur(function () {
|
||||
builder.hasSavedSubKeyUndo = false;
|
||||
});
|
||||
|
||||
const selSubKeyCapTypeChange = builder.wrapChange(function (e) {
|
||||
e.stopPropagation();
|
||||
var val = $(this).val();
|
||||
$('#inpSubKeyCap').val(val);
|
||||
$('#inpSubKeyCapUnicode').val(builder.toUnicodeString(val));
|
||||
subKeyCapChange(val);
|
||||
// We only EnableControls here because if the user types *BkSp* into the
|
||||
// text field, we shouldn't hide the text field until next time the key is selected
|
||||
builder.enableSubKeyControls();
|
||||
});
|
||||
|
||||
$('#selSubKeyCapType').on('change', selSubKeyCapTypeChange);
|
||||
|
||||
const selSubKeyNextLayerChange = builder.wrapChange(function () {
|
||||
$(this).val() === '' ?
|
||||
builder.selectedSubKey().removeData('nextlayer') :
|
||||
builder.selectedSubKey().data('nextlayer', $(this).val());
|
||||
builder.generateSubKeys();
|
||||
});
|
||||
|
||||
$('#selSubKeyNextLayer').change(selSubKeyNextLayerChange);
|
||||
|
||||
const selSubKeyLayerOverrideChange = builder.wrapChange(function () {
|
||||
$(this).val() === '' ?
|
||||
builder.selectedSubKey().removeData('layer') :
|
||||
builder.selectedSubKey().data('layer', $(this).val());
|
||||
builder.updateKeyId(builder.selectedSubKey());
|
||||
builder.generateSubKeys();
|
||||
});
|
||||
|
||||
$('#selSubKeyLayerOverride').change(selSubKeyLayerOverrideChange);
|
||||
|
||||
$('#wedgeAddSubKeyLeft').click(builder.wrapChange(function (event) {
|
||||
event.stopPropagation();
|
||||
builder.selectSubKey(builder.addKey(builder.selectedSubKey().data('type'), 'before-subkey', true));
|
||||
builder.generateSubKeys();
|
||||
}));
|
||||
|
||||
$('#wedgeAddSubKeyRight').click(builder.wrapChange(function (event) {
|
||||
event.stopPropagation();
|
||||
builder.selectSubKey(builder.addKey(builder.selectedSubKey().data('type'), 'after-subkey', true));
|
||||
builder.generateSubKeys();
|
||||
}));
|
||||
|
||||
$('#btnDelSubKey').click(builder.wrapChange(function (event) {
|
||||
event.stopPropagation();
|
||||
builder.delSelectedSubKey();
|
||||
}));
|
||||
|
||||
const selSubKeyTypeChange = builder.wrapChange(function () {
|
||||
var sp = $(this).val(), key = builder.selectedSubKey();
|
||||
if (key.length == 0) return;
|
||||
if (sp == 0) {
|
||||
key.removeData('sp');
|
||||
} else {
|
||||
key.data('sp', $(this).val());
|
||||
}
|
||||
builder.formatKey(key, $(this).val());
|
||||
builder.generateSubKeys();
|
||||
});
|
||||
|
||||
$('#selSubKeyType').change(selSubKeyTypeChange);
|
||||
|
||||
$('.btn-add-flick').click(builder.wrapChange(function (event) {
|
||||
event.stopPropagation();
|
||||
const key = builder.addKey('flick', '#flick');
|
||||
const direction = event.target.id.substring(6); // delete 'flick-' from start of id
|
||||
$(key).data('direction', direction).addClass('flick-'+direction);
|
||||
builder.selectSubKey(key);
|
||||
builder.generateSubKeys();
|
||||
builder.addKeyAnnotations(builder.selectedKey());
|
||||
}));
|
||||
|
||||
$('#btnAddLongpress').click(builder.wrapChange(function (event) {
|
||||
event.stopPropagation();
|
||||
builder.selectSubKey(builder.addKey('longpress', '#longpress'));
|
||||
builder.generateSubKeys();
|
||||
builder.addKeyAnnotations(builder.selectedKey());
|
||||
}));
|
||||
|
||||
$('#btnAddMultitap').click(builder.wrapChange(function (event) {
|
||||
event.stopPropagation();
|
||||
builder.selectSubKey(builder.addKey('multitap', '#multitap'));
|
||||
builder.generateSubKeys();
|
||||
builder.addKeyAnnotations(builder.selectedKey());
|
||||
}));
|
||||
|
||||
this.selectSubKey = function (key) {
|
||||
builder.selectedSubKey().removeClass('selected');
|
||||
if (key && $(key).length) {
|
||||
$(key).addClass('selected');
|
||||
|
||||
let offset = $(key).offset();
|
||||
|
||||
if($(key).data('type') != 'flick') {
|
||||
$('.skcontrol.wedge-horz,.skcontrol.wedge-vert').css('display', 'block');
|
||||
$('#wedgeAddSubKeyLeft').offset({ left: offset.left - 9, top: offset.top + $(key).outerHeight() + 2 });
|
||||
$('#wedgeAddSubKeyRight').offset({ left: offset.left + $(key).outerWidth() - 7, top: offset.top + $(key).outerHeight() + 2 });
|
||||
} else {
|
||||
$('.skcontrol.wedge-horz,.skcontrol.wedge-vert').css('display', '');
|
||||
}
|
||||
|
||||
if(!builder.textControlsInToolbar()) {
|
||||
$('input#inpSubKeyCap')
|
||||
.css('display', 'block')
|
||||
.offset({ left: offset.left + 16, top: offset.top + 4 })
|
||||
.width($(key).width() - 32);
|
||||
}
|
||||
$('div#btnDelSubKey')
|
||||
.css('display', 'block')
|
||||
.offset({ left: offset.left + $(key).outerWidth() - 14, top: offset.top + 3 });
|
||||
this.prepareSubKey();
|
||||
builder.enableSubKeyControls();
|
||||
} else {
|
||||
if(!builder.textControlsInToolbar()) {
|
||||
$('input#inpSubKeyCap').css('display', '');
|
||||
}
|
||||
$('.skcontrol.wedge-horz,.skcontrol.wedge-vert,div#btnDelSubKey').css('display', '');
|
||||
builder.enableSubKeyControls();
|
||||
}
|
||||
builder.saveState();
|
||||
}
|
||||
|
||||
this.enableSubKeyControls = function () {
|
||||
var key = builder.selectedSubKey();
|
||||
if (key.length == 0) {
|
||||
$('#subKeyToolbar *').attr('disabled', 'disabled');
|
||||
} else {
|
||||
let val = $(key).data('text');
|
||||
$('#subKeyToolbar *').removeAttr('disabled');
|
||||
$('#subKeyToolbar #inpSubKeyGestureType').attr('disabled', 'disabled');
|
||||
$('#sub-key-cap-unicode-toolbar-item, #sub-key-cap-toolbar-item').css('display', builder.specialCharacters[val] ? 'none' : '');
|
||||
}
|
||||
}
|
||||
|
||||
$('#sub-key-groups').click(function (event) {
|
||||
builder.selectSubKey(null);
|
||||
});
|
||||
|
||||
}.bind(builder));
|
||||
89
developer/src/tike/xml/layoutbuilder/undo.js
Normal file
|
|
@ -0,0 +1,89 @@
|
|||
$(function() {
|
||||
|
||||
this.undoStack = [];
|
||||
this.redoStack = [];
|
||||
|
||||
|
||||
this.undo = function () {
|
||||
if (builder.undoStack.length == 0) {
|
||||
return;
|
||||
}
|
||||
builder.saveUndo(1);
|
||||
var s = builder.undoStack.pop();
|
||||
this.loadUndo(s);
|
||||
}
|
||||
|
||||
this.redo = function () {
|
||||
if (builder.redoStack.length == 0) {
|
||||
return;
|
||||
}
|
||||
builder.saveUndo(2);
|
||||
var s = builder.redoStack.pop();
|
||||
this.loadUndo(s);
|
||||
}
|
||||
|
||||
this.loadUndo = function (s) {
|
||||
KVKL = JSON.parse(s.KVKL);
|
||||
|
||||
builder.preparePlatforms();
|
||||
builder.enableUndoControls();
|
||||
|
||||
$('#selPlatform').val(s.platform);
|
||||
builder.selectPlatform();
|
||||
$('#selLayer').val(s.layer);
|
||||
builder.selectLayer();
|
||||
builder.selectKey($('#kbd .key').filter(function (index) { return $(this).data('id') === s.key; }).first());
|
||||
if (s.subkey) builder.selectSubKey($('#sub-key-groups .key').filter(function (index) { return $(this).data('id') === s.subkey; }).first());
|
||||
}
|
||||
|
||||
this.saveUndo = function (saveToRedo) {
|
||||
if (!saveToRedo) {
|
||||
builder.redoStack = [];
|
||||
}
|
||||
builder.generate(true,false);
|
||||
var s = {
|
||||
KVKL: JSON.stringify(KVKL),
|
||||
platform: builder.lastPlatform,
|
||||
layer: builder.lastLayerIndex,
|
||||
key: builder.selectedKey().data('id')
|
||||
};
|
||||
var key = builder.selectedSubKey();
|
||||
if (key.length > 0) {
|
||||
s.subkey = $(key).data('id');
|
||||
}
|
||||
|
||||
var stack = (saveToRedo == 1 ? builder.redoStack : builder.undoStack);
|
||||
stack.push(s);
|
||||
if (stack.length > 100) {
|
||||
stack.shift();
|
||||
}
|
||||
builder.enableUndoControls();
|
||||
builder.command('modified');
|
||||
}
|
||||
|
||||
this.enableUndoControls = function () {
|
||||
if (builder.undoStack.length == 0) {
|
||||
builder.command('undo-disable');
|
||||
$('#btnUndo').attr('disabled', 'disabled');
|
||||
} else {
|
||||
builder.command('undo-enable');
|
||||
$('#btnUndo').removeAttr('disabled');
|
||||
}
|
||||
if (builder.redoStack.length == 0) {
|
||||
builder.command('redo-disable');
|
||||
$('#btnRedo').attr('disabled', 'disabled');
|
||||
} else {
|
||||
builder.command('redo-enable');
|
||||
$('#btnRedo').removeAttr('disabled');
|
||||
}
|
||||
}
|
||||
|
||||
$('#btnUndo').click(function () {
|
||||
builder.undo();
|
||||
});
|
||||
|
||||
$('#btnRedo').click(function () {
|
||||
builder.redo();
|
||||
});
|
||||
|
||||
}.bind(builder));
|
||||
28
developer/src/tike/xml/layoutbuilder/view-controls.js
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
$(function() {
|
||||
|
||||
$('#btnViewOptions').click(function () {
|
||||
$('#chkShowAllModifierOptions')[0].checked = builder.showAllModifierCombinations;
|
||||
$('#viewOptionsDialog').dialog('open');
|
||||
});
|
||||
|
||||
$('#chkShowAllModifierOptions').click(function (event) {
|
||||
event.stopImmediatePropagation();
|
||||
builder.showAllModifierCombinations = $('#chkShowAllModifierOptions')[0].checked;
|
||||
builder.fillModifierSelect();
|
||||
builder.prepareKey();
|
||||
});
|
||||
|
||||
$('#viewOptionsDialog').dialog({
|
||||
autoOpen: false,
|
||||
height: 300,
|
||||
width: 350,
|
||||
modal: true,
|
||||
buttons: {
|
||||
"Close": function () {
|
||||
$(this).dialog('close');
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
}.bind(builder));
|
||||