Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

New ui #153

Merged
merged 113 commits into from
Oct 13, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
113 commits
Select commit Hold shift + click to select a range
7f3c1b0
primary page
mvanlaar Jun 11, 2019
d177254
update agency v0.1
mvanlaar Jun 11, 2019
010e0e7
Create .gitignore
mvanlaar Jun 11, 2019
d053594
Update .gitignore
mvanlaar Jun 11, 2019
4a8d01b
update agency
mvanlaar Jun 11, 2019
275ecaf
Update agency.html
mvanlaar Jun 11, 2019
c756aff
update stops
mvanlaar Jun 11, 2019
58c870a
update ignore
mvanlaar Jun 11, 2019
be1e97a
update stops page
mvanlaar Jun 12, 2019
3d1ef21
update easybutton to use fontawesome 5
mvanlaar Jun 12, 2019
8299bbb
update routes and stops last bit
mvanlaar Jun 12, 2019
aa5bd22
add calendar and stops search
mvanlaar Jun 12, 2019
e0a878f
update
mvanlaar Jun 12, 2019
6d0d48f
update version
mvanlaar Jun 14, 2019
45da5ed
upate first version colorpicker
mvanlaar Jun 14, 2019
a60d54d
update color picker
mvanlaar Jun 14, 2019
d65fe05
update tips and stoptimes
mvanlaar Jun 14, 2019
634d06f
update sequence
mvanlaar Jun 18, 2019
dfd7303
add support for kml
mvanlaar Jun 21, 2019
db49691
fixed reverse add gpx support
mvanlaar Jun 21, 2019
ba7bff7
update nav + site layout first page
mvanlaar Jun 24, 2019
34aafe2
update for new nav index, stops, agency
mvanlaar Jun 24, 2019
d086139
automate the nav menu once again
mvanlaar Jun 25, 2019
f76a2a9
updae layout for various files
mvanlaar Jun 26, 2019
ceb19af
update v1 fares
mvanlaar Jun 26, 2019
fe3d3da
fix viewing tabulator tables and tabs
mvanlaar Jul 2, 2019
7e79b33
update pivot code
mvanlaar Jul 3, 2019
87c3542
update and remove loading animation on body
mvanlaar Jul 3, 2019
122f066
update translations footer fix, langauge selector
mvanlaar Jul 3, 2019
80d92c8
fixing bugs in stops.html
mvanlaar Jul 3, 2019
a06f72c
update layout sequence file
mvanlaar Jul 3, 2019
39705fb
update title
mvanlaar Jul 3, 2019
0eb6973
update sequence
mvanlaar Jul 3, 2019
fa773eb
add small fixes and form validator
mvanlaar Jul 4, 2019
935ea42
give feed_info a page
mvanlaar Jul 4, 2019
b9222ef
begin build of stop upload functionsality
mvanlaar Jul 5, 2019
c70544b
few update
mvanlaar Jul 15, 2019
c34dc40
update hrml file
mvanlaar Jul 17, 2019
5fe1faa
update javascript file of hmrl
mvanlaar Jul 17, 2019
6a3629b
start with config page
mvanlaar Jul 17, 2019
d31f543
upate stops with leaflet-providers and first start config page
mvanlaar Aug 12, 2019
34f765a
fixes, updates and update tabulator 4.4
mvanlaar Aug 12, 2019
ce7631e
update triptimings and sequence
mvanlaar Aug 13, 2019
0c14560
create new import stops page
mvanlaar Aug 14, 2019
8d5c759
update import csv and start with kml
mvanlaar Aug 15, 2019
d8c8001
fix geojson parsering bug
mvanlaar Aug 15, 2019
39e6a74
create import for osm stops
mvanlaar Aug 16, 2019
f500e3b
update generate stop_id and extra items
mvanlaar Aug 19, 2019
5f1dfbf
update new fixes and layout changes
mvanlaar Aug 20, 2019
853aff1
fix bug in stops
mvanlaar Aug 20, 2019
ebaa2c2
updates to stops.html
mvanlaar Aug 21, 2019
ad27a48
update column filter in stops.html
mvanlaar Aug 21, 2019
6d45c39
update first parts of standard buttonbar component in the footer
mvanlaar Aug 22, 2019
a47fe69
update colorpicker and default footer
mvanlaar Aug 23, 2019
e01b089
update fixes and layout
mvanlaar Aug 26, 2019
b87d16e
first part in updating the api to allow config saving and reading.
mvanlaar Aug 26, 2019
7278006
update config api
mvanlaar Aug 26, 2019
4751b41
first first part of config api
mvanlaar Aug 27, 2019
0bc472b
update fixes for kml import and route fixes
mvanlaar Aug 27, 2019
322e60a
splice button
mvanlaar Aug 27, 2019
ecda5d3
start with kml use for sequence
mvanlaar Aug 28, 2019
d0ac7e3
add upport for processing kml to add stops.
mvanlaar Aug 29, 2019
d1aad9b
refactor sequence to use stops api.
mvanlaar Aug 29, 2019
d3c2fd7
Update to use configuration page
mvanlaar Aug 30, 2019
019f511
first version online routing in default sequence
mvanlaar Aug 30, 2019
7cc79bf
add support first version of curstom columns
mvanlaar Sep 2, 2019
17949e9
add basic delete add clumn support in agency
mvanlaar Sep 2, 2019
6ea825c
update add delete columns
mvanlaar Sep 2, 2019
0e30530
update column for select hide show selectbox
mvanlaar Sep 2, 2019
1e4c7a6
fix the delete column upload with post
mvanlaar Sep 3, 2019
a928431
update column creating and edit screen removal.
mvanlaar Sep 3, 2019
3cfe86f
fix small bugs in add column and replace markers with marker cluster
mvanlaar Sep 5, 2019
2354eb8
make fluid layout
mvanlaar Sep 5, 2019
cc716ec
update style of app and small bugfix
mvanlaar Sep 5, 2019
a7e2e16
adjust calender page to use add and delete columns and bugfix
mvanlaar Sep 6, 2019
847090c
refactor of show hide add remove function
mvanlaar Sep 9, 2019
cebb4f0
update code with rownum refactor and kml update
mvanlaar Sep 9, 2019
40e0951
update and use paches of org project
mvanlaar Sep 9, 2019
4d9d1be
first parts of copy trip stoptimes to new
mvanlaar Sep 9, 2019
c372f99
first parts of copy trip
mvanlaar Sep 10, 2019
b606ce1
add firstparts of 24hours checking
mvanlaar Sep 10, 2019
6bc4b20
create fast trips based on default sequence
mvanlaar Sep 13, 2019
84d711a
bugfixes and layout issues
mvanlaar Sep 16, 2019
1f88fc4
add dynamic background layers for stops
mvanlaar Sep 16, 2019
4f98e82
update config
mvanlaar Sep 16, 2019
ee3d6c3
add shapes.html to project
mvanlaar Sep 17, 2019
052547c
add loading stops and drawing line on map on shapes.html
mvanlaar Sep 18, 2019
6b8ccbe
update shapes.html with online routing wip.
mvanlaar Sep 19, 2019
7544ea3
update layergroup select
mvanlaar Sep 20, 2019
15e3258
update for wip saving shapes
mvanlaar Sep 20, 2019
266ccfb
wip shapes.html upload shape
mvanlaar Sep 22, 2019
270678c
ignore python cache files
mvanlaar Sep 23, 2019
8400406
add first parts layer checkboxes
mvanlaar Sep 23, 2019
a265cdb
update wip shapes add first parts for save
mvanlaar Sep 23, 2019
17adc8f
update wip shapes.html
mvanlaar Sep 23, 2019
c710118
don't add geojson but polylines
mvanlaar Sep 25, 2019
1741a2b
shapes.html convert everything to polyline
mvanlaar Sep 25, 2019
ff73961
update formating shapes.js
mvanlaar Sep 25, 2019
237dff2
wip shapes.html saving bugfixes
mvanlaar Sep 26, 2019
de893a9
add python coe to save the shapes file
mvanlaar Sep 27, 2019
84ab8e8
update sequence.html remove online routing
mvanlaar Sep 27, 2019
dbdb273
V1 shapes.html online routing
mvanlaar Sep 30, 2019
2f6ca53
update krml to working version
mvanlaar Oct 2, 2019
757cad6
wip update hrml import file
mvanlaar Oct 2, 2019
e5d80fa
wip hrml import working
mvanlaar Oct 2, 2019
e10f306
add defensive code in triptimings.html
mvanlaar Oct 2, 2019
5e160bd
update more working verion of html
mvanlaar Oct 3, 2019
1a0dedb
Cleaup and update modules
mvanlaar Oct 3, 2019
14a907a
cleanup
mvanlaar Oct 3, 2019
ffc7f89
wip for first pull request
mvanlaar Oct 3, 2019
078d1aa
fix shape loaded multilayer kml.
mvanlaar Oct 8, 2019
2c0a2e3
fix bugs triptiming and shapes
mvanlaar Oct 11, 2019
1163b0f
Merge branch 'v4.0.0' into new-ui
answerquest Oct 13, 2019
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,5 @@ db
export
logs
uploads
*.pyc

