Skip to content

Commit

Permalink
add jquery.unobtrusive-ajax; configure startup services
Browse files Browse the repository at this point in the history
  • Loading branch information
HerbertBodner committed Dec 28, 2015
1 parent 0c52b1e commit 2142cdb
Show file tree
Hide file tree
Showing 10 changed files with 323 additions and 3 deletions.
20 changes: 20 additions & 0 deletions src/Example.Data/ExampleContextFactory.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.Data.Entity;
using WaCore.Contracts.Data.Repositories.Base;
using Microsoft.Data.Entity;

namespace Example.Data
{
public class ExampleContextFactory : IDbContextFactory
{
public IDbContext GetContext()
{
var optionsBuilder = new DbContextOptionsBuilder();
optionsBuilder.UseSqlServer("Server=(localdb)\\MSSQLLocalDB;Database=WaCoreExample;Trusted_Connection=True;");
return new ExampleDbContext(optionsBuilder.Options);
}
}
}
8 changes: 8 additions & 0 deletions src/Example.Web/Startup.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,11 @@
using Microsoft.Dnx.Runtime;
using Microsoft.Framework.Configuration;
using Microsoft.Framework.DependencyInjection;
using Microsoft.Framework.DependencyInjection.Extensions;
using WaCore.Contracts.Data.Repositories;
using WaCore.Contracts.Data.Repositories.Base;
using WaCore.Data;
using WaCore.Data.Repositories;
using WaCore.Entities.Core;
using WaCore.Web;

Expand Down Expand Up @@ -59,6 +63,10 @@ public void ConfigureServices(IServiceCollection services)
.AddEntityFrameworkStores<ExampleDbContext, Guid>()
.AddDefaultTokenProviders();


services.TryAddScoped<IUserRepository, UserRepository>();
services.TryAddScoped<IDbContextFactory, ExampleContextFactory>();

}

public IConfigurationRoot Configuration { get; set; }
Expand Down
5 changes: 4 additions & 1 deletion src/Example.Web/Views/Shared/_Layout.cshtml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li><a asp-controller="Home" asp-action="Index">Home</a></li>
<li><a asp-controller="User" asp-action="Index">User</a></li>
</ul>
@await Html.PartialAsync("_LoginPartial")
</div>
Expand All @@ -46,6 +47,7 @@
<environment names="Development">
<script src="~/lib/jquery/dist/jquery.js"></script>
<script src="~/lib/bootstrap/dist/js/bootstrap.js"></script>
<script src="~/lib/jquery-ajax-unobtrusive/jquery.unobtrusive-ajax.js"></script>
<script src="~/js/site.js" asp-append-version="true"></script>
</environment>
<environment names="Staging,Production">
Expand All @@ -55,8 +57,9 @@
</script>
<script src="https://ajax.aspnetcdn.com/ajax/bootstrap/3.0.0/bootstrap.min.js"
asp-fallback-src="~/lib/bootstrap/dist/js/bootstrap.min.js"
asp-fallback-test="window.jQuery && window.jQuery.fn && window.jQuery.fn.modal">
asp-fallback-test="window.jQuery && window.jQuery.fn && window.jQuery.fn.modal">
</script>
<script src="~/lib/jquery-ajax-unobtrusive/jquery.unobtrusive-ajax.js"></script>
<script src="~/js/site.js" asp-append-version="true"></script>
</environment>

Expand Down
3 changes: 2 additions & 1 deletion src/Example.Web/bower.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
"dependencies": {
"bootstrap": "3.0.0",
"jquery": "2.1.4",
"jquery-validation": "1.11.1"
"jquery-validation": "1.11.1",
"jquery-ajax-unobtrusive": "*"
}
}
2 changes: 2 additions & 0 deletions src/Example.Web/project.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
"Microsoft.AspNet.Diagnostics": "1.0.0-beta8",
"Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-beta8",
"Microsoft.AspNet.StaticFiles": "1.0.0-beta8",
"Microsoft.Framework.DependencyInjection.Abstractions": "1.0.0-beta8",
"Microsoft.AspNet.Tooling.Razor": "1.0.0-beta8",
"EntityFramework.SqlServer": "7.0.0-beta8",
"WaCore.Contracts": "1.0.0-*",
"WaCore.Web": "1.0.0-*",
Expand Down
8 changes: 7 additions & 1 deletion src/Example.Web/wwwroot/js/site.js
Original file line number Diff line number Diff line change
@@ -1 +1,7 @@

