Skip to content

Commit abd7122

Browse files
Updated settings page with mappings (#19)
* Adding mappings is possible from the project page * Changed add button UX * Refactoring * Mappings is a MultiDimensional property * Update to latest bootstrap, jquery, popper versions * Fixed UI errors + minimal look * Minor UI updates * Updated buttons * Added back the copyright Co-authored-by: Sarmishta Velury <[email protected]> Co-authored-by: isc-tleavitt <[email protected]>
1 parent fb1ef36 commit abd7122

File tree

16 files changed

+243
-5755
lines changed

16 files changed

+243
-5755
lines changed

cls/SourceControl/Git/Extension.cls

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -287,4 +287,3 @@ Method GetStatus(InternalName As %String, ByRef IsInSourceControl As %Boolean, B
287287
}
288288

289289
}
290-

cls/SourceControl/Git/Settings.cls

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,14 @@ Property gitUserName As %String [ InitialExpression = {##class(SourceControl.Git
2323
/// Attribution: Email address for user ${username}
2424
Property gitUserEmail As %String [ InitialExpression = {##class(SourceControl.Git.Utils).GitUserEmail()}, Required ];
2525

26+
Property Mappings [ MultiDimensional ];
27+
28+
Method %OnNew() As %Status
29+
{
30+
Merge ..Mappings = @##class(SourceControl.Git.Utils).MappingsNode()
31+
quit $$$OK
32+
}
33+
2634
Method %Save() As %Status
2735
{
2836
set sysStorage = ##class(SourceControl.Git.Utils).InstallNamespaceStorage()
@@ -36,7 +44,9 @@ Method %Save() As %Status
3644
set @storage@("settings","user",$username,"gitUserEmail") = ..gitUserEmail
3745
set @storage@("settings","ssh","privateKeyFile") = ..privateKeyFile
3846
set @storage@("settings","pullEventClass") = ..pullEventClass
39-
47+
48+
kill @##class(SourceControl.Git.Utils).MappingsNode()
49+
merge @##class(SourceControl.Git.Utils).MappingsNode() = ..Mappings
4050
quit $$$OK
4151
}
4252

@@ -69,4 +79,3 @@ ClassMethod Configure() As %Boolean [ CodeMode = objectgenerator ]
6979
}
7080

7181
}
72-

cls/SourceControl/Git/Utils.cls

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1340,4 +1340,3 @@ ClassMethod OutputConfigureMessage()
13401340
}
13411341

13421342
}
1343-

csp/gitprojectsettings.csp

Lines changed: 154 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,39 @@
44
<meta charset="utf-8">
55
<meta http-equiv="X-UA-Compatible" content="IE=edge">
66
<meta name="viewport" content="width=device-width, initial-scale=1">
7-
<title>Cache-Git Settings</title>
8-
<link rel="stylesheet" type="text/css" href="css/bootstrap.css" />
7+
<title>IRIS/Git Integration Settings</title>
8+
<link rel="stylesheet" type="text/css" href="css/bootstrap.min.css" />
99
<link rel="stylesheet" type="text/css" href="css/git-webui.css" />
1010
<STYLE type='text/css'>
1111
.error {
1212
color: red;
1313
}
14+
15+
body {
16+
font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";
17+
font-size: 1rem;
18+
font-weight: 350;
19+
line-height: 1.5;
20+
color: #212529;
21+
text-align: left;
22+
}
23+
24+
.btn-add {
25+
border:none;
26+
padding:0%;
27+
margin-left:0%;
28+
margin-top:-2%;
29+
}
30+
.btn-remove {
31+
border: 1px solid #ced4da;
32+
border-left: none;
33+
border-radius: 0 0.25rem 0.25rem 0;
34+
}
35+
36+
hr {
37+
opacity: 0.15
38+
}
39+
1440
</STYLE>
1541
</head>
1642
<body>
@@ -19,76 +45,140 @@
1945
set namespace = %request.Data("NSpace",1)
2046
set $namespace = namespace
2147
set settings = ##class(SourceControl.Git.Settings).%New()
48+
set ^test = settings
2249
if $Data(%request.Data("gitsettings",1)) {
23-
for param="gitBinPath","namespaceTemp","privateKeyFile","pullEventClass","gitUserName","gitUserEmail" {
24-
set $Property(settings,param) = $Get(%request.Data(param,1))
25-
}
26-
do settings.%Save()
27-
}
50+
for param="gitBinPath","namespaceTemp","privateKeyFile","pullEventClass","gitUserName","gitUserEmail"{
51+
set $Property(settings,param) = $Get(%request.Data(param,1))
52+
}
53+
set i = 1
54+
set param = "MappingsPath"
55+
kill settings.Mappings
56+
while ( $Get(%request.Data(param,i)) '= "" ){
57+
set settings.Mappings($Get(%request.Data("MappingsExt",i)), $Get(%request.Data("MappingsCov",i))) = $Get(%request.Data(param,i))
58+
set i = i+1
59+
}
60+
do settings.%Save()
61+
}
2862
</server>
2963
<div class = 'container'>
30-
<div class="col-sm-1"></div>
64+
<div class="col-sm-1"><br/></div>
65+
3166
<form method='post'>
3267
<input type="hidden" name="NSpace" value="#(..EscapeHTML(namespace))#" />
3368
<input type="hidden" name="gitsettings" value="1" />
34-
<h1>Git Project Settings</h1>
35-
<h3>Settings for namespace #(..EscapeHTML(namespace))#</h3>
69+
<div class="col-sm-1"></div>
70+
<h1>Git Project Settings</h1><hr/>
71+
<br/>
72+
<h3>Settings for namespace #(..EscapeHTML(namespace))#</h3><br/>
3673