68 changes: 67 additions & 1 deletion GTFSManager.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@
import json
import os
import time, datetime
# import url handlers
from handlers.config import APIKeys
# import all utils from the /utils folder.
import utils

import xmltodict
import pandas as pd
Expand Down Expand Up @@ -1074,7 +1078,67 @@ def get(self):
# time check, from https://stackoverflow.com/a/24878413/4355695
end = time.time()
logmessage("shape GET call took {} seconds.".format(round(end-start,2)))



class gtfsshape(tornado.web.RequestHandler):
def post(self):
# ${APIpath}shape?pw=${pw}&route=${route_id}&id=${shape_id}&reverseFlag=${reverseFlag}
start = time.time()
logmessage('\nshape POST call')
pw = self.get_argument('pw', default='')
if not decrypt(pw):
self.set_status(400)
self.write("Error: invalid password.")
return
shapePrefix = self.get_argument('id', default='')
logmessage(shapePrefix)

if not (len(shapePrefix)):
self.set_status(400)
self.write("Error: Invalid route or shape id prefix.")
return

data = json.loads(self.request.body.decode('UTF-8'))

replaceTableDB('shapes', data, key='shape_id', value=shapePrefix)

self.write('Saved to shapes table in DB.')

end = time.time()
logmessage("shape POST call took {} seconds.".format(round(end-start, 2)))