//function RefreshPageUrl(data, status, xhr, abc) {
// debugger;

// if (history.pushState) {
// history.pushState(null, "selle", "/User/Index?SearchConfig.Search=a&__RequestVerificationToken=CfDJ8HYT9lfm8ARJjuHKk1f_KwnFvUMSAFDM-PlwcE7Ngf6GKj823-HYxcV_a23PRv9f1Ly2HriSMbbnTu638h4CqrQbh448RDUUyk97CFRSIs_zg6yU9xaUoqesOACBbbPtGDyAECu5tCl6HjRVv27xtY4&X-R");
// }
//}
42 changes: 42 additions & 0 deletions src/Example.Web/wwwroot/lib/jquery-ajax-unobtrusive/.bower.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
{
"name": "jquery-ajax-unobtrusive",
"version": "3.2.3",
"homepage": "https://github.com/aspnet/jquery-ajax-unobtrusive",
"description": "Add-on to jQuery Ajax to enable unobtrusive options in data-* attributes",
"main": [
"jquery.unobtrusive-ajax.js"
],
"ignore": [
"**/.*",
"*.json",
"*.md",
"*.txt"
],
"keywords": [
"jquery",
"asp.net",
"mvc",
"ajax",
"unobtrusive"
],
"authors": [
"Microsoft"
],
"license": "http://www.microsoft.com/web/webpi/eula/net_library_eula_enu.htm",
"repository": {
"type": "git",
"url": "git://github.com/aspnet/jquery-ajax-unobtrusive.git"
},
"dependencies": {
"jquery": ">=1.8"
},
"_release": "3.2.3",
"_resolution": {
"type": "version",
"tag": "v3.2.3",
"commit": "ff31f3542e75b57ed354e6ddc79d134ab2e00b78"
},
"_source": "git://github.com/aspnet/jquery-ajax-unobtrusive.git",
"_target": "*",
"_originalSource": "jquery-ajax-unobtrusive"
}
33 changes: 33 additions & 0 deletions src/Example.Web/wwwroot/lib/jquery-ajax-unobtrusive/bower.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
{
"name": "jquery-ajax-unobtrusive",
"version": "3.2.3",
"homepage": "https://github.com/aspnet/jquery-ajax-unobtrusive",
"description": "Add-on to jQuery Ajax to enable unobtrusive options in data-* attributes",
"main": [
"jquery.unobtrusive-ajax.js"
],
"ignore": [
"**/.*",
"*.json",
"*.md",
"*.txt"
],
"keywords": [
"jquery",
"asp.net",
"mvc",
"ajax",
"unobtrusive"
],
"authors": [
"Microsoft"
],
"license": "http://www.microsoft.com/web/webpi/eula/net_library_eula_enu.htm",
"repository": {
"type": "git",
"url": "git://github.com/aspnet/jquery-ajax-unobtrusive.git"
},
"dependencies": {
"jquery": ">=1.8"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,186 @@
/*
* Microsoft grants you the right to use these script files for the sole
* purpose of either: (i) interacting through your browser with the Microsoft
* website or online service, subject to the applicable licensing or use
* terms; or (ii) using the files as included with a Microsoft product subject
* to that product's license terms. Microsoft reserves all other rights to the
* files not expressly granted by Microsoft, whether by implication, estoppel
* or otherwise. Insofar as a script file is dual licensed under GPL,
* Microsoft neither took the code under GPL nor distributes it thereunder but
* under the terms set out in this paragraph. All notices and licenses
* below are for informational purposes only.
/*!
** Unobtrusive Ajax support library for jQuery
** Copyright (C) Microsoft Corporation. All rights reserved.
*/

/*jslint white: true, browser: true, onevar: true, undef: true, nomen: true, eqeqeq: true, plusplus: true, bitwise: true, regexp: true, newcap: true, immed: true, strict: false */
/*global window: false, jQuery: false */

(function ($) {
var data_click = "unobtrusiveAjaxClick",
data_target = "unobtrusiveAjaxClickTarget",
data_validation = "unobtrusiveValidation";

function getFunction(code, argNames) {
var fn = window, parts = (code || "").split(".");
while (fn && parts.length) {
fn = fn[parts.shift()];
}
if (typeof (fn) === "function") {
return fn;
}
argNames.push(code);
return Function.constructor.apply(null, argNames);
}

function isMethodProxySafe(method) {
return method === "GET" || method === "POST";
}

function asyncOnBeforeSend(xhr, method) {
if (!isMethodProxySafe(method)) {
xhr.setRequestHeader("X-HTTP-Method-Override", method);
}
}

function asyncOnSuccess(element, data, contentType) {
var mode;

if (contentType.indexOf("application/x-javascript") !== -1) { // jQuery already executes JavaScript for us
return;
}

mode = (element.getAttribute("data-ajax-mode") || "").toUpperCase();
$(element.getAttribute("data-ajax-update")).each(function (i, update) {
var top;

switch (mode) {
case "BEFORE":
top = update.firstChild;
$("<div />").html(data).contents().each(function () {
update.insertBefore(this, top);
});
break;
case "AFTER":
$("<div />").html(data).contents().each(function () {
update.appendChild(this);
});
break;
case "REPLACE-WITH":
$(update).replaceWith(data);
break;
default:
$(update).html(data);
break;
}
});
}

function asyncRequest(element, options) {
var confirm, loading, method, duration;

confirm = element.getAttribute("data-ajax-confirm");
if (confirm && !window.confirm(confirm)) {
return;
}

loading = $(element.getAttribute("data-ajax-loading"));
duration = parseInt(element.getAttribute("data-ajax-loading-duration"), 10) || 0;

$.extend(options, {
type: element.getAttribute("data-ajax-method") || undefined,
url: element.getAttribute("data-ajax-url") || undefined,
cache: !!element.getAttribute("data-ajax-cache"),
beforeSend: function (xhr) {
var result;
asyncOnBeforeSend(xhr, method);
result = getFunction(element.getAttribute("data-ajax-begin"), ["xhr"]).apply(element, arguments);
if (result !== false) {
loading.show(duration);
}
return result;
},
complete: function () {
loading.hide(duration);
getFunction(element.getAttribute("data-ajax-complete"), ["xhr", "status"]).apply(element, arguments);
},
success: function (data, status, xhr) {
asyncOnSuccess(element, data, xhr.getResponseHeader("Content-Type") || "text/html");
getFunction(element.getAttribute("data-ajax-success"), ["data", "status", "xhr"]).apply(element, arguments);
},
error: function () {
getFunction(element.getAttribute("data-ajax-failure"), ["xhr", "status", "error"]).apply(element, arguments);
}
});

options.data.push({ name: "X-Requested-With", value: "XMLHttpRequest" });

method = options.type.toUpperCase();
if (!isMethodProxySafe(method)) {
options.type = "POST";
options.data.push({ name: "X-HTTP-Method-Override", value: method });
}

$.ajax(options);
}

function validate(form) {
var validationInfo = $(form).data(data_validation);
return !validationInfo || !validationInfo.validate || validationInfo.validate();
}

$(document).on("click", "a[data-ajax=true]", function (evt) {
evt.preventDefault();
asyncRequest(this, {
url: this.href,
type: "GET",
data: []
});
});

$(document).on("click", "form[data-ajax=true] input[type=image]", function (evt) {
var name = evt.target.name,
target = $(evt.target),
form = $(target.parents("form")[0]),
offset = target.offset();

form.data(data_click, [
{ name: name + ".x", value: Math.round(evt.pageX - offset.left) },
{ name: name + ".y", value: Math.round(evt.pageY - offset.top) }
]);

setTimeout(function () {
form.removeData(data_click);
}, 0);
});

$(document).on("click", "form[data-ajax=true] :submit", function (evt) {
var name = evt.currentTarget.name,
target = $(evt.target),
form = $(target.parents("form")[0]);

form.data(data_click, name ? [{ name: name, value: evt.currentTarget.value }] : []);
form.data(data_target, target);

setTimeout(function () {
form.removeData(data_click);
form.removeData(data_target);
}, 0);
});

$(document).on("submit", "form[data-ajax=true]", function (evt) {
var clickInfo = $(this).data(data_click) || [],
clickTarget = $(this).data(data_target),
isCancel = clickTarget && clickTarget.hasClass("cancel");
evt.preventDefault();
if (!isCancel && !validate(this)) {
return;
}
asyncRequest(this, {
url: this.action,
type: this.method || "GET",
data: clickInfo.concat($(this).serializeArray())
});
});
}(jQuery));

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 2142cdb

Please sign in to comment.