mirror of
https://github.com/monero-project/monero-site.git
synced 2024-12-15 04:46:35 +02:00
164 lines
5.3 KiB
Ruby
164 lines
5.3 KiB
Ruby
# Jekyll plugin for generating Windows 8.1 start screen live tiles
|
|
#
|
|
# Usage: place this file in the _plugins directory and set the required configuration
|
|
# attributes in the _config.yml file
|
|
#
|
|
# Uses the following attributes in _config.yml:
|
|
# ie_category: - (optional) poll only a specific category of posts
|
|
# ie_frequency: - (optional) the frequency of site polling. Options are {30,60,360,720,1440}. Default is 1440 (1 day)
|
|
# ie_tile_color: - (optional) the color of the windows 8 pinned background tile
|
|
# ie_tile_small: - location of small tile image (For more information of tile sizes visit http://msdn.microsoft.com/en-us/library/dn455106(v=vs.85).aspx)
|
|
# ie_tile_medium - location of medium tile image
|
|
# ie_tile_wide - location of wide tile image
|
|
# ie_tile_large - location of large tile image
|
|
|
|
#
|
|
# Author: Matt Sheehan <sheehamj@mountunion.edu>
|
|
# Site: http://mattsheehan.me
|
|
# Source: http://github.com/
|
|
#
|
|
# Distributed under the MIT license
|
|
# Copyright Matt Sheehan 2014
|
|
|
|
|
|
module Jekyll
|
|
|
|
class TileTemplater < Generator
|
|
priority :low
|
|
safe true
|
|
|
|
# Entry method
|
|
def generate(site)
|
|
# create tile config file
|
|
site.static_files << TileConfig.new(site, site.source, "/ietemplates/", "ieconfig.xml")
|
|
|
|
# create tile poll files
|
|
# create at most 4
|
|
category = site.config["ie_category"]
|
|
posts = !category ? site.posts : site.categories.has_key?(category) ? site.categories[category] : site.posts
|
|
|
|
count = [posts.docs.length, 4].min
|
|
|
|
posts.docs.reverse[0..count].each_with_index do |post, index|
|
|
site.static_files << TilePoll.new(site, site.source, "/ietemplates/", "poll#{index+1}.xml", post)
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
# polling xml
|
|
class TilePoll < StaticFile
|
|
def initialize(site, base, dir, name, post)
|
|
super(site, base, dir, name, nil)
|
|
|
|
@post = post
|
|
end
|
|
|
|
def write(dest)
|
|
# post.render(site.layouts, site.site_payload)
|
|
|
|
# Create directory if doesn't exist
|
|
poll_dir = File.join(dest, @dir)
|
|
FileUtils.mkdir_p(poll_dir)
|
|
|
|
|
|
# Build xml tile templates
|
|
xml = Builder::XmlMarkup.new( :indent => 2)
|
|
xml.instruct! :xml, :encoding => "utf-8"
|
|
|
|
xml.tile do |tile|
|
|
tile.visual("lang"=>"en-US", "version"=>"2") do |v|
|
|
v.binding("template"=>"TileSquare150x150Text04", "branding"=>"logo", "fallback"=>"TileSquareImage") do |b|
|
|
b.tag!("text", @post['title'], "id"=>"1")
|
|
end
|
|
v.binding("template"=>"TileWide310x150Text03", "branding"=>"logo", "fallback"=>"TileWideImage") do |b|
|
|
b.tag!("text", @post['title'], "id"=>"1")
|
|
end
|
|
v.binding("template"=>"TileSquare310x310TextList02", "branding"=>"logo", "fallback"=>"TileWideText09") do |b|
|
|
b.tag!("text", @post['title'], "id"=>"1")
|
|
b.tag!("text", shorten(strip(@post.content)),"id"=>"2")
|
|
b.tag!("text", "#{@post.date.month}-#{@post.date.day}-#{@post.date.year}", "id"=>"3")
|
|
end
|
|
end
|
|
end
|
|
|
|
poll_path = File.join(poll_dir, @name)
|
|
File.open(poll_path, "w") { |f| f.write(xml.target!) }
|
|
end
|
|
|
|
|
|
private
|
|
|
|
# Shortens string and adds trailing ellipsis
|
|
def shorten(str, count = 30)
|
|
if str.length >= count
|
|
return str[0, count] << "..."
|
|
end
|
|
return str
|
|
end
|
|
|
|
# Strips html tags (not the best)
|
|
def strip(string)
|
|
string.gsub(/<[^>]*>/, "")
|
|
end
|
|
|
|
end
|
|
|
|
|
|
# sets ie 11 configs
|
|
class TileConfig < StaticFile;
|
|
def initialize(site, base, dir, name)
|
|
super(site, base, dir, name)
|
|
end
|
|
|
|
def write(dest)
|
|
require 'builder'
|
|
|
|
# configs
|
|
tile_color = @site.config["ie_tile_color"] || "#000000"
|
|
tile_small = @site.config["ie_tile_small"]
|
|
tile_medium = @site.config["ie_tile_medium"]
|
|
tile_wide = @site.config["ie_tile_wide"]
|
|
tile_large = @site.config["ie_tile_large"]
|
|
|
|
frequency = @site.config["ie_frequency"] || 1440
|
|
raise "frequency must be either 30, 60, 360, 720, 1440" unless [30,60,360,720,1440].include?(frequency)
|
|
|
|
# create dir for tile config
|
|
config_dir = File.join(dest, @dir)
|
|
FileUtils.mkdir_p(config_dir)
|
|
|
|
|
|
# build xml config
|
|
xml = Builder::XmlMarkup.new( :indent=>2)
|
|
xml.instruct! :xml, :encoding=>"utf-8"
|
|
|
|
xml.browserconfig do |config|
|
|
config.msapplication do |app|
|
|
app.tile do |tile|
|
|
tile.tag!("square70x70logo", "src"=>"#{tile_small}")
|
|
tile.tag!("square150x150logo", "src"=>"#{tile_medium}")
|
|
tile.tag!("wide310x150logo", "src"=>"#{tile_wide}")
|
|
tile.tag!("square310x310logo", "src"=>"#{tile_large}")
|
|
tile.tag!("TileColor", "#{tile_color}")
|
|
end
|
|
app.notification do |n|
|
|
n.tag!("polling-uri", "src"=>"/ietemplates/poll1.xml")
|
|
n.tag!("polling-uri2", "src"=>"/ietemplates/poll2.xml")
|
|
n.tag!("polling-uri3", "src"=>"/ietemplates/poll3.xml")
|
|
n.tag!("polling-uri4", "src"=>"/ietemplates/poll4.xml")
|
|
n.tag!("polling-uri5", "src"=>"/ietemplates/poll5.xml")
|
|
n.tag!("frequency", "#{frequency}")
|
|
n.tag!("cycle", "1")
|
|
end
|
|
end
|
|
end
|
|
|
|
# write file
|
|
config_path = File.join(config_dir, @name)
|
|
File.open(config_path, "w") { |f| f.write(xml.target!) }
|
|
end
|
|
end
|
|
end |