Browse Source

Updating jQuery UI and Bootswatch themes

This also removes many themes no longer needed, fixing #260
Alan Hardman 3 years ago
parent
commit
d22c397263
48 changed files with 331 additions and 13074 deletions
  1. 10 13
      app/controller/user.php
  2. 1 1
      app/view/blocks/issue-comment.html
  3. 7 7
      app/view/issues/single.html
  4. 1 1
      app/view/issues/single/history.html
  5. 2 2
      app/view/user/dashboard.html
  6. 1 1
      app/view/user/single.html
  7. 0 21
      css/bootstrap-amelia.min.css
  8. 9 3
      css/bootstrap-cerulean.min.css
  9. 0 26
      css/bootstrap-cosmo.min.css
  10. 0 32
      css/bootstrap-cupid.min.css
  11. 29 7
      css/bootstrap-cyborg.min.css
  12. 0 38
      css/bootstrap-darkly.min.css
  13. 0 29
      css/bootstrap-flatly.min.css
  14. 42 0
      css/bootstrap-geo.css
  15. 0 46
      css/bootstrap-google.css
  16. 0 20
      css/bootstrap-journal.min.css
  17. 0 16
      css/bootstrap-lumen.min.css
  18. 0 23
      css/bootstrap-paper.min.css
  19. 55 5752
      css/bootstrap-phproject-dark.css
  20. 17 5644
      css/bootstrap-phproject.css
  21. 0 20
      css/bootstrap-readable.min.css
  22. 10 5
      css/bootstrap-sandstone.min.css
  23. 0 24
      css/bootstrap-shamrock.min.css
  24. 0 21
      css/bootstrap-simplex.min.css
  25. 24 4
      css/bootstrap-slate.min.css
  26. 10 5
      css/bootstrap-spacelab.min.css
  27. 0 37
      css/bootstrap-superhero.min.css
  28. 0 45
      css/bootstrap-tagsinput.css
  29. 0 1
      css/bootstrap-theme.css.map
  30. 4 5
      css/bootstrap-theme.min.css
  31. 1 0
      css/bootstrap-theme.min.css.map
  32. 3 3
      css/bootstrap-thrive-2015-dark.css
  33. 66 618
      css/bootstrap-thrive.css
  34. 0 22
      css/bootstrap-united.min.css
  35. 0 41
      css/bootstrap-yeti.min.css
  36. 4 3
      css/bootstrap.min.css
  37. 1 0
      css/bootstrap.min.css.map
  38. 1 1
      db/16.02.04-1.sql
  39. 17 0
      db/16.11.29.1.sql
  40. 0 503
      js/bootstrap-tagsinput.js
  41. 0 8
      js/bootstrap-tagsinput.min.js
  42. 0 1
      js/bootstrap-tagsinput.min.js.map
  43. 7 6
      js/bootstrap.min.js
  44. 0 1
      js/bulkissues.js
  45. 0 5
      js/jquery-1.11.3.min.js
  46. 0 4
      js/jquery-2.2.4.min.js
  47. 5 5
      js/jquery-ui-dragsort.min.js
  48. 4 4
      js/jquery.ui.touch-punch.min.js

+ 10 - 13
app/controller/user.php

