Merge pull request #2 from tparnell8/twitter

Twitter
This commit is contained in:
Tommy Parnell
2015-10-10 15:03:49 -04:00
16 changed files with 212 additions and 285 deletions

View File

@@ -31,6 +31,7 @@ namespace DotNetMashup.Web.Controllers
this.setting = setting; this.setting = setting;
} }
[ResponseCache(Duration = 3600, NoStore = true, Location = ResponseCacheLocation.Any)]
public async Task<IActionResult> Index(int page = 1) public async Task<IActionResult> Index(int page = 1)
{ {
var factoryData = (await factory.GetData()); var factoryData = (await factory.GetData());

View File

@@ -169,18 +169,11 @@ namespace DotNetMashup.Web.Extensions
@"\s+[^\s]+$", string.Empty, RegexOptions.IgnoreCase | RegexOptions.Compiled) + trailingText; @"\s+[^\s]+$", string.Empty, RegexOptions.IgnoreCase | RegexOptions.Compiled) + trailingText;
} }
public static void ForEach<T>(this IEnumerable<T> enumeration, Action<T> action) public static string TrimAll(this string input)
{ {
foreach(T item in enumeration) return new string(input.ToCharArray()
{ .Where(c => !char.IsWhiteSpace(c))
action?.Invoke(item); .ToArray());
}
}
public static IEnumerable<IEnumerable<T>> Split<T>(this IEnumerable<T> list, int parts)
{
var i = 0;
return list.GroupBy(a => i++ % parts).AsEnumerable();
} }
} }
} }

View File

@@ -0,0 +1,26 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace DotNetMashup.Web.Extensions
{
public static class LinqExtensions
{
public static void ForEach<T>(this IEnumerable<T> enumeration, Action<T> action)
{
foreach(T item in enumeration)
{
action?.Invoke(item);
}
}
public static IEnumerable<IEnumerable<T>> Split<T>(this IEnumerable<T> list, int parts)
{
var i = 0;
return list.GroupBy(a => i++ % parts).AsEnumerable();
}
//public static IEnumerable<>
}
}

View File

@@ -0,0 +1,29 @@
using System;
using System.Threading.Tasks;
using DotNetMashup.Web.Model;
using Tweetinvi;
using Tweetinvi.Core.Interfaces;
using Tweetinvi.Core.Interfaces.Models;
namespace DotNetMashup.Web.Extensions
{
public static class TwitterExtensions
{
public static TwitterData ToTwitterData(this ITweet tweet)
{
return new TwitterData
{
PublishedDate = tweet.CreatedAt,
Content = tweet.Text,
tweet = new Lazy<Task<IOEmbedTweet>>(() => tweet.GenerateOEmbedTweetAsync()),
Author = new Author
{
Name = tweet.CreatedBy.Name,
AuthorUrl = tweet.CreatedBy.Url,
Email = string.Empty,
ImageUrl = tweet.CreatedBy.ProfileImageUrl400x400
}
};
}
}
}

View File

@@ -33,7 +33,8 @@ namespace DotNetMashup.Web.Factory
Repos = new List<IRepository>() Repos = new List<IRepository>()
{ {
new GitHubRepository(config), new GitHubRepository(config),
new BlogPostRepository(data, setting) new BlogPostRepository(data, setting),
new TwitterRepository(setting, config)
}; };
this.cache = cache; this.cache = cache;
} }

View File

@@ -8,5 +8,6 @@ namespace DotNetMashup.Web.Global
short AmountPerPage { get; } short AmountPerPage { get; }
string Title { get; } string Title { get; }
string Descriptions { get; } string Descriptions { get; }
int TwitterMaxSearch { get; }
} }
} }

View File