def get(self):
# API/shape?shape=${shape_id}
start = time.time()
logmessage('\nshape GET call')
shape_id = self.get_argument('shape', default='')
print(shape_id)

if not len(shape_id):
self.set_status(400)
self.write("Error: invalid shape.")
return

shapeDf = readTableDB('shapes', key='shape_id', value=shape_id)

if not len(shapeDf):
self.set_status(400)
self.write("Error: Given shape_id is not present in shapes table in DB.")
return

# need to sort this array before returning it. See https://github.com/WRI-Cities/static-GTFS-manager/issues/22
shapeDf.shape_pt_sequence = shapeDf.shape_pt_sequence.astype(int)
# type-cast the column as int before sorting!

sortedShapeJson = shapeDf.sort_values(
'shape_pt_sequence').to_json(orient='records', force_ascii=False)
# sort ref: http://pandas.pydata.org/pandas-docs/version/0.19/generated/pandas.DataFrame.sort.html
self.write(sortedShapeJson)

# time check, from https://stackoverflow.com/a/24878413/4355695
end = time.time()
logmessage("shape GET call took {} seconds.".format(round(end-start, 2)))

class allShapesList(tornado.web.RequestHandler):
def get(self):
start = time.time()
Expand Down Expand Up @@ -1416,6 +1480,8 @@ def make_app():
(r"/API/frequencies", frequencies),
(r"/API/tableReadSave", tableReadSave),
(r"/API/tableColumn", tableColumn),
(r"/API/Config/ApiKeys", APIKeys),
(r"/API/gtfs/shapes", gtfsshape),
#(r"/API/idList", idList),
# (r"/(.*)", tornado.web.StaticFileHandler, {"path": root, "default_filename": "index.html"})
(r"/(.*)", MyStaticFileHandler, {"path": root, "default_filename": "index.html"})
Expand Down
240 changes: 176 additions & 64 deletions agency.html
Original file line number Diff line number Diff line change
@@ -1,71 +1,183 @@
<!DOCTYPE html>
<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<title>Agency and Feed_info</title>
<link href="lib/jquery-ui.min.css" rel="stylesheet">
<link href="lib/tabulator.min.css" rel="stylesheet">
<link href="lib/bootstrap.v4.0.0.min.css" crossorigin="anonymous" alt="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" rel="stylesheet">
<link rel="stylesheet" href="lib/chosen/chosen.min.css">
<link href="js/commonstyle.css" rel="stylesheet">
<!-- Put the CSSs first and JSs next -->