@@ -26,7 +26,8 @@ class User extends \Controller {
 	}
 
 	/**
-	 * GET /user/dashboard User dashboard
+	 * GET /user/dashboard
+	 * User dashboard
 	 *
 	 * @param \Base $f3
 	 * @throws \Exception
@@ -99,20 +100,16 @@ class User extends \Controller {
 		}
 	}
 
+	/**
+	 * Get array of theme names
+	 * @return array
+	 */
 	private function _loadThemes() {
-		$f3 = \Base::instance();
-
-		// Get theme list
-		$hidden_themes = array("backlog", "style", "taskboard", "datepicker", "jquery-ui-1.10.3", "bootstrap-tagsinput", "emote", "fontawesome", "font-awesome", "simplemde");
-		$themes = array();
-		foreach (glob("css/*.css") as $file) {
-			$name = pathinfo($file, PATHINFO_FILENAME);
-			if(!in_array($name, $hidden_themes)) {
-				$themes[] = $name;
-			}
+		$themes = array("bootstrap.min");
+		foreach (glob("css/bootstrap-*.css") as $file) {
+			$themes[] = pathinfo($file, PATHINFO_FILENAME);
 		}
-
-		$f3->set("themes", $themes);
+		\Base::instance()->set("themes", $themes);
 		return $themes;
 	}
 

+ 1 - 1
app/view/blocks/issue-comment.html

@@ -1,5 +1,5 @@
 <div class="media" id="c-{{ @comment.id }}" data-id="{{ @comment.id }}">
-	<a class="pull-left" href="{{ @BASE }}/user/{{ @comment.user_username }}">
+	<a class="media-left" href="{{ @BASE }}/user/{{ @comment.user_username }}">
 		<img class="profile-picture media-object img-rounded" src="{{ @BASE }}/avatar/48-{{ @comment.user_id }}.png" srcset="{{ @BASE }}/avatar/96-{{ @comment.user_id }}.png 2x" alt>
 	</a>
 	<div class="media-body">

+ 7 - 7
app/view/issues/single.html

@@ -321,7 +321,7 @@
 	<include href="blocks/footer.html" />
 </div>
 
-<form class="modal fade in" id="upload" method="post" enctype="multipart/form-data" action="{{ @BASE }}/issues/upload">
+<form class="modal fade in" id="upload" tabindex="-1" method="post" enctype="multipart/form-data" action="{{ @BASE }}/issues/upload">
 	<div class="modal-dialog">
 		<div class="modal-content">
 			<div class="modal-header">
@@ -402,7 +402,7 @@ $(function() {
 				$('#comment_form')
 					.after(
 						'<div class="media" id="c-' + data.id + '" data-id="' + data.id + '">' +
-							'<a class="pull-left" href="{{ @BASE }}/user/' + data.user_username + '">' +
+							'<a class="media-left" href="{{ @BASE }}/user/' + data.user_username + '">' +
 								'<img src="{{ @user_obj->avatar(48) | esc }}" srcset="{{ @user_obj->avatar(96) | esc }} 2x" class="media-object profile-picture img-rounded" alt>' +
 							'</a>' +
 							'<div class="media-body">' +
@@ -427,7 +427,7 @@ $(function() {
 	$.get(BASE + '/issues/{{ @issue.id }}/history', {}, function(data) {
 		$('#history').empty().append(data.html);
 		$('#tab_history').html('{{ @dict.history }}&ensp;<span class="badge">' + data.total + '</span>');
-	}, 'json').error(function() {
+	}, 'json').fail(function() {
 		$('#history').empty().append($('<p />').addClass('text-center text-danger').text('{{ @dict.error.loading_issue_history }}'));
 	});
 	$.get(BASE + '/issues/{{ @issue.id }}/watchers', {}, function(data) {
@@ -464,7 +464,7 @@ $(function() {
 			e.preventDefault();
 		});
 
-	}, 'json').error(function() {
+	}, 'json').fail(function() {
 		$('#watchers').empty().append($('<p />').addClass('text-center text-danger').text('{{ @dict.error.loading_issue_watchers }}'));
 	});
 	if(parseInt('{{ @issue.parent_id }}')) {
@@ -472,7 +472,7 @@ $(function() {
 			$('#related-sibling').empty().append(data.html);
 			$('#tab_related-sibling').html($('#tab_related-sibling').text() + '&ensp;<span class="badge">' + data.open +' / '+ data.total + '</span>');
 			$('#related-sibling table').stupidtable();
-		}, 'json').error(function() {
+		}, 'json').fail(function() {
 			$('#related-sibling').empty().append($('<p />').addClass('text-center text-danger').text('{{ @dict.error.loading_related_issues }}'));
 		});
 	}
@@ -480,7 +480,7 @@ $(function() {
 		$('#related-child').empty().append(data.html);
 		$('#tab_related-child').html($('#tab_related-child').text() + '&ensp;<span class="badge">' + data.open +' / '+ data.total + '</span>');
 		$('#related-child table').stupidtable();
-	}, 'json').error(function() {
+	}, 'json').fail(function() {
 		$('#related-child').empty().append($('<p />').addClass('text-center text-danger').text('{{ @dict.error.loading_related_issues }}'));
 	});
 
@@ -518,7 +518,7 @@ $(function() {
 					}
 				}
 			});
-		}, 'json').error(function() {
+		}, 'json').fail(function() {
 			$('#dependencies').empty().append($('<p />').addClass('text-center text-danger').text('{{ @dict.error.loading_dependencies }}'));
 		});
 	};

+ 1 - 1
app/view/issues/single/history.html

@@ -1,6 +1,6 @@
 <repeat group="{{ @updates }}" value="{{ @update }}">
 	<div class="media" id="u-{{ @update.id }}">
-		<a class="pull-left" href="{{ @BASE }}/user/{{ @update.user_username }}">
+		<a class="media-left" href="{{ @BASE }}/user/{{ @update.user_username }}">
 			<img src="{{ @BASE }}/avatar/48-{{ @update.user_id }}.png" srcset="{{ @BASE }}/avatar/96-{{ @update.user_id }}.png 2x" class="media-object profile-picture img-rounded" alt>
 		</a>
 		<div class="media-body">

+ 2 - 2
app/view/user/dashboard.html

@@ -84,7 +84,7 @@
 
 			$.post(BASE + '/user/dashboard', {
 				widgets: JSON.stringify(items)
-			}).error(function() {
+			}).fail(function() {
 				alert('An error occurred saving the dashboard layout.');
 			});
 		};
@@ -99,7 +99,7 @@
 				saveWidgets();
 			},
 			distance: 10
-		}).disableSelection();
+		});
 
 		// Add close buttons to widgets
 		$('<a />').html('&times;').addClass('close').appendTo('.dashboard-widget-handle');

+ 1 - 1
app/view/user/single.html

@@ -148,7 +148,7 @@
 			// Preload issue tree
 			$.get(BASE + '/user/{{ @this_user.username }}/tree', {}, function(data) {
 				$('#user-tree').html(data);
-			}).error(function() {
+			}).fail(function() {
 				$('#user-tree').empty().append($('<p />').addClass('text-center text-danger').text('{{ @dict.error.404_text }}'));
 			});
 

File diff suppressed because it is too large
+ 0 - 21
css/bootstrap-amelia.min.css


File diff suppressed because it is too large
+ 9 - 3
css/bootstrap-cerulean.min.css


File diff suppressed because it is too large
+ 0 - 26
css/bootstrap-cosmo.min.css


File diff suppressed because it is too large
+ 0 - 32
css/bootstrap-cupid.min.css


File diff suppressed because it is too large
+ 29 - 7
css/bootstrap-cyborg.min.css


File diff suppressed because it is too large
+ 0 - 38
css/bootstrap-darkly.min.css


File diff suppressed because it is too large
+ 0 - 29
css/bootstrap-flatly.min.css


+ 42 - 0
css/bootstrap-geo.css

@@ -5370,6 +5370,7 @@ body {
 	}
 }
 