@@ -6,8 +6,9 @@ namespace DotNetMashup.Web.Global
{ {
public short AmountPerPage { get { return 12; } } public short AmountPerPage { get { return 12; } }
public List<string> Categories { get; } = new List<string> { "c#", "csharp", "cs", "asp.net", "NancyFx", "Nancy", "vNext", "asp.net 5" }; public List<string> Categories { get; } = new List<string> { "c#", "csharp", "cs", "asp.net", "NancyFx", "vNext", "asp.net 5", "aspnet5" };
public string Title { get { return "DotNet Mashups"; } } public string Title { get { return "DotNet Mashups"; } }
public string Descriptions { get { return "Mashup of DotNet News"; } } public string Descriptions { get { return "Mashup of DotNet News"; } }
public int TwitterMaxSearch { get { return 10; } }
} }
} }

View File

@@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Tweetinvi.Core.Interfaces.Models;
namespace DotNetMashup.Web.Model
{
public class TwitterData : BaseExternalData
{
public Lazy<Task<IOEmbedTweet>> tweet { get; set; }
}
}

View File

@@ -1,26 +1,63 @@
//using System; using System;
//using System.Collections.Generic; using System.Collections.Generic;
//using System.Linq; using System.Linq;
//using System.Threading.Tasks; using System.Text.RegularExpressions;
//using DotNetMashup.Web.Model; using System.Threading.Tasks;
//using Tweetinvi; using DotNetMashup.Web.Extensions;
using DotNetMashup.Web.Global;
using DotNetMashup.Web.Model;
using Microsoft.Framework.Configuration;
using Tweetinvi;
using Tweetinvi.Core.Credentials;
using Tweetinvi.Core.Enum;
using Tweetinvi.Core.Interfaces;
using Tweetinvi.Core.Parameters;
//namespace DotNetMashup.Web.Repositories namespace DotNetMashup.Web.Repositories
//{ {
// public class TwitterRepository : IRepository public class TwitterRepository : IRepository
// { {
// public string FactoryName private readonly IConfiguration config;
// { private readonly ISiteSetting SiteSetting;
// get private Regex filter = new Regex("(job|Job|JOB|looking for|help|apply|Apply)", RegexOptions.Compiled);
// {
// return "Twitter";
// }
// }
// public Task<IEnumerable<IExternalData>> GetData() public TwitterRepository(ISiteSetting siteSetting, IConfiguration config)
// { {
// throw new NotImplementedException(); this.SiteSetting = siteSetting;
// var matchingTweets = Search.SearchTweets(); this.config = config;
// } }
// }
//} public string FactoryName
{
get
{
return "Twitter";
}
}
public Task<IEnumerable<IExternalData>> GetData()
{
ExceptionHandler.SwallowWebExceptions = true;
var creds = new TwitterCredentials(config["twitterkey"], config["twittersecret"], config["twittertokenKey"], config["twittertokenSecret"]);
Auth.SetCredentials(creds);
var tweets = SiteSetting
.Categories
.Select(a => a.TrimAll())
.Where(a => !a.Equals("c#"))
.AsParallel()
.Select(a => Search.SearchTweets(new TweetSearchParameters("#" + a) { Lang = Language.English, MaximumNumberOfResults = 100, TweetSearchType = Tweetinvi.Core.Interfaces.Parameters.TweetSearchType.OriginalTweetsOnly }))
.SelectMany(a => a)
.Where(a => !a.IsRetweet && !filter.IsMatch(a.Text) && !a.Hashtags.Any(b => filter.IsMatch(b.Text)))
.GroupBy(a => a.CreatedAt.Day + a.CreatedAt.Year)
.SelectMany(a => a.Distinct().Take(3))
.Select(a => a.ToTwitterData())
.OrderByDescending(a => a.PublishedDate)
.Cast<IExternalData>()
.ToList()
.AsEnumerable();
return Task.FromResult(tweets);
}
}
}

View File