<script src="lib/jquery-3.3.1.min.js" type="text/javascript"></script>
<script src="lib/jquery-ui.min.js" type="text/javascript"></script>
<script src="lib/tabulator.js" type="text/javascript"></script>
<script src="lib/popper.v1.12.9.min.js" crossorigin="anonymous" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" alt="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"></script>
<script src="lib/bootstrap.v4.0.0.min.js" crossorigin="anonymous" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" alt="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
<script src="lib/papaparse.min.js" type="text/javascript"></script>
<script src="lib/chosen/chosen.jquery.min.js" type="text/javascript"></script>
<style>
#agency-table {
height: 300px;
}
</style></head>
<body>
<div id="navBar"></div>

<div class="container">
<h2>Agency</h2>
<br>
<div class="row">
<div class="col-md-8">

<div id="agency-table"></div>
<br>
<p>Create a new agency:
<input placeholder="agency_id" id="agency2add" size="7"><button class="btn-primary btn-xs" id="addAgencyButton" type="button">Add</button> &nbsp; <small><span id="agencyAddStatus"></span></small></p>
<html lang="en">

<p><button id="saveAgencyButton" class="btn btn-outline-success btn-md">Save Agency Changes</button> &nbsp; <small id="agencySaveStatus"></small></p>

</div><div class="col-md-4">

<div class="alert alert-info"><small>
Used for the feed's metadata, and in Routes section if there are multiple agencies and the route has to be shown to operate under an agency. <a href="https://github.com/google/transit/blob/master/gtfs/spec/en/reference.md#agencytxt" target="_blank">See specs</a>.
<br><br>Note: To delete an agency, please go to <a href="deleteID.html">Tools > Delete ID</a>.
</small></div>
<head>
<!-- Required meta tags-->
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<title>GTFS Manager : Agency info</title>
<!-- Fontfaces CSS-->
<link href="css/font-face.css" rel="stylesheet" media="all">
<link href="vendor/font-awesome-5/css/all.min.css" rel="stylesheet" media="all">
<!-- Bootstrap CSS-->
<link href="vendor/bootstrap-4.1/bootstrap.min.css" rel="stylesheet" media="all">
<!-- Vendor CSS-->
<link href="vendor/wow/animate.css" rel="stylesheet" media="all">
<link href="vendor/css-hamburgers/hamburgers.min.css" rel="stylesheet" media="all">
<link href="vendor/select2/css/select2.min.css" rel="stylesheet" media="all">
<link href="vendor/select2/css/select2-bootstrap4.min.css" rel="stylesheet" media="all">
<link href="vendor/toast-0.7.1/toast.min.css" rel="stylesheet" media="all">
<link href="vendor/tabulator-4.4.3/css/bootstrap/tabulator_bootstrap4.min.css" rel="stylesheet" media="all">
<script src="vendor/tabulator-4.4.3/js/tabulator.min.js"></script>
<!-- Main CSS-->
<link href="css/theme.css" rel="stylesheet" media="all">
<!-- Put the CSSs first and JSs next -->
<style>
/* Always set a height for the tabulator tables to imporve performance! */
#agency-table {
height: 250px;
}
</style>
<script src="config/settings.js" type="text/javascript"></script>
</head>