+/* Backported features from 3.2 and 3.3 */
 .embed-responsive{
 	position:relative;
 	display:block;
@@ -5392,7 +5393,48 @@ body {
 .embed-responsive.embed-responsive-4by3{
 	padding-bottom:75%
 }
+.media {
+	margin-top: 15px;
+}
+.media:first-child {
+	margin-top: 0;
+}
+.media,
+.media-body {
+	zoom: 1;
+	overflow: hidden;
+}
+.media-body {
+	width: 10000px;
+}
+.media-object {
+	display: block;
+}
+.media-object.img-thumbnail {
+	max-width: none;
+}
+.media-right,
+.media > .pull-right {
+	padding-left: 10px;
+}
+.media-left,
+.media > .pull-left {
+	padding-right: 10px;
+}
+.media-left,
+.media-right,
+.media-body {
+	display: table-cell;
+	vertical-align: top;
+}
+.media-middle {
+	vertical-align: middle;
+}
+.media-bottom {
+	vertical-align: bottom;
+}
 
+/* Phproject additions */
 #taskboard .completed .card {
 	background-image: url('../img/geo/seamlessfire-web.gif');
 }

File diff suppressed because it is too large
+ 0 - 46
css/bootstrap-google.css


File diff suppressed because it is too large
+ 0 - 20
css/bootstrap-journal.min.css


File diff suppressed because it is too large
+ 0 - 16
css/bootstrap-lumen.min.css


File diff suppressed because it is too large
+ 0 - 23
css/bootstrap-paper.min.css


File diff suppressed because it is too large
+ 55 - 5752
css/bootstrap-phproject-dark.css


File diff suppressed because it is too large
+ 17 - 5644
css/bootstrap-phproject.css


File diff suppressed because it is too large
+ 0 - 20
css/bootstrap-readable.min.css


File diff suppressed because it is too large
+ 10 - 5
css/bootstrap-sandstone.min.css


File diff suppressed because it is too large
+ 0 - 24
css/bootstrap-shamrock.min.css


File diff suppressed because it is too large
+ 0 - 21
css/bootstrap-simplex.min.css


File diff suppressed because it is too large
+ 24 - 4
css/bootstrap-slate.min.css


File diff suppressed because it is too large
+ 10 - 5
css/bootstrap-spacelab.min.css


File diff suppressed because it is too large
+ 0 - 37
css/bootstrap-superhero.min.css


+ 0 - 45
css/bootstrap-tagsinput.css

@@ -1,45 +0,0 @@
-.bootstrap-tagsinput {
-  background-color: #fff;
-  border: 1px solid #ccc;
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  display: inline-block;
-  padding: 4px 6px;
-  margin-bottom: 10px;
-  color: #555;
-  vertical-align: middle;
-  border-radius: 4px;
-  max-width: 100%;
-  line-height: 22px;
-}
-.bootstrap-tagsinput input {
-  border: none;
-  box-shadow: none;
-  outline: none;
-  background-color: transparent;
-  padding: 0;
-  margin: 0;
-  width: auto !important;
-  max-width: inherit;
-}
-.bootstrap-tagsinput input:focus {
-  border: none;
-  box-shadow: none;
-}
-.bootstrap-tagsinput .tag {
-  margin-right: 2px;
-  color: white;
-}
-.bootstrap-tagsinput .tag [data-role="remove"] {
-  margin-left: 8px;
-  cursor: pointer;
-}
-.bootstrap-tagsinput .tag [data-role="remove"]:after {
-  content: "\00d7";
-  padding: 0px 2px;
-}
-.bootstrap-tagsinput .tag [data-role="remove"]:hover {
-  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
-}
-.bootstrap-tagsinput .tag [data-role="remove"]:hover:active {
-  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
-}

File diff suppressed because it is too large
+ 0 - 1
css/bootstrap-theme.css.map


File diff suppressed because it is too large
+ 4 - 5
css/bootstrap-theme.min.css


File diff suppressed because it is too large
+ 1 - 0
css/bootstrap-theme.min.css.map


+ 3 - 3
css/bootstrap-thrive-2015-dark.css

@@ -3957,7 +3957,7 @@ fieldset[disabled] .navbar-inverse .btn-link:focus {
 .pagination > li > span:focus {
 	z-index: 2;
 	color: #ffffff;
-	background-color: #00dba3;
+	background-color: #95ce69;
 	border-color: transparent;
 }
 .pagination > .active > a,
@@ -3968,7 +3968,7 @@ fieldset[disabled] .navbar-inverse .btn-link:focus {
 .pagination > .active > span:focus {
 	z-index: 3;
 	color: #ffffff;
-	background-color: #00dba3;
+	background-color: #95ce69;
 	border-color: transparent;
 	cursor: default;
 }
@@ -3979,7 +3979,7 @@ fieldset[disabled] .navbar-inverse .btn-link:focus {
 .pagination > .disabled > a:hover,
 .pagination > .disabled > a:focus {
 	color: #ffffff;
-	background-color: #007053;
+	background-color: #4a7727;
 	border-color: transparent;
 	cursor: not-allowed;
 }

+ 66 - 618
css/bootstrap-thrive.css

@@ -1,4 +1,4 @@
-@import url("//fonts.googleapis.com/css?family=Open+Sans:400,700,400italic");
+@import url("https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic");
 
 /*!
  * Bootswatch v3.1.0
@@ -1915,622 +1915,6 @@ input[type="submit"].btn-block, input[type="reset"].btn-block, input[type="butto
 	-webkit-transition: height 0.35s ease;
 	transition: height 0.35s ease;
 }
-@font-face {
-	font-family:'Glyphicons Halflings';
-	src: url('../fonts/glyphicons-halflings-regular.eot');
-	src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
-}
-.glyphicon {
-	position: relative;
-	top: 1px;
-	display: inline-block;
-	font-family:'Glyphicons Halflings';
-	font-style: normal;
-	font-weight: normal;
-	line-height: 1;
-	-webkit-font-smoothing: antialiased;
-	-moz-osx-font-smoothing: grayscale;
-}
-.glyphicon-asterisk:before {
-	content:"\2a";
-}
-.glyphicon-plus:before {
-	content:"\2b";
-}
-.glyphicon-euro:before {
-	content:"\20ac";
-}
-.glyphicon-minus:before {
-	content:"\2212";
-}
-.glyphicon-cloud:before {
-	content:"\2601";
-}
-.glyphicon-envelope:before {
-	content:"\2709";
-}
-.glyphicon-pencil:before {
-	content:"\270f";
-}
-.glyphicon-glass:before {
-	content:"\e001";
-}
-.glyphicon-music:before {
-	content:"\e002";
-}
-.glyphicon-search:before {
-	content:"\e003";
-}
-.glyphicon-heart:before {
-	content:"\e005";
-}
-.glyphicon-star:before {
-	content:"\e006";
-}
-.glyphicon-star-empty:before {
-	content:"\e007";
-}
-.glyphicon-user:before {
-	content:"\e008";
-}
-.glyphicon-film:before {
-	content:"\e009";
-}
-.glyphicon-th-large:before {
-	content:"\e010";
-}
-.glyphicon-th:before {
-	content:"\e011";
-}
-.glyphicon-th-list:before {
-	content:"\e012";
-}
-.glyphicon-ok:before {
-	content:"\e013";
-}
-.glyphicon-remove:before {
-	content:"\e014";
-}
-.glyphicon-zoom-in:before {
-	content:"\e015";
-}
-.glyphicon-zoom-out:before {
-	content:"\e016";
-}
-.glyphicon-off:before {
-	content:"\e017";
-}
-.glyphicon-signal:before {
-	content:"\e018";
-}
-.glyphicon-cog:before {
-	content:"\e019";
-}
-.glyphicon-trash:before {
-	content:"\e020";
-}
-.glyphicon-home:before {
-	content:"\e021";
-}
-.glyphicon-file:before {
-	content:"\e022";
-}
-.glyphicon-time:before {
-	content:"\e023";
-}
-.glyphicon-road:before {
-	content:"\e024";
-}
-.glyphicon-download-alt:before {
-	content:"\e025";
-}
-.glyphicon-download:before {
-	content:"\e026";
-}
-.glyphicon-upload:before {
-	content:"\e027";
-}
-.glyphicon-inbox:before {
-	content:"\e028";
-}
-.glyphicon-play-circle:before {
-	content:"\e029";
-}
-.glyphicon-repeat:before {
-	content:"\e030";
-}
-.glyphicon-refresh:before {
-	content:"\e031";
-}
-.glyphicon-list-alt:before {
-	content:"\e032";
-}
-.glyphicon-lock:before {
-	content:"\e033";
-}
-.glyphicon-flag:before {
-	content:"\e034";
-}
-.glyphicon-headphones:before {
-	content:"\e035";
-}
-.glyphicon-volume-off:before {
-	content:"\e036";
-}
-.glyphicon-volume-down:before {
-	content:"\e037";
-}
-.glyphicon-volume-up:before {
-	content:"\e038";
-}
-.glyphicon-qrcode:before {
-	content:"\e039";
-}
-.glyphicon-barcode:before {
-	content:"\e040";
-}
-.glyphicon-tag:before {
-	content:"\e041";
-}
-.glyphicon-tags:before {
-	content:"\e042";
-}
-.glyphicon-book:before {
-	content:"\e043";
-}
-.glyphicon-bookmark:before {
-	content:"\e044";
-}
-.glyphicon-print:before {
-	content:"\e045";
-}
-.glyphicon-camera:before {
-	content:"\e046";
-}
-.glyphicon-font:before {
-	content:"\e047";
-}
-.glyphicon-bold:before {
-	content:"\e048";
-}
-.glyphicon-italic:before {
-	content:"\e049";
-}
-.glyphicon-text-height:before {
-	content:"\e050";
-}
-.glyphicon-text-width:before {
-	content:"\e051";
-}
-.glyphicon-align-left:before {
-	content:"\e052";
-}
-.glyphicon-align-center:before {
-	content:"\e053";
-}
-.glyphicon-align-right:before {
-	content:"\e054";
-}
-.glyphicon-align-justify:before {
-	content:"\e055";
-}
-.glyphicon-list:before {
-	content:"\e056";
-}
-.glyphicon-indent-left:before {
-	content:"\e057";
-}
-.glyphicon-indent-right:before {
-	content:"\e058";
-}
-.glyphicon-facetime-video:before {
-	content:"\e059";
-}
-.glyphicon-picture:before {
-	content:"\e060";
-}
-.glyphicon-map-marker:before {
-	content:"\e062";
-}
-.glyphicon-adjust:before {
-	content:"\e063";
-}
-.glyphicon-tint:before {
-	content:"\e064";
-}
-.glyphicon-edit:before {
-	content:"\e065";
-}
-.glyphicon-share:before {
-	content:"\e066";
-}
-.glyphicon-check:before {
-	content:"\e067";
-}
-.glyphicon-move:before {
-	content:"\e068";
-}
-.glyphicon-step-backward:before {
-	content:"\e069";
-}
-.glyphicon-fast-backward:before {
-	content:"\e070";
-}
-.glyphicon-backward:before {
-	content:"\e071";
-}
-.glyphicon-play:before {
-	content:"\e072";
-}
-.glyphicon-pause:before {
-	content:"\e073";
-}
-.glyphicon-stop:before {
-	content:"\e074";
-}
-.glyphicon-forward:before {
-	content:"\e075";
-}
-.glyphicon-fast-forward:before {
-	content:"\e076";
-}
-.glyphicon-step-forward:before {
-	content:"\e077";
-}
-.glyphicon-eject:before {
-	content:"\e078";
-}
-.glyphicon-chevron-left:before {
-	content:"\e079";
-}
-.glyphicon-chevron-right:before {
-	content:"\e080";
-}
-.glyphicon-plus-sign:before {
-	content:"\e081";
-}
-.glyphicon-minus-sign:before {
-	content:"\e082";
-}
-.glyphicon-remove-sign:before {
-	content:"\e083";
-}
-.glyphicon-ok-sign:before {
-	content:"\e084";
-}
-.glyphicon-question-sign:before {
-	content:"\e085";
-}
-.glyphicon-info-sign:before {
-	content:"\e086";
-}
-.glyphicon-screenshot:before {
-	content:"\e087";
-}
-.glyphicon-remove-circle:before {
-	content:"\e088";
-}
-.glyphicon-ok-circle:before {
-	content:"\e089";
-}
-.glyphicon-ban-circle:before {
-	content:"\e090";
-}
-.glyphicon-arrow-left:before {
-	content:"\e091";
-}
-.glyphicon-arrow-right:before {
-	content:"\e092";
-}
-.glyphicon-arrow-up:before {
-	content:"\e093";
-}
-.glyphicon-arrow-down:before {
-	content:"\e094";
-}
-.glyphicon-share-alt:before {
-	content:"\e095";
-}
-.glyphicon-resize-full:before {
-	content:"\e096";
-}
-.glyphicon-resize-small:before {
-	content:"\e097";
-}
-.glyphicon-exclamation-sign:before {
-	content:"\e101";
-}
-.glyphicon-gift:before {
-	content:"\e102";
-}
-.glyphicon-leaf:before {
-	content:"\e103";
-}
-.glyphicon-fire:before {
-	content:"\e104";
-}
-.glyphicon-eye-open:before {
-	content:"\e105";
-}
-.glyphicon-eye-close:before {
-	content:"\e106";
-}
-.glyphicon-warning-sign:before {
-	content:"\e107";
-}
-.glyphicon-plane:before {
-	content:"\e108";
-}
-.glyphicon-calendar:before {
-	content:"\e109";
-}
-.glyphicon-random:before {
-	content:"\e110";
-}
-.glyphicon-comment:before {
-	content:"\e111";
-}
-.glyphicon-magnet:before {
-	content:"\e112";
-}
-.glyphicon-chevron-up:before {
-	content:"\e113";
-}
-.glyphicon-chevron-down:before {
-	content:"\e114";
-}
-.glyphicon-retweet:before {
-	content:"\e115";
-}
-.glyphicon-shopping-cart:before {
-	content:"\e116";
-}
-.glyphicon-folder-close:before {
-	content:"\e117";
-}
-.glyphicon-folder-open:before {
-	content:"\e118";
-}
-.glyphicon-resize-vertical:before {
-	content:"\e119";
-}
-.glyphicon-resize-horizontal:before {
-	content:"\e120";
-}
-.glyphicon-hdd:before {
-	content:"\e121";
-}
-.glyphicon-bullhorn:before {
-	content:"\e122";
-}
-.glyphicon-bell:before {
-	content:"\e123";
-}
-.glyphicon-certificate:before {
-	content:"\e124";
-}
-.glyphicon-thumbs-up:before {
-	content:"\e125";
-}
-.glyphicon-thumbs-down:before {
-	content:"\e126";
-}
-.glyphicon-hand-right:before {
-	content:"\e127";
-}
-.glyphicon-hand-left:before {
-	content:"\e128";
-}
-.glyphicon-hand-up:before {
-	content:"\e129";
-}
-.glyphicon-hand-down:before {
-	content:"\e130";
-}
-.glyphicon-circle-arrow-right:before {
-	content:"\e131";
-}
-.glyphicon-circle-arrow-left:before {
-	content:"\e132";
-}
-.glyphicon-circle-arrow-up:before {
-	content:"\e133";
-}
-.glyphicon-circle-arrow-down:before {
-	content:"\e134";
-}
-.glyphicon-globe:before {
-	content:"\e135";
-}
-.glyphicon-wrench:before {
-	content:"\e136";
-}
-.glyphicon-tasks:before {
-	content:"\e137";
-}
-.glyphicon-filter:before {
-	content:"\e138";
-}
-.glyphicon-briefcase:before {
-	content:"\e139";
-}
-.glyphicon-fullscreen:before {
-	content:"\e140";
-}
-.glyphicon-dashboard:before {
-	content:"\e141";
-}
-.glyphicon-paperclip:before {
-	content:"\e142";
-}
-.glyphicon-heart-empty:before {
-	content:"\e143";
-}
-.glyphicon-link:before {
-	content:"\e144";
-}
-.glyphicon-phone:before {
-	content:"\e145";
-}
-.glyphicon-pushpin:before {
-	content:"\e146";
-}
-.glyphicon-usd:before {
-	content:"\e148";
-}
-.glyphicon-gbp:before {
-	content:"\e149";
-}
-.glyphicon-sort:before {
-	content:"\e150";
-}
-.glyphicon-sort-by-alphabet:before {
-	content:"\e151";
-}
-.glyphicon-sort-by-alphabet-alt:before {
-	content:"\e152";
-}
-.glyphicon-sort-by-order:before {
-	content:"\e153";
-}
-.glyphicon-sort-by-order-alt:before {
-	content:"\e154";
-}
-.glyphicon-sort-by-attributes:before {
-	content:"\e155";
-}
-.glyphicon-sort-by-attributes-alt:before {
-	content:"\e156";
-}
-.glyphicon-unchecked:before {
-	content:"\e157";
-}
-.glyphicon-expand:before {
-	content:"\e158";
-}
-.glyphicon-collapse-down:before {
-	content:"\e159";
-}
-.glyphicon-collapse-up:before {
-	content:"\e160";
-}
-.glyphicon-log-in:before {
-	content:"\e161";
-}
-.glyphicon-flash:before {
-	content:"\e162";
-}
-.glyphicon-log-out:before {
-	content:"\e163";
-}
-.glyphicon-new-window:before {
-	content:"\e164";
-}
-.glyphicon-record:before {
-	content:"\e165";
-}
-.glyphicon-save:before {
-	content:"\e166";
-}
-.glyphicon-open:before {
-	content:"\e167";
-}
-.glyphicon-saved:before {
-	content:"\e168";
-}
-.glyphicon-import:before {
-	content:"\e169";
-}
-.glyphicon-export:before {
-	content:"\e170";
-}
-.glyphicon-send:before {
-	content:"\e171";
-}
-.glyphicon-floppy-disk:before {
-	content:"\e172";
-}
-.glyphicon-floppy-saved:before {
-	content:"\e173";
-}
-.glyphicon-floppy-remove:before {
-	content:"\e174";
-}
-.glyphicon-floppy-save:before {
-	content:"\e175";
-}
-.glyphicon-floppy-open:before {
-	content:"\e176";
-}
-.glyphicon-credit-card:before {
-	content:"\e177";
-}
-.glyphicon-transfer:before {
-	content:"\e178";
-}
-.glyphicon-cutlery:before {
-	content:"\e179";
-}
-.glyphicon-header:before {
-	content:"\e180";
-}
-.glyphicon-compressed:before {
-	content:"\e181";
-}
-.glyphicon-earphone:before {
-	content:"\e182";
-}
-.glyphicon-phone-alt:before {
-	content:"\e183";
-}
-.glyphicon-tower:before {
-	content:"\e184";
-}
-.glyphicon-stats:before {
-	content:"\e185";
-}
-.glyphicon-sd-video:before {
-	content:"\e186";
-}
-.glyphicon-hd-video:before {
-	content:"\e187";
-}
-.glyphicon-subtitles:before {
-	content:"\e188";
-}
-.glyphicon-sound-stereo:before {
-	content:"\e189";
-}
-.glyphicon-sound-dolby:before {
-	content:"\e190";
-}
-.glyphicon-sound-5-1:before {
-	content:"\e191";
-}
-.glyphicon-sound-6-1:before {
-	content:"\e192";
-}
-.glyphicon-sound-7-1:before {
-	content:"\e193";
-}
-.glyphicon-copyright-mark:before {
-	content:"\e194";
-}
-.glyphicon-registration-mark:before {
-	content:"\e195";
-}
-.glyphicon-cloud-download:before {
-	content:"\e197";
-}
-.glyphicon-cloud-upload:before {
-	content:"\e198";
-}
-.glyphicon-tree-conifer:before {
-	content:"\e199";
-}
-.glyphicon-tree-deciduous:before {
-	content:"\e200";
-}
 .caret {
 	display: inline-block;
 	width: 0;
@@ -5093,8 +4477,71 @@ button.close {
 	position: fixed;
 }
 
-/* Overrides */
+/* Backported features from 3.2 and 3.3 */
+.embed-responsive{
+	position:relative;
+	display:block;
+	height:0;
+	padding:0;
+	overflow:hidden
+}
+.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object{
+	position:absolute;
+	top:0;
+	bottom:0;
+	left:0;
+	width:100%;
+	height:100%;
+	border:0
+}
+.embed-responsive.embed-responsive-16by9{
+	padding-bottom:56.25%
+}
+.embed-responsive.embed-responsive-4by3{
+	padding-bottom:75%
+}
+.media {
+	margin-top: 15px;
+}
+.media:first-child {
+	margin-top: 0;
+}
+.media,
+.media-body {
+	zoom: 1;
+	overflow: hidden;
+}
+.media-body {
+	width: 10000px;
+}
+.media-object {
+	display: block;
+}
+.media-object.img-thumbnail {
+	max-width: none;
+}
+.media-right,
+.media > .pull-right {
+	padding-left: 10px;
+}
+.media-left,
+.media > .pull-left {
+	padding-right: 10px;
+}
+.media-left,
+.media-right,
+.media-body {
+	display: table-cell;
+	vertical-align: top;
+}
+.media-middle {
+	vertical-align: middle;
+}
+.media-bottom {
+	vertical-align: bottom;
+}
 
+/* Overrides */
 h3{color:#4AB3D1;}
 a{transition:color .25s;}
 
@@ -5125,6 +4572,7 @@ a{transition:color .25s;}
 	border-bottom-color: #eee;
 }
 
+/* Phproject Additions */
 #backlog .list-group-item {
 	margin: 3px 0;
 	box-shadow: -1px 0px 2px rgba(0, 0, 0, 0.1);

File diff suppressed because it is too large
+ 0 - 22
css/bootstrap-united.min.css


File diff suppressed because it is too large
+ 0 - 41
css/bootstrap-yeti.min.css


File diff suppressed because it is too large
+ 4 - 3
css/bootstrap.min.css


File diff suppressed because it is too large
+ 1 - 0
css/bootstrap.min.css.map


+ 1 - 1
db/16.02.04-1.sql

@@ -8,4 +8,4 @@ CREATE TABLE `issue_backlog`(
 ) ENGINE=INNODB CHARSET=utf8;
 
 # Update version
-UPDATE `config` SET `value` = '16.02.04-1' WHERE `attribute` = 'version';
+UPDATE `config` SET `value` = '16.02.04.1' WHERE `attribute` = 'version';

+ 17 - 0
db/16.11.29.1.sql

@@ -0,0 +1,17 @@
+# Reset user theme selection for removed themes
+UPDATE user SET theme = NULL WHERE
+	theme = 'css/bootstrap-amelia.min.css'
+	OR theme = 'css/bootstrap-cosmo.min.css'
+	OR theme = 'css/bootstrap-cupid.min.css'
+	OR theme = 'css/bootstrap-google.css'
+	OR theme = 'css/bootstrap-journal.min.css'
+	OR theme = 'css/bootstrap-lumen.min.css'
+	OR theme = 'css/bootstrap-paper.min.css'
+	OR theme = 'css/bootstrap-readable.min.css'
+	OR theme = 'css/bootstrap-shamrock.min.css'
+	OR theme = 'css/bootstrap-simplex.min.css'
+	OR theme = 'css/bootstrap-superhero.min.css'
+	OR theme = 'css/bootstrap-united.min.css'
+	OR theme = 'css/bootstrap-yeti.min.css';
+
+UPDATE `config` SET `value` = '16.11.29.1' WHERE `attribute` = 'version';

+ 0 - 503
js/bootstrap-tagsinput.js

@@ -1,503 +0,0 @@
-(function ($) {
-  "use strict";
-
-  var defaultOptions = {
-    tagClass: function(item) {
-      return 'label label-info';
-    },
-    itemValue: function(item) {
-      return item ? item.toString() : item;
-    },
-    itemText: function(item) {
-      return this.itemValue(item);
-    },
-    freeInput: true,
-    maxTags: undefined,
-    confirmKeys: [13],
-    onTagExists: function(item, $tag) {
-      $tag.hide().fadeIn();
-    }
-  };
-
-  /**
-   * Constructor function
-   */
-  function TagsInput(element, options) {
-    this.itemsArray = [];
-
-    this.$element = $(element);
-    this.$element.hide();
-
-    this.isSelect = (element.tagName === 'SELECT');
-    this.multiple = (this.isSelect && element.hasAttribute('multiple'));
-    this.objectItems = options && options.itemValue;
-    this.placeholderText = element.hasAttribute('placeholder') ? this.$element.attr('placeholder') : '';
-    this.inputSize = Math.max(1, this.placeholderText.length);
-
-    this.$container = $('<div class="bootstrap-tagsinput"></div>');
-    this.$input = $('<input size="' + this.inputSize + '" type="text" placeholder="' + this.placeholderText + '"/>').appendTo(this.$container);
-
-    this.$element.after(this.$container);
-
-    this.build(options);
-  }
-
-  TagsInput.prototype = {
-    constructor: TagsInput,
-
-    /**
-     * Adds the given item as a new tag. Pass true to dontPushVal to prevent
-     * updating the elements val()
-     */
-    add: function(item, dontPushVal) {
-      var self = this;
-
-      if (self.options.maxTags && self.itemsArray.length >= self.options.maxTags)
-        return;
-
-      // Ignore falsey values, except false
-      if (item !== false && !item)
-        return;
-
-      // Throw an error when trying to add an object while the itemValue option was not set
-      if (typeof item === "object" && !self.objectItems)
-        throw("Can't add objects when itemValue option is not set");
-
-      // Ignore strings only containg whitespace
-      if (item.toString().match(/^\s*$/))
-        return;
-
-      // If SELECT but not multiple, remove current tag
-      if (self.isSelect && !self.multiple && self.itemsArray.length > 0)
-        self.remove(self.itemsArray[0]);
-
-      if (typeof item === "string" && this.$element[0].tagName === 'INPUT') {
-        var items = item.split(',');
-        if (items.length > 1) {
-          for (var i = 0; i < items.length; i++) {
-            this.add(items[i], true);
-          }
-
-          if (!dontPushVal)
-            self.pushVal();
-          return;
-        }
-      }
-
-      var itemValue = self.options.itemValue(item),
-          itemText = self.options.itemText(item),
-          tagClass = self.options.tagClass(item);
-
-      // Ignore items allready added
-      var existing = $.grep(self.itemsArray, function(item) { return self.options.itemValue(item) === itemValue; } )[0];
-      if (existing) {
-        // Invoke onTagExists
-        if (self.options.onTagExists) {
-          var $existingTag = $(".tag", self.$container).filter(function() { return $(this).data("item") === existing; });
-          self.options.onTagExists(item, $existingTag);
-        }
-        return;
-      }
-
-      // register item in internal array and map
-      self.itemsArray.push(item);
-
-      // add a tag element
-      var $tag = $('<span class="tag ' + htmlEncode(tagClass) + '">' + htmlEncode(itemText) + '<span data-role="remove"></span></span>');
-      $tag.data('item', item);
-      self.findInputWrapper().before($tag);
-      $tag.after(' ');
-
-      // add <option /> if item represents a value not present in one of the <select />'s options
-      if (self.isSelect && !$('option[value="' + escape(itemValue) + '"]',self.$element)[0]) {
-        var $option = $('<option selected>' + htmlEncode(itemText) + '</option>');
-        $option.data('item', item);
-        $option.attr('value', itemValue);
-        self.$element.append($option);
-      }
-
-      if (!dontPushVal)
-        self.pushVal();
-
-      // Add class when reached maxTags
-      if (self.options.maxTags === self.itemsArray.length)
-        self.$container.addClass('bootstrap-tagsinput-max');
-
-      self.$element.trigger($.Event('itemAdded', { item: item }));
-    },
-
-    /**
-     * Removes the given item. Pass true to dontPushVal to prevent updating the
-     * elements val()
-     */
-    remove: function(item, dontPushVal) {
-      var self = this;
-
-      if (self.objectItems) {
-        if (typeof item === "object")
-          item = $.grep(self.itemsArray, function(other) { return self.options.itemValue(other) ==  self.options.itemValue(item); } )[0];
-        else
-          item = $.grep(self.itemsArray, function(other) { return self.options.itemValue(other) ==  item; } )[0];
-      }
-
-      if (item) {
-        $('.tag', self.$container).filter(function() { return $(this).data('item') === item; }).remove();
-        $('option', self.$element).filter(function() { return $(this).data('item') === item; }).remove();
-        self.itemsArray.splice($.inArray(item, self.itemsArray), 1);
-      }
-
-      if (!dontPushVal)
-        self.pushVal();
-
-      // Remove class when reached maxTags
-      if (self.options.maxTags > self.itemsArray.length)
-        self.$container.removeClass('bootstrap-tagsinput-max');
-
-      self.$element.trigger($.Event('itemRemoved',  { item: item }));
-    },
-
-    /**
-     * Removes all items
-     */
-    removeAll: function() {
-      var self = this;
-
-      $('.tag', self.$container).remove();
-      $('option', self.$element).remove();
-
-      while(self.itemsArray.length > 0)
-        self.itemsArray.pop();
-
-      self.pushVal();
-
-      if (self.options.maxTags && !this.isEnabled())
-        this.enable();
-    },
-
-    /**
-     * Refreshes the tags so they match the text/value of their corresponding
-     * item.
-     */
-    refresh: function() {
-      var self = this;
-      $('.tag', self.$container).each(function() {
-        var $tag = $(this),
-            item = $tag.data('item'),
-            itemValue = self.options.itemValue(item),
-            itemText = self.options.itemText(item),
-            tagClass = self.options.tagClass(item);
-
-          // Update tag's class and inner text
-          $tag.attr('class', null);
-          $tag.addClass('tag ' + htmlEncode(tagClass));
-          $tag.contents().filter(function() {
-            return this.nodeType == 3;
-          })[0].nodeValue = htmlEncode(itemText);
-
-          if (self.isSelect) {
-            var option = $('option', self.$element).filter(function() { return $(this).data('item') === item; });
-            option.attr('value', itemValue);
-          }
-      });
-    },
-
-    /**
-     * Returns the items added as tags
-     */
-    items: function() {
-      return this.itemsArray;
-    },
-
-    /**
-     * Assembly value by retrieving the value of each item, and set it on the
-     * element. 
-     */
-    pushVal: function() {
-      var self = this,
-          val = $.map(self.items(), function(item) {
-            return self.options.itemValue(item).toString();
-          });
-
-      self.$element.val(val, true).trigger('change');
-    },
-
-    /**
-     * Initializes the tags input behaviour on the element
-     */
-    build: function(options) {
-      var self = this;
-
-      self.options = $.extend({}, defaultOptions, options);
-      var typeahead = self.options.typeahead || {};
-
-      // When itemValue is set, freeInput should always be false
-      if (self.objectItems)
-        self.options.freeInput = false;
-
-      makeOptionItemFunction(self.options, 'itemValue');
-      makeOptionItemFunction(self.options, 'itemText');
-      makeOptionItemFunction(self.options, 'tagClass');
-
-      // for backwards compatibility, self.options.source is deprecated
-      if (self.options.source)
-        typeahead.source = self.options.source;
-
-      if (typeahead.source && $.fn.typeahead) {
-        makeOptionFunction(typeahead, 'source');
-
-        self.$input.typeahead({
-          source: function (query, process) {
-            function processItems(items) {
-              var texts = [];
-
-              for (var i = 0; i < items.length; i++) {
-                var text = self.options.itemText(items[i]);
-                map[text] = items[i];
-                texts.push(text);
-              }
-              process(texts);
-            }
-
-            this.map = {};
-            var map = this.map,
-                data = typeahead.source(query);
-
-            if ($.isFunction(data.success)) {
-              // support for Angular promises
-              data.success(processItems);
-            } else {
-              // support for functions and jquery promises
-              $.when(data)
-               .then(processItems);
-            }
-          },
-          updater: function (text) {
-            self.add(this.map[text]);
-          },
-          matcher: function (text) {
-            return (text.toLowerCase().indexOf(this.query.trim().toLowerCase()) !== -1);
-          },
-          sorter: function (texts) {
-            return texts.sort();
-          },
-          highlighter: function (text) {
-            var regex = new RegExp( '(' + this.query + ')', 'gi' );
-            return text.replace( regex, "<strong>$1</strong>" );
-          }
-        });
-      }
-
-      self.$container.on('click', $.proxy(function(event) {
-        self.$input.focus();
-      }, self));
-
-      self.$container.on('keydown', 'input', $.proxy(function(event) {
-        var $input = $(event.target),
-            $inputWrapper = self.findInputWrapper();
-
-        switch (event.which) {
-          // BACKSPACE
-          case 8:
-            if (doGetCaretPosition($input[0]) === 0) {
-              var prev = $inputWrapper.prev();
-              if (prev) {
-                self.remove(prev.data('item'));
-              }
-            }
-            break;
-
-          // DELETE
-          case 46:
-            if (doGetCaretPosition($input[0]) === 0) {
-              var next = $inputWrapper.next();
-              if (next) {
-                self.remove(next.data('item'));
-              }
-            }
-            break;
-
-          // LEFT ARROW
-          case 37:
-            // Try to move the input before the previous tag
-            var $prevTag = $inputWrapper.prev();
-            if ($input.val().length === 0 && $prevTag[0]) {
-              $prevTag.before($inputWrapper);
-              $input.focus();
-            }
-            break;
-          // RIGHT ARROW
-          case 39:
-            // Try to move the input after the next tag
-            var $nextTag = $inputWrapper.next();
-            if ($input.val().length === 0 && $nextTag[0]) {
-              $nextTag.after($inputWrapper);
-              $input.focus();
-            }
-            break;
-         default:
-            // When key corresponds one of the confirmKeys, add current input
-            // as a new tag
-            if (self.options.freeInput && $.inArray(event.which, self.options.confirmKeys) >= 0) {
-              self.add($input.val());
-              $input.val('');
-              event.preventDefault();
-            }
-        }
-
-        // Reset internal input's size
-        $input.attr('size', Math.max(this.inputSize, $input.val().length));
-      }, self));
-
-      // Remove icon clicked
-      self.$container.on('click', '[data-role=remove]', $.proxy(function(event) {
-        self.remove($(event.target).closest('.tag').data('item'));
-      }, self));
-
-      // Only add existing value as tags when using strings as tags
-      if (self.options.itemValue === defaultOptions.itemValue) {
-        if (self.$element[0].tagName === 'INPUT') {
-            self.add(self.$element.val());
-        } else {
-          $('option', self.$element).each(function() {
-            self.add($(this).attr('value'), true);
-          });
-        }
-      }
-    },
-
-    /**
-     * Removes all tagsinput behaviour and unregsiter all event handlers
-     */
-    destroy: function() {
-      var self = this;
-
-      // Unbind events
-      self.$container.off('keypress', 'input');
-      self.$container.off('click', '[role=remove]');
-
-      self.$container.remove();
-      self.$element.removeData('tagsinput');
-      self.$element.show();
-    },
-
-    /**
-     * Sets focus on the tagsinput 
-     */
-    focus: function() {
-      this.$input.focus();
-    },
-
-    /**
-     * Returns the internal input element
-     */
-    input: function() {
-      return this.$input;
-    },
-
-    /**
-     * Returns the element which is wrapped around the internal input. This
-     * is normally the $container, but typeahead.js moves the $input element.
-     */
-    findInputWrapper: function() {
-      var elt = this.$input[0],
-          container = this.$container[0];
-      while(elt && elt.parentNode !== container)
-        elt = elt.parentNode;
-
-      return $(elt);
-    }
-  };
-
-  /**
-   * Register JQuery plugin
-   */
-  $.fn.tagsinput = function(arg1, arg2) {
-    var results = [];
-
-    this.each(function() {
-      var tagsinput = $(this).data('tagsinput');
-
-      // Initialize a new tags input
-      if (!tagsinput) {
-        tagsinput = new TagsInput(this, arg1);
-        $(this).data('tagsinput', tagsinput);
-        results.push(tagsinput);
-
-        if (this.tagName === 'SELECT') {
-          $('option', $(this)).attr('selected', 'selected');
-        }
-
-        // Init tags from $(this).val()
-        $(this).val($(this).val());
-      } else {
-        // Invoke function on existing tags input
-        var retVal = tagsinput[arg1](arg2);
-        if (retVal !== undefined)
-          results.push(retVal);
-      }
-    });
-
-    if ( typeof arg1 == 'string') {
-      // Return the results from the invoked function calls
-      return results.length > 1 ? results : results[0];
-    } else {
-      return results;
-    }
-  };
-
-  $.fn.tagsinput.Constructor = TagsInput;
-  
-  /**
-   * Most options support both a string or number as well as a function as 
-   * option value. This function makes sure that the option with the given
-   * key in the given options is wrapped in a function
-   */
-  function makeOptionItemFunction(options, key) {
-    if (typeof options[key] !== 'function') {
-      var propertyName = options[key];
-      options[key] = function(item) { return item[propertyName]; };
-    }
-  }
-  function makeOptionFunction(options, key) {
-    if (typeof options[key] !== 'function') {
-      var value = options[key];
-      options[key] = function() { return value; };
-    }
-  }
-  /**
-   * HtmlEncodes the given value
-   */
-  var htmlEncodeContainer = $('<div />');
-  function htmlEncode(value) {
-    if (value) {
-      return htmlEncodeContainer.text(value).html();
-    } else {
-      return '';
-    }
-  }
-
-  /**
-   * Returns the position of the caret in the given input field
-   * http://flightschool.acylt.com/devnotes/caret-position-woes/
-   */
-  function doGetCaretPosition(oField) {
-    var iCaretPos = 0;
-    if (document.selection) {
-      oField.focus ();
-      var oSel = document.selection.createRange();
-      oSel.moveStart ('character', -oField.value.length);
-      iCaretPos = oSel.text.length;
-    } else if (oField.selectionStart || oField.selectionStart == '0') {
-      iCaretPos = oField.selectionStart;
-    }
-    return (iCaretPos);
-  }
-
-  /**
-   * Initialize tagsinput behaviour on inputs and selects which have
-   * data-role=tagsinput
-   */
-  $(function() {
-    $("input[data-role=tagsinput], select[multiple][data-role=tagsinput]").tagsinput();
-  });
-})(window.jQuery);

File diff suppressed because it is too large
+ 0 - 8
js/bootstrap-tagsinput.min.js


File diff suppressed because it is too large
+ 0 - 1
js/bootstrap-tagsinput.min.js.map


File diff suppressed because it is too large
+ 7 - 6
js/bootstrap.min.js


+ 0 - 1
js/bulkissues.js

@@ -1 +0,0 @@
-/* globals $ datepickerLanguage */

File diff suppressed because it is too large
+ 0 - 5
js/jquery-1.11.3.min.js


File diff suppressed because it is too large
+ 0 - 4
js/jquery-2.2.4.min.js


File diff suppressed because it is too large
+ 5 - 5
js/jquery-ui-dragsort.min.js


File diff suppressed because it is too large
+ 4 - 4
js/jquery.ui.touch-punch.min.js