37-
<div class="form-group row">
38-
<label for="gitBinPath" class="col-sm-4 col-form-label">Path to git.exe <br> (e.g. C:\Program Files\Git\bin\git.exe)</label>
39-
<div class="col-sm-8">
74+
<div class="form-group row mb-3">
75+
<label for="gitBinPath" class="col-sm-3 col-form-label" data-toggle="tooltip" title="Absolute path to the Git executable">Path to git.exe</small></small></label>
76+
<div class="col-sm-7">
4077
<input type="text" class="form-control" id="gitBinPath" name="gitBinPath" value='#(..EscapeHTML(settings.gitBinPath))#' placeholder="(e.g. C:\Program Files\Git\bin\git.exe)">
4178
<csp:if condition='$D(%request.Data("gitsettings",1)) && (##class(SourceControl.Git.Utils).GitBinExists()=0)'>
4279
<p class="text-danger">File not found</p>
4380
</csp:if>
4481
</div>
4582
</div>
4683

47-
<div class="form-group row">
48-
<label for="namespaceTemp" class="col-sm-4 col-form-label">Temp folder for this namespace<br/>(e.g. c:\someproj\)</label>
49-
<div class="col-sm-8">
50-
<input type="text" class="form-control" id="namespaceTemp" name="namespaceTemp" value='#(..EscapeHTML(settings.namespaceTemp))#'/>
84+
<div class="form-group row mb-3">
85+
<label for="namespaceTemp" class="col-sm-3 col-form-label" data-toggle="tooltip" title="Absolute path to you project">Temp folder for this namespace<br/></label>
86+
<div class="col-sm-7">
87+
<input type="text" class="form-control" id="namespaceTemp" name="namespaceTemp" value='#(..EscapeHTML(settings.namespaceTemp))#' placeholder="e.g. C:\someproj\"/>
5188
</div>
5289
</div>
5390

54-
<div class="form-group row">
55-
<label for="privateKeyFile" class="col-sm-4 col-form-label">SSH Private Key File</label>
56-
<div class="col-sm-8">
57-
<input type="text" class="form-control" id="privateKeyFile" name="privateKeyFile" value='#(..EscapeHTML(settings.privateKeyFile))#'/>
91+
<div class="form-group row mb-3">
92+
<label for="privateKeyFile" class="col-sm-3 col-form-label" data-toggle="tooltip" title="Absolute path to your private SSH key file">SSH Private Key File</label>
93+
<div class="col-sm-7">
94+
<input type="text" class="form-control" id="privateKeyFile" name="privateKeyFile" value='#(..EscapeHTML(settings.privateKeyFile))#' placeholder="C:\Users\ExampleUser\.ssh\id_rsa"/>
95+
5896
</div>
5997
</div>
6098