@@ -41,6 +41,7 @@ namespace DotNetMashup.Web
{ {
return new MemoryCache(new MemoryCacheOptions()); return new MemoryCache(new MemoryCacheOptions());
}); });
services.AddCaching();
services.AddInstance(_feedData); services.AddInstance(_feedData);
services.AddSingleton<RepositoryFactory>(); services.AddSingleton<RepositoryFactory>();
// Add MVC services to the services container. // Add MVC services to the services container.

View File

@@ -0,0 +1,9 @@
@model DotNetMashup.Web.Model.TwitterData
<cache vary-by="@Model.GetHashCode()">
<div class="row">
<div class="col-md-offset-3">
@Html.Raw((await Model.tweet.Value)?.HTML)
</div>
</div>
</cache>

View File

@@ -7,7 +7,9 @@
<link rel="stylesheet" href="https://ajax.aspnetcdn.com/ajax/bootstrap/3.0.0/css/bootstrap.min.css" /> <link rel="stylesheet" href="https://ajax.aspnetcdn.com/ajax/bootstrap/3.0.0/css/bootstrap.min.css" />
<link rel="stylesheet" href="~/css/site.css" asp-append-version="true" /> <link rel="stylesheet" href="~/css/site.css" asp-append-version="true" />
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css"> <link rel="stylesheet" href="https://ajax.aspnetcdn.com/ajax/bootstrap/3.0.0/css/bootstrap.min.css"
asp-fallback-href="~/lib/bootstrap/dist/css/bootstrap.min.css"
asp-fallback-test-class="hidden" asp-fallback-test-property="visibility" asp-fallback-test-value="hidden" />
</head> </head>
<body> <body>
<div class="headerwrap"> <div class="headerwrap">
@@ -20,13 +22,30 @@
<p>&copy; 2015 - DotNetMashup.Web</p> <p>&copy; 2015 - DotNetMashup.Web</p>
</footer> </footer>
<script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-2.1.4.min.js"> <script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-2.1.4.min.js"
asp-fallback-src="~/lib/jquery/dist/jquery.min.js"
asp-fallback-test="window.jQuery">
</script> </script>
<script src="https://ajax.aspnetcdn.com/ajax/bootstrap/3.0.0/bootstrap.min.js"> <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">
</script> </script>
<script src="https://ajax.aspnetcdn.com/ajax/hammer.js/2.0.4/hammer.min.js"> <script src="https://ajax.aspnetcdn.com/ajax/hammer.js/2.0.4/hammer.min.js"
asp-fallback-src="~/lib/hammer.js/hammer.js"
asp-fallback-test="window.Hammer">
</script>
<script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-2.1.4.min.js"
asp-fallback-src="~/lib/jquery/dist/jquery.min.js"
asp-fallback-test="window.jQuery">
</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">
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"
asp-fallback-src="~/lib/underscore/undercore-min.js"
asp-fallback-test="_">
</script> </script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
<script src="~/js/site.js" asp-append-version="true"></script> <script src="~/js/site.js" asp-append-version="true"></script>
@RenderSection("scripts", required: false) @RenderSection("scripts", required: false)

View File

@@ -2,5 +2,9 @@
"name": "ASP.NET", "name": "ASP.NET",
"private": true, "private": true,
"dependencies": { "dependencies": {
"jquery": "~2.1.4",
"bootstrap": "~3.3.5",
"font-awesome": "~4.4.0",
"underscore": "~1.8.3"
} }
} }

View File

@@ -16,7 +16,7 @@
"Microsoft.Framework.Logging.Debug": "1.0.0-beta7", "Microsoft.Framework.Logging.Debug": "1.0.0-beta7",
"Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0-beta7", "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0-beta7",
"Newtonsoft.Json": "7.0.1", "Newtonsoft.Json": "7.0.1",
"TweetinviAPI": "0.9.9.7", "TweetinviAPI": "0.9.9.8",
"Octokit": "0.16.0", "Octokit": "0.16.0",
"CommonMark.NET": "0.9.1" "CommonMark.NET": "0.9.1"
}, },

