inserito e testato primo componente gestione grid via js GridMVC x pagina items su metodo Grid
This commit is contained in:
@@ -162,7 +162,7 @@
|
||||
</site>
|
||||
<site name="StockManMVC" id="2">
|
||||
<application path="/" applicationPool="Clr4IntegratedAppPool">
|
||||
<virtualDirectory path="/" physicalPath="C:\Users\samuele.STEAMWAREWIN\Documents\Visual Studio 2015\Projects\StockMan\StockManMVC" />
|
||||
<virtualDirectory path="/" physicalPath="C:\Users\samuele.STEAMWAREWIN\Documents\VisualStudioProjects\StockMan\StockManMVC" />
|
||||
</application>
|
||||
<bindings>
|
||||
<binding protocol="http" bindingInformation="*:4539:localhost" />
|
||||
|
||||
+1
-1
@@ -5,7 +5,7 @@ VisualStudioVersion = 14.0.25420.1
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StockManMVC", "StockManMVC\StockManMVC.csproj", "{65E2BF91-5208-4820-8AED-1200E91CF93B}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VersGen", "..\..\..\VisualStudioProjects\StockMan\VersGen\VersGen.csproj", "{3645071E-9114-4D3C-A419-990FC25D5CD7}"
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VersGen", "VersGen\VersGen.csproj", "{3645071E-9114-4D3C-A419-990FC25D5CD7}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
/***
|
||||
* Grid.Mvc stylesheet http://gridmvc.codeplex.com/
|
||||
* This file contains default styles for Grid.Mvc.
|
||||
*/
|
||||
/* Grid */
|
||||
table.grid-table { margin: 0; }
|
||||
table.grid-table .grid-wrap { padding: 0; position: relative; }
|
||||
table.grid-table .grid-empty-text { color: #666; }
|
||||
|
||||
/* Grid headers */
|
||||
table.grid-table .grid-header { position: relative; }
|
||||
table.grid-table .grid-header .sorted-asc .grid-sort-arrow:after { content: " \2193"; }
|
||||
table.grid-table .grid-header .sorted-desc .grid-sort-arrow:after { content: " \2191"; }
|
||||
table.grid-table .grid-header > .grid-header-title { width: 100%; margin-right: 15px; white-space: nowrap; }
|
||||
|
||||
/* Grid body */
|
||||
table.grid-table tr.grid-row-selected td { background: #4888C2 !important; color: white; }
|
||||
table.grid-table tr.grid-row-selected a { color: white; }
|
||||
|
||||
/* Grid filtering */
|
||||
input.grid-filter-input { padding: 4px; font-size: 13px; }
|
||||
table.grid-table .grid-filter { position: relative; margin-top: 2px; float: right; width: 10px; height: 12px; }
|
||||
table.grid-table .grid-filter-btn { cursor: pointer; display: block; width: 10px; height: 12px; background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAMCAYAAABbayygAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAJFJREFUKFNjkJSU/E8MZvj//78DMRhkoj+6bizYH2SiiIeHx2FjY+P/2DBIDqSGAQSOHTtmYWZm9hldEUgMJAdWBAJAHSzt7e056ApBYiA5qDIIAAoIhIaGroYpArFBYlBpVLB3715DmEIQGyqMCUDWwBRiWIkOYAqhXNwApMjX13c7lIsbgBQBrdWAcqGAgQEAdOGTrvsYKXIAAAAASUVORK5CYII=') no-repeat; }
|
||||
table.grid-table .grid-filter-btn.filtered { background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAMCAYAAABbayygAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAJNJREFUKFNjYGj//58o/P//fwdiMIOkpKQ/VhOQMFgNULWIh4fHYWNj4//YMEgOpIYBBI4dO2ZhZmb2GV0RSAwkB1YEAkAdLO3t7TnoCkFiIDmoMggACgiEhoauhikCsUFiUGlUsHfvXkOYQhAbKowJQNbAFGJYiQ5gCqFc3ACkyNfXdzuUixuAFAGt1YByoYCBAQAUDanUpFB4UQAAAABJRU5ErkJggg==') no-repeat; }
|
||||
table.grid-table .grid-filter-buttons { padding: 0; }
|
||||
table.grid-table .grid-filter-datepicker { font-size: 12px; }
|
||||
table.grid-table .grid-filter-datepicker table td { padding: 1px!important; }
|
||||
table.grid-table .grid-filter-datepicker .ui-datepicker { width: auto; }
|
||||
table.grid-table .grid-dropdown-inner ul.menu-list li a.grid-filter-clear { white-space: nowrap; padding-left: 23px; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAMCAYAAABbayygAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAARpJREFUKFNjYGj//58o/P//fwdiMIOkpKQ/VhOQMFgNULWIh4fHYWNj4//YMEgOpIYBBI4dO2axOC/396GinP/O+vpwRVbGxl92+vluXm1kuASsEKiD5VB99aG3eTH/HxjL/A/RUPsfrqb6f7e21uutlhbRYEUwAFQskOLmun2+lND/0xxM/7dycXzd6OxoCpVGBduWLjXv4+f/v5WF+f9RbtYvfeysqlApBKhhY2Hcxsy0+xAL038nbe3/m8W4ss/Jcx2GSiPAal6uvGtczP9TFOXBHgGJ7RHlmLGOjy0UrAAGzgT7rn7urP/P3NDgv6+v73aQWAMzM+dqTtbJYAUwsNzeyuhImE8GSBHQYxpQYYYJQCcxMDAwAAB7/bt5uWh9FAAAAABJRU5ErkJggg=='); background-position: 3px center; background-repeat: no-repeat; }
|
||||
table.grid-table .grid-filter-choose.choose-selected { background-color: white!important; cursor: default; color: #999; }
|
||||
table.grid-table .grid-popup-additional { padding: 3px 0 0 0; }
|
||||
|
||||
/* POP-UP */
|
||||
.grid-dropdown { font-weight: normal; left: -102px; top: 16px!important; min-width: 180px; }
|
||||
.grid-dropdown-arrow { background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAICAYAAADJEc7MAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOwgAADsIBFShKgAAAABp0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjUuMTAw9HKhAAAAl0lEQVQoU42PMQuFMAyE6xN5gpOjjsIb/P9/o3O3zh27dY25kIPq8DBwmLT35WoQkUEVOmGec84CaW2q7+N+AdCD6M9SisQYTei1jsfyCeCu+vjFVGs1AN++94DRfUOfuNLoKUiyRC5y2F5I8NdaM4P/l0EswvBorQTnfxBhLMRih+2pklIy+eEtjQPu6MNZwIBNbwteMBd5X4ZGHcwL3QAAAABJRU5ErkJggg==") no-repeat; height: 8px; left: 99px; position: absolute; top: -8px; width: 14px; }
|
||||
.grid-dropdown-inner { padding: 5px 7px; }
|
||||
.grid-dropdown ul.menu-list { list-style-type: none; margin: 3px 0 0 0; padding: 0; }
|
||||
.grid-dropdown ul.menu-list li a { text-decoration: none; background-position: 6px center; background-repeat: no-repeat; display: block; padding: 4px 5px; }
|
||||
.grid-dropdown ul.menu-list li a:hover { background-color: #EEE; text-decoration: none; }
|
||||
@@ -0,0 +1,166 @@
|
||||
.pagination {
|
||||
display: inline-block;
|
||||
padding-left: 0;
|
||||
margin: 20px 0;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.pagination > li {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
.pagination > li > a,
|
||||
.pagination > li > span {
|
||||
position: relative;
|
||||
float: left;
|
||||
padding: 6px 12px;
|
||||
margin-left: -1px;
|
||||
line-height: 1.428571429;
|
||||
text-decoration: none;
|
||||
background-color: #ffffff;
|
||||
border: 1px solid #dddddd;
|
||||
}
|
||||
|
||||
.pagination > li:first-child > a,
|
||||
.pagination > li:first-child > span {
|
||||
margin-left: 0;
|
||||
border-bottom-left-radius: 4px;
|
||||
border-top-left-radius: 4px;
|
||||
}
|
||||
|
||||
.pagination > li:last-child > a,
|
||||
.pagination > li:last-child > span {
|
||||
border-top-right-radius: 4px;
|
||||
border-bottom-right-radius: 4px;
|
||||
}
|
||||
|
||||
.pagination > li > a:hover,
|
||||
.pagination > li > span:hover,
|
||||
.pagination > li > a:focus,
|
||||
.pagination > li > span:focus {
|
||||
background-color: #eeeeee;
|
||||
}
|
||||
|
||||
.pagination > .active > a,
|
||||
.pagination > .active > span,
|
||||
.pagination > .active > a:hover,
|
||||
.pagination > .active > span:hover,
|
||||
.pagination > .active > a:focus,
|
||||
.pagination > .active > span:focus {
|
||||
z-index: 2;
|
||||
color: #ffffff;
|
||||
cursor: default;
|
||||
background-color: #428bca;
|
||||
border-color: #428bca;
|
||||
}
|
||||
|
||||
.pagination > .disabled > span,
|
||||
.pagination > .disabled > a,
|
||||
.pagination > .disabled > a:hover,
|
||||
.pagination > .disabled > a:focus {
|
||||
color: #999999;
|
||||
cursor: not-allowed;
|
||||
background-color: #ffffff;
|
||||
border-color: #dddddd;
|
||||
}
|
||||
|
||||
.pagination-lg > li > a,
|
||||
.pagination-lg > li > span {
|
||||
padding: 10px 16px;
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.pagination-lg > li:first-child > a,
|
||||
.pagination-lg > li:first-child > span {
|
||||
border-bottom-left-radius: 6px;
|
||||
border-top-left-radius: 6px;
|
||||
}
|
||||
|
||||
.pagination-lg > li:last-child > a,
|
||||
.pagination-lg > li:last-child > span {
|
||||
border-top-right-radius: 6px;
|
||||
border-bottom-right-radius: 6px;
|
||||
}
|
||||
|
||||
.pagination-sm > li > a,
|
||||
.pagination-sm > li > span {
|
||||
padding: 5px 10px;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.pagination-sm > li:first-child > a,
|
||||
.pagination-sm > li:first-child > span {
|
||||
border-bottom-left-radius: 3px;
|
||||
border-top-left-radius: 3px;
|
||||
}
|
||||
|
||||
.pagination-sm > li:last-child > a,
|
||||
.pagination-sm > li:last-child > span {
|
||||
border-top-right-radius: 3px;
|
||||
border-bottom-right-radius: 3px;
|
||||
}
|
||||
|
||||
.pager {
|
||||
padding-left: 0;
|
||||
margin: 20px 0;
|
||||
text-align: center;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
.pager:before,
|
||||
.pager:after {
|
||||
display: table;
|
||||
content: " ";
|
||||
}
|
||||
|
||||
.pager:after {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.pager:before,
|
||||
.pager:after {
|
||||
display: table;
|
||||
content: " ";
|
||||
}
|
||||
|
||||
.pager:after {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.pager li {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
.pager li > a,
|
||||
.pager li > span {
|
||||
display: inline-block;
|
||||
padding: 5px 14px;
|
||||
background-color: #ffffff;
|
||||
border: 1px solid #dddddd;
|
||||
border-radius: 15px;
|
||||
}
|
||||
|
||||
.pager li > a:hover,
|
||||
.pager li > a:focus {
|
||||
text-decoration: none;
|
||||
background-color: #eeeeee;
|
||||
}
|
||||
|
||||
.pager .next > a,
|
||||
.pager .next > span {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.pager .previous > a,
|
||||
.pager .previous > span {
|
||||
float: left;
|
||||
}
|
||||
|
||||
.pager .disabled > a,
|
||||
.pager .disabled > a:hover,
|
||||
.pager .disabled > a:focus,
|
||||
.pager .disabled > span {
|
||||
color: #999999;
|
||||
cursor: not-allowed;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
@@ -7,6 +7,7 @@ using System.Net;
|
||||
using System.Web;
|
||||
using System.Web.Mvc;
|
||||
using StockManMVC.Models;
|
||||
using X.PagedList;
|
||||
|
||||
namespace StockManMVC.Controllers
|
||||
{
|
||||
|
||||
@@ -21,6 +21,22 @@ namespace StockManMVC.Controllers
|
||||
return View(item.ToList());
|
||||
}
|
||||
|
||||
|
||||
public ActionResult Grid()
|
||||
{
|
||||
|
||||
StockManEntities GVDB = new StockManEntities();
|
||||
|
||||
var ItemList = (from art in GVDB.Item
|
||||
select art).ToList();
|
||||
|
||||
|
||||
return View(ItemList);
|
||||
|
||||
//var item = db.Item.Include(i => i.ItemFamily);
|
||||
//return View(item.ToList());
|
||||
}
|
||||
|
||||
// GET: Items/Details/5
|
||||
public ActionResult Details(int? id)
|
||||
{
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
http://gridmvc.codeplex.com/
|
||||
|
||||
Note: Grid.Mvc installer has already made the following changes to your project:
|
||||
- Views/Shared/_Grid.cshtml, Views/Shared/_GridPager.cshtml - views for grid
|
||||
- Content/Gridmvc.css - default stylesheet for the grid
|
||||
- Scripts/gridmvc.js, Scripts/gridmvc.min.js - Grid.Mvc scripts
|
||||
- Reference GridMvc.dll
|
||||
|
||||
Follow these steps to start use Grid.mvc:
|
||||
|
||||
1. Define a model for display in the grid, like:
|
||||
|
||||
public class Foo
|
||||
{
|
||||
public string Title { get; set; }
|
||||
public string Description { get;set; }
|
||||
}
|
||||
|
||||
|
||||
2. Prepare your model in your controller, like:
|
||||
|
||||
public ActionResult Index()
|
||||
{
|
||||
var items = fooRepository.GetAll();
|
||||
return View(items);
|
||||
}
|
||||
|
||||
|
||||
3. Render GridMvc in the View: You can use Html helper extenstion:
|
||||
|
||||
Reference Grid.Mvc.Html in your view:
|
||||
|
||||
@using GridMvc.Html
|
||||
|
||||
Render Grid.Mvc:
|
||||
|
||||
@Html.Grid(Model).Columns(columns =>
|
||||
{
|
||||
columns.Add(foo => foo.Title).Titled("Custom column title").SetWidth(110);
|
||||
columns.Add(foo => foo.Description).Sortable(true);
|
||||
}).WithPaging(20)
|
||||
|
||||
|
||||
4. Register a grid stylesheet and scripts in your _Layouts.cshtml file:
|
||||
|
||||
<link href="@Url.Content("~/Content/Gridmvc.css")" rel="stylesheet" type="text/css" />
|
||||
<script src="@Url.Content("~/Scripts/gridmvc.min.js")" type="text/javascript"> </script>
|
||||
|
||||
|
||||
Notes:
|
||||
|
||||
Default layout of Grid.Mvc uses Twitter Bootstrap (css framework). You also need to include stylesheets on your page. You can download it from - http://twitter.github.com/bootstrap/
|
||||
like:
|
||||
|
||||
<link href="@Url.Content("~/Content/Css/bootstrap.min.css")" rel="stylesheet" type="text/css" />
|
||||
|
||||
|
||||
Also you need to ensure that jQuery has registred on the page before gridmvc.min.js script.
|
||||
|
||||
For more documetation, please see: http://gridmvc.codeplex.com/
|
||||
Binary file not shown.
@@ -0,0 +1,724 @@
|
||||
/***
|
||||
* Grid.Mvc
|
||||
* Examples and documentation at: http://gridmvc.codeplex.com
|
||||
* Version: 3.0.0
|
||||
* Requires: window.jQuery v1.3+
|
||||
* LGPL license: http://gridmvc.codeplex.com/license
|
||||
*/
|
||||
window.pageGrids = window.pageGrids || {};
|
||||
$.fn.extend({
|
||||
gridmvc: function () {
|
||||
var aObj = [];
|
||||
$(this).each(function () {
|
||||
if (!$(this).data("gridmvc")) {
|
||||
var options = { lang: $(this).attr("data-lang"), selectable: $(this).attr("data-selectable") == "true", multiplefilters: $(this).attr("data-multiplefilters") == "true" };
|
||||
var grid = new GridMvc(this, options);
|
||||
var name = $(this).attr("data-gridname");
|
||||
if (name.length > 0)
|
||||
window.pageGrids[$(this).attr("data-gridname")] = grid;
|
||||
|
||||
aObj.push(grid);
|
||||
$(this).data("gridmvc", grid);
|
||||
} else {
|
||||
aObj.push($(this).data("gridmvc"));
|
||||
}
|
||||
});
|
||||
if (aObj.length == 1)
|
||||
return aObj[0];
|
||||
return aObj;
|
||||
}
|
||||
});
|
||||
|
||||
GridMvc = (function ($) {
|
||||
function gridMvc(container, options) {
|
||||
this.jqContainer = $(container);
|
||||
options = options || {};
|
||||
this.options = $.extend({}, this.defaults(), options);
|
||||
this.init();
|
||||
}
|
||||
|
||||
gridMvc.prototype.init = function () {
|
||||
//load current lang options:
|
||||
this.lang = GridMvc.lang[this.options.lang];
|
||||
if (typeof (this.lang) == 'undefined')
|
||||
this.lang = GridMvc.lang.en;
|
||||
this.events = [];
|
||||
if (this.options.selectable)
|
||||
this.initGridRowsEvents();
|
||||
//Register default filter widgets:
|
||||
this.filterWidgets = [];
|
||||
this.addFilterWidget(new TextFilterWidget());
|
||||
this.addFilterWidget(new NumberFilterWidget());
|
||||
this.addFilterWidget(new DateTimeFilterWidget());
|
||||
this.addFilterWidget(new BooleanFilterWidget());
|
||||
|
||||
this.openedMenuBtn = null;
|
||||
this.initFilters();
|
||||
};
|
||||
/***
|
||||
* Handle Grid row events
|
||||
*/
|
||||
gridMvc.prototype.initGridRowsEvents = function () {
|
||||
var $this = this;
|
||||
this.jqContainer.on("click", ".grid-row", function () {
|
||||
$this.rowClicked.call(this, $this);
|
||||
});
|
||||
};
|
||||
/***
|
||||
* Trigger on Grid row click
|
||||
*/
|
||||
gridMvc.prototype.rowClicked = function ($context) {
|
||||
if (!$context.options.selectable)
|
||||
return;
|
||||
var row = $(this).closest(".grid-row");
|
||||
if (row.length <= 0)
|
||||
return;
|
||||
var gridRow = {};
|
||||
row.find(".grid-cell").each(function () {
|
||||
var columnName = $(this).attr("data-name");
|
||||
if (columnName.length > 0)
|
||||
gridRow[columnName] = $(this).text();
|
||||
});
|
||||
var evt = $.Event("RowClicked");
|
||||
$context.notifyOnRowSelect(gridRow, evt);
|
||||
if (!evt.isDefaultPrevented())
|
||||
$context.markRowSelected(row);
|
||||
};
|
||||
/***
|
||||
* Mark Grid row as selected
|
||||
*/
|
||||
gridMvc.prototype.markRowSelected = function (row) {
|
||||
this.jqContainer.find(".grid-row.grid-row-selected").removeClass("grid-row-selected");
|
||||
row.addClass("grid-row-selected");
|
||||
};
|
||||
/***
|
||||
* Default Grid.Mvc options
|
||||
*/
|
||||
gridMvc.prototype.defaults = function () {
|
||||
return {
|
||||
selectable: true,
|
||||
multiplefilters: false,
|
||||
lang: 'en'
|
||||
};
|
||||
};
|
||||
/***
|
||||
* ============= EVENTS =============
|
||||
* Methods that provides functionality for grid events
|
||||
*/
|
||||
gridMvc.prototype.onRowSelect = function (func) {
|
||||
this.events.push({ name: "onRowSelect", callback: func });
|
||||
};
|
||||
|
||||
gridMvc.prototype.notifyOnRowSelect = function (row, e) {
|
||||
e.row = row;
|
||||
this.notifyEvent("onRowSelect", e);
|
||||
};
|
||||
|
||||
gridMvc.prototype.notifyEvent = function (eventName, e) {
|
||||
for (var i = 0; i < this.events.length; i++) {
|
||||
if (this.events[i].name == eventName)
|
||||
if (!this.events[i].callback(e)) break;
|
||||
}
|
||||
};
|
||||
/***
|
||||
* ============= FILTERS =============
|
||||
* Methods that provides functionality for filtering
|
||||
*/
|
||||
/***
|
||||
* Method search all filter buttons and register 'onclick' event handlers:
|
||||
*/
|
||||
gridMvc.prototype.initFilters = function () {
|
||||
var filterHtml = this.filterMenuHtml();
|
||||
var self = this;
|
||||
this.jqContainer.find(".grid-filter").each(function () {
|
||||
$(this).click(function () {
|
||||
return self.openFilterPopup.call(this, self, filterHtml);
|
||||
});
|
||||
});
|
||||
};
|
||||
/***
|
||||
* Shows filter popup window and render filter widget
|
||||
*/
|
||||
gridMvc.prototype.openFilterPopup = function (self, html) {
|
||||
//retrive all column filter parameters from html attrs:
|
||||
var columnType = $(this).attr("data-type") || "";
|
||||
//determine widget
|
||||
var widget = self.getFilterWidgetForType(columnType);
|
||||
//if widget for specified column type not found - do nothing
|
||||
if (widget == null)
|
||||
return false;
|
||||
|
||||
//if widget allready rendered - just open popup menu:
|
||||
if (this.hasAttribute("data-rendered")) {
|
||||
var or = self.openMenuOnClick.call(this, self);
|
||||
self.setupPopupInitialPosition($(this));
|
||||
if (!or && typeof (widget.onShow) != 'undefined')
|
||||
widget.onShow();
|
||||
return or;
|
||||
}
|
||||
|
||||
var columnName = $(this).attr("data-name") || "";
|
||||
var filterData = $(this).attr("data-filterdata") || "";
|
||||
var widgetData = $(this).attr("data-widgetdata") || "{}";
|
||||
var filterDataObj = self.parseFilterValues(filterData) || {};
|
||||
var filterUrl = $(this).attr("data-url") || "";
|
||||
|
||||
//mark filter as rendered
|
||||
$(this).attr("data-rendered", "1");
|
||||
//append base popup layout:
|
||||
$(this).append(html);
|
||||
|
||||
//determine widget container:
|
||||
var widgetContainer = $(this).find(".grid-popup-widget");
|
||||
//onRender target widget
|
||||
if (typeof (widget.onRender) != 'undefined')
|
||||
widget.onRender(widgetContainer, self.lang, columnType, filterDataObj, function (values) {
|
||||
self.closeOpenedPopups();
|
||||
self.applyFilterValues(filterUrl, columnName, values, false);
|
||||
}, $.parseJSON(widgetData));
|
||||
//adding 'clear filter' button if needed:
|
||||
if ($(this).find(".grid-filter-btn").hasClass("filtered") && widget.showClearFilterButton()) {
|
||||
var inner = $(this).find(".grid-popup-additional");
|
||||
inner.append(self.getClearFilterButton(filterUrl));
|
||||
inner.find(".grid-filter-clear").click(function () {
|
||||
self.applyFilterValues(filterUrl, columnName, "", true);
|
||||
});
|
||||
}
|
||||
var openResult = self.openMenuOnClick.call(this, self);
|
||||
if (typeof (widget.onShow) != 'undefined')
|
||||
widget.onShow();
|
||||
self.setupPopupInitialPosition($(this));
|
||||
return openResult;
|
||||
};
|
||||
|
||||
gridMvc.prototype.setupPopupInitialPosition = function (popup) {
|
||||
var drop = popup.find(".grid-dropdown");
|
||||
function getInfo() {
|
||||
var arrow = popup.find(".grid-dropdown-arrow");
|
||||
return { arrow: arrow, currentDropLeft: parseInt(drop.css("left")), currentArrowLeft: parseInt(arrow.css("left")) };
|
||||
}
|
||||
var dropLeft = drop.offset().left;
|
||||
if (dropLeft < 0) {
|
||||
var info = getInfo();
|
||||
info.arrow.css({ left: (info.currentArrowLeft + dropLeft - 10) + "px" });
|
||||
drop.css({ left: (info.currentDropLeft - dropLeft + 10) + "px" });
|
||||
return;
|
||||
}
|
||||
var dropWidth = drop.width();
|
||||
var offsetRight = $(window).width() - (dropLeft + dropWidth);
|
||||
if (offsetRight < 0) {
|
||||
var info = getInfo();
|
||||
info.arrow.css({ left: (info.currentArrowLeft - offsetRight + 10) + "px" });
|
||||
drop.css({ left: (info.currentDropLeft + offsetRight - 10) + "px" });
|
||||
}
|
||||
};
|
||||
/***
|
||||
* Returns layout of filter popup menu
|
||||
*/
|
||||
gridMvc.prototype.filterMenuHtml = function () {
|
||||
return '<div class="dropdown dropdown-menu grid-dropdown" style="display: none;">\
|
||||
<div class="grid-dropdown-arrow"></div>\
|
||||
<div class="grid-dropdown-inner">\
|
||||
<div class="grid-popup-widget"></div>\
|
||||
<div class="grid-popup-additional"></div>\
|
||||
</div>\
|
||||
</div>';
|
||||
};
|
||||
/***
|
||||
* Returns layout of 'clear filter' button
|
||||
*/
|
||||
gridMvc.prototype.getClearFilterButton = function () {
|
||||
return '<ul class="menu-list">\
|
||||
<li><a class="grid-filter-clear" href="javascript:void(0);">' + this.lang.clearFilterLabel + '</a></li>\
|
||||
</ul>';
|
||||
};
|
||||
/***
|
||||
* Register filter widget in widget collection
|
||||
*/
|
||||
gridMvc.prototype.addFilterWidget = function (widget) {
|
||||
this.filterWidgets.push(widget);
|
||||
};
|
||||
/***
|
||||
* Parse filter settings from data attribute
|
||||
*/
|
||||
gridMvc.prototype.parseFilterValues = function (filterData) {
|
||||
var opt = $.parseJSON(filterData);
|
||||
var filters = [];
|
||||
for (var i = 0; i < opt.length; i++) {
|
||||
filters.push({ filterValue: this.urldecode(opt[i].FilterValue), filterType: opt[i].FilterType, columnName: opt[i].ColumnName });
|
||||
}
|
||||
return filters;
|
||||
};
|
||||
|
||||
gridMvc.prototype.urldecode = function (str) {
|
||||
return decodeURIComponent((str + '').replace(/\+/g, '%20'));
|
||||
};
|
||||
|
||||
/***
|
||||
* Return registred widget for specific column type name
|
||||
*/
|
||||
gridMvc.prototype.getFilterWidgetForType = function (typeName) {
|
||||
for (var i = 0; i < this.filterWidgets.length; i++) {
|
||||
if ($.inArray(typeName, this.filterWidgets[i].getAssociatedTypes()) >= 0)
|
||||
return this.filterWidgets[i];
|
||||
}
|
||||
return null;
|
||||
};
|
||||
/***
|
||||
* Replace existed filter widget
|
||||
*/
|
||||
gridMvc.prototype.replaceFilterWidget = function (typeNameToReplace, widget) {
|
||||
for (var i = 0; i < this.filterWidgets.length; i++) {
|
||||
if ($.inArray(typeNameToReplace, this.filterWidgets[i].getAssociatedTypes()) >= 0) {
|
||||
this.filterWidgets.splice(i, 1);
|
||||
this.addFilterWidget(widget);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
};
|
||||
/***
|
||||
* Applies selected filter value by redirecting to another url:
|
||||
*/
|
||||
gridMvc.prototype.applyFilterValues = function (initialUrl, columnName, values, skip) {
|
||||
var filters = this.jqContainer.find(".grid-filter");
|
||||
if (initialUrl.length > 0)
|
||||
initialUrl += "&";
|
||||
|
||||
var url = "";
|
||||
if (!skip) {
|
||||
url += this.getFilterQueryData(columnName, values);
|
||||
}
|
||||
|
||||
if (this.options.multiplefilters) { //multiple filters enabled
|
||||
for (var i = 0; i < filters.length; i++) {
|
||||
if ($(filters[i]).attr("data-name") != columnName) {
|
||||
var filterData = this.parseFilterValues($(filters[i]).attr("data-filterdata"));
|
||||
if (filterData.length == 0) continue;
|
||||
if (url.length > 0) url += "&";
|
||||
url += this.getFilterQueryData($(filters[i]).attr("data-name"), filterData);
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
window.location.search = initialUrl + url;
|
||||
};
|
||||
gridMvc.prototype.getFilterQueryData = function (columnName, values) {
|
||||
var url = "";
|
||||
for (var i = 0; i < values.length; i++) {
|
||||
url += "grid-filter=" + encodeURIComponent(columnName) + "__" + values[i].filterType + "__" + encodeURIComponent(values[i].filterValue);
|
||||
if (i != values.length - 1)
|
||||
url += "&";
|
||||
}
|
||||
return url;
|
||||
};
|
||||
/***
|
||||
* ============= POPUP MENU =============
|
||||
* Methods that provides base functionality for popup menus
|
||||
*/
|
||||
gridMvc.prototype.openMenuOnClick = function (self) {
|
||||
if ($(this).hasClass("clicked")) return true;
|
||||
self.closeOpenedPopups();
|
||||
$(this).addClass("clicked");
|
||||
var popup = $(this).find(".dropdown-menu");
|
||||
if (popup.length == 0) return true;
|
||||
popup.show();
|
||||
popup.addClass("opened");
|
||||
self.openedMenuBtn = $(this);
|
||||
$(document).bind("click.gridmvc", function (e) {
|
||||
self.documentCallback(e, self);
|
||||
});
|
||||
return false;
|
||||
};
|
||||
|
||||
gridMvc.prototype.documentCallback = function (e, $context) {
|
||||
e = e || event;
|
||||
var target = e.target || e.srcElement;
|
||||
var box = $(".dropdown-menu.opened").get(0);
|
||||
var html = $("html").get(0);
|
||||
if (typeof box != "undefined") {
|
||||
do {
|
||||
if (box == target) {
|
||||
// Click occured inside the box, do nothing.
|
||||
return;
|
||||
}
|
||||
if (html == target) {
|
||||
box.style.display = "none";
|
||||
$(box).removeClass("opened");
|
||||
}
|
||||
target = target.parentNode;
|
||||
} while (target); // Click was outside the box, hide it.
|
||||
|
||||
}
|
||||
if ($context.openedMenuBtn != null)
|
||||
$context.openedMenuBtn.removeClass("clicked");
|
||||
$(document).unbind("click.gridmvc");
|
||||
};
|
||||
|
||||
gridMvc.prototype.closeOpenedPopups = function () {
|
||||
var openedPopup = $(".dropdown-menu.opened");
|
||||
openedPopup.hide();
|
||||
openedPopup.removeClass("opened");
|
||||
if (this.openedMenuBtn != null)
|
||||
this.openedMenuBtn.removeClass("clicked");
|
||||
};
|
||||
|
||||
/* Grid.Mvc clients functions */
|
||||
|
||||
gridMvc.prototype.selectable = function (enable) {
|
||||
this.options.selectable = enable;
|
||||
};
|
||||
|
||||
return gridMvc;
|
||||
})(window.jQuery);
|
||||
|
||||
/***
|
||||
* ============= LOCALIZATION =============
|
||||
* You can localize Grid.Mvc by creating localization files and include it on the page after this script file
|
||||
* This script file provides localization only for english language.
|
||||
* For more documentation see: http://gridmvc.codeplex.com/documentation
|
||||
*/
|
||||
if (typeof (GridMvc.lang) == 'undefined')
|
||||
GridMvc.lang = {};
|
||||
GridMvc.lang.en = {
|
||||
filterTypeLabel: "Type: ",
|
||||
filterValueLabel: "Value:",
|
||||
applyFilterButtonText: "Apply",
|
||||
filterSelectTypes: {
|
||||
Equals: "Equals",
|
||||
StartsWith: "StartsWith",
|
||||
Contains: "Contains",
|
||||
EndsWith: "EndsWith",
|
||||
GreaterThan: "Greater than",
|
||||
LessThan: "Less than"
|
||||
},
|
||||
code: 'en',
|
||||
boolTrueLabel: "Yes",
|
||||
boolFalseLabel: "No",
|
||||
clearFilterLabel: "Clear filter"
|
||||
};
|
||||
/***
|
||||
* ============= FILTER WIDGETS =============
|
||||
* Filter widget allows onRender custom filter user interface for different columns.
|
||||
* For example if your added column is of type "DateTime" - widget can onRender calendar for picking filter value.
|
||||
* This script provider base widget for default .Net types: System.String, System.Int32, System.Decimal etc.
|
||||
* If you want to provide custom filter functionality - you can assign your own widget type for column and write widget for this types.
|
||||
* For more documentation see: http://gridmvc.codeplex.com/documentation
|
||||
*/
|
||||
|
||||
/***
|
||||
* TextFilterWidget - Provides filter interface for text columns (of type "System.String")
|
||||
* This widget onRenders filter interface with conditions, which specific for text types: contains, starts with etc.
|
||||
*/
|
||||
TextFilterWidget = (function ($) {
|
||||
function textFilterWidget() { }
|
||||
/***
|
||||
* This method must return type of columns that must be associated with current widget
|
||||
* If you not specify your own type name for column (see 'SetFilterWidgetType' method), GridMvc setup column type name from .Net type ("System.DateTime etc.)
|
||||
*/
|
||||
textFilterWidget.prototype.getAssociatedTypes = function () { return ["System.String"]; };
|
||||
/***
|
||||
* This method invokes when filter widget was shown on the page
|
||||
*/
|
||||
textFilterWidget.prototype.onShow = function () {
|
||||
var textBox = this.container.find(".grid-filter-input");
|
||||
if (textBox.length <= 0) return;
|
||||
textBox.focus();
|
||||
};
|
||||
/***
|
||||
* This method specify whether onRender 'Clear filter' button for this widget.
|
||||
*/
|
||||
textFilterWidget.prototype.showClearFilterButton = function () { return true; };
|
||||
/***
|
||||
* This method will invoke when user first clicked on filter button.
|
||||
* container - html element, which must contain widget layout;
|
||||
* lang - current language settings;
|
||||
* typeName - current column type (if widget assign to multipile types, see: getAssociatedTypes);
|
||||
* filterType - current filter type (like equals, starts with etc);
|
||||
* filterValue - current filter value;
|
||||
* cb - callback function that must invoked when user want to filter this column. Widget must pass filter type and filter value.
|
||||
*/
|
||||
textFilterWidget.prototype.onRender = function (container, lang, typeName, values, cb) {
|
||||
this.cb = cb;
|
||||
this.container = container;
|
||||
this.lang = lang;
|
||||
this.value = values.length > 0 ? values[0] : { filterType: 1, filterValue: "" };//support only one filter value
|
||||
this.renderWidget();
|
||||
this.registerEvents();
|
||||
};
|
||||
/***
|
||||
* Internal method that build widget layout and append it to the widget container
|
||||
*/
|
||||
textFilterWidget.prototype.renderWidget = function () {
|
||||
var html = '<div class="form-group">\
|
||||
<label>' + this.lang.filterTypeLabel + '</label>\
|
||||
<select class="grid-filter-type form-control">\
|
||||
<option value="1" ' + (this.value.filterType == "1" ? "selected=\"selected\"" : "") + '>' + this.lang.filterSelectTypes.Equals + '</option>\
|
||||
<option value="2" ' + (this.value.filterType == "2" ? "selected=\"selected\"" : "") + '>' + this.lang.filterSelectTypes.Contains + '</option>\
|
||||
<option value="3" ' + (this.value.filterType == "3" ? "selected=\"selected\"" : "") + '>' + this.lang.filterSelectTypes.StartsWith + '</option>\
|
||||
<option value="4" ' + (this.value.filterType == "4" ? "selected=\"selected\"" : "") + '>' + this.lang.filterSelectTypes.EndsWith + '</option>\
|
||||
</select>\
|
||||
</div>\
|
||||
<div class="form-group">\
|
||||
<label>' + this.lang.filterValueLabel + '</label>\
|
||||
<input type="text" class="grid-filter-input form-control" value="' + this.value.filterValue + '" />\
|
||||
</div>\
|
||||
<div class="grid-filter-buttons">\
|
||||
<button type="button" class="btn btn-primary grid-apply" >' + this.lang.applyFilterButtonText + '</button>\
|
||||
</div>';
|
||||
this.container.append(html);
|
||||
};
|
||||
/***
|
||||
* Internal method that register event handlers for 'apply' button.
|
||||
*/
|
||||
textFilterWidget.prototype.registerEvents = function () {
|
||||
//get apply button from:
|
||||
var applyBtn = this.container.find(".grid-apply");
|
||||
//save current context:
|
||||
var $context = this;
|
||||
//register onclick event handler
|
||||
applyBtn.click(function () {
|
||||
//get selected filter type:
|
||||
var type = $context.container.find(".grid-filter-type").val();
|
||||
//get filter value:
|
||||
var value = $context.container.find(".grid-filter-input").val();
|
||||
//invoke callback with selected filter values:
|
||||
var filterValues = [{ filterType: type, filterValue: value }];
|
||||
$context.cb(filterValues);
|
||||
});
|
||||
//register onEnter event for filter text box:
|
||||
this.container.find(".grid-filter-input").keyup(function (event) {
|
||||
if (event.keyCode == 13) { applyBtn.click(); }
|
||||
if (event.keyCode == 27) { GridMvc.closeOpenedPopups(); }
|
||||
});
|
||||
};
|
||||
|
||||
return textFilterWidget;
|
||||
})(window.jQuery);
|
||||
|
||||
/***
|
||||
* NumberFilterWidget - Provides filter interface for number columns
|
||||
* This widget onRenders filter interface with conditions, which specific for number types: great than, less that etc.
|
||||
* Also validates user's input for digits
|
||||
*/
|
||||
NumberFilterWidget = (function ($) {
|
||||
|
||||
function numberFilterWidget() { }
|
||||
|
||||
numberFilterWidget.prototype.showClearFilterButton = function () { return true; };
|
||||
|
||||
numberFilterWidget.prototype.getAssociatedTypes = function () {
|
||||
return ["System.Int32", "System.Double", "System.Decimal", "System.Byte", "System.Single", "System.Float", "System.Int64"];
|
||||
};
|
||||
|
||||
numberFilterWidget.prototype.onShow = function () {
|
||||
var textBox = this.container.find(".grid-filter-input");
|
||||
if (textBox.length <= 0) return;
|
||||
textBox.focus();
|
||||
};
|
||||
|
||||
numberFilterWidget.prototype.onRender = function (container, lang, typeName, values, cb) {
|
||||
this.cb = cb;
|
||||
this.container = container;
|
||||
this.lang = lang;
|
||||
this.typeName = typeName;
|
||||
this.value = values.length > 0 ? values[0] : { filterType: 1, filterValue: "" };//support only one filter value
|
||||
this.renderWidget();
|
||||
this.registerEvents();
|
||||
};
|
||||
|
||||
numberFilterWidget.prototype.renderWidget = function () {
|
||||
var html = '<div class="form-group">\
|
||||
<label>' + this.lang.filterTypeLabel + '</label>\
|
||||
<select class="grid-filter-type form-control">\
|
||||
<option value="1" ' + (this.value.filterType == "1" ? "selected=\"selected\"" : "") + '>' + this.lang.filterSelectTypes.Equals + '</option>\
|
||||
<option value="5" ' + (this.value.filterType == "5" ? "selected=\"selected\"" : "") + '>' + this.lang.filterSelectTypes.GreaterThan + '</option>\
|
||||
<option value="6" ' + (this.value.filterType == "6" ? "selected=\"selected\"" : "") + '>' + this.lang.filterSelectTypes.LessThan + '</option>\
|
||||
</select>\
|
||||
</div>\
|
||||
<div class="form-group">\
|
||||
<label>' + this.lang.filterValueLabel + '</label>\
|
||||
<input type="text" class="grid-filter-input form-control" value="' + this.value.filterValue + '" />\
|
||||
</div>\
|
||||
<div class="grid-filter-buttons">\
|
||||
<button type="button" class="btn btn-primary grid-apply">' + this.lang.applyFilterButtonText + '</button>\
|
||||
</div>';
|
||||
this.container.append(html);
|
||||
};
|
||||
|
||||
numberFilterWidget.prototype.registerEvents = function () {
|
||||
var $context = this;
|
||||
var applyBtn = this.container.find(".grid-apply");
|
||||
applyBtn.click(function () {
|
||||
var type = $context.container.find(".grid-filter-type").val();
|
||||
var value = $context.container.find(".grid-filter-input").val();
|
||||
var filters = [{ filterType: type, filterValue: value }];
|
||||
$context.cb(filters);
|
||||
});
|
||||
var txt = this.container.find(".grid-filter-input");
|
||||
txt.keyup(function (event) {
|
||||
if (event.keyCode == 13) { applyBtn.click(); }
|
||||
if (event.keyCode == 27) { GridMvc.closeOpenedPopups(); }
|
||||
})
|
||||
.keypress(function (event) { return $context.validateInput.call($context, event); });
|
||||
if (this.typeName == "System.Byte")
|
||||
txt.attr("maxlength", "3");
|
||||
};
|
||||
|
||||
numberFilterWidget.prototype.validateInput = function (evt) {
|
||||
var $event = evt || window.event;
|
||||
var key = $event.keyCode || $event.which;
|
||||
key = String.fromCharCode(key);
|
||||
var regex;
|
||||
switch (this.typeName) {
|
||||
case "System.Byte":
|
||||
case "System.Int32":
|
||||
case "System.Int64":
|
||||
regex = /[0-9]/;
|
||||
break;
|
||||
default:
|
||||
regex = /[0-9]|\.|\,/;
|
||||
}
|
||||
if (!regex.test(key)) {
|
||||
$event.returnValue = false;
|
||||
if ($event.preventDefault) $event.preventDefault();
|
||||
}
|
||||
};
|
||||
|
||||
return numberFilterWidget;
|
||||
})(window.jQuery);
|
||||
|
||||
/***
|
||||
* DateTimeFilterWidget - Provides filter interface for date columns (of type "System.DateTime").
|
||||
* If datepicker script included, this widget will render calendar for pick filter values
|
||||
* In other case he onRender textbox field for specifing date value (more info at http://window.jQueryui.com/)
|
||||
*/
|
||||
DateTimeFilterWidget = (function ($) {
|
||||
|
||||
function dateTimeFilterWidget() { }
|
||||
|
||||
dateTimeFilterWidget.prototype.getAssociatedTypes = function () { return ["System.DateTime"]; };
|
||||
|
||||
dateTimeFilterWidget.prototype.showClearFilterButton = function () { return true; };
|
||||
|
||||
dateTimeFilterWidget.prototype.onRender = function (container, lang, typeName, values, applycb, data) {
|
||||
this.datePickerIncluded = typeof ($.fn.datepicker) != 'undefined';
|
||||
this.cb = applycb;
|
||||
this.data = data;
|
||||
this.container = container;
|
||||
this.lang = lang;
|
||||
this.value = values.length > 0 ? values[0] : { filterType: 1, filterValue: "" };//support only one filter value
|
||||
this.renderWidget();
|
||||
this.registerEvents();
|
||||
};
|
||||
|
||||
dateTimeFilterWidget.prototype.renderWidget = function () {
|
||||
var html = '<div class="form-group">\
|
||||
<label>' + this.lang.filterTypeLabel + '</label>\
|
||||
<select class="grid-filter-type form-control">\
|
||||
<option value="1" ' + (this.value.filterType == "1" ? "selected=\"selected\"" : "") + '>' + this.lang.filterSelectTypes.Equals + '</option>\
|
||||
<option value="5" ' + (this.value.filterType == "5" ? "selected=\"selected\"" : "") + '>' + this.lang.filterSelectTypes.GreaterThan + '</option>\
|
||||
<option value="6" ' + (this.value.filterType == "6" ? "selected=\"selected\"" : "") + '>' + this.lang.filterSelectTypes.LessThan + '</option>\
|
||||
</select>\
|
||||
</div>' +
|
||||
(this.datePickerIncluded ?
|
||||
'<div class="grid-filter-datepicker"></div>'
|
||||
:
|
||||
'<div class="form-group">\
|
||||
<label>' + this.lang.filterValueLabel + '</label>\
|
||||
<input type="text" class="grid-filter-input form-control" value="' + this.value.filterValue + '" />\
|
||||
</div>\
|
||||
<div class="grid-filter-buttons">\
|
||||
<input type="button" class="btn btn-primary grid-apply" value="' + this.lang.applyFilterButtonText + '" />\
|
||||
</div>');
|
||||
this.container.append(html);
|
||||
//if window.jQueryUi included:
|
||||
if (this.datePickerIncluded) {
|
||||
var datePickerOptions = this.data || {};
|
||||
datePickerOptions.format = datePickerOptions.format || "yyyy-mm-dd";
|
||||
datePickerOptions.language = datePickerOptions.language || this.lang.code;
|
||||
|
||||
var $context = this;
|
||||
var dateContainer = this.container.find(".grid-filter-datepicker");
|
||||
dateContainer.datepicker(datePickerOptions).on('changeDate', function (ev) {
|
||||
var type = $context.container.find(".grid-filter-type").val();
|
||||
var filterValues = [{ filterType: type, filterValue: ev.format() }];
|
||||
$context.cb(filterValues);
|
||||
});
|
||||
if (this.value.filterValue)
|
||||
dateContainer.datepicker('update', this.value.filterValue);
|
||||
}
|
||||
};
|
||||
|
||||
dateTimeFilterWidget.prototype.registerEvents = function () {
|
||||
var $context = this;
|
||||
var applyBtn = this.container.find(".grid-apply");
|
||||
applyBtn.click(function () {
|
||||
var type = $context.container.find(".grid-filter-type").val();
|
||||
var value = $context.container.find(".grid-filter-input").val();
|
||||
var filterValues = [{ filterType: type, filterValue: value }];
|
||||
$context.cb(filterValues);
|
||||
});
|
||||
this.container.find(".grid-filter-input").keyup(function (event) {
|
||||
if (event.keyCode == 13) {
|
||||
applyBtn.click();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
return dateTimeFilterWidget;
|
||||
})(window.jQuery);
|
||||
|
||||
/***
|
||||
* BooleanFilterWidget - Provides filter interface for boolean columns (of type "System.Boolean").
|
||||
* Renders two button for filter - true and false
|
||||
*/
|
||||
BooleanFilterWidget = (function ($) {
|
||||
|
||||
function booleanFilterWidget() { }
|
||||
|
||||
booleanFilterWidget.prototype.getAssociatedTypes = function () { return ["System.Boolean"]; };
|
||||
|
||||
booleanFilterWidget.prototype.showClearFilterButton = function () { return true; };
|
||||
|
||||
booleanFilterWidget.prototype.onRender = function (container, lang, typeName, values, cb) {
|
||||
this.cb = cb;
|
||||
this.container = container;
|
||||
this.lang = lang;
|
||||
this.value = values.length > 0 ? values[0] : { filterType: 1, filterValue: "" };//support only one filter value
|
||||
this.renderWidget();
|
||||
this.registerEvents();
|
||||
};
|
||||
|
||||
booleanFilterWidget.prototype.renderWidget = function () {
|
||||
var html = '<label>' + this.lang.filterValueLabel + '</label>\
|
||||
<ul class="menu-list">\
|
||||
<li><a class="grid-filter-choose ' + (this.value.filterValue == "true" ? "choose-selected" : "") + '" data-value="true" href="javascript:void(0);">' + this.lang.boolTrueLabel + '</a></li>\
|
||||
<li><a class="grid-filter-choose ' + (this.value.filterValue == "false" ? "choose-selected" : "") + '" data-value="false" href="javascript:void(0);">' + this.lang.boolFalseLabel + '</a></li>\
|
||||
</ul>';
|
||||
this.container.append(html);
|
||||
};
|
||||
|
||||
booleanFilterWidget.prototype.registerEvents = function () {
|
||||
var $context = this;
|
||||
var applyBtn = this.container.find(".grid-filter-choose");
|
||||
applyBtn.click(function () {
|
||||
var filterValues = [{ filterType: "1", filterValue: $(this).attr("data-value") }];
|
||||
$context.cb(filterValues);
|
||||
});
|
||||
};
|
||||
|
||||
return booleanFilterWidget;
|
||||
})(window.jQuery);
|
||||
|
||||
//startup init:
|
||||
(function ($) {
|
||||
if (!$) return;//jquery not referenced
|
||||
$(function () {
|
||||
$(".grid-mvc").each(function () {
|
||||
$(".grid-mvc").gridmvc();
|
||||
});
|
||||
});
|
||||
})(window.jQuery);
|
||||
@@ -0,0 +1,22 @@
|
||||
/***
|
||||
* Grid.Mvc russian language (ru-RU) http://gridmvc.codeplex.com/
|
||||
*/
|
||||
window.GridMvc = window.GridMvc || {};
|
||||
window.GridMvc.lang = window.GridMvc.lang || {};
|
||||
GridMvc.lang.ru = {
|
||||
filterTypeLabel: "Тип фильтра: ",
|
||||
filterValueLabel: "Значение:",
|
||||
applyFilterButtonText: "Применить",
|
||||
filterSelectTypes: {
|
||||
Equals: "Равно",
|
||||
StartsWith: "Начинается с",
|
||||
Contains: "Содержит",
|
||||
EndsWith: "Оканчивается",
|
||||
GreaterThan: "Больше",
|
||||
LessThan: "Меньше"
|
||||
},
|
||||
code: 'ru',
|
||||
boolTrueLabel: "Да",
|
||||
boolFalseLabel: "Нет",
|
||||
clearFilterLabel: "Очистить фильтр"
|
||||
};
|
||||
Vendored
+1
File diff suppressed because one or more lines are too long
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.1\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props" Condition="Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.1\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" />
|
||||
<Import Project="..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.2\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props" Condition="Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.2\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" />
|
||||
<Import Project="..\packages\Microsoft.Net.Compilers.1.3.2\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.1.3.2\build\Microsoft.Net.Compilers.props')" />
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
@@ -76,8 +76,12 @@
|
||||
<HintPath>..\packages\Glimpse.Mvc5.1.5.3\lib\net45\Glimpse.Mvc5.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.1\lib\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll</HintPath>
|
||||
<Reference Include="GridMvc, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Grid.Mvc.3.0.0\lib\net40\GridMvc.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.2\lib\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
@@ -144,6 +148,14 @@
|
||||
<HintPath>..\packages\WebGrease.1.6.0\lib\WebGrease.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="X.PagedList">
|
||||
<HintPath>..\packages\X.PagedList.5.3.0.5300\lib\portable-net45+wp8+win8\X.PagedList.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="X.PagedList.Mvc">
|
||||
<HintPath>..\packages\X.PagedList.Mvc.5.3.0.5300\lib\net46\X.PagedList.Mvc.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="..\VersGen\VersGen.cs">
|
||||
@@ -217,6 +229,8 @@
|
||||
<Content Include="Content\bootstrap-theme.min.css" />
|
||||
<Content Include="Content\bootstrap.css" />
|
||||
<Content Include="Content\bootstrap.min.css" />
|
||||
<Content Include="Content\Gridmvc.css" />
|
||||
<Content Include="Content\PagedList.css" />
|
||||
<Content Include="favicon.ico" />
|
||||
<Content Include="fonts\glyphicons-halflings-regular.svg" />
|
||||
<Content Include="Global.asax" />
|
||||
@@ -248,9 +262,13 @@
|
||||
<Content Include="Models\SMModel.edmx.diagram">
|
||||
<DependentUpon>SMModel.edmx</DependentUpon>
|
||||
</Content>
|
||||
<Content Include="Grid.mvc.readme" />
|
||||
<None Include="Properties\PublishProfiles\IIS01.pubxml" />
|
||||
<None Include="Properties\PublishProfiles\IIS02.pubxml" />
|
||||
<None Include="Scripts\jquery-3.1.0.intellisense.js" />
|
||||
<Content Include="Scripts\gridmvc.js" />
|
||||
<Content Include="Scripts\gridmvc.lang.ru.js" />
|
||||
<Content Include="Scripts\gridmvc.min.js" />
|
||||
<Content Include="Scripts\jquery-3.1.0.js" />
|
||||
<Content Include="Scripts\jquery-3.1.0.min.js" />
|
||||
<Content Include="Scripts\jquery-3.1.0.slim.js" />
|
||||
@@ -329,6 +347,9 @@
|
||||
<Content Include="Views\ItemFluxes\Edit.cshtml" />
|
||||
<Content Include="Views\ItemFluxes\Index.cshtml" />
|
||||
<Content Include="Views\Shared\_searchBox.cshtml" />
|
||||
<Content Include="Views\Shared\_GridPager.cshtml" />
|
||||
<Content Include="Views\Shared\_Grid.cshtml" />
|
||||
<Content Include="Views\Items\Grid.cshtml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Folder Include="App_Data\" />
|
||||
@@ -373,7 +394,7 @@
|
||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||
</PropertyGroup>
|
||||
<Error Condition="!Exists('..\packages\Microsoft.Net.Compilers.1.3.2\build\Microsoft.Net.Compilers.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Net.Compilers.1.3.2\build\Microsoft.Net.Compilers.props'))" />
|
||||
<Error Condition="!Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.1\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.1\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props'))" />
|
||||
<Error Condition="!Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.2\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.2\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props'))" />
|
||||
</Target>
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
<WebStackScaffolding_IsAsyncSelected>False</WebStackScaffolding_IsAsyncSelected>
|
||||
<ProjectView>ShowAllFiles</ProjectView>
|
||||
<NameOfLastUsedPublishProfile>IIS01</NameOfLastUsedPublishProfile>
|
||||
<WebStackScaffolding_ViewDialogWidth>600</WebStackScaffolding_ViewDialogWidth>
|
||||
</PropertyGroup>
|
||||
<ProjectExtensions>
|
||||
<VisualStudio>
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
@model IEnumerable<StockManMVC.Models.ItemStockStatus>
|
||||
|
||||
|
||||
|
||||
@{
|
||||
ViewBag.Title = "Stato Stock";
|
||||
}
|
||||
@@ -124,3 +126,4 @@
|
||||
}
|
||||
|
||||
</table>
|
||||
|
||||
|
||||
@@ -0,0 +1,115 @@
|
||||
@model IEnumerable<StockManMVC.Models.Item>
|
||||
|
||||
@using GridMvc.Html
|
||||
@{
|
||||
ViewBag.Title = "Grid";
|
||||
}
|
||||
@*@{
|
||||
Layout = null;
|
||||
}*@
|
||||
|
||||
<h2>Grid</h2>
|
||||
|
||||
<link href="@Url.Content("~/Content/Gridmvc.css")" rel="stylesheet" />
|
||||
<link href="@Url.Content("~/Content/bootstrap.min.css")" rel="stylesheet" />
|
||||
<script src="@Url.Content("~/Scripts/jquery-3.1.0.min.js")"></script>
|
||||
<script src="@Url.Content("~/Scripts/gridmvc.min.js")"></script>
|
||||
|
||||
<div class="code-cut">
|
||||
@Html.Grid(Model).Columns(columns =>
|
||||
{
|
||||
columns.Add()
|
||||
.Encoded(false)
|
||||
.Sanitized(false)
|
||||
.SetWidth(30)
|
||||
.RenderValueAs(o => Html.ActionLink("Select", "Details", new { id = o.ID }));
|
||||
columns.Add(c => c.Descr).Titled("Descr").Filterable(true);
|
||||
columns.Add(c => c.CodInt).Titled("CodInt").Filterable(true);
|
||||
columns.Add(c => c.CodExt).Titled("CodExt").Filterable(true);
|
||||
columns.Add(c => c.DescrExt).Titled("DescrExt").Filterable(true);
|
||||
columns.Add(c => c.QtaMin).Titled("QtaMin").Filterable(true);
|
||||
columns.Add(c => c.QtaBatch).Titled("QtaBatch").Filterable(true);
|
||||
columns.Add(c => c.CurrValue).Titled("CurrValue").Filterable(true);
|
||||
columns.Add(c => c.ItemFamily.Descr).Titled("Family").Filterable(true);
|
||||
columns.Add()
|
||||
.Encoded(false)
|
||||
.Sanitized(false)
|
||||
.SetWidth(30)
|
||||
.RenderValueAs(o => Html.ActionLink("Edit", "Edit", new { id = o.ID }));
|
||||
columns.Add()
|
||||
.Encoded(false)
|
||||
.Sanitized(false)
|
||||
.SetWidth(30)
|
||||
.RenderValueAs(o => Html.ActionLink("Delete", "Delete", new { id = o.ID }));
|
||||
|
||||
}).WithPaging(5).Sortable(true)
|
||||
</div>
|
||||
|
||||
@*<p>
|
||||
@Html.ActionLink("Create New", "Create")
|
||||
</p>
|
||||
<table class="table">
|
||||
<tr>
|
||||
<th>
|
||||
@Html.DisplayNameFor(model => model.Descr)
|
||||
</th>
|
||||
<th>
|
||||
@Html.DisplayNameFor(model => model.CodInt)
|
||||
</th>
|
||||
<th>
|
||||
@Html.DisplayNameFor(model => model.CodExt)
|
||||
</th>
|
||||
<th>
|
||||
@Html.DisplayNameFor(model => model.DescrExt)
|
||||
</th>
|
||||
<th>
|
||||
@Html.DisplayNameFor(model => model.QtaMin)
|
||||
</th>
|
||||
<th>
|
||||
@Html.DisplayNameFor(model => model.QtaBatch)
|
||||
</th>
|
||||
<th>
|
||||
@Html.DisplayNameFor(model => model.CurrValue)
|
||||
</th>
|
||||
<th>
|
||||
@Html.DisplayNameFor(model => model.ItemFamily.Descr)
|
||||
</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
|
||||
@foreach (var item in Model) {
|
||||
<tr>
|
||||
<td>
|
||||
@Html.DisplayFor(modelItem => item.Descr)
|
||||
</td>
|
||||
<td>
|
||||
@Html.DisplayFor(modelItem => item.CodInt)
|
||||
</td>
|
||||
<td>
|
||||
@Html.DisplayFor(modelItem => item.CodExt)
|
||||
</td>
|
||||
<td>
|
||||
@Html.DisplayFor(modelItem => item.DescrExt)
|
||||
</td>
|
||||
<td>
|
||||
@Html.DisplayFor(modelItem => item.QtaMin)
|
||||
</td>
|
||||
<td>
|
||||
@Html.DisplayFor(modelItem => item.QtaBatch)
|
||||
</td>
|
||||
<td>
|
||||
@Html.DisplayFor(modelItem => item.CurrValue)
|
||||
</td>
|
||||
<td>
|
||||
@Html.DisplayFor(modelItem => item.ItemFamily.Descr)
|
||||
</td>
|
||||
<td>
|
||||
@Html.ActionLink("Edit", "Edit", new { id=item.ID }) |
|
||||
@Html.ActionLink("Details", "Details", new { id=item.ID }) |
|
||||
@Html.ActionLink("Delete", "Delete", new { id=item.ID })
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
|
||||
</table>*@
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
@using GridMvc.Columns
|
||||
@model GridMvc.IGrid
|
||||
@if (Model == null) { return; }
|
||||
@if (Model.RenderOptions.RenderRowsOnly)
|
||||
{
|
||||
@RenderGridBody();
|
||||
}
|
||||
else
|
||||
{
|
||||
<div class="grid-mvc" data-lang="@Model.Language" data-gridname="@Model.RenderOptions.GridName" data-selectable="@Model.RenderOptions.Selectable.ToString().ToLower()" data-multiplefilters ="@Model.RenderOptions.AllowMultipleFilters.ToString().ToLower()">
|
||||
<div class="grid-wrap">
|
||||
<table class="table table-striped grid-table">
|
||||
@* Draw grid header *@
|
||||
<thead>
|
||||
@RenderGridHeader()
|
||||
</thead>
|
||||
<tbody>
|
||||
@RenderGridBody()
|
||||
</tbody>
|
||||
</table>
|
||||
@RenderGridPager()
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
@helper RenderGridBody()
|
||||
{
|
||||
if (!Model.ItemsToDisplay.Any())
|
||||
{
|
||||
<tr class="grid-empty-text">
|
||||
<td colspan="@Model.Columns.Count()">
|
||||
@Model.EmptyGridText
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (object item in Model.ItemsToDisplay)
|
||||
{
|
||||
<tr class="grid-row @Model.GetRowCssClasses(item)">
|
||||
@foreach (IGridColumn column in Model.Columns)
|
||||
{
|
||||
@column.CellRenderer.Render(column, column.GetCell(item))
|
||||
}
|
||||
</tr>
|
||||
}
|
||||
}
|
||||
}
|
||||
@helper RenderGridHeader()
|
||||
{
|
||||
<tr>
|
||||
@foreach (IGridColumn column in Model.Columns)
|
||||
{
|
||||
@column.HeaderRenderer.Render(column)
|
||||
}
|
||||
</tr>
|
||||
}
|
||||
@helper RenderGridPager()
|
||||
{
|
||||
if (Model.EnablePaging && Model.Pager != null)
|
||||
{
|
||||
<div class="grid-footer">
|
||||
@Html.Partial(Model.Pager.TemplateName, Model.Pager)
|
||||
</div>
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
@model GridMvc.Pagination.GridPager
|
||||
@if (Model == null || Model.PageCount <= 1)
|
||||
{
|
||||
return;
|
||||
}
|
||||
<div class="grid-pager">
|
||||
<ul class="pagination">
|
||||
@if (Model.CurrentPage > 1)
|
||||
{
|
||||
<li>
|
||||
<a href="@Model.GetLinkForPage(Model.CurrentPage - 1)">«</a>
|
||||
</li>
|
||||
}
|
||||
|
||||
@if (Model.StartDisplayedPage > 1)
|
||||
{
|
||||
<li>
|
||||
<a href="@Model.GetLinkForPage(1)">1</a>
|
||||
</li>
|
||||
if (Model.StartDisplayedPage > 2)
|
||||
{
|
||||
<li><a href="@Model.GetLinkForPage(Model.StartDisplayedPage - 1)">...</a></li>
|
||||
}
|
||||
}
|
||||
@for (int i = Model.StartDisplayedPage; i <= Model.EndDisplayedPage; i++)
|
||||
{
|
||||
if (i == Model.CurrentPage)
|
||||
{
|
||||
<li class="active"><span>@i</span></li>
|
||||
}
|
||||
else
|
||||
{
|
||||
<li><a href="@Model.GetLinkForPage(i)">@i</a></li>
|
||||
}
|
||||
}
|
||||
@if (Model.EndDisplayedPage < Model.PageCount)
|
||||
{
|
||||
if (Model.EndDisplayedPage < Model.PageCount - 1)
|
||||
{
|
||||
<li><a href="@Model.GetLinkForPage(Model.EndDisplayedPage + 1)">...</a></li>
|
||||
}
|
||||
<li><a href="@Model.GetLinkForPage(Model.PageCount)">@Model.PageCount</a></li>
|
||||
}
|
||||
@if (Model.CurrentPage < Model.PageCount)
|
||||
{
|
||||
<li><a href="@Model.GetLinkForPage(Model.CurrentPage + 1)">»</a></li>
|
||||
}
|
||||
</ul>
|
||||
</div>
|
||||
@@ -1,7 +1,7 @@
|
||||
@using (Html.BeginForm())
|
||||
{
|
||||
<p>
|
||||
Ricerca: @Html.TextBox("SearchVal")
|
||||
Ricerca: @Html.TextBox("SearchVal", ViewBag.CurrentFilter as string)
|
||||
<input type="submit" value="Cerca" />
|
||||
</p>
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<?xml version="1.0"?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<configuration>
|
||||
<configSections>
|
||||
@@ -15,7 +15,7 @@
|
||||
<add namespace="System.Web.Mvc" />
|
||||
<add namespace="System.Web.Mvc.Ajax" />
|
||||
<add namespace="System.Web.Mvc.Html" />
|
||||
<add namespace="System.Web.Optimization"/>
|
||||
<add namespace="System.Web.Optimization" />
|
||||
<add namespace="System.Web.Routing" />
|
||||
<add namespace="StockManMVC" />
|
||||
</namespaces>
|
||||
@@ -28,7 +28,7 @@
|
||||
|
||||
<system.webServer>
|
||||
<handlers>
|
||||
<remove name="BlockViewHandler"/>
|
||||
<remove name="BlockViewHandler" />
|
||||
<add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
|
||||
</handlers>
|
||||
</system.webServer>
|
||||
|
||||
+13
-9
@@ -30,7 +30,11 @@
|
||||
<httpHandlers>
|
||||
<add path="glimpse.axd" verb="GET" type="Glimpse.AspNet.HttpHandler, Glimpse.AspNet" />
|
||||
</httpHandlers>
|
||||
</system.web>
|
||||
<pages>
|
||||
<namespaces>
|
||||
<add namespace="GridMvc" />
|
||||
</namespaces>
|
||||
</pages></system.web>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
@@ -55,7 +59,7 @@
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
|
||||
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Antlr3.Runtime" publicKeyToken="eb42632606e9261f" culture="neutral" />
|
||||
@@ -78,15 +82,9 @@
|
||||
<add name="Glimpse" path="glimpse.axd" verb="GET" type="Glimpse.AspNet.HttpHandler, Glimpse.AspNet" preCondition="integratedMode" />
|
||||
</handlers>
|
||||
</system.webServer>
|
||||
<system.codedom>
|
||||
<compilers>
|
||||
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" />
|
||||
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+" />
|
||||
</compilers>
|
||||
</system.codedom>
|
||||
<connectionStrings>
|
||||
<!--Ufficio Seriate-->
|
||||
<add name="StockManEntities" connectionString="metadata=res://*/Models.SMModel.csdl|res://*/Models.SMModel.ssdl|res://*/Models.SMModel.msl;provider=System.Data.SqlClient;provider connection string="data source=SQL-STEAM\SQL2012;initial catalog=StockMan;persist security info=True;user id=sa;password=keyhammer;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient"/>
|
||||
<add name="StockManEntities" connectionString="metadata=res://*/Models.SMModel.csdl|res://*/Models.SMModel.ssdl|res://*/Models.SMModel.msl;provider=System.Data.SqlClient;provider connection string="data source=SQL-STEAM\SQL2012;initial catalog=StockMan;persist security info=True;user id=sa;password=keyhammer;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
|
||||
<!--Portatile-->
|
||||
<!--<add name="StockManEntities" connectionString="metadata=res://*/Models.SMModel.csdl|res://*/Models.SMModel.ssdl|res://*/Models.SMModel.msl;provider=System.Data.SqlClient;provider connection string="data source=W10-DEV-WEB;initial catalog=StockMan;persist security info=True;user id=sa;password=keyhammer;multipleactiveresultsets=True;application name=EntityFramework"" providerName="System.Data.EntityClient" />-->
|
||||
</connectionStrings>
|
||||
@@ -100,4 +98,10 @@
|
||||
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
|
||||
</providers>
|
||||
</entityFramework>
|
||||
<system.codedom>
|
||||
<compilers>
|
||||
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" />
|
||||
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+" />
|
||||
</compilers>
|
||||
</system.codedom>
|
||||
</configuration>
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -30,7 +30,11 @@
|
||||
<httpHandlers>
|
||||
<add path="glimpse.axd" verb="GET" type="Glimpse.AspNet.HttpHandler, Glimpse.AspNet" />
|
||||
</httpHandlers>
|
||||
</system.web>
|
||||
<pages>
|
||||
<namespaces>
|
||||
<add namespace="GridMvc" />
|
||||
</namespaces>
|
||||
</pages></system.web>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
@@ -55,7 +59,7 @@
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
|
||||
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Antlr3.Runtime" publicKeyToken="eb42632606e9261f" culture="neutral" />
|
||||
@@ -78,15 +82,9 @@
|
||||
<add name="Glimpse" path="glimpse.axd" verb="GET" type="Glimpse.AspNet.HttpHandler, Glimpse.AspNet" preCondition="integratedMode" />
|
||||
</handlers>
|
||||
</system.webServer>
|
||||
<system.codedom>
|
||||
<compilers>
|
||||
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" />
|
||||
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+" />
|
||||
</compilers>
|
||||
</system.codedom>
|
||||
<connectionStrings>
|
||||
<!--Ufficio Seriate-->
|
||||
<add name="StockManEntities" connectionString="metadata=res://*/Models.SMModel.csdl|res://*/Models.SMModel.ssdl|res://*/Models.SMModel.msl;provider=System.Data.SqlClient;provider connection string="data source=SQL-STEAM\SQL2012;initial catalog=StockMan;persist security info=True;user id=sa;password=keyhammer;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient"/>
|
||||
<add name="StockManEntities" connectionString="metadata=res://*/Models.SMModel.csdl|res://*/Models.SMModel.ssdl|res://*/Models.SMModel.msl;provider=System.Data.SqlClient;provider connection string="data source=SQL-STEAM\SQL2012;initial catalog=StockMan;persist security info=True;user id=sa;password=keyhammer;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
|
||||
<!--Portatile-->
|
||||
<!--<add name="StockManEntities" connectionString="metadata=res://*/Models.SMModel.csdl|res://*/Models.SMModel.ssdl|res://*/Models.SMModel.msl;provider=System.Data.SqlClient;provider connection string="data source=W10-DEV-WEB;initial catalog=StockMan;persist security info=True;user id=sa;password=keyhammer;multipleactiveresultsets=True;application name=EntityFramework"" providerName="System.Data.EntityClient" />-->
|
||||
</connectionStrings>
|
||||
@@ -100,4 +98,10 @@
|
||||
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
|
||||
</providers>
|
||||
</entityFramework>
|
||||
<system.codedom>
|
||||
<compilers>
|
||||
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" />
|
||||
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+" />
|
||||
</compilers>
|
||||
</system.codedom>
|
||||
</configuration>
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -8,13 +8,14 @@
|
||||
<package id="Glimpse.AspNet" version="1.9.2" targetFramework="net462" />
|
||||
<package id="Glimpse.EF6" version="1.6.5" targetFramework="net462" />
|
||||
<package id="Glimpse.Mvc5" version="1.5.3" targetFramework="net462" />
|
||||
<package id="Grid.Mvc" version="3.0.0" targetFramework="net462" />
|
||||
<package id="jQuery" version="3.1.0" targetFramework="net462" />
|
||||
<package id="jQuery.Validation" version="1.15.1" targetFramework="net462" />
|
||||
<package id="Microsoft.AspNet.Mvc" version="5.2.3" targetFramework="net462" />
|
||||
<package id="Microsoft.AspNet.Razor" version="3.2.3" targetFramework="net462" />
|
||||
<package id="Microsoft.AspNet.Web.Optimization" version="1.1.3" targetFramework="net462" />
|
||||
<package id="Microsoft.AspNet.WebPages" version="3.2.3" targetFramework="net462" />
|
||||
<package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.1" targetFramework="net462" />
|
||||
<package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.2" targetFramework="net462" />
|
||||
<package id="Microsoft.jQuery.Unobtrusive.Validation" version="3.2.3" targetFramework="net462" />
|
||||
<package id="Microsoft.Net.Compilers" version="1.3.2" targetFramework="net462" developmentDependency="true" />
|
||||
<package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net462" />
|
||||
@@ -22,4 +23,6 @@
|
||||
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net462" />
|
||||
<package id="Respond" version="1.4.2" targetFramework="net462" />
|
||||
<package id="WebGrease" version="1.6.0" targetFramework="net462" />
|
||||
<package id="X.PagedList" version="5.3.0.5300" targetFramework="net462" />
|
||||
<package id="X.PagedList.Mvc" version="5.3.0.5300" targetFramework="net462" />
|
||||
</packages>
|
||||
@@ -0,0 +1,39 @@
|
||||
/***
|
||||
* Grid.Mvc stylesheet http://gridmvc.codeplex.com/
|
||||
* This file contains default styles for Grid.Mvc.
|
||||
*/
|
||||
/* Grid */
|
||||
table.grid-table { margin: 0; }
|
||||
table.grid-table .grid-wrap { padding: 0; position: relative; }
|
||||
table.grid-table .grid-empty-text { color: #666; }
|
||||
|
||||
/* Grid headers */
|
||||
table.grid-table .grid-header { position: relative; }
|
||||
table.grid-table .grid-header .sorted-asc .grid-sort-arrow:after { content: " \2193"; }
|
||||
table.grid-table .grid-header .sorted-desc .grid-sort-arrow:after { content: " \2191"; }
|
||||
table.grid-table .grid-header > .grid-header-title { width: 100%; margin-right: 15px; white-space: nowrap; }
|
||||
|
||||
/* Grid body */
|
||||
table.grid-table tr.grid-row-selected td { background: #4888C2 !important; color: white; }
|
||||
table.grid-table tr.grid-row-selected a { color: white; }
|
||||
|
||||
/* Grid filtering */
|
||||
input.grid-filter-input { padding: 4px; font-size: 13px; }
|
||||
table.grid-table .grid-filter { position: relative; margin-top: 2px; float: right; width: 10px; height: 12px; }
|
||||
table.grid-table .grid-filter-btn { cursor: pointer; display: block; width: 10px; height: 12px; background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAMCAYAAABbayygAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAJFJREFUKFNjkJSU/E8MZvj//78DMRhkoj+6bizYH2SiiIeHx2FjY+P/2DBIDqSGAQSOHTtmYWZm9hldEUgMJAdWBAJAHSzt7e056ApBYiA5qDIIAAoIhIaGroYpArFBYlBpVLB3715DmEIQGyqMCUDWwBRiWIkOYAqhXNwApMjX13c7lIsbgBQBrdWAcqGAgQEAdOGTrvsYKXIAAAAASUVORK5CYII=') no-repeat; }
|
||||
table.grid-table .grid-filter-btn.filtered { background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAMCAYAAABbayygAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAJNJREFUKFNjYGj//58o/P//fwdiMIOkpKQ/VhOQMFgNULWIh4fHYWNj4//YMEgOpIYBBI4dO2ZhZmb2GV0RSAwkB1YEAkAdLO3t7TnoCkFiIDmoMggACgiEhoauhikCsUFiUGlUsHfvXkOYQhAbKowJQNbAFGJYiQ5gCqFc3ACkyNfXdzuUixuAFAGt1YByoYCBAQAUDanUpFB4UQAAAABJRU5ErkJggg==') no-repeat; }
|
||||
table.grid-table .grid-filter-buttons { padding: 0; }
|
||||
table.grid-table .grid-filter-datepicker { font-size: 12px; }
|
||||
table.grid-table .grid-filter-datepicker table td { padding: 1px!important; }
|
||||
table.grid-table .grid-filter-datepicker .ui-datepicker { width: auto; }
|
||||
table.grid-table .grid-dropdown-inner ul.menu-list li a.grid-filter-clear { white-space: nowrap; padding-left: 23px; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAMCAYAAABbayygAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAARpJREFUKFNjYGj//58o/P//fwdiMIOkpKQ/VhOQMFgNULWIh4fHYWNj4//YMEgOpIYBBI4dO2axOC/396GinP/O+vpwRVbGxl92+vluXm1kuASsEKiD5VB99aG3eTH/HxjL/A/RUPsfrqb6f7e21uutlhbRYEUwAFQskOLmun2+lND/0xxM/7dycXzd6OxoCpVGBduWLjXv4+f/v5WF+f9RbtYvfeysqlApBKhhY2Hcxsy0+xAL038nbe3/m8W4ss/Jcx2GSiPAal6uvGtczP9TFOXBHgGJ7RHlmLGOjy0UrAAGzgT7rn7urP/P3NDgv6+v73aQWAMzM+dqTtbJYAUwsNzeyuhImE8GSBHQYxpQYYYJQCcxMDAwAAB7/bt5uWh9FAAAAABJRU5ErkJggg=='); background-position: 3px center; background-repeat: no-repeat; }
|
||||
table.grid-table .grid-filter-choose.choose-selected { background-color: white!important; cursor: default; color: #999; }
|
||||
table.grid-table .grid-popup-additional { padding: 3px 0 0 0; }
|
||||
|
||||
/* POP-UP */
|
||||
.grid-dropdown { font-weight: normal; left: -102px; top: 16px!important; min-width: 180px; }
|
||||
.grid-dropdown-arrow { background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAICAYAAADJEc7MAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOwgAADsIBFShKgAAAABp0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjUuMTAw9HKhAAAAl0lEQVQoU42PMQuFMAyE6xN5gpOjjsIb/P9/o3O3zh27dY25kIPq8DBwmLT35WoQkUEVOmGec84CaW2q7+N+AdCD6M9SisQYTei1jsfyCeCu+vjFVGs1AN++94DRfUOfuNLoKUiyRC5y2F5I8NdaM4P/l0EswvBorQTnfxBhLMRih+2pklIy+eEtjQPu6MNZwIBNbwteMBd5X4ZGHcwL3QAAAABJRU5ErkJggg==") no-repeat; height: 8px; left: 99px; position: absolute; top: -8px; width: 14px; }
|
||||
.grid-dropdown-inner { padding: 5px 7px; }
|
||||
.grid-dropdown ul.menu-list { list-style-type: none; margin: 3px 0 0 0; padding: 0; }
|
||||
.grid-dropdown ul.menu-list li a { text-decoration: none; background-position: 6px center; background-repeat: no-repeat; display: block; padding: 4px 5px; }
|
||||
.grid-dropdown ul.menu-list li a:hover { background-color: #EEE; text-decoration: none; }
|
||||
+60
@@ -0,0 +1,60 @@
|
||||
http://gridmvc.codeplex.com/
|
||||
|
||||
Note: Grid.Mvc installer has already made the following changes to your project:
|
||||
- Views/Shared/_Grid.cshtml, Views/Shared/_GridPager.cshtml - views for grid
|
||||
- Content/Gridmvc.css - default stylesheet for the grid
|
||||
- Scripts/gridmvc.js, Scripts/gridmvc.min.js - Grid.Mvc scripts
|
||||
- Reference GridMvc.dll
|
||||
|
||||
Follow these steps to start use Grid.mvc:
|
||||
|
||||
1. Define a model for display in the grid, like:
|
||||
|
||||
public class Foo
|
||||
{
|
||||
public string Title { get; set; }
|
||||
public string Description { get;set; }
|
||||
}
|
||||
|
||||
|
||||
2. Prepare your model in your controller, like:
|
||||
|
||||
public ActionResult Index()
|
||||
{
|
||||
var items = fooRepository.GetAll();
|
||||
return View(items);
|
||||
}
|
||||
|
||||
|
||||
3. Render GridMvc in the View: You can use Html helper extenstion:
|
||||
|
||||
Reference Grid.Mvc.Html in your view:
|
||||
|
||||
@using GridMvc.Html
|
||||
|
||||
Render Grid.Mvc:
|
||||
|
||||
@Html.Grid(Model).Columns(columns =>
|
||||
{
|
||||
columns.Add(foo => foo.Title).Titled("Custom column title").SetWidth(110);
|
||||
columns.Add(foo => foo.Description).Sortable(true);
|
||||
}).WithPaging(20)
|
||||
|
||||
|
||||
4. Register a grid stylesheet and scripts in your _Layouts.cshtml file:
|
||||
|
||||
<link href="@Url.Content("~/Content/Gridmvc.css")" rel="stylesheet" type="text/css" />
|
||||
<script src="@Url.Content("~/Scripts/gridmvc.min.js")" type="text/javascript"> </script>
|
||||
|
||||
|
||||
Notes:
|
||||
|
||||
Default layout of Grid.Mvc uses Twitter Bootstrap (css framework). You also need to include stylesheets on your page. You can download it from - http://twitter.github.com/bootstrap/
|
||||
like:
|
||||
|
||||
<link href="@Url.Content("~/Content/Css/bootstrap.min.css")" rel="stylesheet" type="text/css" />
|
||||
|
||||
|
||||
Also you need to ensure that jQuery has registred on the page before gridmvc.min.js script.
|
||||
|
||||
For more documetation, please see: http://gridmvc.codeplex.com/
|
||||
+724
@@ -0,0 +1,724 @@
|
||||
/***
|
||||
* Grid.Mvc
|
||||
* Examples and documentation at: http://gridmvc.codeplex.com
|
||||
* Version: 3.0.0
|
||||
* Requires: window.jQuery v1.3+
|
||||
* LGPL license: http://gridmvc.codeplex.com/license
|
||||
*/
|
||||
window.pageGrids = window.pageGrids || {};
|
||||
$.fn.extend({
|
||||
gridmvc: function () {
|
||||
var aObj = [];
|
||||
$(this).each(function () {
|
||||
if (!$(this).data("gridmvc")) {
|
||||
var options = { lang: $(this).attr("data-lang"), selectable: $(this).attr("data-selectable") == "true", multiplefilters: $(this).attr("data-multiplefilters") == "true" };
|
||||
var grid = new GridMvc(this, options);
|
||||
var name = $(this).attr("data-gridname");
|
||||
if (name.length > 0)
|
||||
window.pageGrids[$(this).attr("data-gridname")] = grid;
|
||||
|
||||
aObj.push(grid);
|
||||
$(this).data("gridmvc", grid);
|
||||
} else {
|
||||
aObj.push($(this).data("gridmvc"));
|
||||
}
|
||||
});
|
||||
if (aObj.length == 1)
|
||||
return aObj[0];
|
||||
return aObj;
|
||||
}
|
||||
});
|
||||
|
||||
GridMvc = (function ($) {
|
||||
function gridMvc(container, options) {
|
||||
this.jqContainer = $(container);
|
||||
options = options || {};
|
||||
this.options = $.extend({}, this.defaults(), options);
|
||||
this.init();
|
||||
}
|
||||
|
||||
gridMvc.prototype.init = function () {
|
||||
//load current lang options:
|
||||
this.lang = GridMvc.lang[this.options.lang];
|
||||
if (typeof (this.lang) == 'undefined')
|
||||
this.lang = GridMvc.lang.en;
|
||||
this.events = [];
|
||||
if (this.options.selectable)
|
||||
this.initGridRowsEvents();
|
||||
//Register default filter widgets:
|
||||
this.filterWidgets = [];
|
||||
this.addFilterWidget(new TextFilterWidget());
|
||||
this.addFilterWidget(new NumberFilterWidget());
|
||||
this.addFilterWidget(new DateTimeFilterWidget());
|
||||
this.addFilterWidget(new BooleanFilterWidget());
|
||||
|
||||
this.openedMenuBtn = null;
|
||||
this.initFilters();
|
||||
};
|
||||
/***
|
||||
* Handle Grid row events
|
||||
*/
|
||||
gridMvc.prototype.initGridRowsEvents = function () {
|
||||
var $this = this;
|
||||
this.jqContainer.on("click", ".grid-row", function () {
|
||||
$this.rowClicked.call(this, $this);
|
||||
});
|
||||
};
|
||||
/***
|
||||
* Trigger on Grid row click
|
||||
*/
|
||||
gridMvc.prototype.rowClicked = function ($context) {
|
||||
if (!$context.options.selectable)
|
||||
return;
|
||||
var row = $(this).closest(".grid-row");
|
||||
if (row.length <= 0)
|
||||
return;
|
||||
var gridRow = {};
|
||||
row.find(".grid-cell").each(function () {
|
||||
var columnName = $(this).attr("data-name");
|
||||
if (columnName.length > 0)
|
||||
gridRow[columnName] = $(this).text();
|
||||
});
|
||||
var evt = $.Event("RowClicked");
|
||||
$context.notifyOnRowSelect(gridRow, evt);
|
||||
if (!evt.isDefaultPrevented())
|
||||
$context.markRowSelected(row);
|
||||
};
|
||||
/***
|
||||
* Mark Grid row as selected
|
||||
*/
|
||||
gridMvc.prototype.markRowSelected = function (row) {
|
||||
this.jqContainer.find(".grid-row.grid-row-selected").removeClass("grid-row-selected");
|
||||
row.addClass("grid-row-selected");
|
||||
};
|
||||
/***
|
||||
* Default Grid.Mvc options
|
||||
*/
|
||||
gridMvc.prototype.defaults = function () {
|
||||
return {
|
||||
selectable: true,
|
||||
multiplefilters: false,
|
||||
lang: 'en'
|
||||
};
|
||||
};
|
||||
/***
|
||||
* ============= EVENTS =============
|
||||
* Methods that provides functionality for grid events
|
||||
*/
|
||||
gridMvc.prototype.onRowSelect = function (func) {
|
||||
this.events.push({ name: "onRowSelect", callback: func });
|
||||
};
|
||||
|
||||
gridMvc.prototype.notifyOnRowSelect = function (row, e) {
|
||||
e.row = row;
|
||||
this.notifyEvent("onRowSelect", e);
|
||||
};
|
||||
|
||||
gridMvc.prototype.notifyEvent = function (eventName, e) {
|
||||
for (var i = 0; i < this.events.length; i++) {
|
||||
if (this.events[i].name == eventName)
|
||||
if (!this.events[i].callback(e)) break;
|
||||
}
|
||||
};
|
||||
/***
|
||||
* ============= FILTERS =============
|
||||
* Methods that provides functionality for filtering
|
||||
*/
|
||||
/***
|
||||
* Method search all filter buttons and register 'onclick' event handlers:
|
||||
*/
|
||||
gridMvc.prototype.initFilters = function () {
|
||||
var filterHtml = this.filterMenuHtml();
|
||||
var self = this;
|
||||
this.jqContainer.find(".grid-filter").each(function () {
|
||||
$(this).click(function () {
|
||||
return self.openFilterPopup.call(this, self, filterHtml);
|
||||
});
|
||||
});
|
||||
};
|
||||
/***
|
||||
* Shows filter popup window and render filter widget
|
||||
*/
|
||||
gridMvc.prototype.openFilterPopup = function (self, html) {
|
||||
//retrive all column filter parameters from html attrs:
|
||||
var columnType = $(this).attr("data-type") || "";
|
||||
//determine widget
|
||||
var widget = self.getFilterWidgetForType(columnType);
|
||||
//if widget for specified column type not found - do nothing
|
||||
if (widget == null)
|
||||
return false;
|
||||
|
||||
//if widget allready rendered - just open popup menu:
|
||||
if (this.hasAttribute("data-rendered")) {
|
||||
var or = self.openMenuOnClick.call(this, self);
|
||||
self.setupPopupInitialPosition($(this));
|
||||
if (!or && typeof (widget.onShow) != 'undefined')
|
||||
widget.onShow();
|
||||
return or;
|
||||
}
|
||||
|
||||
var columnName = $(this).attr("data-name") || "";
|
||||
var filterData = $(this).attr("data-filterdata") || "";
|
||||
var widgetData = $(this).attr("data-widgetdata") || "{}";
|
||||
var filterDataObj = self.parseFilterValues(filterData) || {};
|
||||
var filterUrl = $(this).attr("data-url") || "";
|
||||
|
||||
//mark filter as rendered
|
||||
$(this).attr("data-rendered", "1");
|
||||
//append base popup layout:
|
||||
$(this).append(html);
|
||||
|
||||
//determine widget container:
|
||||
var widgetContainer = $(this).find(".grid-popup-widget");
|
||||
//onRender target widget
|
||||
if (typeof (widget.onRender) != 'undefined')
|
||||
widget.onRender(widgetContainer, self.lang, columnType, filterDataObj, function (values) {
|
||||
self.closeOpenedPopups();
|
||||
self.applyFilterValues(filterUrl, columnName, values, false);
|
||||
}, $.parseJSON(widgetData));
|
||||
//adding 'clear filter' button if needed:
|
||||
if ($(this).find(".grid-filter-btn").hasClass("filtered") && widget.showClearFilterButton()) {
|
||||
var inner = $(this).find(".grid-popup-additional");
|
||||
inner.append(self.getClearFilterButton(filterUrl));
|
||||
inner.find(".grid-filter-clear").click(function () {
|
||||
self.applyFilterValues(filterUrl, columnName, "", true);
|
||||
});
|
||||
}
|
||||
var openResult = self.openMenuOnClick.call(this, self);
|
||||
if (typeof (widget.onShow) != 'undefined')
|
||||
widget.onShow();
|
||||
self.setupPopupInitialPosition($(this));
|
||||
return openResult;
|
||||
};
|
||||
|
||||
gridMvc.prototype.setupPopupInitialPosition = function (popup) {
|
||||
var drop = popup.find(".grid-dropdown");
|
||||
function getInfo() {
|
||||
var arrow = popup.find(".grid-dropdown-arrow");
|
||||
return { arrow: arrow, currentDropLeft: parseInt(drop.css("left")), currentArrowLeft: parseInt(arrow.css("left")) };
|
||||
}
|
||||
var dropLeft = drop.offset().left;
|
||||
if (dropLeft < 0) {
|
||||
var info = getInfo();
|
||||
info.arrow.css({ left: (info.currentArrowLeft + dropLeft - 10) + "px" });
|
||||
drop.css({ left: (info.currentDropLeft - dropLeft + 10) + "px" });
|
||||
return;
|
||||
}
|
||||
var dropWidth = drop.width();
|
||||
var offsetRight = $(window).width() - (dropLeft + dropWidth);
|
||||
if (offsetRight < 0) {
|
||||
var info = getInfo();
|
||||
info.arrow.css({ left: (info.currentArrowLeft - offsetRight + 10) + "px" });
|
||||
drop.css({ left: (info.currentDropLeft + offsetRight - 10) + "px" });
|
||||
}
|
||||
};
|
||||
/***
|
||||
* Returns layout of filter popup menu
|
||||
*/
|
||||
gridMvc.prototype.filterMenuHtml = function () {
|
||||
return '<div class="dropdown dropdown-menu grid-dropdown" style="display: none;">\
|
||||
<div class="grid-dropdown-arrow"></div>\
|
||||
<div class="grid-dropdown-inner">\
|
||||
<div class="grid-popup-widget"></div>\
|
||||
<div class="grid-popup-additional"></div>\
|
||||
</div>\
|
||||
</div>';
|
||||
};
|
||||
/***
|
||||
* Returns layout of 'clear filter' button
|
||||
*/
|
||||
gridMvc.prototype.getClearFilterButton = function () {
|
||||
return '<ul class="menu-list">\
|
||||
<li><a class="grid-filter-clear" href="javascript:void(0);">' + this.lang.clearFilterLabel + '</a></li>\
|
||||
</ul>';
|
||||
};
|
||||
/***
|
||||
* Register filter widget in widget collection
|
||||
*/
|
||||
gridMvc.prototype.addFilterWidget = function (widget) {
|
||||
this.filterWidgets.push(widget);
|
||||
};
|
||||
/***
|
||||
* Parse filter settings from data attribute
|
||||
*/
|
||||
gridMvc.prototype.parseFilterValues = function (filterData) {
|
||||
var opt = $.parseJSON(filterData);
|
||||
var filters = [];
|
||||
for (var i = 0; i < opt.length; i++) {
|
||||
filters.push({ filterValue: this.urldecode(opt[i].FilterValue), filterType: opt[i].FilterType, columnName: opt[i].ColumnName });
|
||||
}
|
||||
return filters;
|
||||
};
|
||||
|
||||
gridMvc.prototype.urldecode = function (str) {
|
||||
return decodeURIComponent((str + '').replace(/\+/g, '%20'));
|
||||
};
|
||||
|
||||
/***
|
||||
* Return registred widget for specific column type name
|
||||
*/
|
||||
gridMvc.prototype.getFilterWidgetForType = function (typeName) {
|
||||
for (var i = 0; i < this.filterWidgets.length; i++) {
|
||||
if ($.inArray(typeName, this.filterWidgets[i].getAssociatedTypes()) >= 0)
|
||||
return this.filterWidgets[i];
|
||||
}
|
||||
return null;
|
||||
};
|
||||
/***
|
||||
* Replace existed filter widget
|
||||
*/
|
||||
gridMvc.prototype.replaceFilterWidget = function (typeNameToReplace, widget) {
|
||||
for (var i = 0; i < this.filterWidgets.length; i++) {
|
||||
if ($.inArray(typeNameToReplace, this.filterWidgets[i].getAssociatedTypes()) >= 0) {
|
||||
this.filterWidgets.splice(i, 1);
|
||||
this.addFilterWidget(widget);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
};
|
||||
/***
|
||||
* Applies selected filter value by redirecting to another url:
|
||||
*/
|
||||
gridMvc.prototype.applyFilterValues = function (initialUrl, columnName, values, skip) {
|
||||
var filters = this.jqContainer.find(".grid-filter");
|
||||
if (initialUrl.length > 0)
|
||||
initialUrl += "&";
|
||||
|
||||
var url = "";
|
||||
if (!skip) {
|
||||
url += this.getFilterQueryData(columnName, values);
|
||||
}
|
||||
|
||||
if (this.options.multiplefilters) { //multiple filters enabled
|
||||
for (var i = 0; i < filters.length; i++) {
|
||||
if ($(filters[i]).attr("data-name") != columnName) {
|
||||
var filterData = this.parseFilterValues($(filters[i]).attr("data-filterdata"));
|
||||
if (filterData.length == 0) continue;
|
||||
if (url.length > 0) url += "&";
|
||||
url += this.getFilterQueryData($(filters[i]).attr("data-name"), filterData);
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
window.location.search = initialUrl + url;
|
||||
};
|
||||
gridMvc.prototype.getFilterQueryData = function (columnName, values) {
|
||||
var url = "";
|
||||
for (var i = 0; i < values.length; i++) {
|
||||
url += "grid-filter=" + encodeURIComponent(columnName) + "__" + values[i].filterType + "__" + encodeURIComponent(values[i].filterValue);
|
||||
if (i != values.length - 1)
|
||||
url += "&";
|
||||
}
|
||||
return url;
|
||||
};
|
||||
/***
|
||||
* ============= POPUP MENU =============
|
||||
* Methods that provides base functionality for popup menus
|
||||
*/
|
||||
gridMvc.prototype.openMenuOnClick = function (self) {
|
||||
if ($(this).hasClass("clicked")) return true;
|
||||
self.closeOpenedPopups();
|
||||
$(this).addClass("clicked");
|
||||
var popup = $(this).find(".dropdown-menu");
|
||||
if (popup.length == 0) return true;
|
||||
popup.show();
|
||||
popup.addClass("opened");
|
||||
self.openedMenuBtn = $(this);
|
||||
$(document).bind("click.gridmvc", function (e) {
|
||||
self.documentCallback(e, self);
|
||||
});
|
||||
return false;
|
||||
};
|
||||
|
||||
gridMvc.prototype.documentCallback = function (e, $context) {
|
||||
e = e || event;
|
||||
var target = e.target || e.srcElement;
|
||||
var box = $(".dropdown-menu.opened").get(0);
|
||||
var html = $("html").get(0);
|
||||
if (typeof box != "undefined") {
|
||||
do {
|
||||
if (box == target) {
|
||||
// Click occured inside the box, do nothing.
|
||||
return;
|
||||
}
|
||||
if (html == target) {
|
||||
box.style.display = "none";
|
||||
$(box).removeClass("opened");
|
||||
}
|
||||
target = target.parentNode;
|
||||
} while (target); // Click was outside the box, hide it.
|
||||
|
||||
}
|
||||
if ($context.openedMenuBtn != null)
|
||||
$context.openedMenuBtn.removeClass("clicked");
|
||||
$(document).unbind("click.gridmvc");
|
||||
};
|
||||
|
||||
gridMvc.prototype.closeOpenedPopups = function () {
|
||||
var openedPopup = $(".dropdown-menu.opened");
|
||||
openedPopup.hide();
|
||||
openedPopup.removeClass("opened");
|
||||
if (this.openedMenuBtn != null)
|
||||
this.openedMenuBtn.removeClass("clicked");
|
||||
};
|
||||
|
||||
/* Grid.Mvc clients functions */
|
||||
|
||||
gridMvc.prototype.selectable = function (enable) {
|
||||
this.options.selectable = enable;
|
||||
};
|
||||
|
||||
return gridMvc;
|
||||
})(window.jQuery);
|
||||
|
||||
/***
|
||||
* ============= LOCALIZATION =============
|
||||
* You can localize Grid.Mvc by creating localization files and include it on the page after this script file
|
||||
* This script file provides localization only for english language.
|
||||
* For more documentation see: http://gridmvc.codeplex.com/documentation
|
||||
*/
|
||||
if (typeof (GridMvc.lang) == 'undefined')
|
||||
GridMvc.lang = {};
|
||||
GridMvc.lang.en = {
|
||||
filterTypeLabel: "Type: ",
|
||||
filterValueLabel: "Value:",
|
||||
applyFilterButtonText: "Apply",
|
||||
filterSelectTypes: {
|
||||
Equals: "Equals",
|
||||
StartsWith: "StartsWith",
|
||||
Contains: "Contains",
|
||||
EndsWith: "EndsWith",
|
||||
GreaterThan: "Greater than",
|
||||
LessThan: "Less than"
|
||||
},
|
||||
code: 'en',
|
||||
boolTrueLabel: "Yes",
|
||||
boolFalseLabel: "No",
|
||||
clearFilterLabel: "Clear filter"
|
||||
};
|
||||
/***
|
||||
* ============= FILTER WIDGETS =============
|
||||
* Filter widget allows onRender custom filter user interface for different columns.
|
||||
* For example if your added column is of type "DateTime" - widget can onRender calendar for picking filter value.
|
||||
* This script provider base widget for default .Net types: System.String, System.Int32, System.Decimal etc.
|
||||
* If you want to provide custom filter functionality - you can assign your own widget type for column and write widget for this types.
|
||||
* For more documentation see: http://gridmvc.codeplex.com/documentation
|
||||
*/
|
||||
|
||||
/***
|
||||
* TextFilterWidget - Provides filter interface for text columns (of type "System.String")
|
||||
* This widget onRenders filter interface with conditions, which specific for text types: contains, starts with etc.
|
||||
*/
|
||||
TextFilterWidget = (function ($) {
|
||||
function textFilterWidget() { }
|
||||
/***
|
||||
* This method must return type of columns that must be associated with current widget
|
||||
* If you not specify your own type name for column (see 'SetFilterWidgetType' method), GridMvc setup column type name from .Net type ("System.DateTime etc.)
|
||||
*/
|
||||
textFilterWidget.prototype.getAssociatedTypes = function () { return ["System.String"]; };
|
||||
/***
|
||||
* This method invokes when filter widget was shown on the page
|
||||
*/
|
||||
textFilterWidget.prototype.onShow = function () {
|
||||
var textBox = this.container.find(".grid-filter-input");
|
||||
if (textBox.length <= 0) return;
|
||||
textBox.focus();
|
||||
};
|
||||
/***
|
||||
* This method specify whether onRender 'Clear filter' button for this widget.
|
||||
*/
|
||||
textFilterWidget.prototype.showClearFilterButton = function () { return true; };
|
||||
/***
|
||||
* This method will invoke when user first clicked on filter button.
|
||||
* container - html element, which must contain widget layout;
|
||||
* lang - current language settings;
|
||||
* typeName - current column type (if widget assign to multipile types, see: getAssociatedTypes);
|
||||
* filterType - current filter type (like equals, starts with etc);
|
||||
* filterValue - current filter value;
|
||||
* cb - callback function that must invoked when user want to filter this column. Widget must pass filter type and filter value.
|
||||
*/
|
||||
textFilterWidget.prototype.onRender = function (container, lang, typeName, values, cb) {
|
||||
this.cb = cb;
|
||||
this.container = container;
|
||||
this.lang = lang;
|
||||
this.value = values.length > 0 ? values[0] : { filterType: 1, filterValue: "" };//support only one filter value
|
||||
this.renderWidget();
|
||||
this.registerEvents();
|
||||
};
|
||||
/***
|
||||
* Internal method that build widget layout and append it to the widget container
|
||||
*/
|
||||
textFilterWidget.prototype.renderWidget = function () {
|
||||
var html = '<div class="form-group">\
|
||||
<label>' + this.lang.filterTypeLabel + '</label>\
|
||||
<select class="grid-filter-type form-control">\
|
||||
<option value="1" ' + (this.value.filterType == "1" ? "selected=\"selected\"" : "") + '>' + this.lang.filterSelectTypes.Equals + '</option>\
|
||||
<option value="2" ' + (this.value.filterType == "2" ? "selected=\"selected\"" : "") + '>' + this.lang.filterSelectTypes.Contains + '</option>\
|
||||
<option value="3" ' + (this.value.filterType == "3" ? "selected=\"selected\"" : "") + '>' + this.lang.filterSelectTypes.StartsWith + '</option>\
|
||||
<option value="4" ' + (this.value.filterType == "4" ? "selected=\"selected\"" : "") + '>' + this.lang.filterSelectTypes.EndsWith + '</option>\
|
||||
</select>\
|
||||
</div>\
|
||||
<div class="form-group">\
|
||||
<label>' + this.lang.filterValueLabel + '</label>\
|
||||
<input type="text" class="grid-filter-input form-control" value="' + this.value.filterValue + '" />\
|
||||
</div>\
|
||||
<div class="grid-filter-buttons">\
|
||||
<button type="button" class="btn btn-primary grid-apply" >' + this.lang.applyFilterButtonText + '</button>\
|
||||
</div>';
|
||||
this.container.append(html);
|
||||
};
|
||||
/***
|
||||
* Internal method that register event handlers for 'apply' button.
|
||||
*/
|
||||
textFilterWidget.prototype.registerEvents = function () {
|
||||
//get apply button from:
|
||||
var applyBtn = this.container.find(".grid-apply");
|
||||
//save current context:
|
||||
var $context = this;
|
||||
//register onclick event handler
|
||||
applyBtn.click(function () {
|
||||
//get selected filter type:
|
||||
var type = $context.container.find(".grid-filter-type").val();
|
||||
//get filter value:
|
||||
var value = $context.container.find(".grid-filter-input").val();
|
||||
//invoke callback with selected filter values:
|
||||
var filterValues = [{ filterType: type, filterValue: value }];
|
||||
$context.cb(filterValues);
|
||||
});
|
||||
//register onEnter event for filter text box:
|
||||
this.container.find(".grid-filter-input").keyup(function (event) {
|
||||
if (event.keyCode == 13) { applyBtn.click(); }
|
||||
if (event.keyCode == 27) { GridMvc.closeOpenedPopups(); }
|
||||
});
|
||||
};
|
||||
|
||||
return textFilterWidget;
|
||||
})(window.jQuery);
|
||||
|
||||
/***
|
||||
* NumberFilterWidget - Provides filter interface for number columns
|
||||
* This widget onRenders filter interface with conditions, which specific for number types: great than, less that etc.
|
||||
* Also validates user's input for digits
|
||||
*/
|
||||
NumberFilterWidget = (function ($) {
|
||||
|
||||
function numberFilterWidget() { }
|
||||
|
||||
numberFilterWidget.prototype.showClearFilterButton = function () { return true; };
|
||||
|
||||
numberFilterWidget.prototype.getAssociatedTypes = function () {
|
||||
return ["System.Int32", "System.Double", "System.Decimal", "System.Byte", "System.Single", "System.Float", "System.Int64"];
|
||||
};
|
||||
|
||||
numberFilterWidget.prototype.onShow = function () {
|
||||
var textBox = this.container.find(".grid-filter-input");
|
||||
if (textBox.length <= 0) return;
|
||||
textBox.focus();
|
||||
};
|
||||
|
||||
numberFilterWidget.prototype.onRender = function (container, lang, typeName, values, cb) {
|
||||
this.cb = cb;
|
||||
this.container = container;
|
||||
this.lang = lang;
|
||||
this.typeName = typeName;
|
||||
this.value = values.length > 0 ? values[0] : { filterType: 1, filterValue: "" };//support only one filter value
|
||||
this.renderWidget();
|
||||
this.registerEvents();
|
||||
};
|
||||
|
||||
numberFilterWidget.prototype.renderWidget = function () {
|
||||
var html = '<div class="form-group">\
|
||||
<label>' + this.lang.filterTypeLabel + '</label>\
|
||||
<select class="grid-filter-type form-control">\
|
||||
<option value="1" ' + (this.value.filterType == "1" ? "selected=\"selected\"" : "") + '>' + this.lang.filterSelectTypes.Equals + '</option>\
|
||||
<option value="5" ' + (this.value.filterType == "5" ? "selected=\"selected\"" : "") + '>' + this.lang.filterSelectTypes.GreaterThan + '</option>\
|
||||
<option value="6" ' + (this.value.filterType == "6" ? "selected=\"selected\"" : "") + '>' + this.lang.filterSelectTypes.LessThan + '</option>\
|
||||
</select>\
|
||||
</div>\
|
||||
<div class="form-group">\
|
||||
<label>' + this.lang.filterValueLabel + '</label>\
|
||||
<input type="text" class="grid-filter-input form-control" value="' + this.value.filterValue + '" />\
|
||||
</div>\
|
||||
<div class="grid-filter-buttons">\
|
||||
<button type="button" class="btn btn-primary grid-apply">' + this.lang.applyFilterButtonText + '</button>\
|
||||
</div>';
|
||||
this.container.append(html);
|
||||
};
|
||||
|
||||
numberFilterWidget.prototype.registerEvents = function () {
|
||||
var $context = this;
|
||||
var applyBtn = this.container.find(".grid-apply");
|
||||
applyBtn.click(function () {
|
||||
var type = $context.container.find(".grid-filter-type").val();
|
||||
var value = $context.container.find(".grid-filter-input").val();
|
||||
var filters = [{ filterType: type, filterValue: value }];
|
||||
$context.cb(filters);
|
||||
});
|
||||
var txt = this.container.find(".grid-filter-input");
|
||||
txt.keyup(function (event) {
|
||||
if (event.keyCode == 13) { applyBtn.click(); }
|
||||
if (event.keyCode == 27) { GridMvc.closeOpenedPopups(); }
|
||||
})
|
||||
.keypress(function (event) { return $context.validateInput.call($context, event); });
|
||||
if (this.typeName == "System.Byte")
|
||||
txt.attr("maxlength", "3");
|
||||
};
|
||||
|
||||
numberFilterWidget.prototype.validateInput = function (evt) {
|
||||
var $event = evt || window.event;
|
||||
var key = $event.keyCode || $event.which;
|
||||
key = String.fromCharCode(key);
|
||||
var regex;
|
||||
switch (this.typeName) {
|
||||
case "System.Byte":
|
||||
case "System.Int32":
|
||||
case "System.Int64":
|
||||
regex = /[0-9]/;
|
||||
break;
|
||||
default:
|
||||
regex = /[0-9]|\.|\,/;
|
||||
}
|
||||
if (!regex.test(key)) {
|
||||
$event.returnValue = false;
|
||||
if ($event.preventDefault) $event.preventDefault();
|
||||
}
|
||||
};
|
||||
|
||||
return numberFilterWidget;
|
||||
})(window.jQuery);
|
||||
|
||||
/***
|
||||
* DateTimeFilterWidget - Provides filter interface for date columns (of type "System.DateTime").
|
||||
* If datepicker script included, this widget will render calendar for pick filter values
|
||||
* In other case he onRender textbox field for specifing date value (more info at http://window.jQueryui.com/)
|
||||
*/
|
||||
DateTimeFilterWidget = (function ($) {
|
||||
|
||||
function dateTimeFilterWidget() { }
|
||||
|
||||
dateTimeFilterWidget.prototype.getAssociatedTypes = function () { return ["System.DateTime"]; };
|
||||
|
||||
dateTimeFilterWidget.prototype.showClearFilterButton = function () { return true; };
|
||||
|
||||
dateTimeFilterWidget.prototype.onRender = function (container, lang, typeName, values, applycb, data) {
|
||||
this.datePickerIncluded = typeof ($.fn.datepicker) != 'undefined';
|
||||
this.cb = applycb;
|
||||
this.data = data;
|
||||
this.container = container;
|
||||
this.lang = lang;
|
||||
this.value = values.length > 0 ? values[0] : { filterType: 1, filterValue: "" };//support only one filter value
|
||||
this.renderWidget();
|
||||
this.registerEvents();
|
||||
};
|
||||
|
||||
dateTimeFilterWidget.prototype.renderWidget = function () {
|
||||
var html = '<div class="form-group">\
|
||||
<label>' + this.lang.filterTypeLabel + '</label>\
|
||||
<select class="grid-filter-type form-control">\
|
||||
<option value="1" ' + (this.value.filterType == "1" ? "selected=\"selected\"" : "") + '>' + this.lang.filterSelectTypes.Equals + '</option>\
|
||||
<option value="5" ' + (this.value.filterType == "5" ? "selected=\"selected\"" : "") + '>' + this.lang.filterSelectTypes.GreaterThan + '</option>\
|
||||
<option value="6" ' + (this.value.filterType == "6" ? "selected=\"selected\"" : "") + '>' + this.lang.filterSelectTypes.LessThan + '</option>\
|
||||
</select>\
|
||||
</div>' +
|
||||
(this.datePickerIncluded ?
|
||||
'<div class="grid-filter-datepicker"></div>'
|
||||
:
|
||||
'<div class="form-group">\
|
||||
<label>' + this.lang.filterValueLabel + '</label>\
|
||||
<input type="text" class="grid-filter-input form-control" value="' + this.value.filterValue + '" />\
|
||||
</div>\
|
||||
<div class="grid-filter-buttons">\
|
||||
<input type="button" class="btn btn-primary grid-apply" value="' + this.lang.applyFilterButtonText + '" />\
|
||||
</div>');
|
||||
this.container.append(html);
|
||||
//if window.jQueryUi included:
|
||||
if (this.datePickerIncluded) {
|
||||
var datePickerOptions = this.data || {};
|
||||
datePickerOptions.format = datePickerOptions.format || "yyyy-mm-dd";
|
||||
datePickerOptions.language = datePickerOptions.language || this.lang.code;
|
||||
|
||||
var $context = this;
|
||||
var dateContainer = this.container.find(".grid-filter-datepicker");
|
||||
dateContainer.datepicker(datePickerOptions).on('changeDate', function (ev) {
|
||||
var type = $context.container.find(".grid-filter-type").val();
|
||||
var filterValues = [{ filterType: type, filterValue: ev.format() }];
|
||||
$context.cb(filterValues);
|
||||
});
|
||||
if (this.value.filterValue)
|
||||
dateContainer.datepicker('update', this.value.filterValue);
|
||||
}
|
||||
};
|
||||
|
||||
dateTimeFilterWidget.prototype.registerEvents = function () {
|
||||
var $context = this;
|
||||
var applyBtn = this.container.find(".grid-apply");
|
||||
applyBtn.click(function () {
|
||||
var type = $context.container.find(".grid-filter-type").val();
|
||||
var value = $context.container.find(".grid-filter-input").val();
|
||||
var filterValues = [{ filterType: type, filterValue: value }];
|
||||
$context.cb(filterValues);
|
||||
});
|
||||
this.container.find(".grid-filter-input").keyup(function (event) {
|
||||
if (event.keyCode == 13) {
|
||||
applyBtn.click();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
return dateTimeFilterWidget;
|
||||
})(window.jQuery);
|
||||
|
||||
/***
|
||||
* BooleanFilterWidget - Provides filter interface for boolean columns (of type "System.Boolean").
|
||||
* Renders two button for filter - true and false
|
||||
*/
|
||||
BooleanFilterWidget = (function ($) {
|
||||
|
||||
function booleanFilterWidget() { }
|
||||
|
||||
booleanFilterWidget.prototype.getAssociatedTypes = function () { return ["System.Boolean"]; };
|
||||
|
||||
booleanFilterWidget.prototype.showClearFilterButton = function () { return true; };
|
||||
|
||||
booleanFilterWidget.prototype.onRender = function (container, lang, typeName, values, cb) {
|
||||
this.cb = cb;
|
||||
this.container = container;
|
||||
this.lang = lang;
|
||||
this.value = values.length > 0 ? values[0] : { filterType: 1, filterValue: "" };//support only one filter value
|
||||
this.renderWidget();
|
||||
this.registerEvents();
|
||||
};
|
||||
|
||||
booleanFilterWidget.prototype.renderWidget = function () {
|
||||
var html = '<label>' + this.lang.filterValueLabel + '</label>\
|
||||
<ul class="menu-list">\
|
||||
<li><a class="grid-filter-choose ' + (this.value.filterValue == "true" ? "choose-selected" : "") + '" data-value="true" href="javascript:void(0);">' + this.lang.boolTrueLabel + '</a></li>\
|
||||
<li><a class="grid-filter-choose ' + (this.value.filterValue == "false" ? "choose-selected" : "") + '" data-value="false" href="javascript:void(0);">' + this.lang.boolFalseLabel + '</a></li>\
|
||||
</ul>';
|
||||
this.container.append(html);
|
||||
};
|
||||
|
||||
booleanFilterWidget.prototype.registerEvents = function () {
|
||||
var $context = this;
|
||||
var applyBtn = this.container.find(".grid-filter-choose");
|
||||
applyBtn.click(function () {
|
||||
var filterValues = [{ filterType: "1", filterValue: $(this).attr("data-value") }];
|
||||
$context.cb(filterValues);
|
||||
});
|
||||
};
|
||||
|
||||
return booleanFilterWidget;
|
||||
})(window.jQuery);
|
||||
|
||||
//startup init:
|
||||
(function ($) {
|
||||
if (!$) return;//jquery not referenced
|
||||
$(function () {
|
||||
$(".grid-mvc").each(function () {
|
||||
$(".grid-mvc").gridmvc();
|
||||
});
|
||||
});
|
||||
})(window.jQuery);
|
||||
@@ -0,0 +1,22 @@
|
||||
/***
|
||||
* Grid.Mvc russian language (ru-RU) http://gridmvc.codeplex.com/
|
||||
*/
|
||||
window.GridMvc = window.GridMvc || {};
|
||||
window.GridMvc.lang = window.GridMvc.lang || {};
|
||||
GridMvc.lang.ru = {
|
||||
filterTypeLabel: "Тип фильтра: ",
|
||||
filterValueLabel: "Значение:",
|
||||
applyFilterButtonText: "Применить",
|
||||
filterSelectTypes: {
|
||||
Equals: "Равно",
|
||||
StartsWith: "Начинается с",
|
||||
Contains: "Содержит",
|
||||
EndsWith: "Оканчивается",
|
||||
GreaterThan: "Больше",
|
||||
LessThan: "Меньше"
|
||||
},
|
||||
code: 'ru',
|
||||
boolTrueLabel: "Да",
|
||||
boolFalseLabel: "Нет",
|
||||
clearFilterLabel: "Очистить фильтр"
|
||||
};
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,65 @@
|
||||
@using GridMvc.Columns
|
||||
@model GridMvc.IGrid
|
||||
@if (Model == null) { return; }
|
||||
@if (Model.RenderOptions.RenderRowsOnly)
|
||||
{
|
||||
@RenderGridBody();
|
||||
}
|
||||
else
|
||||
{
|
||||
<div class="grid-mvc" data-lang="@Model.Language" data-gridname="@Model.RenderOptions.GridName" data-selectable="@Model.RenderOptions.Selectable.ToString().ToLower()" data-multiplefilters ="@Model.RenderOptions.AllowMultipleFilters.ToString().ToLower()">
|
||||
<div class="grid-wrap">
|
||||
<table class="table table-striped grid-table">
|
||||
@* Draw grid header *@
|
||||
<thead>
|
||||
@RenderGridHeader()
|
||||
</thead>
|
||||
<tbody>
|
||||
@RenderGridBody()
|
||||
</tbody>
|
||||
</table>
|
||||
@RenderGridPager()
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
@helper RenderGridBody()
|
||||
{
|
||||
if (!Model.ItemsToDisplay.Any())
|
||||
{
|
||||
<tr class="grid-empty-text">
|
||||
<td colspan="@Model.Columns.Count()">
|
||||
@Model.EmptyGridText
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (object item in Model.ItemsToDisplay)
|
||||
{
|
||||
<tr class="grid-row @Model.GetRowCssClasses(item)">
|
||||
@foreach (IGridColumn column in Model.Columns)
|
||||
{
|
||||
@column.CellRenderer.Render(column, column.GetCell(item))
|
||||
}
|
||||
</tr>
|
||||
}
|
||||
}
|
||||
}
|
||||
@helper RenderGridHeader()
|
||||
{
|
||||
<tr>
|
||||
@foreach (IGridColumn column in Model.Columns)
|
||||
{
|
||||
@column.HeaderRenderer.Render(column)
|
||||
}
|
||||
</tr>
|
||||
}
|
||||
@helper RenderGridPager()
|
||||
{
|
||||
if (Model.EnablePaging && Model.Pager != null)
|
||||
{
|
||||
<div class="grid-footer">
|
||||
@Html.Partial(Model.Pager.TemplateName, Model.Pager)
|
||||
</div>
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
@model GridMvc.Pagination.GridPager
|
||||
@if (Model == null || Model.PageCount <= 1)
|
||||
{
|
||||
return;
|
||||
}
|
||||
<div class="grid-pager">
|
||||
<ul class="pagination">
|
||||
@if (Model.CurrentPage > 1)
|
||||
{
|
||||
<li>
|
||||
<a href="@Model.GetLinkForPage(Model.CurrentPage - 1)">«</a>
|
||||
</li>
|
||||
}
|
||||
|
||||
@if (Model.StartDisplayedPage > 1)
|
||||
{
|
||||
<li>
|
||||
<a href="@Model.GetLinkForPage(1)">1</a>
|
||||
</li>
|
||||
if (Model.StartDisplayedPage > 2)
|
||||
{
|
||||
<li><a href="@Model.GetLinkForPage(Model.StartDisplayedPage - 1)">...</a></li>
|
||||
}
|
||||
}
|
||||
@for (int i = Model.StartDisplayedPage; i <= Model.EndDisplayedPage; i++)
|
||||
{
|
||||
if (i == Model.CurrentPage)
|
||||
{
|
||||
<li class="active"><span>@i</span></li>
|
||||
}
|
||||
else
|
||||
{
|
||||
<li><a href="@Model.GetLinkForPage(i)">@i</a></li>
|
||||
}
|
||||
}
|
||||
@if (Model.EndDisplayedPage < Model.PageCount)
|
||||
{
|
||||
if (Model.EndDisplayedPage < Model.PageCount - 1)
|
||||
{
|
||||
<li><a href="@Model.GetLinkForPage(Model.EndDisplayedPage + 1)">...</a></li>
|
||||
}
|
||||
<li><a href="@Model.GetLinkForPage(Model.PageCount)">@Model.PageCount</a></li>
|
||||
}
|
||||
@if (Model.CurrentPage < Model.PageCount)
|
||||
{
|
||||
<li><a href="@Model.GetLinkForPage(Model.CurrentPage + 1)">»</a></li>
|
||||
}
|
||||
</ul>
|
||||
</div>
|
||||
@@ -0,0 +1,9 @@
|
||||
<configuration>
|
||||
<system.web>
|
||||
<pages>
|
||||
<namespaces>
|
||||
<add namespace ="GridMvc" />
|
||||
</namespaces>
|
||||
</pages>
|
||||
</system.web>
|
||||
</configuration>
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
-8
@@ -1,8 +0,0 @@
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<None Include="$(CscToolPath)\*">
|
||||
<Link>roslyn\%(RecursiveDir)%(Filename)%(Extension)</Link>
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
BIN
Binary file not shown.
-209
@@ -1,209 +0,0 @@
|
||||
param($installPath, $toolsPath, $package, $project)
|
||||
|
||||
$compilerPackageName = 'Microsoft.Net.Compilers'
|
||||
$roslynSubFolder = 'roslyn'
|
||||
|
||||
if ($project -eq $null) {
|
||||
$project = Get-Project
|
||||
}
|
||||
|
||||
$libDirectory = Join-Path $installPath 'lib\net45'
|
||||
$projectRoot = $project.Properties.Item('FullPath').Value
|
||||
$binDirectory = Join-Path $projectRoot 'bin'
|
||||
|
||||
# We need to copy the provider assembly into the bin\ folder, otherwise
|
||||
# Microsoft.VisualStudio.Web.Host.exe cannot find the assembly.
|
||||
# However, users will see the error after they clean solutions.
|
||||
New-Item $binDirectory -type directory -force | Out-Null
|
||||
Copy-Item $libDirectory\* $binDirectory | Out-Null
|
||||
|
||||
# For Web Site, we need to copy the Roslyn toolset into
|
||||
# the applicaiton's bin folder.
|
||||
# For Web Applicaiton project, this is done in csproj.
|
||||
if ($project.Type -eq 'Web Site') {
|
||||
$packageDirectory = Split-Path $installPath
|
||||
|
||||
# Get the installed Microsoft.Net.Compilers package.
|
||||
$compilerPackages = Get-Package -ProjectName $project.Name | Where-Object {$_.Id -eq $compilerPackageName}
|
||||
if ($compilerPackages.Count -eq 0)
|
||||
{
|
||||
Write-Host "Package $compilerPackageName is not installed correctly."
|
||||
Write-Host 'The install.ps1 did not complete.'
|
||||
break
|
||||
}
|
||||
|
||||
$compilerPackageFolderName = $compilerPackages[0].Id + "." + $compilerPackages[0].Versions[0]
|
||||
$compilerPackageDirectory = Join-Path $packageDirectory $compilerPackageFolderName
|
||||
if ((Get-Item $compilerPackageDirectory) -isnot [System.IO.DirectoryInfo])
|
||||
{
|
||||
Write-Host "The install.ps1 cannot find the installation location of package $compilerPackageName, or the pakcage is not installed correctly."
|
||||
Write-Host 'The install.ps1 did not complete.'
|
||||
break
|
||||
}
|
||||
|
||||
$compilerPackageToolsDirectory = Join-Path $compilerPackageDirectory 'tools'
|
||||
$roslynSubDirectory = Join-Path $binDirectory $roslynSubFolder
|
||||
New-Item $roslynSubDirectory -type directory -force | Out-Null
|
||||
Copy-Item $compilerPackageToolsDirectory\* $roslynSubDirectory | Out-Null
|
||||
|
||||
# Generate a .refresh file for each dll/exe file.
|
||||
Push-Location
|
||||
Set-Location $projectRoot
|
||||
$relativeAssemblySource = Resolve-Path -relative $compilerPackageToolsDirectory
|
||||
Pop-Location
|
||||
|
||||
Get-ChildItem -Path $roslynSubDirectory | `
|
||||
Foreach-Object {
|
||||
if (($_.Extension -eq ".dll") -or ($_.Extension -eq ".exe")) {
|
||||
$refreshFile = $_.FullName
|
||||
$refreshFile += ".refresh"
|
||||
$refreshContent = Join-Path $relativeAssemblySource $_.Name
|
||||
Set-Content $refreshFile $refreshContent
|
||||
}
|
||||
}
|
||||
}
|
||||
# SIG # Begin signature block
|
||||
# MIIarQYJKoZIhvcNAQcCoIIanjCCGpoCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB
|
||||
# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR
|
||||
# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUT2Dgu+1mvQqumIV4qvwdp5mW
|
||||
# sPegghWCMIIEwzCCA6ugAwIBAgITMwAAAHGzLoprgqofTgAAAAAAcTANBgkqhkiG
|
||||
# 9w0BAQUFADB3MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4G
|
||||
# A1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSEw
|
||||
# HwYDVQQDExhNaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EwHhcNMTUwMzIwMTczMjAz
|
||||
# WhcNMTYwNjIwMTczMjAzWjCBszELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hp
|
||||
# bmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw
|
||||
# b3JhdGlvbjENMAsGA1UECxMETU9QUjEnMCUGA1UECxMebkNpcGhlciBEU0UgRVNO
|
||||
# OkI4RUMtMzBBNC03MTQ0MSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBT
|
||||
# ZXJ2aWNlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6pG9soj9FG8h
|
||||
# NigDZjM6Zgj7W0ukq6AoNEpDMgjAhuXJPdUlvHs+YofWfe8PdFOj8ZFjiHR/6CTN
|
||||
# A1DF8coAFnulObAGHDxEfvnrxLKBvBcjuv1lOBmFf8qgKf32OsALL2j04DROfW8X
|
||||
# wG6Zqvp/YSXRJnDSdH3fYXNczlQqOVEDMwn4UK14x4kIttSFKj/X2B9R6u/8aF61
|
||||
# wecHaDKNL3JR/gMxR1HF0utyB68glfjaavh3Z+RgmnBMq0XLfgiv5YHUV886zBN1
|
||||
# nSbNoKJpULw6iJTfsFQ43ok5zYYypZAPfr/tzJQlpkGGYSbH3Td+XA3oF8o3f+gk
|
||||
# tk60+Bsj6wIDAQABo4IBCTCCAQUwHQYDVR0OBBYEFPj9I4cFlIBWzTOlQcJszAg2
|
||||
# yLKiMB8GA1UdIwQYMBaAFCM0+NlSRnAK7UD7dvuzK7DDNbMPMFQGA1UdHwRNMEsw
|
||||
# SaBHoEWGQ2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3Rz
|
||||
# L01pY3Jvc29mdFRpbWVTdGFtcFBDQS5jcmwwWAYIKwYBBQUHAQEETDBKMEgGCCsG
|
||||
# AQUFBzAChjxodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY3Jv
|
||||
# c29mdFRpbWVTdGFtcFBDQS5jcnQwEwYDVR0lBAwwCgYIKwYBBQUHAwgwDQYJKoZI
|
||||
# hvcNAQEFBQADggEBAC0EtMopC1n8Luqgr0xOaAT4ku0pwmbMa3DJh+i+h/xd9N1P
|
||||
# pRpveJetawU4UUFynTnkGhvDbXH8cLbTzLaQWAQoP9Ye74OzFBgMlQv3pRETmMaF
|
||||
# Vl7uM7QMN7WA6vUSaNkue4YIcjsUe9TZ0BZPwC8LHy3K5RvQrumEsI8LXXO4FoFA
|
||||
# I1gs6mGq/r1/041acPx5zWaWZWO1BRJ24io7K+2CrJrsJ0Gnlw4jFp9ByE5tUxFA
|
||||
# BMxgmdqY7Cuul/vgffW6iwD0JRd/Ynq7UVfB8PDNnBthc62VjCt2IqircDi0ASh9
|
||||
# ZkJT3p/0B3xaMA6CA1n2hIa5FSVisAvSz/HblkUwggTsMIID1KADAgECAhMzAAAB
|
||||
# Cix5rtd5e6asAAEAAAEKMA0GCSqGSIb3DQEBBQUAMHkxCzAJBgNVBAYTAlVTMRMw
|
||||
# EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN
|
||||
# aWNyb3NvZnQgQ29ycG9yYXRpb24xIzAhBgNVBAMTGk1pY3Jvc29mdCBDb2RlIFNp
|
||||
# Z25pbmcgUENBMB4XDTE1MDYwNDE3NDI0NVoXDTE2MDkwNDE3NDI0NVowgYMxCzAJ
|
||||
# BgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k
|
||||
# MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xDTALBgNVBAsTBE1PUFIx
|
||||
# HjAcBgNVBAMTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjCCASIwDQYJKoZIhvcNAQEB
|
||||
# BQADggEPADCCAQoCggEBAJL8bza74QO5KNZG0aJhuqVG+2MWPi75R9LH7O3HmbEm
|
||||
# UXW92swPBhQRpGwZnsBfTVSJ5E1Q2I3NoWGldxOaHKftDXT3p1Z56Cj3U9KxemPg
|
||||
# 9ZSXt+zZR/hsPfMliLO8CsUEp458hUh2HGFGqhnEemKLwcI1qvtYb8VjC5NJMIEb
|
||||
# e99/fE+0R21feByvtveWE1LvudFNOeVz3khOPBSqlw05zItR4VzRO/COZ+owYKlN
|
||||
# Wp1DvdsjusAP10sQnZxN8FGihKrknKc91qPvChhIqPqxTqWYDku/8BTzAMiwSNZb
|
||||
# /jjXiREtBbpDAk8iAJYlrX01boRoqyAYOCj+HKIQsaUCAwEAAaOCAWAwggFcMBMG
|
||||
# A1UdJQQMMAoGCCsGAQUFBwMDMB0GA1UdDgQWBBSJ/gox6ibN5m3HkZG5lIyiGGE3
|
||||
# NDBRBgNVHREESjBIpEYwRDENMAsGA1UECxMETU9QUjEzMDEGA1UEBRMqMzE1OTUr
|
||||
# MDQwNzkzNTAtMTZmYS00YzYwLWI2YmYtOWQyYjFjZDA1OTg0MB8GA1UdIwQYMBaA
|
||||
# FMsR6MrStBZYAck3LjMWFrlMmgofMFYGA1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9j
|
||||
# cmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY0NvZFNpZ1BDQV8w
|
||||
# OC0zMS0yMDEwLmNybDBaBggrBgEFBQcBAQROMEwwSgYIKwYBBQUHMAKGPmh0dHA6
|
||||
# Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljQ29kU2lnUENBXzA4LTMx
|
||||
# LTIwMTAuY3J0MA0GCSqGSIb3DQEBBQUAA4IBAQCmqFOR3zsB/mFdBlrrZvAM2PfZ
|
||||
# hNMAUQ4Q0aTRFyjnjDM4K9hDxgOLdeszkvSp4mf9AtulHU5DRV0bSePgTxbwfo/w
|
||||
# iBHKgq2k+6apX/WXYMh7xL98m2ntH4LB8c2OeEti9dcNHNdTEtaWUu81vRmOoECT
|
||||
# oQqlLRacwkZ0COvb9NilSTZUEhFVA7N7FvtH/vto/MBFXOI/Enkzou+Cxd5AGQfu
|
||||
# FcUKm1kFQanQl56BngNb/ErjGi4FrFBHL4z6edgeIPgF+ylrGBT6cgS3C6eaZOwR
|
||||
# XU9FSY0pGi370LYJU180lOAWxLnqczXoV+/h6xbDGMcGszvPYYTitkSJlKOGMIIF
|
||||
# vDCCA6SgAwIBAgIKYTMmGgAAAAAAMTANBgkqhkiG9w0BAQUFADBfMRMwEQYKCZIm
|
||||
# iZPyLGQBGRYDY29tMRkwFwYKCZImiZPyLGQBGRYJbWljcm9zb2Z0MS0wKwYDVQQD
|
||||
# EyRNaWNyb3NvZnQgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMTAwODMx
|
||||
# MjIxOTMyWhcNMjAwODMxMjIyOTMyWjB5MQswCQYDVQQGEwJVUzETMBEGA1UECBMK
|
||||
# V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0
|
||||
# IENvcnBvcmF0aW9uMSMwIQYDVQQDExpNaWNyb3NvZnQgQ29kZSBTaWduaW5nIFBD
|
||||
# QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJyWVwZMGS/HZpgICBC
|
||||
# mXZTbD4b1m/My/Hqa/6XFhDg3zp0gxq3L6Ay7P/ewkJOI9VyANs1VwqJyq4gSfTw
|
||||
# aKxNS42lvXlLcZtHB9r9Jd+ddYjPqnNEf9eB2/O98jakyVxF3K+tPeAoaJcap6Vy
|
||||
# c1bxF5Tk/TWUcqDWdl8ed0WDhTgW0HNbBbpnUo2lsmkv2hkL/pJ0KeJ2L1TdFDBZ
|
||||
# +NKNYv3LyV9GMVC5JxPkQDDPcikQKCLHN049oDI9kM2hOAaFXE5WgigqBTK3S9dP
|
||||
# Y+fSLWLxRT3nrAgA9kahntFbjCZT6HqqSvJGzzc8OJ60d1ylF56NyxGPVjzBrAlf
|
||||
# A9MCAwEAAaOCAV4wggFaMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMsR6MrS
|
||||
# tBZYAck3LjMWFrlMmgofMAsGA1UdDwQEAwIBhjASBgkrBgEEAYI3FQEEBQIDAQAB
|
||||
# MCMGCSsGAQQBgjcVAgQWBBT90TFO0yaKleGYYDuoMW+mPLzYLTAZBgkrBgEEAYI3
|
||||
# FAIEDB4KAFMAdQBiAEMAQTAfBgNVHSMEGDAWgBQOrIJgQFYnl+UlE/wq4QpTlVnk
|
||||
# pDBQBgNVHR8ESTBHMEWgQ6BBhj9odHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtp
|
||||
# L2NybC9wcm9kdWN0cy9taWNyb3NvZnRyb290Y2VydC5jcmwwVAYIKwYBBQUHAQEE
|
||||
# SDBGMEQGCCsGAQUFBzAChjhodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpL2Nl
|
||||
# cnRzL01pY3Jvc29mdFJvb3RDZXJ0LmNydDANBgkqhkiG9w0BAQUFAAOCAgEAWTk+
|
||||
# fyZGr+tvQLEytWrrDi9uqEn361917Uw7LddDrQv+y+ktMaMjzHxQmIAhXaw9L0y6
|
||||
# oqhWnONwu7i0+Hm1SXL3PupBf8rhDBdpy6WcIC36C1DEVs0t40rSvHDnqA2iA6VW
|
||||
# 4LiKS1fylUKc8fPv7uOGHzQ8uFaa8FMjhSqkghyT4pQHHfLiTviMocroE6WRTsgb
|
||||
# 0o9ylSpxbZsa+BzwU9ZnzCL/XB3Nooy9J7J5Y1ZEolHN+emjWFbdmwJFRC9f9Nqu
|
||||
# 1IIybvyklRPk62nnqaIsvsgrEA5ljpnb9aL6EiYJZTiU8XofSrvR4Vbo0HiWGFzJ
|
||||
# NRZf3ZMdSY4tvq00RBzuEBUaAF3dNVshzpjHCe6FDoxPbQ4TTj18KUicctHzbMrB
|
||||
# 7HCjV5JXfZSNoBtIA1r3z6NnCnSlNu0tLxfI5nI3EvRvsTxngvlSso0zFmUeDord
|
||||
# EN5k9G/ORtTTF+l5xAS00/ss3x+KnqwK+xMnQK3k+eGpf0a7B2BHZWBATrBC7E7t
|
||||
# s3Z52Ao0CW0cgDEf4g5U3eWh++VHEK1kmP9QFi58vwUheuKVQSdpw5OPlcmN2Jsh
|
||||
# rg1cnPCiroZogwxqLbt2awAdlq3yFnv2FoMkuYjPaqhHMS+a3ONxPdcAfmJH0c6I
|
||||
# ybgY+g5yjcGjPa8CQGr/aZuW4hCoELQ3UAjWwz0wggYHMIID76ADAgECAgphFmg0
|
||||
# AAAAAAAcMA0GCSqGSIb3DQEBBQUAMF8xEzARBgoJkiaJk/IsZAEZFgNjb20xGTAX
|
||||
# BgoJkiaJk/IsZAEZFgltaWNyb3NvZnQxLTArBgNVBAMTJE1pY3Jvc29mdCBSb290
|
||||
# IENlcnRpZmljYXRlIEF1dGhvcml0eTAeFw0wNzA0MDMxMjUzMDlaFw0yMTA0MDMx
|
||||
# MzAzMDlaMHcxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYD
|
||||
# VQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xITAf
|
||||
# BgNVBAMTGE1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQTCCASIwDQYJKoZIhvcNAQEB
|
||||
# BQADggEPADCCAQoCggEBAJ+hbLHf20iSKnxrLhnhveLjxZlRI1Ctzt0YTiQP7tGn
|
||||
# 0UytdDAgEesH1VSVFUmUG0KSrphcMCbaAGvoe73siQcP9w4EmPCJzB/LMySHnfL0
|
||||
# Zxws/HvniB3q506jocEjU8qN+kXPCdBer9CwQgSi+aZsk2fXKNxGU7CG0OUoRi4n
|
||||
# rIZPVVIM5AMs+2qQkDBuh/NZMJ36ftaXs+ghl3740hPzCLdTbVK0RZCfSABKR2YR
|
||||
# JylmqJfk0waBSqL5hKcRRxQJgp+E7VV4/gGaHVAIhQAQMEbtt94jRrvELVSfrx54
|
||||
# QTF3zJvfO4OToWECtR0Nsfz3m7IBziJLVP/5BcPCIAsCAwEAAaOCAaswggGnMA8G
|
||||
# A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFCM0+NlSRnAK7UD7dvuzK7DDNbMPMAsG
|
||||
# A1UdDwQEAwIBhjAQBgkrBgEEAYI3FQEEAwIBADCBmAYDVR0jBIGQMIGNgBQOrIJg
|
||||
# QFYnl+UlE/wq4QpTlVnkpKFjpGEwXzETMBEGCgmSJomT8ixkARkWA2NvbTEZMBcG
|
||||
# CgmSJomT8ixkARkWCW1pY3Jvc29mdDEtMCsGA1UEAxMkTWljcm9zb2Z0IFJvb3Qg
|
||||
# Q2VydGlmaWNhdGUgQXV0aG9yaXR5ghB5rRahSqClrUxzWPQHEy5lMFAGA1UdHwRJ
|
||||
# MEcwRaBDoEGGP2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1
|
||||
# Y3RzL21pY3Jvc29mdHJvb3RjZXJ0LmNybDBUBggrBgEFBQcBAQRIMEYwRAYIKwYB
|
||||
# BQUHMAKGOGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljcm9z
|
||||
# b2Z0Um9vdENlcnQuY3J0MBMGA1UdJQQMMAoGCCsGAQUFBwMIMA0GCSqGSIb3DQEB
|
||||
# BQUAA4ICAQAQl4rDXANENt3ptK132855UU0BsS50cVttDBOrzr57j7gu1BKijG1i
|
||||
# uFcCy04gE1CZ3XpA4le7r1iaHOEdAYasu3jyi9DsOwHu4r6PCgXIjUji8FMV3U+r
|
||||
# kuTnjWrVgMHmlPIGL4UD6ZEqJCJw+/b85HiZLg33B+JwvBhOnY5rCnKVuKE5nGct
|
||||
# xVEO6mJcPxaYiyA/4gcaMvnMMUp2MT0rcgvI6nA9/4UKE9/CCmGO8Ne4F+tOi3/F
|
||||
# NSteo7/rvH0LQnvUU3Ih7jDKu3hlXFsBFwoUDtLaFJj1PLlmWLMtL+f5hYbMUVbo
|
||||
# nXCUbKw5TNT2eb+qGHpiKe+imyk0BncaYsk9Hm0fgvALxyy7z0Oz5fnsfbXjpKh0
|
||||
# NbhOxXEjEiZ2CzxSjHFaRkMUvLOzsE1nyJ9C/4B5IYCeFTBm6EISXhrIniIh0EPp
|
||||
# K+m79EjMLNTYMoBMJipIJF9a6lbvpt6Znco6b72BJ3QGEe52Ib+bgsEnVLaxaj2J
|
||||
# oXZhtG6hE6a/qkfwEm/9ijJssv7fUciMI8lmvZ0dhxJkAj0tr1mPuOQh5bWwymO0
|
||||
# eFQF1EEuUKyUsKV4q7OglnUa2ZKHE3UiLzKoCG6gW4wlv6DvhMoh1useT8ma7kng
|
||||
# 9wFlb4kLfchpyOZu6qeXzjEp/w7FW1zYTRuh2Povnj8uVRZryROj/TGCBJUwggSR
|
||||
# AgEBMIGQMHkxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYD
|
||||
# VQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xIzAh
|
||||
# BgNVBAMTGk1pY3Jvc29mdCBDb2RlIFNpZ25pbmcgUENBAhMzAAABCix5rtd5e6as
|
||||
# AAEAAAEKMAkGBSsOAwIaBQCgga4wGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQw
|
||||
# HAYKKwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwIwYJKoZIhvcNAQkEMRYEFGrD
|
||||
# n8HrppdN2VtEdPWmgfdnM+wTME4GCisGAQQBgjcCAQwxQDA+oCSAIgBNAGkAYwBy
|
||||
# AG8AcwBvAGYAdAAgAEEAUwBQAC4ATgBFAFShFoAUaHR0cDovL3d3dy5hc3AubmV0
|
||||
# LyAwDQYJKoZIhvcNAQEBBQAEggEAg7sCrrfozldk914zeh6aUyw0xeNb8wnrc9RV
|
||||
# VSfMdCQ2Fp+FTzC6gfkEe63iCaA0uHucepFMzNcY3g3h8obwQRwV/jH8PNeFIZFe
|
||||
# mpKuoGqK/dyCtqRM3aXYxc4ejQTX3RzoSZmgnATaLFeOKOgH+kmzjmUZuhbG0+hj
|
||||
# bpcOQ3uvQmMLpWlJGuws1Afpt/q1xSXzQTyX4tiDSrLe9HYI1yTSLm6jR4ZkGgMf
|
||||
# awh/e1JAWWRR50nNdHTRAbbm4JbPNZsUIrjD+72cfx95Q98kRRgFAg0jnkeq9CSD
|
||||
# tgSRcWxYNJJNZ4D2CMWX1xWAqT1pjNCy52wSRkTZmbWfKEul2aGCAigwggIkBgkq
|
||||
# hkiG9w0BCQYxggIVMIICEQIBATCBjjB3MQswCQYDVQQGEwJVUzETMBEGA1UECBMK
|
||||
# V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0
|
||||
# IENvcnBvcmF0aW9uMSEwHwYDVQQDExhNaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EC
|
||||
# EzMAAABxsy6Ka4KqH04AAAAAAHEwCQYFKw4DAhoFAKBdMBgGCSqGSIb3DQEJAzEL
|
||||
# BgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTE1MDgyMDE1MDczNVowIwYJKoZI
|
||||
# hvcNAQkEMRYEFF6WSYete4bZiV+i2kwUeGVUI0a2MA0GCSqGSIb3DQEBBQUABIIB
|
||||
# AEw7rJgr1JFOY7cQt0qdly81fQ3ir7tH8C34PcaEd+nvwthiQDT/qU7P98WO6Jft
|
||||
# HfHE8Xjt2C5dTfKmwVq4P0rQGyba/bEh9dQ5RWfiQodb1rRYWAkyPyJj34HLsTk4
|
||||
# dPcIlYHCv5LPzXF+9UezWEYe0PjlYjNe93Kx1GfxvuBOrBgTh8jLxsvhD/pXN+9r
|
||||
# W6AJcpd5/nEG2zC6sKmq+/RKlmNWxUYR96TvlipOjq4J8iPRx6soNNPJPf+AXp+T
|
||||
# f6Um3fOCgGYquyzU9jYVQYHoQYIcpgyJJDRnyL7tKGZqQBh4DisFcp8IurRL2Fta
|
||||
# nX8Uq7gB9swpfXodY5TphAY=
|
||||
# SIG # End signature block
|
||||
-160
@@ -1,160 +0,0 @@
|
||||
param($installPath, $toolsPath, $package, $project)
|
||||
|
||||
$roslynSubFolder = 'roslyn'
|
||||
|
||||
if ($project -eq $null) {
|
||||
$project = Get-Project
|
||||
}
|
||||
|
||||
$projectRoot = $project.Properties.Item('FullPath').Value
|
||||
$binDirectory = Join-Path $projectRoot 'bin'
|
||||
$targetDirectory = Join-Path $binDirectory $roslynSubFolder
|
||||
|
||||
if (Test-Path $targetDirectory) {
|
||||
Remove-Item $targetDirectory -Force -Recurse
|
||||
}
|
||||
# SIG # Begin signature block
|
||||
# MIIarQYJKoZIhvcNAQcCoIIanjCCGpoCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB
|
||||
# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR
|
||||
# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUBnzRb+A5zqyBejTiJB6CJOry
|
||||
# jZ6gghWCMIIEwzCCA6ugAwIBAgITMwAAAHD0GL8jIfxQnQAAAAAAcDANBgkqhkiG
|
||||
# 9w0BAQUFADB3MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4G
|
||||
# A1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSEw
|
||||
# HwYDVQQDExhNaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EwHhcNMTUwMzIwMTczMjAy
|
||||
# WhcNMTYwNjIwMTczMjAyWjCBszELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hp
|
||||
# bmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw
|
||||
# b3JhdGlvbjENMAsGA1UECxMETU9QUjEnMCUGA1UECxMebkNpcGhlciBEU0UgRVNO
|
||||
# OkY1MjgtMzc3Ny04QTc2MSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBT
|
||||
# ZXJ2aWNlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoxTZ7xygeRG9
|
||||
# LZoEnSM0gqVCHSsA0dIbMSnIKivzLfRui93iG/gT9MBfcFOv5zMPdEoHFGzcKAO4
|
||||
# Kgp4xG4gjguAb1Z7k/RxT8LTq8bsLa6V0GNnsGSmNAMM44quKFICmTX5PGTbKzJ3
|
||||
# wjTuUh5flwZ0CX/wovfVkercYttThkdujAFb4iV7ePw9coMie1mToq+TyRgu5/YK
|
||||
# VA6YDWUGV3eTka+Ur4S+uG+thPT7FeKT4thINnVZMgENcXYAlUlpbNTGNjpaMNDA
|
||||
# ynOJ5pT2Ix4SYFEACMHe2j9IhO21r9TTmjiVqbqjWLV4aEa/D4xjcb46Q0NZEPBK
|
||||
# unvW5QYT3QIDAQABo4IBCTCCAQUwHQYDVR0OBBYEFG3P87iErvfMdr24e6w9l2GB
|
||||
# dCsnMB8GA1UdIwQYMBaAFCM0+NlSRnAK7UD7dvuzK7DDNbMPMFQGA1UdHwRNMEsw
|
||||
# SaBHoEWGQ2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3Rz
|
||||
# L01pY3Jvc29mdFRpbWVTdGFtcFBDQS5jcmwwWAYIKwYBBQUHAQEETDBKMEgGCCsG
|
||||
# AQUFBzAChjxodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY3Jv
|
||||
# c29mdFRpbWVTdGFtcFBDQS5jcnQwEwYDVR0lBAwwCgYIKwYBBQUHAwgwDQYJKoZI
|
||||
# hvcNAQEFBQADggEBAF46KvVn9AUwKt7hue9n/Cr/bnIpn558xxPDo+WOPATpJhVN
|
||||
# 98JnglwKW8UK7lXwoy2Ooh2isywt0BHimioB0TAmZ6GmbokxHG7dxHFU8Ami3cHW
|
||||
# NnPADP9VCGv8oZT9XSwnIezRIwbcBCzvuQLbA7tHcxgK632ZzV8G4Ij3ipPFEhEb
|
||||
# 81KVo3Kg0ljZwyzia3931GNT6oK4L0dkKJjHgzvxayhh+AqIgkVSkumDJklct848
|
||||
# mn+voFGTxby6y9ErtbuQGQqmp2p++P0VfkZEh6UG1PxKcDjG6LVK9NuuL+xDyYmi
|
||||
# KMVV2cG6W6pgu6W7+dUCjg4PbcI1cMCo7A2hsrgwggTsMIID1KADAgECAhMzAAAB
|
||||
# Cix5rtd5e6asAAEAAAEKMA0GCSqGSIb3DQEBBQUAMHkxCzAJBgNVBAYTAlVTMRMw
|
||||
# EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN
|
||||
# aWNyb3NvZnQgQ29ycG9yYXRpb24xIzAhBgNVBAMTGk1pY3Jvc29mdCBDb2RlIFNp
|
||||
# Z25pbmcgUENBMB4XDTE1MDYwNDE3NDI0NVoXDTE2MDkwNDE3NDI0NVowgYMxCzAJ
|
||||
# BgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k
|
||||
# MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xDTALBgNVBAsTBE1PUFIx
|
||||
# HjAcBgNVBAMTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjCCASIwDQYJKoZIhvcNAQEB
|
||||
# BQADggEPADCCAQoCggEBAJL8bza74QO5KNZG0aJhuqVG+2MWPi75R9LH7O3HmbEm
|
||||
# UXW92swPBhQRpGwZnsBfTVSJ5E1Q2I3NoWGldxOaHKftDXT3p1Z56Cj3U9KxemPg
|
||||
# 9ZSXt+zZR/hsPfMliLO8CsUEp458hUh2HGFGqhnEemKLwcI1qvtYb8VjC5NJMIEb
|
||||
# e99/fE+0R21feByvtveWE1LvudFNOeVz3khOPBSqlw05zItR4VzRO/COZ+owYKlN
|
||||
# Wp1DvdsjusAP10sQnZxN8FGihKrknKc91qPvChhIqPqxTqWYDku/8BTzAMiwSNZb
|
||||
# /jjXiREtBbpDAk8iAJYlrX01boRoqyAYOCj+HKIQsaUCAwEAAaOCAWAwggFcMBMG
|
||||
# A1UdJQQMMAoGCCsGAQUFBwMDMB0GA1UdDgQWBBSJ/gox6ibN5m3HkZG5lIyiGGE3
|
||||
# NDBRBgNVHREESjBIpEYwRDENMAsGA1UECxMETU9QUjEzMDEGA1UEBRMqMzE1OTUr
|
||||
# MDQwNzkzNTAtMTZmYS00YzYwLWI2YmYtOWQyYjFjZDA1OTg0MB8GA1UdIwQYMBaA
|
||||
# FMsR6MrStBZYAck3LjMWFrlMmgofMFYGA1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9j
|
||||
# cmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY0NvZFNpZ1BDQV8w
|
||||
# OC0zMS0yMDEwLmNybDBaBggrBgEFBQcBAQROMEwwSgYIKwYBBQUHMAKGPmh0dHA6
|
||||
# Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljQ29kU2lnUENBXzA4LTMx
|
||||
# LTIwMTAuY3J0MA0GCSqGSIb3DQEBBQUAA4IBAQCmqFOR3zsB/mFdBlrrZvAM2PfZ
|
||||
# hNMAUQ4Q0aTRFyjnjDM4K9hDxgOLdeszkvSp4mf9AtulHU5DRV0bSePgTxbwfo/w
|
||||
# iBHKgq2k+6apX/WXYMh7xL98m2ntH4LB8c2OeEti9dcNHNdTEtaWUu81vRmOoECT
|
||||
# oQqlLRacwkZ0COvb9NilSTZUEhFVA7N7FvtH/vto/MBFXOI/Enkzou+Cxd5AGQfu
|
||||
# FcUKm1kFQanQl56BngNb/ErjGi4FrFBHL4z6edgeIPgF+ylrGBT6cgS3C6eaZOwR
|
||||
# XU9FSY0pGi370LYJU180lOAWxLnqczXoV+/h6xbDGMcGszvPYYTitkSJlKOGMIIF
|
||||
# vDCCA6SgAwIBAgIKYTMmGgAAAAAAMTANBgkqhkiG9w0BAQUFADBfMRMwEQYKCZIm
|
||||
# iZPyLGQBGRYDY29tMRkwFwYKCZImiZPyLGQBGRYJbWljcm9zb2Z0MS0wKwYDVQQD
|
||||
# EyRNaWNyb3NvZnQgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMTAwODMx
|
||||
# MjIxOTMyWhcNMjAwODMxMjIyOTMyWjB5MQswCQYDVQQGEwJVUzETMBEGA1UECBMK
|
||||
# V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0
|
||||
# IENvcnBvcmF0aW9uMSMwIQYDVQQDExpNaWNyb3NvZnQgQ29kZSBTaWduaW5nIFBD
|
||||
# QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJyWVwZMGS/HZpgICBC
|
||||
# mXZTbD4b1m/My/Hqa/6XFhDg3zp0gxq3L6Ay7P/ewkJOI9VyANs1VwqJyq4gSfTw
|
||||
# aKxNS42lvXlLcZtHB9r9Jd+ddYjPqnNEf9eB2/O98jakyVxF3K+tPeAoaJcap6Vy
|
||||
# c1bxF5Tk/TWUcqDWdl8ed0WDhTgW0HNbBbpnUo2lsmkv2hkL/pJ0KeJ2L1TdFDBZ
|
||||
# +NKNYv3LyV9GMVC5JxPkQDDPcikQKCLHN049oDI9kM2hOAaFXE5WgigqBTK3S9dP
|
||||
# Y+fSLWLxRT3nrAgA9kahntFbjCZT6HqqSvJGzzc8OJ60d1ylF56NyxGPVjzBrAlf
|
||||
# A9MCAwEAAaOCAV4wggFaMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMsR6MrS
|
||||
# tBZYAck3LjMWFrlMmgofMAsGA1UdDwQEAwIBhjASBgkrBgEEAYI3FQEEBQIDAQAB
|
||||
# MCMGCSsGAQQBgjcVAgQWBBT90TFO0yaKleGYYDuoMW+mPLzYLTAZBgkrBgEEAYI3
|
||||
# FAIEDB4KAFMAdQBiAEMAQTAfBgNVHSMEGDAWgBQOrIJgQFYnl+UlE/wq4QpTlVnk
|
||||
# pDBQBgNVHR8ESTBHMEWgQ6BBhj9odHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtp
|
||||
# L2NybC9wcm9kdWN0cy9taWNyb3NvZnRyb290Y2VydC5jcmwwVAYIKwYBBQUHAQEE
|
||||
# SDBGMEQGCCsGAQUFBzAChjhodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpL2Nl
|
||||
# cnRzL01pY3Jvc29mdFJvb3RDZXJ0LmNydDANBgkqhkiG9w0BAQUFAAOCAgEAWTk+
|
||||
# fyZGr+tvQLEytWrrDi9uqEn361917Uw7LddDrQv+y+ktMaMjzHxQmIAhXaw9L0y6
|
||||
# oqhWnONwu7i0+Hm1SXL3PupBf8rhDBdpy6WcIC36C1DEVs0t40rSvHDnqA2iA6VW
|
||||
# 4LiKS1fylUKc8fPv7uOGHzQ8uFaa8FMjhSqkghyT4pQHHfLiTviMocroE6WRTsgb
|
||||
# 0o9ylSpxbZsa+BzwU9ZnzCL/XB3Nooy9J7J5Y1ZEolHN+emjWFbdmwJFRC9f9Nqu
|
||||
# 1IIybvyklRPk62nnqaIsvsgrEA5ljpnb9aL6EiYJZTiU8XofSrvR4Vbo0HiWGFzJ
|
||||
# NRZf3ZMdSY4tvq00RBzuEBUaAF3dNVshzpjHCe6FDoxPbQ4TTj18KUicctHzbMrB
|
||||
# 7HCjV5JXfZSNoBtIA1r3z6NnCnSlNu0tLxfI5nI3EvRvsTxngvlSso0zFmUeDord
|
||||
# EN5k9G/ORtTTF+l5xAS00/ss3x+KnqwK+xMnQK3k+eGpf0a7B2BHZWBATrBC7E7t
|
||||
# s3Z52Ao0CW0cgDEf4g5U3eWh++VHEK1kmP9QFi58vwUheuKVQSdpw5OPlcmN2Jsh
|
||||
# rg1cnPCiroZogwxqLbt2awAdlq3yFnv2FoMkuYjPaqhHMS+a3ONxPdcAfmJH0c6I
|
||||
# ybgY+g5yjcGjPa8CQGr/aZuW4hCoELQ3UAjWwz0wggYHMIID76ADAgECAgphFmg0
|
||||
# AAAAAAAcMA0GCSqGSIb3DQEBBQUAMF8xEzARBgoJkiaJk/IsZAEZFgNjb20xGTAX
|
||||
# BgoJkiaJk/IsZAEZFgltaWNyb3NvZnQxLTArBgNVBAMTJE1pY3Jvc29mdCBSb290
|
||||
# IENlcnRpZmljYXRlIEF1dGhvcml0eTAeFw0wNzA0MDMxMjUzMDlaFw0yMTA0MDMx
|
||||
# MzAzMDlaMHcxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYD
|
||||
# VQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xITAf
|
||||
# BgNVBAMTGE1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQTCCASIwDQYJKoZIhvcNAQEB
|
||||
# BQADggEPADCCAQoCggEBAJ+hbLHf20iSKnxrLhnhveLjxZlRI1Ctzt0YTiQP7tGn
|
||||
# 0UytdDAgEesH1VSVFUmUG0KSrphcMCbaAGvoe73siQcP9w4EmPCJzB/LMySHnfL0
|
||||
# Zxws/HvniB3q506jocEjU8qN+kXPCdBer9CwQgSi+aZsk2fXKNxGU7CG0OUoRi4n
|
||||
# rIZPVVIM5AMs+2qQkDBuh/NZMJ36ftaXs+ghl3740hPzCLdTbVK0RZCfSABKR2YR
|
||||
# JylmqJfk0waBSqL5hKcRRxQJgp+E7VV4/gGaHVAIhQAQMEbtt94jRrvELVSfrx54
|
||||
# QTF3zJvfO4OToWECtR0Nsfz3m7IBziJLVP/5BcPCIAsCAwEAAaOCAaswggGnMA8G
|
||||
# A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFCM0+NlSRnAK7UD7dvuzK7DDNbMPMAsG
|
||||
# A1UdDwQEAwIBhjAQBgkrBgEEAYI3FQEEAwIBADCBmAYDVR0jBIGQMIGNgBQOrIJg
|
||||
# QFYnl+UlE/wq4QpTlVnkpKFjpGEwXzETMBEGCgmSJomT8ixkARkWA2NvbTEZMBcG
|
||||
# CgmSJomT8ixkARkWCW1pY3Jvc29mdDEtMCsGA1UEAxMkTWljcm9zb2Z0IFJvb3Qg
|
||||
# Q2VydGlmaWNhdGUgQXV0aG9yaXR5ghB5rRahSqClrUxzWPQHEy5lMFAGA1UdHwRJ
|
||||
# MEcwRaBDoEGGP2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1
|
||||
# Y3RzL21pY3Jvc29mdHJvb3RjZXJ0LmNybDBUBggrBgEFBQcBAQRIMEYwRAYIKwYB
|
||||
# BQUHMAKGOGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljcm9z
|
||||
# b2Z0Um9vdENlcnQuY3J0MBMGA1UdJQQMMAoGCCsGAQUFBwMIMA0GCSqGSIb3DQEB
|
||||
# BQUAA4ICAQAQl4rDXANENt3ptK132855UU0BsS50cVttDBOrzr57j7gu1BKijG1i
|
||||
# uFcCy04gE1CZ3XpA4le7r1iaHOEdAYasu3jyi9DsOwHu4r6PCgXIjUji8FMV3U+r
|
||||
# kuTnjWrVgMHmlPIGL4UD6ZEqJCJw+/b85HiZLg33B+JwvBhOnY5rCnKVuKE5nGct
|
||||
# xVEO6mJcPxaYiyA/4gcaMvnMMUp2MT0rcgvI6nA9/4UKE9/CCmGO8Ne4F+tOi3/F
|
||||
# NSteo7/rvH0LQnvUU3Ih7jDKu3hlXFsBFwoUDtLaFJj1PLlmWLMtL+f5hYbMUVbo
|
||||
# nXCUbKw5TNT2eb+qGHpiKe+imyk0BncaYsk9Hm0fgvALxyy7z0Oz5fnsfbXjpKh0
|
||||
# NbhOxXEjEiZ2CzxSjHFaRkMUvLOzsE1nyJ9C/4B5IYCeFTBm6EISXhrIniIh0EPp
|
||||
# K+m79EjMLNTYMoBMJipIJF9a6lbvpt6Znco6b72BJ3QGEe52Ib+bgsEnVLaxaj2J
|
||||
# oXZhtG6hE6a/qkfwEm/9ijJssv7fUciMI8lmvZ0dhxJkAj0tr1mPuOQh5bWwymO0
|
||||
# eFQF1EEuUKyUsKV4q7OglnUa2ZKHE3UiLzKoCG6gW4wlv6DvhMoh1useT8ma7kng
|
||||
# 9wFlb4kLfchpyOZu6qeXzjEp/w7FW1zYTRuh2Povnj8uVRZryROj/TGCBJUwggSR
|
||||
# AgEBMIGQMHkxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYD
|
||||
# VQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xIzAh
|
||||
# BgNVBAMTGk1pY3Jvc29mdCBDb2RlIFNpZ25pbmcgUENBAhMzAAABCix5rtd5e6as
|
||||
# AAEAAAEKMAkGBSsOAwIaBQCgga4wGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQw
|
||||
# HAYKKwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwIwYJKoZIhvcNAQkEMRYEFB3V
|
||||
# 8I1bJ4SWcN/s+tSEZJkvxFs8ME4GCisGAQQBgjcCAQwxQDA+oCSAIgBNAGkAYwBy
|
||||
# AG8AcwBvAGYAdAAgAEEAUwBQAC4ATgBFAFShFoAUaHR0cDovL3d3dy5hc3AubmV0
|
||||
# LyAwDQYJKoZIhvcNAQEBBQAEggEACHMr42Y7++5pqm2UMWEhTJNHE4CE0MCnOBBB
|
||||
# 3QRg/Om9NWcbyNDTcv+m/BEjSqw3DntgyesjLyNItIjHS2USsGwx2Pu9rGSoyf4B
|
||||
# 0P7+hQ/SESgyjlJKOYPVY3f+LgsJnm1Ul7thPkqMFLNxc0ZfDL1isLo7+fS4sog1
|
||||
# oFlMATgsvEh6gIWXCwmA+nePp41mi+XTzITV45Tmfnp5RC7fmGSATUJjZkX5mSI/
|
||||
# vMzLvtrd9xOwZ6LRIAWTsP2LWLkrcLfHI44ScewmsVYwZ6gUHiNRZiFgFtI2KLNJ
|
||||
# DACTa81SyuKzvcPNEOagBfxBGuvUx0FS+132MqtgP2+WMoEZjKGCAigwggIkBgkq
|
||||
# hkiG9w0BCQYxggIVMIICEQIBATCBjjB3MQswCQYDVQQGEwJVUzETMBEGA1UECBMK
|
||||
# V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0
|
||||
# IENvcnBvcmF0aW9uMSEwHwYDVQQDExhNaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EC
|
||||
# EzMAAABw9Bi/IyH8UJ0AAAAAAHAwCQYFKw4DAhoFAKBdMBgGCSqGSIb3DQEJAzEL
|
||||
# BgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTE1MDgyMDE1MDczNVowIwYJKoZI
|
||||
# hvcNAQkEMRYEFIVN6iX2CUsMgdCMMcY6FnEVYStsMA0GCSqGSIb3DQEBBQUABIIB
|
||||
# AJEdFBfYDAgkd6q3mcFwK7ocZuTFHNL1EfGBdBWT6L1sgVHPiXcczQD9NofLigtX
|
||||
# y9GP3bpOW2g2r9aeu6VUxXuWTvDuBfHcPyrZFyuJlxzBSbqqUt+golSW8qSLhs7X
|
||||
# Xo/Z0vipyN7H3Bo3GU1hPXRLsmayHA1q5F5zT+JsxhpdGfsTdbqkGTid9Yd9Gv9j
|
||||
# nSNQZGFruIBnLZNLOuuU5wN2a28RR4JoLNZgOMS2gSruZ5a/TeEj8uyS/iCmy5Kb
|
||||
# iCY6M+IOY+7yjJDriB3Hek+wrFH4H+iz1z+1Nboak7ddEHbEr9YKwZSt/hne3X31
|
||||
# WMkZ0oDPIAHId3/lBMvwG+0=
|
||||
# SIG # End signature block
|
||||
BIN
Binary file not shown.
+18
@@ -0,0 +1,18 @@
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<RoslyCompilerFiles Include="$(CscToolPath)\*">
|
||||
<Link>roslyn\%(RecursiveDir)%(Filename)%(Extension)</Link>
|
||||
</RoslyCompilerFiles>
|
||||
</ItemGroup>
|
||||
<Target Name="IncludeRoslynCompilerFilesToItemGroup" AfterTargets="ResolveAssemblyReferences" >
|
||||
<ItemGroup>
|
||||
<None Include="@(RoslyCompilerFiles)" Condition="">
|
||||
<Link>%(RoslyCompilerFiles.Link)</Link>
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
</Target>
|
||||
<Target Name="CopyRoslynCompilerFilesToOutputDirectory" AfterTargets="CopyFilesToOutputDirectory">
|
||||
<Copy SourceFiles="@(RoslyCompilerFiles)" DestinationFolder="$(OutDir)roslyn" ContinueOnError="true" SkipUnchangedFiles="true" />
|
||||
</Target>
|
||||
</Project>
|
||||
+2
-2
@@ -26,7 +26,7 @@
|
||||
<compiler
|
||||
language="c#;cs;csharp"
|
||||
extension=".cs"
|
||||
type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
|
||||
type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
|
||||
warningLevel="4"
|
||||
compilerOptions="/langversion:6 /nowarn:1659;1699;1701"
|
||||
xdt:Transform="Insert" />
|
||||
@@ -49,7 +49,7 @@
|
||||
<compiler
|
||||
language="vb;vbs;visualbasic;vbscript"
|
||||
extension=".vb"
|
||||
type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
|
||||
type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
|
||||
warningLevel="4"
|
||||
compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+"
|
||||
xdt:Transform="Insert" />
|
||||
BIN
Binary file not shown.
+218
@@ -0,0 +1,218 @@
|
||||
param($installPath, $toolsPath, $package, $project)
|
||||
|
||||
$compilerPackageName = 'Microsoft.Net.Compilers'
|
||||
$roslynSubFolder = 'roslyn'
|
||||
|
||||
if ($project -eq $null) {
|
||||
$project = Get-Project
|
||||
}
|
||||
|
||||
$libDirectory = Join-Path $installPath 'lib\net45'
|
||||
$projectRoot = $project.Properties.Item('FullPath').Value
|
||||
$binDirectory = Join-Path $projectRoot 'bin'
|
||||
|
||||
# We need to copy the provider assembly into the bin\ folder, otherwise
|
||||
# Microsoft.VisualStudio.Web.Host.exe cannot find the assembly.
|
||||
# However, users will see the error after they clean solutions.
|
||||
New-Item $binDirectory -type directory -force | Out-Null
|
||||
Copy-Item $libDirectory\* $binDirectory | Out-Null
|
||||
|
||||
# For Web Site, we need to copy the Roslyn toolset into
|
||||
# the applicaiton's bin folder.
|
||||
# For Web Applicaiton project, this is done in csproj.
|
||||
if ($project.Type -eq 'Web Site') {
|
||||
$packageDirectory = Split-Path $installPath
|
||||
|
||||
# Get the installed Microsoft.Net.Compilers package.
|
||||
$compilerPackage = Get-Package -ProjectName $project.Name | Where-Object {$_.Id -eq $compilerPackageName}
|
||||
if ($compilerPackage -eq $null)
|
||||
{
|
||||
Write-Host "Package $compilerPackageName is not installed correctly."
|
||||
Write-Host 'The install.ps1 did not complete.'
|
||||
break
|
||||
}
|
||||
|
||||
if($compilerPackage.Versions -eq $null)
|
||||
{
|
||||
$compilerVersion = $compilerPackage.Version
|
||||
}
|
||||
else
|
||||
{
|
||||
$compilerVersion = $compilerPackage.Versions[0]
|
||||
}
|
||||
|
||||
$compilerPackageFolderName = $compilerPackage.Id + "." + $compilerVersion
|
||||
$compilerPackageDirectory = Join-Path $packageDirectory $compilerPackageFolderName
|
||||
if ((Get-Item $compilerPackageDirectory) -isnot [System.IO.DirectoryInfo])
|
||||
{
|
||||
Write-Host "The install.ps1 cannot find the installation location of package $compilerPackageName, or the pakcage is not installed correctly."
|
||||
Write-Host 'The install.ps1 did not complete.'
|
||||
break
|
||||
}
|
||||
|
||||
$compilerPackageToolsDirectory = Join-Path $compilerPackageDirectory 'tools'
|
||||
$roslynSubDirectory = Join-Path $binDirectory $roslynSubFolder
|
||||
New-Item $roslynSubDirectory -type directory -force | Out-Null
|
||||
Copy-Item $compilerPackageToolsDirectory\* $roslynSubDirectory | Out-Null
|
||||
|
||||
# Generate a .refresh file for each dll/exe file.
|
||||
Push-Location
|
||||
Set-Location $projectRoot
|
||||
$relativeAssemblySource = Resolve-Path -relative $compilerPackageToolsDirectory
|
||||
Pop-Location
|
||||
|
||||
Get-ChildItem -Path $roslynSubDirectory | `
|
||||
Foreach-Object {
|
||||
if (($_.Extension -eq ".dll") -or ($_.Extension -eq ".exe")) {
|
||||
$refreshFile = $_.FullName
|
||||
$refreshFile += ".refresh"
|
||||
$refreshContent = Join-Path $relativeAssemblySource $_.Name
|
||||
Set-Content $refreshFile $refreshContent
|
||||
}
|
||||
}
|
||||
}
|
||||
# SIG # Begin signature block
|
||||
# MIIargYJKoZIhvcNAQcCoIIanzCCGpsCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB
|
||||
# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR
|
||||
# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUOh+QyRWHcMwzkB4v1S1MHR7g
|
||||
# T2ugghWDMIIEwzCCA6ugAwIBAgITMwAAAJ1CaO4xHNdWvQAAAAAAnTANBgkqhkiG
|
||||
# 9w0BAQUFADB3MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4G
|
||||
# A1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSEw
|
||||
# HwYDVQQDExhNaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EwHhcNMTYwMzMwMTkyMTMw
|
||||
# WhcNMTcwNjMwMTkyMTMwWjCBszELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hp
|
||||
# bmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw
|
||||
# b3JhdGlvbjENMAsGA1UECxMETU9QUjEnMCUGA1UECxMebkNpcGhlciBEU0UgRVNO
|
||||
# OjE0OEMtQzRCOS0yMDY2MSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBT
|
||||
# ZXJ2aWNlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy8PvNqh/8yl1
|
||||
# MrZGvO1190vNqP7QS1rpo+Hg9+f2VOf/LWTsQoG0FDOwsQKDBCyrNu5TVc4+A4Zu
|
||||
# vqN+7up2ZIr3FtVQsAf1K6TJSBp2JWunjswVBu47UAfP49PDIBLoDt1Y4aXzI+9N
|
||||
# JbiaTwXjos6zYDKQ+v63NO6YEyfHfOpebr79gqbNghPv1hi9thBtvHMbXwkUZRmk
|
||||
# ravqvD8DKiFGmBMOg/IuN8G/MPEhdImnlkYFBdnW4P0K9RFzvrABWmH3w2GEunax
|
||||
# cOAmob9xbZZR8VftrfYCNkfHTFYGnaNNgRqV1rEFt866re8uexyNjOVfmR9+JBKU
|
||||
# FbA0ELMPlQIDAQABo4IBCTCCAQUwHQYDVR0OBBYEFGTqT/M8KvKECWB0BhVGDK52
|
||||
# +fM6MB8GA1UdIwQYMBaAFCM0+NlSRnAK7UD7dvuzK7DDNbMPMFQGA1UdHwRNMEsw
|
||||
# SaBHoEWGQ2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3Rz
|
||||
# L01pY3Jvc29mdFRpbWVTdGFtcFBDQS5jcmwwWAYIKwYBBQUHAQEETDBKMEgGCCsG
|
||||
# AQUFBzAChjxodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY3Jv
|
||||
# c29mdFRpbWVTdGFtcFBDQS5jcnQwEwYDVR0lBAwwCgYIKwYBBQUHAwgwDQYJKoZI
|
||||
# hvcNAQEFBQADggEBAD9dHEh+Ry/aDJ1YARzBsTGeptnRBO73F/P7wF8dC7nTPNFU
|
||||
# qtZhOyakS8NA/Zww74n4gvm1AWfHGjN1Ao8NiL3J6wFmmON/PEUdXA2zWFYhgeRe
|
||||
# CPmATbwNN043ecHiGjWO+SeMYpvl1G4ma0NIUJau9DmTkfaMvNMK+/rNljr3MR8b
|
||||
# xsSOZxx2iUiatN0ceMmIP5gS9vUpDxTZkxVsMfA5n63j18TOd4MJz+G0I62yqIvt
|
||||
# Yy7GTx38SF56454wqMngiYcqM2Bjv6xu1GyHTUH7v/l21JBceIt03gmsIhlLNo8z
|
||||
# Ii26X6D1sGCBEZV1YUyQC9IV2H625rVUyFZk8f4wggTtMIID1aADAgECAhMzAAAB
|
||||
# QJap7nBW/swHAAEAAAFAMA0GCSqGSIb3DQEBBQUAMHkxCzAJBgNVBAYTAlVTMRMw
|
||||
# EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN
|
||||
# aWNyb3NvZnQgQ29ycG9yYXRpb24xIzAhBgNVBAMTGk1pY3Jvc29mdCBDb2RlIFNp
|
||||
# Z25pbmcgUENBMB4XDTE2MDgxODIwMTcxN1oXDTE3MTEwMjIwMTcxN1owgYMxCzAJ
|
||||
# BgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k
|
||||
# MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xDTALBgNVBAsTBE1PUFIx
|
||||
# HjAcBgNVBAMTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjCCASIwDQYJKoZIhvcNAQEB
|
||||
# BQADggEPADCCAQoCggEBANtLi+kDal/IG10KBTnk1Q6S0MThi+ikDQUZWMA81ynd
|
||||
# ibdobkuffryavVSGOanxODUW5h2s+65r3Akw77ge32z4SppVl0jII4mzWSc0vZUx
|
||||
# R5wPzkA1Mjf+6fNPpBqks3m8gJs/JJjE0W/Vf+dDjeTc8tLmrmbtBDohlKZX3APb
|
||||
# LMYb/ys5qF2/Vf7dSd9UBZSrM9+kfTGmTb1WzxYxaD+Eaxxt8+7VMIruZRuetwgc
|
||||
# KX6TvfJ9QnY4ItR7fPS4uXGew5T0goY1gqZ0vQIz+lSGhaMlvqqJXuI5XyZBmBre
|
||||
# ueZGhXi7UTICR+zk+R+9BFF15hKbduuFlxQiCqET92ECAwEAAaOCAWEwggFdMBMG
|
||||
# A1UdJQQMMAoGCCsGAQUFBwMDMB0GA1UdDgQWBBSc5ehtgleuNyTe6l6pxF+QHc7Z
|
||||
# ezBSBgNVHREESzBJpEcwRTENMAsGA1UECxMETU9QUjE0MDIGA1UEBRMrMjI5ODAz
|
||||
# K2Y3ODViMWMwLTVkOWYtNDMxNi04ZDZhLTc0YWU2NDJkZGUxYzAfBgNVHSMEGDAW
|
||||
# gBTLEejK0rQWWAHJNy4zFha5TJoKHzBWBgNVHR8ETzBNMEugSaBHhkVodHRwOi8v
|
||||
# Y3JsLm1pY3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9NaWNDb2RTaWdQQ0Ff
|
||||
# MDgtMzEtMjAxMC5jcmwwWgYIKwYBBQUHAQEETjBMMEoGCCsGAQUFBzAChj5odHRw
|
||||
# Oi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY0NvZFNpZ1BDQV8wOC0z
|
||||
# MS0yMDEwLmNydDANBgkqhkiG9w0BAQUFAAOCAQEAa+RW49cTHSBA+W3p3k7bXR7G
|
||||
# bCaj9+UJgAz/V+G01Nn5XEjhBn/CpFS4lnr1jcmDEwxxv/j8uy7MFXPzAGtOJar0
|
||||
# xApylFKfd00pkygIMRbZ3250q8ToThWxmQVEThpJSSysee6/hU+EbkfvvtjSi0lp
|
||||
# DimD9aW9oxshraKlPpAgnPWfEj16WXVk79qjhYQyEgICamR3AaY5mLPuoihJbKwk
|
||||
# Mig+qItmLPsC2IMvI5KR91dl/6TV6VEIlPbW/cDVwCBF/UNJT3nuZBl/YE7ixMpT
|
||||
# Th/7WpENW80kg3xz6MlCdxJfMSbJsM5TimFU98KNcpnxxbYdfqqQhAQ6l3mtYDCC
|
||||
# BbwwggOkoAMCAQICCmEzJhoAAAAAADEwDQYJKoZIhvcNAQEFBQAwXzETMBEGCgmS
|
||||
# JomT8ixkARkWA2NvbTEZMBcGCgmSJomT8ixkARkWCW1pY3Jvc29mdDEtMCsGA1UE
|
||||
# AxMkTWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MB4XDTEwMDgz
|
||||
# MTIyMTkzMloXDTIwMDgzMTIyMjkzMloweTELMAkGA1UEBhMCVVMxEzARBgNVBAgT
|
||||
# Cldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29m
|
||||
# dCBDb3Jwb3JhdGlvbjEjMCEGA1UEAxMaTWljcm9zb2Z0IENvZGUgU2lnbmluZyBQ
|
||||
# Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCycllcGTBkvx2aYCAg
|
||||
# Qpl2U2w+G9ZvzMvx6mv+lxYQ4N86dIMaty+gMuz/3sJCTiPVcgDbNVcKicquIEn0
|
||||
# 8GisTUuNpb15S3GbRwfa/SXfnXWIz6pzRH/XgdvzvfI2pMlcRdyvrT3gKGiXGqel
|
||||
# cnNW8ReU5P01lHKg1nZfHndFg4U4FtBzWwW6Z1KNpbJpL9oZC/6SdCnidi9U3RQw
|
||||
# WfjSjWL9y8lfRjFQuScT5EAwz3IpECgixzdOPaAyPZDNoTgGhVxOVoIoKgUyt0vX
|
||||
# T2Pn0i1i8UU956wIAPZGoZ7RW4wmU+h6qkryRs83PDietHdcpReejcsRj1Y8wawJ
|
||||
# XwPTAgMBAAGjggFeMIIBWjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTLEejK
|
||||
# 0rQWWAHJNy4zFha5TJoKHzALBgNVHQ8EBAMCAYYwEgYJKwYBBAGCNxUBBAUCAwEA
|
||||
# ATAjBgkrBgEEAYI3FQIEFgQU/dExTtMmipXhmGA7qDFvpjy82C0wGQYJKwYBBAGC
|
||||
# NxQCBAweCgBTAHUAYgBDAEEwHwYDVR0jBBgwFoAUDqyCYEBWJ5flJRP8KuEKU5VZ
|
||||
# 5KQwUAYDVR0fBEkwRzBFoEOgQYY/aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3Br
|
||||
# aS9jcmwvcHJvZHVjdHMvbWljcm9zb2Z0cm9vdGNlcnQuY3JsMFQGCCsGAQUFBwEB
|
||||
# BEgwRjBEBggrBgEFBQcwAoY4aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraS9j
|
||||
# ZXJ0cy9NaWNyb3NvZnRSb290Q2VydC5jcnQwDQYJKoZIhvcNAQEFBQADggIBAFk5
|
||||
# Pn8mRq/rb0CxMrVq6w4vbqhJ9+tfde1MOy3XQ60L/svpLTGjI8x8UJiAIV2sPS9M
|
||||
# uqKoVpzjcLu4tPh5tUly9z7qQX/K4QwXaculnCAt+gtQxFbNLeNK0rxw56gNogOl
|
||||
# VuC4iktX8pVCnPHz7+7jhh80PLhWmvBTI4UqpIIck+KUBx3y4k74jKHK6BOlkU7I
|
||||
# G9KPcpUqcW2bGvgc8FPWZ8wi/1wdzaKMvSeyeWNWRKJRzfnpo1hW3ZsCRUQvX/Ta
|
||||
# rtSCMm78pJUT5Otp56miLL7IKxAOZY6Z2/Wi+hImCWU4lPF6H0q70eFW6NB4lhhc
|
||||
# yTUWX92THUmOLb6tNEQc7hAVGgBd3TVbIc6YxwnuhQ6MT20OE049fClInHLR82zK
|
||||
# wexwo1eSV32UjaAbSANa98+jZwp0pTbtLS8XyOZyNxL0b7E8Z4L5UrKNMxZlHg6K
|
||||
# 3RDeZPRvzkbU0xfpecQEtNP7LN8fip6sCvsTJ0Ct5PnhqX9GuwdgR2VgQE6wQuxO
|
||||
# 7bN2edgKNAltHIAxH+IOVN3lofvlRxCtZJj/UBYufL8FIXrilUEnacOTj5XJjdib
|
||||
# Ia4NXJzwoq6GaIMMai27dmsAHZat8hZ79haDJLmIz2qoRzEvmtzjcT3XAH5iR9HO
|
||||
# iMm4GPoOco3Boz2vAkBq/2mbluIQqBC0N1AI1sM9MIIGBzCCA++gAwIBAgIKYRZo
|
||||
# NAAAAAAAHDANBgkqhkiG9w0BAQUFADBfMRMwEQYKCZImiZPyLGQBGRYDY29tMRkw
|
||||
# FwYKCZImiZPyLGQBGRYJbWljcm9zb2Z0MS0wKwYDVQQDEyRNaWNyb3NvZnQgUm9v
|
||||
# dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDcwNDAzMTI1MzA5WhcNMjEwNDAz
|
||||
# MTMwMzA5WjB3MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4G
|
||||
# A1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSEw
|
||||
# HwYDVQQDExhNaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EwggEiMA0GCSqGSIb3DQEB
|
||||
# AQUAA4IBDwAwggEKAoIBAQCfoWyx39tIkip8ay4Z4b3i48WZUSNQrc7dGE4kD+7R
|
||||
# p9FMrXQwIBHrB9VUlRVJlBtCkq6YXDAm2gBr6Hu97IkHD/cOBJjwicwfyzMkh53y
|
||||
# 9GccLPx754gd6udOo6HBI1PKjfpFzwnQXq/QsEIEovmmbJNn1yjcRlOwhtDlKEYu
|
||||
# J6yGT1VSDOQDLPtqkJAwbofzWTCd+n7Wl7PoIZd++NIT8wi3U21StEWQn0gASkdm
|
||||
# EScpZqiX5NMGgUqi+YSnEUcUCYKfhO1VeP4Bmh1QCIUAEDBG7bfeI0a7xC1Un68e
|
||||
# eEExd8yb3zuDk6FhArUdDbH895uyAc4iS1T/+QXDwiALAgMBAAGjggGrMIIBpzAP
|
||||
# BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQjNPjZUkZwCu1A+3b7syuwwzWzDzAL
|
||||
# BgNVHQ8EBAMCAYYwEAYJKwYBBAGCNxUBBAMCAQAwgZgGA1UdIwSBkDCBjYAUDqyC
|
||||
# YEBWJ5flJRP8KuEKU5VZ5KShY6RhMF8xEzARBgoJkiaJk/IsZAEZFgNjb20xGTAX
|
||||
# BgoJkiaJk/IsZAEZFgltaWNyb3NvZnQxLTArBgNVBAMTJE1pY3Jvc29mdCBSb290
|
||||
# IENlcnRpZmljYXRlIEF1dGhvcml0eYIQea0WoUqgpa1Mc1j0BxMuZTBQBgNVHR8E
|
||||
# STBHMEWgQ6BBhj9odHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpL2NybC9wcm9k
|
||||
# dWN0cy9taWNyb3NvZnRyb290Y2VydC5jcmwwVAYIKwYBBQUHAQEESDBGMEQGCCsG
|
||||
# AQUFBzAChjhodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY3Jv
|
||||
# c29mdFJvb3RDZXJ0LmNydDATBgNVHSUEDDAKBggrBgEFBQcDCDANBgkqhkiG9w0B
|
||||
# AQUFAAOCAgEAEJeKw1wDRDbd6bStd9vOeVFNAbEudHFbbQwTq86+e4+4LtQSooxt
|
||||
# YrhXAstOIBNQmd16QOJXu69YmhzhHQGGrLt48ovQ7DsB7uK+jwoFyI1I4vBTFd1P
|
||||
# q5Lk541q1YDB5pTyBi+FA+mRKiQicPv2/OR4mS4N9wficLwYTp2OawpylbihOZxn
|
||||
# LcVRDupiXD8WmIsgP+IHGjL5zDFKdjE9K3ILyOpwPf+FChPfwgphjvDXuBfrTot/
|
||||
# xTUrXqO/67x9C0J71FNyIe4wyrt4ZVxbARcKFA7S2hSY9Ty5ZlizLS/n+YWGzFFW
|
||||
# 6J1wlGysOUzU9nm/qhh6YinvopspNAZ3GmLJPR5tH4LwC8csu89Ds+X57H2146So
|
||||
# dDW4TsVxIxImdgs8UoxxWkZDFLyzs7BNZ8ifQv+AeSGAnhUwZuhCEl4ayJ4iIdBD
|
||||
# 6Svpu/RIzCzU2DKATCYqSCRfWupW76bemZ3KOm+9gSd0BhHudiG/m4LBJ1S2sWo9
|
||||
# iaF2YbRuoROmv6pH8BJv/YoybLL+31HIjCPJZr2dHYcSZAI9La9Zj7jkIeW1sMpj
|
||||
# tHhUBdRBLlCslLCleKuzoJZ1GtmShxN1Ii8yqAhuoFuMJb+g74TKIdbrHk/Jmu5J
|
||||
# 4PcBZW+JC33Iacjmbuqnl84xKf8OxVtc2E0bodj6L54/LlUWa8kTo/0xggSVMIIE
|
||||
# kQIBATCBkDB5MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4G
|
||||
# A1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSMw
|
||||
# IQYDVQQDExpNaWNyb3NvZnQgQ29kZSBTaWduaW5nIFBDQQITMwAAAUCWqe5wVv7M
|
||||
# BwABAAABQDAJBgUrDgMCGgUAoIGuMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEE
|
||||
# MBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMCMGCSqGSIb3DQEJBDEWBBTK
|
||||
# IbIKihBJK4Tf00evxSbK8JM6OTBOBgorBgEEAYI3AgEMMUAwPqAkgCIATQBpAGMA
|
||||
# cgBvAHMAbwBmAHQAIABBAFMAUAAuAE4ARQBUoRaAFGh0dHA6Ly93d3cuYXNwLm5l
|
||||
# dC8gMA0GCSqGSIb3DQEBAQUABIIBACUhyJXyp0/lJgyE/aX7iB66+4Xw2QSJoTK7
|
||||
# 7nI8hxQw75QcoIjgi3HxPx6wEz7+MVaDdwY84AG1XuTSLjerlVij75UO3WkAW6WY
|
||||
# 5wx7CiAjmfJv40AOdl5rNEkTMNVX//g06FanQ1e4FluNrOa+rcSHReMZHuO0V4gp
|
||||
# NhfWyl6wj6MH3tW9VvyTtLeBbHTxgtmt+8XuElnqTy2M9UXV47DRDQARn4NYQVHy
|
||||
# 7tc4gRSReqW5jdtsAiE2sQ8E1HBrzMy0XnEmMoJpyiWQkYwoUvbCiBgB1HjLWDy2
|
||||
# D0Z/lKhQFW9zUX9xG+Hpj16b0WD3HzrUg3qqioA8YN2Ob0Zh1G2hggIoMIICJAYJ
|
||||
# KoZIhvcNAQkGMYICFTCCAhECAQEwgY4wdzELMAkGA1UEBhMCVVMxEzARBgNVBAgT
|
||||
# Cldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29m
|
||||
# dCBDb3Jwb3JhdGlvbjEhMB8GA1UEAxMYTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENB
|
||||
# AhMzAAAAnUJo7jEc11a9AAAAAACdMAkGBSsOAwIaBQCgXTAYBgkqhkiG9w0BCQMx
|
||||
# CwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0xNjA4MzExMDM5MDBaMCMGCSqG
|
||||
# SIb3DQEJBDEWBBRuJSfz5souDXe0+8qUYRQ8Z7R8ijANBgkqhkiG9w0BAQUFAASC
|
||||
# AQDEG2pYJwlsh1S4Y/sGpyutCedCb3WByKTQeWmiWUxzlIsEiKtrbtC+wuEZao5n
|
||||
# W+PYZIpHuyZO8c73ZEWzJ+zSeemDv0BkH2zdjZ6HTqncXh0VmWKYSkdPK1QwzP/M
|
||||
# C0BiqTBpSSzjkQn+ETWck0pb0X8ddlRRwXMD1Qph2VBdOof+yQZs0LP1mPkN3mm5
|
||||
# EEu4j2V3xFog4uuhS1t5MFruqGITgIq2gv7GXRBZcY9s9R2bNmT6L8s/bujV+XAz
|
||||
# 1GWnUF+7HXbAuGjCqKuqpV7cmuosOdj0+2vl8pUZHEyvFcNULe9cIDKXXaW6kp2P
|
||||
# HORAPxqOqqHouLXHXNz3LHuC
|
||||
# SIG # End signature block
|
||||
+160
@@ -0,0 +1,160 @@
|
||||
param($installPath, $toolsPath, $package, $project)
|
||||
|
||||
$roslynSubFolder = 'roslyn'
|
||||
|
||||
if ($project -eq $null) {
|
||||
$project = Get-Project
|
||||
}
|
||||
|
||||
$projectRoot = $project.Properties.Item('FullPath').Value
|
||||
$binDirectory = Join-Path $projectRoot 'bin'
|
||||
$targetDirectory = Join-Path $binDirectory $roslynSubFolder
|
||||
|
||||
if (Test-Path $targetDirectory) {
|
||||
Remove-Item $targetDirectory -Force -Recurse
|
||||
}
|
||||
# SIG # Begin signature block
|
||||
# MIIargYJKoZIhvcNAQcCoIIanzCCGpsCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB
|
||||
# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR
|
||||
# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUBnzRb+A5zqyBejTiJB6CJOry
|
||||
# jZ6gghWDMIIEwzCCA6ugAwIBAgITMwAAAJ1CaO4xHNdWvQAAAAAAnTANBgkqhkiG
|
||||
# 9w0BAQUFADB3MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4G
|
||||
# A1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSEw
|
||||
# HwYDVQQDExhNaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EwHhcNMTYwMzMwMTkyMTMw
|
||||
# WhcNMTcwNjMwMTkyMTMwWjCBszELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hp
|
||||
# bmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw
|
||||
# b3JhdGlvbjENMAsGA1UECxMETU9QUjEnMCUGA1UECxMebkNpcGhlciBEU0UgRVNO
|
||||
# OjE0OEMtQzRCOS0yMDY2MSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBT
|
||||
# ZXJ2aWNlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy8PvNqh/8yl1
|
||||
# MrZGvO1190vNqP7QS1rpo+Hg9+f2VOf/LWTsQoG0FDOwsQKDBCyrNu5TVc4+A4Zu
|
||||
# vqN+7up2ZIr3FtVQsAf1K6TJSBp2JWunjswVBu47UAfP49PDIBLoDt1Y4aXzI+9N
|
||||
# JbiaTwXjos6zYDKQ+v63NO6YEyfHfOpebr79gqbNghPv1hi9thBtvHMbXwkUZRmk
|
||||
# ravqvD8DKiFGmBMOg/IuN8G/MPEhdImnlkYFBdnW4P0K9RFzvrABWmH3w2GEunax
|
||||
# cOAmob9xbZZR8VftrfYCNkfHTFYGnaNNgRqV1rEFt866re8uexyNjOVfmR9+JBKU
|
||||
# FbA0ELMPlQIDAQABo4IBCTCCAQUwHQYDVR0OBBYEFGTqT/M8KvKECWB0BhVGDK52
|
||||
# +fM6MB8GA1UdIwQYMBaAFCM0+NlSRnAK7UD7dvuzK7DDNbMPMFQGA1UdHwRNMEsw
|
||||
# SaBHoEWGQ2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3Rz
|
||||
# L01pY3Jvc29mdFRpbWVTdGFtcFBDQS5jcmwwWAYIKwYBBQUHAQEETDBKMEgGCCsG
|
||||
# AQUFBzAChjxodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY3Jv
|
||||
# c29mdFRpbWVTdGFtcFBDQS5jcnQwEwYDVR0lBAwwCgYIKwYBBQUHAwgwDQYJKoZI
|
||||
# hvcNAQEFBQADggEBAD9dHEh+Ry/aDJ1YARzBsTGeptnRBO73F/P7wF8dC7nTPNFU
|
||||
# qtZhOyakS8NA/Zww74n4gvm1AWfHGjN1Ao8NiL3J6wFmmON/PEUdXA2zWFYhgeRe
|
||||
# CPmATbwNN043ecHiGjWO+SeMYpvl1G4ma0NIUJau9DmTkfaMvNMK+/rNljr3MR8b
|
||||
# xsSOZxx2iUiatN0ceMmIP5gS9vUpDxTZkxVsMfA5n63j18TOd4MJz+G0I62yqIvt
|
||||
# Yy7GTx38SF56454wqMngiYcqM2Bjv6xu1GyHTUH7v/l21JBceIt03gmsIhlLNo8z
|
||||
# Ii26X6D1sGCBEZV1YUyQC9IV2H625rVUyFZk8f4wggTtMIID1aADAgECAhMzAAAB
|
||||
# QJap7nBW/swHAAEAAAFAMA0GCSqGSIb3DQEBBQUAMHkxCzAJBgNVBAYTAlVTMRMw
|
||||
# EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN
|
||||
# aWNyb3NvZnQgQ29ycG9yYXRpb24xIzAhBgNVBAMTGk1pY3Jvc29mdCBDb2RlIFNp
|
||||
# Z25pbmcgUENBMB4XDTE2MDgxODIwMTcxN1oXDTE3MTEwMjIwMTcxN1owgYMxCzAJ
|
||||
# BgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k
|
||||
# MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xDTALBgNVBAsTBE1PUFIx
|
||||
# HjAcBgNVBAMTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjCCASIwDQYJKoZIhvcNAQEB
|
||||
# BQADggEPADCCAQoCggEBANtLi+kDal/IG10KBTnk1Q6S0MThi+ikDQUZWMA81ynd
|
||||
# ibdobkuffryavVSGOanxODUW5h2s+65r3Akw77ge32z4SppVl0jII4mzWSc0vZUx
|
||||
# R5wPzkA1Mjf+6fNPpBqks3m8gJs/JJjE0W/Vf+dDjeTc8tLmrmbtBDohlKZX3APb
|
||||
# LMYb/ys5qF2/Vf7dSd9UBZSrM9+kfTGmTb1WzxYxaD+Eaxxt8+7VMIruZRuetwgc
|
||||
# KX6TvfJ9QnY4ItR7fPS4uXGew5T0goY1gqZ0vQIz+lSGhaMlvqqJXuI5XyZBmBre
|
||||
# ueZGhXi7UTICR+zk+R+9BFF15hKbduuFlxQiCqET92ECAwEAAaOCAWEwggFdMBMG
|
||||
# A1UdJQQMMAoGCCsGAQUFBwMDMB0GA1UdDgQWBBSc5ehtgleuNyTe6l6pxF+QHc7Z
|
||||
# ezBSBgNVHREESzBJpEcwRTENMAsGA1UECxMETU9QUjE0MDIGA1UEBRMrMjI5ODAz
|
||||
# K2Y3ODViMWMwLTVkOWYtNDMxNi04ZDZhLTc0YWU2NDJkZGUxYzAfBgNVHSMEGDAW
|
||||
# gBTLEejK0rQWWAHJNy4zFha5TJoKHzBWBgNVHR8ETzBNMEugSaBHhkVodHRwOi8v
|
||||
# Y3JsLm1pY3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9NaWNDb2RTaWdQQ0Ff
|
||||
# MDgtMzEtMjAxMC5jcmwwWgYIKwYBBQUHAQEETjBMMEoGCCsGAQUFBzAChj5odHRw
|
||||
# Oi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY0NvZFNpZ1BDQV8wOC0z
|
||||
# MS0yMDEwLmNydDANBgkqhkiG9w0BAQUFAAOCAQEAa+RW49cTHSBA+W3p3k7bXR7G
|
||||
# bCaj9+UJgAz/V+G01Nn5XEjhBn/CpFS4lnr1jcmDEwxxv/j8uy7MFXPzAGtOJar0
|
||||
# xApylFKfd00pkygIMRbZ3250q8ToThWxmQVEThpJSSysee6/hU+EbkfvvtjSi0lp
|
||||
# DimD9aW9oxshraKlPpAgnPWfEj16WXVk79qjhYQyEgICamR3AaY5mLPuoihJbKwk
|
||||
# Mig+qItmLPsC2IMvI5KR91dl/6TV6VEIlPbW/cDVwCBF/UNJT3nuZBl/YE7ixMpT
|
||||
# Th/7WpENW80kg3xz6MlCdxJfMSbJsM5TimFU98KNcpnxxbYdfqqQhAQ6l3mtYDCC
|
||||
# BbwwggOkoAMCAQICCmEzJhoAAAAAADEwDQYJKoZIhvcNAQEFBQAwXzETMBEGCgmS
|
||||
# JomT8ixkARkWA2NvbTEZMBcGCgmSJomT8ixkARkWCW1pY3Jvc29mdDEtMCsGA1UE
|
||||
# AxMkTWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MB4XDTEwMDgz
|
||||
# MTIyMTkzMloXDTIwMDgzMTIyMjkzMloweTELMAkGA1UEBhMCVVMxEzARBgNVBAgT
|
||||
# Cldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29m
|
||||
# dCBDb3Jwb3JhdGlvbjEjMCEGA1UEAxMaTWljcm9zb2Z0IENvZGUgU2lnbmluZyBQ
|
||||
# Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCycllcGTBkvx2aYCAg
|
||||
# Qpl2U2w+G9ZvzMvx6mv+lxYQ4N86dIMaty+gMuz/3sJCTiPVcgDbNVcKicquIEn0
|
||||
# 8GisTUuNpb15S3GbRwfa/SXfnXWIz6pzRH/XgdvzvfI2pMlcRdyvrT3gKGiXGqel
|
||||
# cnNW8ReU5P01lHKg1nZfHndFg4U4FtBzWwW6Z1KNpbJpL9oZC/6SdCnidi9U3RQw
|
||||
# WfjSjWL9y8lfRjFQuScT5EAwz3IpECgixzdOPaAyPZDNoTgGhVxOVoIoKgUyt0vX
|
||||
# T2Pn0i1i8UU956wIAPZGoZ7RW4wmU+h6qkryRs83PDietHdcpReejcsRj1Y8wawJ
|
||||
# XwPTAgMBAAGjggFeMIIBWjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTLEejK
|
||||
# 0rQWWAHJNy4zFha5TJoKHzALBgNVHQ8EBAMCAYYwEgYJKwYBBAGCNxUBBAUCAwEA
|
||||
# ATAjBgkrBgEEAYI3FQIEFgQU/dExTtMmipXhmGA7qDFvpjy82C0wGQYJKwYBBAGC
|
||||
# NxQCBAweCgBTAHUAYgBDAEEwHwYDVR0jBBgwFoAUDqyCYEBWJ5flJRP8KuEKU5VZ
|
||||
# 5KQwUAYDVR0fBEkwRzBFoEOgQYY/aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3Br
|
||||
# aS9jcmwvcHJvZHVjdHMvbWljcm9zb2Z0cm9vdGNlcnQuY3JsMFQGCCsGAQUFBwEB
|
||||
# BEgwRjBEBggrBgEFBQcwAoY4aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraS9j
|
||||
# ZXJ0cy9NaWNyb3NvZnRSb290Q2VydC5jcnQwDQYJKoZIhvcNAQEFBQADggIBAFk5
|
||||
# Pn8mRq/rb0CxMrVq6w4vbqhJ9+tfde1MOy3XQ60L/svpLTGjI8x8UJiAIV2sPS9M
|
||||
# uqKoVpzjcLu4tPh5tUly9z7qQX/K4QwXaculnCAt+gtQxFbNLeNK0rxw56gNogOl
|
||||
# VuC4iktX8pVCnPHz7+7jhh80PLhWmvBTI4UqpIIck+KUBx3y4k74jKHK6BOlkU7I
|
||||
# G9KPcpUqcW2bGvgc8FPWZ8wi/1wdzaKMvSeyeWNWRKJRzfnpo1hW3ZsCRUQvX/Ta
|
||||
# rtSCMm78pJUT5Otp56miLL7IKxAOZY6Z2/Wi+hImCWU4lPF6H0q70eFW6NB4lhhc
|
||||
# yTUWX92THUmOLb6tNEQc7hAVGgBd3TVbIc6YxwnuhQ6MT20OE049fClInHLR82zK
|
||||
# wexwo1eSV32UjaAbSANa98+jZwp0pTbtLS8XyOZyNxL0b7E8Z4L5UrKNMxZlHg6K
|
||||
# 3RDeZPRvzkbU0xfpecQEtNP7LN8fip6sCvsTJ0Ct5PnhqX9GuwdgR2VgQE6wQuxO
|
||||
# 7bN2edgKNAltHIAxH+IOVN3lofvlRxCtZJj/UBYufL8FIXrilUEnacOTj5XJjdib
|
||||
# Ia4NXJzwoq6GaIMMai27dmsAHZat8hZ79haDJLmIz2qoRzEvmtzjcT3XAH5iR9HO
|
||||
# iMm4GPoOco3Boz2vAkBq/2mbluIQqBC0N1AI1sM9MIIGBzCCA++gAwIBAgIKYRZo
|
||||
# NAAAAAAAHDANBgkqhkiG9w0BAQUFADBfMRMwEQYKCZImiZPyLGQBGRYDY29tMRkw
|
||||
# FwYKCZImiZPyLGQBGRYJbWljcm9zb2Z0MS0wKwYDVQQDEyRNaWNyb3NvZnQgUm9v
|
||||
# dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDcwNDAzMTI1MzA5WhcNMjEwNDAz
|
||||
# MTMwMzA5WjB3MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4G
|
||||
# A1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSEw
|
||||
# HwYDVQQDExhNaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EwggEiMA0GCSqGSIb3DQEB
|
||||
# AQUAA4IBDwAwggEKAoIBAQCfoWyx39tIkip8ay4Z4b3i48WZUSNQrc7dGE4kD+7R
|
||||
# p9FMrXQwIBHrB9VUlRVJlBtCkq6YXDAm2gBr6Hu97IkHD/cOBJjwicwfyzMkh53y
|
||||
# 9GccLPx754gd6udOo6HBI1PKjfpFzwnQXq/QsEIEovmmbJNn1yjcRlOwhtDlKEYu
|
||||
# J6yGT1VSDOQDLPtqkJAwbofzWTCd+n7Wl7PoIZd++NIT8wi3U21StEWQn0gASkdm
|
||||
# EScpZqiX5NMGgUqi+YSnEUcUCYKfhO1VeP4Bmh1QCIUAEDBG7bfeI0a7xC1Un68e
|
||||
# eEExd8yb3zuDk6FhArUdDbH895uyAc4iS1T/+QXDwiALAgMBAAGjggGrMIIBpzAP
|
||||
# BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQjNPjZUkZwCu1A+3b7syuwwzWzDzAL
|
||||
# BgNVHQ8EBAMCAYYwEAYJKwYBBAGCNxUBBAMCAQAwgZgGA1UdIwSBkDCBjYAUDqyC
|
||||
# YEBWJ5flJRP8KuEKU5VZ5KShY6RhMF8xEzARBgoJkiaJk/IsZAEZFgNjb20xGTAX
|
||||
# BgoJkiaJk/IsZAEZFgltaWNyb3NvZnQxLTArBgNVBAMTJE1pY3Jvc29mdCBSb290
|
||||
# IENlcnRpZmljYXRlIEF1dGhvcml0eYIQea0WoUqgpa1Mc1j0BxMuZTBQBgNVHR8E
|
||||
# STBHMEWgQ6BBhj9odHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpL2NybC9wcm9k
|
||||
# dWN0cy9taWNyb3NvZnRyb290Y2VydC5jcmwwVAYIKwYBBQUHAQEESDBGMEQGCCsG
|
||||
# AQUFBzAChjhodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY3Jv
|
||||
# c29mdFJvb3RDZXJ0LmNydDATBgNVHSUEDDAKBggrBgEFBQcDCDANBgkqhkiG9w0B
|
||||
# AQUFAAOCAgEAEJeKw1wDRDbd6bStd9vOeVFNAbEudHFbbQwTq86+e4+4LtQSooxt
|
||||
# YrhXAstOIBNQmd16QOJXu69YmhzhHQGGrLt48ovQ7DsB7uK+jwoFyI1I4vBTFd1P
|
||||
# q5Lk541q1YDB5pTyBi+FA+mRKiQicPv2/OR4mS4N9wficLwYTp2OawpylbihOZxn
|
||||
# LcVRDupiXD8WmIsgP+IHGjL5zDFKdjE9K3ILyOpwPf+FChPfwgphjvDXuBfrTot/
|
||||
# xTUrXqO/67x9C0J71FNyIe4wyrt4ZVxbARcKFA7S2hSY9Ty5ZlizLS/n+YWGzFFW
|
||||
# 6J1wlGysOUzU9nm/qhh6YinvopspNAZ3GmLJPR5tH4LwC8csu89Ds+X57H2146So
|
||||
# dDW4TsVxIxImdgs8UoxxWkZDFLyzs7BNZ8ifQv+AeSGAnhUwZuhCEl4ayJ4iIdBD
|
||||
# 6Svpu/RIzCzU2DKATCYqSCRfWupW76bemZ3KOm+9gSd0BhHudiG/m4LBJ1S2sWo9
|
||||
# iaF2YbRuoROmv6pH8BJv/YoybLL+31HIjCPJZr2dHYcSZAI9La9Zj7jkIeW1sMpj
|
||||
# tHhUBdRBLlCslLCleKuzoJZ1GtmShxN1Ii8yqAhuoFuMJb+g74TKIdbrHk/Jmu5J
|
||||
# 4PcBZW+JC33Iacjmbuqnl84xKf8OxVtc2E0bodj6L54/LlUWa8kTo/0xggSVMIIE
|
||||
# kQIBATCBkDB5MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4G
|
||||
# A1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSMw
|
||||
# IQYDVQQDExpNaWNyb3NvZnQgQ29kZSBTaWduaW5nIFBDQQITMwAAAUCWqe5wVv7M
|
||||
# BwABAAABQDAJBgUrDgMCGgUAoIGuMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEE
|
||||
# MBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMCMGCSqGSIb3DQEJBDEWBBQd
|
||||
# 1fCNWyeElnDf7PrUhGSZL8RbPDBOBgorBgEEAYI3AgEMMUAwPqAkgCIATQBpAGMA
|
||||
# cgBvAHMAbwBmAHQAIABBAFMAUAAuAE4ARQBUoRaAFGh0dHA6Ly93d3cuYXNwLm5l
|
||||
# dC8gMA0GCSqGSIb3DQEBAQUABIIBAEDdvLXegyUt8DOquwd5Xf4ZL2zjzRSG4hgW
|
||||
# qhxLJVJDU7hL4UR1BrihJWQOaKmkUWY2sXTlPSvpIRbbe3i21X7qZbap1c6xPSaZ
|
||||
# HvDqJDb9PWJ3/WRTI9YjrVtWTkNXeO+BS4Wbngwn9h1KfuKVfVXTfXGMC7Xd26LT
|
||||
# xhnttvRH7nPTxDohZaSc9DL+nvcdBsb/jLlI35+AyuIBwHiaq9zYeVye1Pg2Ky+8
|
||||
# mhBnfbp06eKsCSi9hur8pz4eNlECrm0CPSYIpde7VGAp9EsyLw8vVRpF/TGSn/dY
|
||||
# mEyaqjYSzAhPmyMIkHcUDKkywbJgA4+tFf/ku4rwrDhiWbZ+/AChggIoMIICJAYJ
|
||||
# KoZIhvcNAQkGMYICFTCCAhECAQEwgY4wdzELMAkGA1UEBhMCVVMxEzARBgNVBAgT
|
||||
# Cldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29m
|
||||
# dCBDb3Jwb3JhdGlvbjEhMB8GA1UEAxMYTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENB
|
||||
# AhMzAAAAnUJo7jEc11a9AAAAAACdMAkGBSsOAwIaBQCgXTAYBgkqhkiG9w0BCQMx
|
||||
# CwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0xNjA4MzExMDM5MDBaMCMGCSqG
|
||||
# SIb3DQEJBDEWBBTMWCn+l2rTH175KRwZYeXsOYS/jzANBgkqhkiG9w0BAQUFAASC
|
||||
# AQBP1yOj69hBYdBm9fkAG7egE22ooaXjIsvH1UVqYyWwcz8kzmejgXjccUvT3Jkj
|
||||
# rIR67ccCpWsIXllFu3oQjY0uNgc1OW2gZCJhPd8eKmrFjLcNd7joxwFElfoCjawz
|
||||
# vyX7bfsO552N6dkGVru/a7wyuLC0Ux/frznZ5xJvuIlP7TETOlyU9cPAZazvSzXj
|
||||
# qtvbDmUsmcVvC4SLMb/DCCsfhYQbUSNT6A4i3qwLiq0pBb5rI6ria1kd6Uwyk8As
|
||||
# iTWz+I4ektgczoKo3SfZ3AsJaSmrxP4tT99zvxCGFt8Rr73LtgWap7/NdO3ydh1I
|
||||
# 7TJ/ZNMx/CW+eVq7GLwM9GzQ
|
||||
# SIG # End signature block
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,166 @@
|
||||
.pagination {
|
||||
display: inline-block;
|
||||
padding-left: 0;
|
||||
margin: 20px 0;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.pagination > li {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
.pagination > li > a,
|
||||
.pagination > li > span {
|
||||
position: relative;
|
||||
float: left;
|
||||
padding: 6px 12px;
|
||||
margin-left: -1px;
|
||||
line-height: 1.428571429;
|
||||
text-decoration: none;
|
||||
background-color: #ffffff;
|
||||
border: 1px solid #dddddd;
|
||||
}
|
||||
|
||||
.pagination > li:first-child > a,
|
||||
.pagination > li:first-child > span {
|
||||
margin-left: 0;
|
||||
border-bottom-left-radius: 4px;
|
||||
border-top-left-radius: 4px;
|
||||
}
|
||||
|
||||
.pagination > li:last-child > a,
|
||||
.pagination > li:last-child > span {
|
||||
border-top-right-radius: 4px;
|
||||
border-bottom-right-radius: 4px;
|
||||
}
|
||||
|
||||
.pagination > li > a:hover,
|
||||
.pagination > li > span:hover,
|
||||
.pagination > li > a:focus,
|
||||
.pagination > li > span:focus {
|
||||
background-color: #eeeeee;
|
||||
}
|
||||
|
||||
.pagination > .active > a,
|
||||
.pagination > .active > span,
|
||||
.pagination > .active > a:hover,
|
||||
.pagination > .active > span:hover,
|
||||
.pagination > .active > a:focus,
|
||||
.pagination > .active > span:focus {
|
||||
z-index: 2;
|
||||
color: #ffffff;
|
||||
cursor: default;
|
||||
background-color: #428bca;
|
||||
border-color: #428bca;
|
||||
}
|
||||
|
||||
.pagination > .disabled > span,
|
||||
.pagination > .disabled > a,
|
||||
.pagination > .disabled > a:hover,
|
||||
.pagination > .disabled > a:focus {
|
||||
color: #999999;
|
||||
cursor: not-allowed;
|
||||
background-color: #ffffff;
|
||||
border-color: #dddddd;
|
||||
}
|
||||
|
||||
.pagination-lg > li > a,
|
||||
.pagination-lg > li > span {
|
||||
padding: 10px 16px;
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.pagination-lg > li:first-child > a,
|
||||
.pagination-lg > li:first-child > span {
|
||||
border-bottom-left-radius: 6px;
|
||||
border-top-left-radius: 6px;
|
||||
}
|
||||
|
||||
.pagination-lg > li:last-child > a,
|
||||
.pagination-lg > li:last-child > span {
|
||||
border-top-right-radius: 6px;
|
||||
border-bottom-right-radius: 6px;
|
||||
}
|
||||
|
||||
.pagination-sm > li > a,
|
||||
.pagination-sm > li > span {
|
||||
padding: 5px 10px;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.pagination-sm > li:first-child > a,
|
||||
.pagination-sm > li:first-child > span {
|
||||
border-bottom-left-radius: 3px;
|
||||
border-top-left-radius: 3px;
|
||||
}
|
||||
|
||||
.pagination-sm > li:last-child > a,
|
||||
.pagination-sm > li:last-child > span {
|
||||
border-top-right-radius: 3px;
|
||||
border-bottom-right-radius: 3px;
|
||||
}
|
||||
|
||||
.pager {
|
||||
padding-left: 0;
|
||||
margin: 20px 0;
|
||||
text-align: center;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
.pager:before,
|
||||
.pager:after {
|
||||
display: table;
|
||||
content: " ";
|
||||
}
|
||||
|
||||
.pager:after {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.pager:before,
|
||||
.pager:after {
|
||||
display: table;
|
||||
content: " ";
|
||||
}
|
||||
|
||||
.pager:after {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.pager li {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
.pager li > a,
|
||||
.pager li > span {
|
||||
display: inline-block;
|
||||
padding: 5px 14px;
|
||||
background-color: #ffffff;
|
||||
border: 1px solid #dddddd;
|
||||
border-radius: 15px;
|
||||
}
|
||||
|
||||
.pager li > a:hover,
|
||||
.pager li > a:focus {
|
||||
text-decoration: none;
|
||||
background-color: #eeeeee;
|
||||
}
|
||||
|
||||
.pager .next > a,
|
||||
.pager .next > span {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.pager .previous > a,
|
||||
.pager .previous > span {
|
||||
float: left;
|
||||
}
|
||||
|
||||
.pager .disabled > a,
|
||||
.pager .disabled > a:hover,
|
||||
.pager .disabled > a:focus,
|
||||
.pager .disabled > span {
|
||||
color: #999999;
|
||||
cursor: not-allowed;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user