61-
<div class="form-group row">
62-
<label for="pullEventClass" class="col-sm-4 col-form-label">Pull Event Class</label>
63-
<div class="col-sm-8">
99+
<div class="form-group row mb-3">
100+
<label for="pullEventClass" class="col-sm-3 col-form-label" data-toggle="tooltip" title="Handler class for git pull">Pull Event Class</label>
101+
<div class="col-sm-7">
64102
<select class="form-control" id="pullEventClass" name="pullEventClass">
65103
<option value="SourceControl.Git.PullEventHandler.Default" #($Case(settings.pullEventClass,"SourceControl.Git.PullEventHandler.Default":"selected",:""))#>Default</option>
66104
<option value="SourceControl.Git.PullEventHandler.PackageManager" #($Case(settings.pullEventClass,"SourceControl.Git.PullEventHandler.PackageManager":"selected",:""))#>PackageManager</option>
67105
</select>
68106
</div>
69107
</div>
70108

109+
<div class="form-group row mb-3 mapping-input-group">
110+
<div class="col-sm-3">
111+
<label for="MappingsPath" class="col-form-label" data-toggle="tooltip" title="Relative paths mapping the files in your project">Mappings</label>
112+
<button type="button" class="btn btn-default btn-add" >
113+
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="#198754" class="bi bi-plus-circle-fill" viewBox="0 0 16 16">
114+
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM8.5 4.5a.5.5 0 0 0-1 0v3h-3a.5.5 0 0 0 0 1h3v3a.5.5 0 0 0 1 0v-3h3a.5.5 0 0 0 0-1h-3v-3z"/>
115+
</svg>
116+
</button>
117+
</div>
118+
<script language="cache" runat=server>
119+
set extKey = ""
120+
set first = 1
121+
for {
122+
set covKey = ""
123+
set extKey = $ORDER(settings.Mappings(extKey))
124+
quit:extKey=""
125+
for {
126+
set covKey = $ORDER(settings.Mappings(extKey, covKey))
127+
quit:covKey=""
128+
129+
if (first = 1) {
130+
set first = 0
131+
}
132+
else {
133+
&html<<div class="col-sm-3" id="indent-div">
134+
</div>>
135+
}
136+
137+
&html<<div class="voca col-sm-7">
138+
<div class = "input-group mb-1">
139+
<input type="text" class="form-control" id="MappingsExt" name="MappingsExt" value=#(extKey)# placeholder="Extension">
140+
<input type="text" class="form-control" id="MappingsCov" name="MappingsCov" value=#(covKey)# placeholder="Coverage">
141+
<input type="text" class="form-control" id="MappingsPath" name="MappingsPath" value=#(settings.Mappings(extKey, covKey))# placeholder="Relative path">
142+
<div class="input-group-append">
143+
<button type="button" class="btn btn-remove" >
144+
<svg xmlns="http://www.w3.org/2000/svg" width=20" height="20" fill="#dc3545" class="bi bi-dash-circle-fill" viewBox="0 0 16 16">
145+
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM4.5 7.5a.5.5 0 0 0 0 1h7a.5.5 0 0 0 0-1h-7z"/>
146+
</svg>
147+
</button>
148+
</div>
149+
</div>
150+
</div>>
151+
}
152+
}
153+
</script>
154+
<!--<button type="button" class="btn-sm btn btn-success btn-add mx-auto d-block" >
155+
<span class="glyphicon glyphicon-plus-sign" aria-hidden="true"></span>&nbsp&nbsp&nbspAdd&nbsp&nbsp&nbsp
156+
</button>-->
157+
</div>
158+
159+
160+
<br/>
71161
<h3>Settings for user '#(..EscapeHTML($Username))#'</h3>
72162
<em>Git settings - if empty, will default to repository/global settings</em>
73163
<br/><br/><br/>
74164

75-
<div class="form-group row">
76-
<label for="gitUserName" class="col-sm-4 col-form-label">Git Committer Name </label>
77-
<div class="col-sm-8">
165+
<div class="form-group row mb-3">
166+
<label for="gitUserName" class="col-sm-3 col-form-label" data-toggle="tooltip" title="Firstname Lastname">Git Committer Name </label>
167+
<div class="col-sm-7">
78168
<input type="text" class="form-control" id="gitUserName" name="gitUserName" value='#(..EscapeHTML(settings.gitUserName))#'/>
79169
</div>
80170
</div>
81171

82-
<div class="form-group row">
83-
<label for="gitUserEmail" class="col-sm-4 col-form-label">Git Committer Email </label>
84-
<div class="col-sm-8">
172+
<div class="form-group row mb-3">
173+
<label for="gitUserEmail" class="col-sm-3 col-form-label" data-toggle="tooltip" title="<git-username-on-remote>@remote.com">Git Committer Email </label>
174+
<div class="col-sm-7">
85175
<input type="email" class="form-control" id="gitUserEmail" name="gitUserEmail" value='#(..EscapeHTML(settings.gitUserEmail))#'/>
86176
</div>
87177
</div>
88178