View File

@@ -1,245 +1,3 @@
/// <autosync enabled="true" /> /// <autosync enabled="true" />
/// <reference path="../gulpfile.js" /> /// <reference path="../gulpfile.js" />
/// <reference path="js/site.js" /> /// <reference path="js/site.js" />
/// <reference path="lib/bootstrap/assets/js/application.js" />
/// <reference path="lib/bootstrap/assets/js/customizer.js" />
/// <reference path="lib/bootstrap/assets/js/filesaver.js" />
/// <reference path="lib/bootstrap/assets/js/holder.js" />
/// <reference path="lib/bootstrap/assets/js/html5shiv.js" />
/// <reference path="lib/bootstrap/assets/js/jquery.js" />
/// <reference path="lib/bootstrap/assets/js/jszip.js" />
/// <reference path="lib/bootstrap/assets/js/less.js" />
/// <reference path="lib/bootstrap/assets/js/raw-files.js" />
/// <reference path="lib/bootstrap/assets/js/respond.min.js" />
/// <reference path="lib/bootstrap/assets/js/uglify.js" />
/// <reference path="lib/bootstrap/dist/js/bootstrap.js" />
/// <reference path="lib/bootstrap/examples/offcanvas/offcanvas.js" />
/// <reference path="lib/bootstrap/Gruntfile.js" />
/// <reference path="lib/bootstrap/js/affix.js" />
/// <reference path="lib/bootstrap/js/alert.js" />
/// <reference path="lib/bootstrap/js/button.js" />
/// <reference path="lib/bootstrap/js/carousel.js" />
/// <reference path="lib/bootstrap/js/collapse.js" />
/// <reference path="lib/bootstrap/js/dropdown.js" />
/// <reference path="lib/bootstrap/js/modal.js" />
/// <reference path="lib/bootstrap/js/popover.js" />
/// <reference path="lib/bootstrap/js/scrollspy.js" />
/// <reference path="lib/bootstrap/js/tab.js" />
/// <reference path="lib/bootstrap/js/tests/phantom.js" />
/// <reference path="lib/bootstrap/js/tests/server.js" />
/// <reference path="lib/bootstrap/js/tests/unit/affix.js" />
/// <reference path="lib/bootstrap/js/tests/unit/alert.js" />
/// <reference path="lib/bootstrap/js/tests/unit/button.js" />
/// <reference path="lib/bootstrap/js/tests/unit/carousel.js" />
/// <reference path="lib/bootstrap/js/tests/unit/collapse.js" />
/// <reference path="lib/bootstrap/js/tests/unit/dropdown.js" />
/// <reference path="lib/bootstrap/js/tests/unit/modal.js" />
/// <reference path="lib/bootstrap/js/tests/unit/phantom.js" />
/// <reference path="lib/bootstrap/js/tests/unit/popover.js" />
/// <reference path="lib/bootstrap/js/tests/unit/scrollspy.js" />
/// <reference path="lib/bootstrap/js/tests/unit/tab.js" />
/// <reference path="lib/bootstrap/js/tests/unit/tooltip.js" />
/// <reference path="lib/bootstrap/js/tests/unit/transition.js" />
/// <reference path="lib/bootstrap/js/tests/vendor/jquery.js" />
/// <reference path="lib/bootstrap/js/tests/vendor/qunit.js" />
/// <reference path="lib/bootstrap/js/tooltip.js" />
/// <reference path="lib/bootstrap/js/transition.js" />
/// <reference path="lib/bootstrap-touch-carousel/dist/js/bootstrap-touch-carousel.js" />
/// <reference path="lib/bootstrap-touch-carousel/Gruntfile.js" />
/// <reference path="lib/bootstrap-touch-carousel/src/js/touch-carousel.js" />
/// <reference path="lib/bootstrap-touch-carousel/src/js/transition.js" />
/// <reference path="lib/hammer.js/hammer.js" />
/// <reference path="lib/jquery/dist/jquery.js" />
/// <reference path="lib/jquery/src/ajax.js" />
/// <reference path="lib/jquery/src/ajax/jsonp.js" />
/// <reference path="lib/jquery/src/ajax/load.js" />
/// <reference path="lib/jquery/src/ajax/parseJSON.js" />
/// <reference path="lib/jquery/src/ajax/parseXML.js" />
/// <reference path="lib/jquery/src/ajax/script.js" />
/// <reference path="lib/jquery/src/ajax/var/nonce.js" />
/// <reference path="lib/jquery/src/ajax/var/rquery.js" />
/// <reference path="lib/jquery/src/ajax/xhr.js" />
/// <reference path="lib/jquery/src/attributes.js" />
/// <reference path="lib/jquery/src/attributes/attr.js" />
/// <reference path="lib/jquery/src/attributes/classes.js" />
/// <reference path="lib/jquery/src/attributes/prop.js" />
/// <reference path="lib/jquery/src/attributes/support.js" />
/// <reference path="lib/jquery/src/attributes/val.js" />
/// <reference path="lib/jquery/src/callbacks.js" />
/// <reference path="lib/jquery/src/core.js" />
/// <reference path="lib/jquery/src/core/access.js" />
/// <reference path="lib/jquery/src/core/init.js" />
/// <reference path="lib/jquery/src/core/parseHTML.js" />
/// <reference path="lib/jquery/src/core/ready.js" />
/// <reference path="lib/jquery/src/core/var/rsingleTag.js" />
/// <reference path="lib/jquery/src/css.js" />
/// <reference path="lib/jquery/src/css/addGetHookIf.js" />
/// <reference path="lib/jquery/src/css/curCSS.js" />
/// <reference path="lib/jquery/src/css/defaultDisplay.js" />
/// <reference path="lib/jquery/src/css/hiddenVisibleSelectors.js" />
/// <reference path="lib/jquery/src/css/support.js" />
/// <reference path="lib/jquery/src/css/swap.js" />
/// <reference path="lib/jquery/src/css/var/cssExpand.js" />
/// <reference path="lib/jquery/src/css/var/getStyles.js" />
/// <reference path="lib/jquery/src/css/var/isHidden.js" />
/// <reference path="lib/jquery/src/css/var/rmargin.js" />
/// <reference path="lib/jquery/src/css/var/rnumnonpx.js" />
/// <reference path="lib/jquery/src/data.js" />
/// <reference path="lib/jquery/src/data/accepts.js" />
/// <reference path="lib/jquery/src/data/Data.js" />
/// <reference path="lib/jquery/src/data/var/data_priv.js" />
/// <reference path="lib/jquery/src/data/var/data_user.js" />
/// <reference path="lib/jquery/src/deferred.js" />
/// <reference path="lib/jquery/src/deprecated.js" />
/// <reference path="lib/jquery/src/dimensions.js" />
/// <reference path="lib/jquery/src/effects.js" />
/// <reference path="lib/jquery/src/effects/animatedSelector.js" />
/// <reference path="lib/jquery/src/effects/Tween.js" />
/// <reference path="lib/jquery/src/event.js" />
/// <reference path="lib/jquery/src/event/ajax.js" />
/// <reference path="lib/jquery/src/event/alias.js" />
/// <reference path="lib/jquery/src/event/support.js" />
/// <reference path="lib/jquery/src/exports/amd.js" />
/// <reference path="lib/jquery/src/exports/global.js" />
/// <reference path="lib/jquery/src/intro.js" />
/// <reference path="lib/jquery/src/jquery.js" />
/// <reference path="lib/jquery/src/manipulation.js" />
/// <reference path="lib/jquery/src/manipulation/_evalUrl.js" />
/// <reference path="lib/jquery/src/manipulation/support.js" />
/// <reference path="lib/jquery/src/manipulation/var/rcheckableType.js" />
/// <reference path="lib/jquery/src/offset.js" />
/// <reference path="lib/jquery/src/outro.js" />
/// <reference path="lib/jquery/src/queue.js" />
/// <reference path="lib/jquery/src/queue/delay.js" />
/// <reference path="lib/jquery/src/selector.js" />
/// <reference path="lib/jquery/src/selector-native.js" />
/// <reference path="lib/jquery/src/selector-sizzle.js" />
/// <reference path="lib/jquery/src/serialize.js" />
/// <reference path="lib/jquery/src/sizzle/dist/sizzle.js" />
/// <reference path="lib/jquery/src/traversing.js" />
/// <reference path="lib/jquery/src/traversing/findFilter.js" />
/// <reference path="lib/jquery/src/traversing/var/rneedsContext.js" />
/// <reference path="lib/jquery/src/var/arr.js" />
/// <reference path="lib/jquery/src/var/class2type.js" />
/// <reference path="lib/jquery/src/var/concat.js" />
/// <reference path="lib/jquery/src/var/hasOwn.js" />
/// <reference path="lib/jquery/src/var/indexOf.js" />
/// <reference path="lib/jquery/src/var/pnum.js" />
/// <reference path="lib/jquery/src/var/push.js" />
/// <reference path="lib/jquery/src/var/rnotwhite.js" />
/// <reference path="lib/jquery/src/var/slice.js" />
/// <reference path="lib/jquery/src/var/strundefined.js" />
/// <reference path="lib/jquery/src/var/support.js" />
/// <reference path="lib/jquery/src/var/toString.js" />
/// <reference path="lib/jquery/src/wrap.js" />
/// <reference path="lib/jquery-validation/build/release.js" />
/// <reference path="lib/jquery-validation/dist/additional-methods.js" />
/// <reference path="lib/jquery-validation/dist/jquery.validate.js" />
/// <reference path="lib/jquery-validation/Gruntfile.js" />
/// <reference path="lib/jquery-validation/src/additional/accept.js" />
/// <reference path="lib/jquery-validation/src/additional/additional.js" />
/// <reference path="lib/jquery-validation/src/additional/alphanumeric.js" />
/// <reference path="lib/jquery-validation/src/additional/bankaccountNL.js" />
/// <reference path="lib/jquery-validation/src/additional/bankorgiroaccountNL.js" />
/// <reference path="lib/jquery-validation/src/additional/bic.js" />
/// <reference path="lib/jquery-validation/src/additional/cifES.js" />
/// <reference path="lib/jquery-validation/src/additional/cpfBR.js" />
/// <reference path="lib/jquery-validation/src/additional/creditcardtypes.js" />
/// <reference path="lib/jquery-validation/src/additional/currency.js" />
/// <reference path="lib/jquery-validation/src/additional/dateFA.js" />
/// <reference path="lib/jquery-validation/src/additional/dateITA.js" />
/// <reference path="lib/jquery-validation/src/additional/dateNL.js" />
/// <reference path="lib/jquery-validation/src/additional/extension.js" />
/// <reference path="lib/jquery-validation/src/additional/giroaccountNL.js" />
/// <reference path="lib/jquery-validation/src/additional/iban.js" />
/// <reference path="lib/jquery-validation/src/additional/integer.js" />
/// <reference path="lib/jquery-validation/src/additional/ipv4.js" />
/// <reference path="lib/jquery-validation/src/additional/ipv6.js" />
/// <reference path="lib/jquery-validation/src/additional/lettersonly.js" />
/// <reference path="lib/jquery-validation/src/additional/letterswithbasicpunc.js" />
/// <reference path="lib/jquery-validation/src/additional/mobileNL.js" />
/// <reference path="lib/jquery-validation/src/additional/mobileUK.js" />
/// <reference path="lib/jquery-validation/src/additional/nieES.js" />
/// <reference path="lib/jquery-validation/src/additional/nifES.js" />
/// <reference path="lib/jquery-validation/src/additional/notEqualTo.js" />
/// <reference path="lib/jquery-validation/src/additional/nowhitespace.js" />
/// <reference path="lib/jquery-validation/src/additional/pattern.js" />
/// <reference path="lib/jquery-validation/src/additional/phoneNL.js" />
/// <reference path="lib/jquery-validation/src/additional/phonesUK.js" />
/// <reference path="lib/jquery-validation/src/additional/phoneUK.js" />
/// <reference path="lib/jquery-validation/src/additional/phoneUS.js" />
/// <reference path="lib/jquery-validation/src/additional/postalcodeBR.js" />
/// <reference path="lib/jquery-validation/src/additional/postalCodeCA.js" />
/// <reference path="lib/jquery-validation/src/additional/postalcodeIT.js" />
/// <reference path="lib/jquery-validation/src/additional/postalcodeNL.js" />
/// <reference path="lib/jquery-validation/src/additional/postcodeUK.js" />
/// <reference path="lib/jquery-validation/src/additional/require_from_group.js" />
/// <reference path="lib/jquery-validation/src/additional/skip_or_fill_minimum.js" />
/// <reference path="lib/jquery-validation/src/additional/statesUS.js" />
/// <reference path="lib/jquery-validation/src/additional/strippedminlength.js" />
/// <reference path="lib/jquery-validation/src/additional/time.js" />
/// <reference path="lib/jquery-validation/src/additional/time12h.js" />
/// <reference path="lib/jquery-validation/src/additional/url2.js" />
/// <reference path="lib/jquery-validation/src/additional/vinUS.js" />
/// <reference path="lib/jquery-validation/src/additional/zipcodeUS.js" />
/// <reference path="lib/jquery-validation/src/additional/ziprange.js" />
/// <reference path="lib/jquery-validation/src/ajax.js" />
/// <reference path="lib/jquery-validation/src/core.js" />
/// <reference path="lib/jquery-validation/src/localization/messages_ar.js" />
/// <reference path="lib/jquery-validation/src/localization/messages_bg.js" />
/// <reference path="lib/jquery-validation/src/localization/messages_bn_BD.js" />
/// <reference path="lib/jquery-validation/src/localization/messages_ca.js" />
/// <reference path="lib/jquery-validation/src/localization/messages_cs.js" />
/// <reference path="lib/jquery-validation/src/localization/messages_da.js" />
/// <reference path="lib/jquery-validation/src/localization/messages_de.js" />
/// <reference path="lib/jquery-validation/src/localization/messages_el.js" />
/// <reference path="lib/jquery-validation/src/localization/messages_es.js" />
/// <reference path="lib/jquery-validation/src/localization/messages_es_AR.js" />
/// <reference path="lib/jquery-validation/src/localization/messages_es_PE.js" />
/// <reference path="lib/jquery-validation/src/localization/messages_et.js" />
/// <reference path="lib/jquery-validation/src/localization/messages_eu.js" />
/// <reference path="lib/jquery-validation/src/localization/messages_fa.js" />
/// <reference path="lib/jquery-validation/src/localization/messages_fi.js" />
/// <reference path="lib/jquery-validation/src/localization/messages_fr.js" />
/// <reference path="lib/jquery-validation/src/localization/messages_ge.js" />
/// <reference path="lib/jquery-validation/src/localization/messages_gl.js" />
/// <reference path="lib/jquery-validation/src/localization/messages_he.js" />
/// <reference path="lib/jquery-validation/src/localization/messages_hr.js" />
/// <reference path="lib/jquery-validation/src/localization/messages_hu.js" />
/// <reference path="lib/jquery-validation/src/localization/messages_hy_AM.js" />
/// <reference path="lib/jquery-validation/src/localization/messages_id.js" />
/// <reference path="lib/jquery-validation/src/localization/messages_is.js" />
/// <reference path="lib/jquery-validation/src/localization/messages_it.js" />
/// <reference path="lib/jquery-validation/src/localization/messages_ja.js" />
/// <reference path="lib/jquery-validation/src/localization/messages_ka.js" />
/// <reference path="lib/jquery-validation/src/localization/messages_kk.js" />
/// <reference path="lib/jquery-validation/src/localization/messages_ko.js" />
/// <reference path="lib/jquery-validation/src/localization/messages_lt.js" />
/// <reference path="lib/jquery-validation/src/localization/messages_lv.js" />
/// <reference path="lib/jquery-validation/src/localization/messages_my.js" />
/// <reference path="lib/jquery-validation/src/localization/messages_nl.js" />
/// <reference path="lib/jquery-validation/src/localization/messages_no.js" />
/// <reference path="lib/jquery-validation/src/localization/messages_pl.js" />
/// <reference path="lib/jquery-validation/src/localization/messages_pt_BR.js" />
/// <reference path="lib/jquery-validation/src/localization/messages_pt_PT.js" />
/// <reference path="lib/jquery-validation/src/localization/messages_ro.js" />
/// <reference path="lib/jquery-validation/src/localization/messages_ru.js" />
/// <reference path="lib/jquery-validation/src/localization/messages_si.js" />
/// <reference path="lib/jquery-validation/src/localization/messages_sk.js" />
/// <reference path="lib/jquery-validation/src/localization/messages_sl.js" />
/// <reference path="lib/jquery-validation/src/localization/messages_sr.js" />
/// <reference path="lib/jquery-validation/src/localization/messages_sr_lat.js" />
/// <reference path="lib/jquery-validation/src/localization/messages_sv.js" />
/// <reference path="lib/jquery-validation/src/localization/messages_th.js" />
/// <reference path="lib/jquery-validation/src/localization/messages_tj.js" />
/// <reference path="lib/jquery-validation/src/localization/messages_tr.js" />
/// <reference path="lib/jquery-validation/src/localization/messages_uk.js" />
/// <reference path="lib/jquery-validation/src/localization/messages_vi.js" />
/// <reference path="lib/jquery-validation/src/localization/messages_zh.js" />
/// <reference path="lib/jquery-validation/src/localization/messages_zh_TW.js" />
/// <reference path="lib/jquery-validation/src/localization/methods_de.js" />
/// <reference path="lib/jquery-validation/src/localization/methods_es_CL.js" />
/// <reference path="lib/jquery-validation/src/localization/methods_fi.js" />
/// <reference path="lib/jquery-validation/src/localization/methods_nl.js" />
/// <reference path="lib/jquery-validation/src/localization/methods_pt.js" />
/// <reference path="lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js" />

View File

@@ -77,3 +77,37 @@ code, pre {
a.headlink, a.headlink:hover, a.headlink:visited{ a.headlink, a.headlink:hover, a.headlink:visited{
color: #FFFFFF; text-align:center; color: #FFFFFF; text-align:center;
} }
blockquote.twitter-tweet {
display: inline-block;
font-family: "Helvetica Neue", Roboto, "Segoe UI", Calibri, sans-serif;
font-size: 12px;
font-weight: bold;
line-height: 16px;
border-color: #eee #ddd #bbb;
border-radius: 5px;
border-style: solid;
border-width: 1px;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);
margin: 10px 5px;
padding: 0 16px 16px 16px;
max-width: 468px;
}
blockquote.twitter-tweet p {
font-size: 16px;
font-weight: normal;
line-height: 20px;
}
blockquote.twitter-tweet a {
color: inherit;
font-weight: normal;
text-decoration: none;
outline: 0 none;
}
blockquote.twitter-tweet a:hover,
blockquote.twitter-tweet a:focus {
text-decoration: underline;
}