</div></div>
<body class="page-content--bgf7">
<div class="page-wrapper">
<!-- HEADER DESKTOP-->
<header class="header-desktop3 d-none d-lg-block">
<div class="section__content section__content--p35">
<div class="header3-wrap">
<div class="header__logo">
<a href="#">
<img src="extra_files/GTFS.png" width="52" height="170" alt="GTFS Manager" />
</a>
</div>
<div class="header__navbar" id="navmenuinsert">
<!-- menu will be inserted from menu.js.-->
</div>
<div class="form-inline my-2 my-md-0">
<input id="password" class="form-control mr-sm-2" type="text" placeholder="pw for edits" style="width:200px;" id="password">
</div>
</div>
</div>
</header>
<!-- END HEADER DESKTOP-->
<!-- MAIN CONTENT-->
<div class="page-content--bgf7">
<div class="section__content section__content--p30">
<div class="container-fluid p-t-20">
<div class="row">
<div class="col-md-12">
<div class="card">
<div class="card-header">
<strong class="card-title mb-3">Agency</strong>
</div>
<div class="card-body">
<div id="agency-table" class="table table-striped"></div>
</div>
</div>
</div>
</div>
</div>
<div class="container-fluid p-t-20">
<div class="row">
<div class="col-md-12">
<div class="card">
<div class="card-header">
<strong class="card-title mb-3">Create a new agency</strong>
</div>
<div class="card-body">
<div id="Form-AddAgency" data-parsley-validate>
<div class="form-group parsley-input">
<label for="agency_id" aria-required="true">agency_id</label>
<input placeholder="agency_id" id="agency_id" class="form-control" required autocomplete="off" data-parsley-required-message="You have to add a agency_id, without it it won't work!">
<small id="agency_idHelp" class="form-text text-muted">Identifies a transit brand, which is often the same as a transit agency.</small>
</div>
<div class="form-group parsley-input">
<label for="agency_name" aria-required="true">agency_name</label>
<input placeholder="agency_name" id="agency_name" class="form-control" required autocomplete="off" data-parsley-required-message="You have to add a agency_name, without it it won't work!">
<small id="agency_nameHelp" class="form-text text-muted">Contains the full name of the transit agency.</small>
</div>
<div class="form-group parsley-input">
<label for="agency_url" aria-required="true">agency_url</label>
<input placeholder="agency_url" id="agency_url" class="form-control" required autocomplete="off" data-parsley-required-message="You have to add a agency_url, without it it won't work!">
<small id="agency_urlHelp" class="form-text text-muted">Contains the URL of the transit agency.</small>
</div>
<div class="form-group parsley-input">
<label for="agency_timezone" aria-required="true">agency_timezone</label>
<select id="agency_timezone" class="form-control" data-parsley-required-message="You have to add a agency_url, without it it won't work!"></select>
<small id="agency_timezoneHelp" class="form-text text-muted">Contains the timezone where the transit agency is located. If multiple agencies are specified in the feed, each must have the same agency_timezone.</small>
</div>
<div class="form-group parsley-input">
<label for="agency_lang" aria-required="true">agency_lang</label>
<select id="agency_lang" class="form-control"></select>
<small id="agency_langHelp" class="form-text text-muted">Specifies the primary language used by this transit agency..</small>
</div>
<div class="form-group parsley-input">
<label for="agency_phone" aria-required="true">agency_phone</label>
<input placeholder="agency_phone" id="agency_phone" class="form-control" autocomplete="off">
<small id="agency_phoneHelp" class="form-text text-muted">Provides a voice telephone number for the specified agency.</small>
</div>
<div class="form-group parsley-input">
<label for="agency_fare_url" aria-required="true">agency_fare_url</label>
<input placeholder="agency_fare_url" id="agency_url" class="form-control">
<small id="agency_fare_urlHelp" class="form-text text-muted">Specifies the URL of a web page where a rider can purchase tickets or other fare instruments for the agency online.</small>
</div>
<div class="form-group parsley-input">
<label for="agency_email" aria-required="true">agency_email</label>
<input placeholder="agency_email" id="agency_email" class="form-control">
<small id="agency_emailHelp" class="form-text text-muted">Contains a valid email address that's actively monitored by the agency's customer service department.</small>
</div>
</div>
<div class="alert alert-info" role="alert">
<small>
Used for the feed's metadata, and in Routes section if there are multiple agencies and the route has to be shown to operate under an agency. <a href="https://developers.google.com/transit/gtfs/reference/#agencytxt" target="_blank">See specs</a>.
<br>Note: To delete an agency, please go to <a href="deleteID.html">Tools > Delete ID</a>.
</small>
</div>
</div>
<div class="card-footer">
<button class="btn btn-primary float-right" id="addAgencyButton" type="button">Add Agency</button>
</div>