89179
<br/><br/>
90180

91-
<div class="form-group row">
181+
<div class="form-group row mb-3">
92182
<div class="col-sm-12 text-center">
93183
<input type='submit' class="btn-lg btn-primary" value = 'Save'/>
94184
</div>
@@ -100,7 +190,40 @@
100190
</csp:if>
101191
</div>
102192
<script src="js/jquery.min.js"></script>
193+
<script src="js/popper.min.js"></script>
103194
<script src="js/bootstrap.min.js"></script>
104195
<script src="js/git-webui.js"></script>
196+
<script language="JavaScript">
197+
$(function () {
198+
$('[data-toggle="tooltip"]').tooltip()
199+
})
200+
$(function()
201+
{
202+
$(document).on('click', '.btn-add', function(e)
203+
{
204+
e.preventDefault();
205+
206+
var controlForm = $('.mapping-input-group');
207+
$('<div class="col-sm-3" id="indent-div"> </div>').appendTo(controlForm);
208+
209+
var currentEntry = $(this).parent().siblings('.voca:first');
210+
var newEntry = $(currentEntry.clone()).appendTo(controlForm);
211+
212+
newEntry.find('input').val('');
213+
//controlForm.find('.btn-add:not(:last)')
214+
//.removeClass('btn-default').addClass('btn-danger')
215+
//.removeClass('btn-add').addClass('btn-remove')
216+
217+
//.html('<span class="glyphicon glyphicon-minus" aria-hidden="true"></span> Remove ');
218+
}).on('click', '.btn-remove', function(e)
219+
{
220+
$(this).parent().parent().parent().prev('#indent-div').remove();
221+
$(this).parents('.voca:first').remove();
222+
223+
e.preventDefault();
224+
return false;
225+
});
226+
});
227+
</script>
105228
</body>
106229
</html>

git-webui/Gruntfile.js

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,25 @@ module.exports = function(grunt) {
66
jquery: {
77
expand: true,
88
flatten: true,
9-
src: 'bower_components/jquery/dist/jquery.min.js',
9+
src: 'node_modules/jquery/dist/jquery.min.js',
1010
dest: 'dist/share/git-webui/webui/js/',
1111
},
12-
bootstrap: {
12+
bootstrapjs: {
1313
expand: true,
1414
flatten: true,
15-
src: 'bower_components/bootstrap/dist/js/bootstrap.min.js',
15+
src: 'node_modules/bootstrap/dist/js/bootstrap.min.js',
16+
dest: 'dist/share/git-webui/webui/js/',
17+
},
18+
bootstrapcss: {
19+
expand: true,
20+
flatten: true,
21+
src: 'node_modules/bootstrap/dist/css/bootstrap.min.css',
22+
dest: 'dist/share/git-webui/webui/css/',
23+
},
24+
popperjs: {
25+
expand: true,
26+
flatten: true,
27+
src: 'node_modules/@popperjs/core/dist/umd/popper.min.js',
1628
dest: 'dist/share/git-webui/webui/js/',
1729
},
1830
git_webui: {
@@ -36,9 +48,6 @@ module.exports = function(grunt) {
3648
},
3749

3850
less: {
39-
options: {
40-
paths: 'bower_components/bootstrap/less',
41-
},
4251
files: {
4352
expand: true,
4453
cwd: 'src',
@@ -67,7 +76,7 @@ module.exports = function(grunt) {
6776
grunt.loadNpmTasks('grunt-contrib-clean');
6877
grunt.loadNpmTasks('grunt-contrib-watch');
6978

70-
grunt.registerTask('copytodist', ['copy:jquery', 'copy:bootstrap', 'copy:git_webui']);
79+
grunt.registerTask('copytodist', ['copy:jquery', 'copy:bootstrapjs', 'copy:bootstrapcss', 'copy:popperjs', 'copy:git_webui']);
7180
grunt.registerTask('default', ['copytodist', 'less']);
7281
grunt.registerTask('release', ['default', 'copy:release']);
7382
};

git-webui/bower.json

Lines changed: 0 additions & 23 deletions
This file was deleted.

0 commit comments

Comments
 (0)