<hr>
<h2>Feed_info</h2>
<p>This is an optional table (only one row), for giving information about the feed. See <a href="https://github.com/google/transit/blob/master/gtfs/spec/en/reference.md#feed_infotxt" target="_blank">specs document</a> for details.</p>
<p>
feed_publisher_name* : <input id="feed_publisher_name"></p><p>
feed_publisher_url* : <input id="feed_publisher_url"></p><p>
feed_lang* : <input id="feed_lang"></p><p>
feed_start_date : <input id="feed_start_date"></p><p>
feed_end_date : <input id="feed_end_date"></p><p>
feed_version : <input id="feed_version"></p><p>
feed_contact_email : <input id="feed_contact_email"></p><p>
feed_contact_url : <input id="feed_contact_url"></p><p>
</p>
<p><button id="saveFeedInfoButton" class="btn btn-outline-success btn-md">Save Feed_info Changes</button> &nbsp; <small id="feedInfoSaveStatus"></small></p>
<p><small>Note: If you are having feed_info table at all, then the top 3 fields are compulsory. Otherwise, leave everything blank.</small></p>
</div>
<script src="config/settings.js" type="text/javascript"></script>
<script src="js/commonfuncs.js" type="text/javascript"></script>
<script src="js/agency.js"></script>
</div>
</div>
</div>
</div>
</div>
<!-- END MAIN CONTENT-->
<!-- END PAGE CONTAINER-->
</div>
</div>
<!-- Jquery JS-->
<script src="vendor/jquery-3.2.1.min.js"></script>
<!-- Bootstrap JS-->
<script src="vendor/bootstrap-4.1/popper.min.js"></script>
<script src="vendor/bootstrap-4.1/bootstrap.min.js"></script>
<!-- Vendor JS -->
<script src="vendor/select2/js/select2.min.js"></script>
<script src="js/Select2EditorTimezone.js"></script>
<script src="js/Select2EditorLanguage.js"></script>
<script src="vendor/toast-0.7.1/toast.min.js"></script>
<script src="js/tabulator-footer.js"></script>
<!-- Form validator-->
<script src="vendor/parsley-2.9.1/parsley.min.js"></script>
<!-- Main JS-->
<script src="js/main.js"></script>
<script src="js/menu.js"></script>
<script src="js/commonfuncs.js" type="text/javascript"></script>
<script src="js/agency.js"></script>

<!-- Modal -->
<div class="modal fade" id="DeleteColumnModal" tabindex="-1" role="dialog" aria-labelledby="DeleteColumnModalTitle" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="DeleteColumnModalTitle">Delete Non standard columns</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body" id="DeleteColumnModalBody">
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary nonstandardbutton" id="DeleteColumnButton">Remove columns</button>
</div>
</div>
</div>
</div>
</body>

</html>
Loading