Set up Github Pages page for Bookcision, clean up a lot of the now-deprecated azure deployment code

This commit is contained in:
Tristan Homsi
2018-07-09 17:45:00 -04:00
parent 6857f0aa99
commit 90fdeba0b8
20 changed files with 789 additions and 351 deletions

28
.gitignore vendored
View File

@@ -1,16 +1,16 @@
syntax: glob
re:^bookcision\.sublime-workspace$
re:^aws\.json$
re:^dest/
re:^node_modules/
re:^node_modules.bak/
re:^build/
re:^src\excisor\npm-debug\.log$
re:^azure.json$
re:^rollbar.json$
EnableCorsInAzure/EnableCorsConsole/bin/
EnableCorsInAzure/EnableCorsConsole/obj/
EnableCorsInAzure/packages/
EnableCorsInAzure\EnableCorsConsole\azure.config
bookcision\.sublime-workspace$
aws\.json$
dest/
node_modules/
node_modules.bak/
build/
src\excisor\npm-debug\.log$
rollbar.json$
*.suo
obj/
obj/
node_modules/*
node_modules/
npm-debug.log
rollbar.json
.hg

View File

@@ -1,6 +0,0 @@
repo: ea91f34481ec3f5b51eb54e547efa8dfbdcff724
node: 2ea168564ad8c573f04a8a24d4dddeaaf50cf473
branch: default
latesttag: v4.0.4-0
latesttagdistance: 4
changessincelatesttag: 4

View File

@@ -1,16 +0,0 @@
syntax: glob
re:^bookcision\.sublime-workspace$
re:^aws\.json$
re:^dest/
re:^node_modules/
re:^node_modules.bak/
re:^build/
re:^src\excisor\npm-debug\.log$
re:^azure.json$
re:^rollbar.json$
EnableCorsInAzure/EnableCorsConsole/bin/
EnableCorsInAzure/EnableCorsConsole/obj/
EnableCorsInAzure/packages/
EnableCorsInAzure\EnableCorsConsole\azure.config
*.suo
obj/

11
.vscode/settings.json vendored
View File

@@ -1,11 +0,0 @@
// Place your settings in this file to overwrite default and user settings.
{
"files.exclude": {
"**/.git": true,
"**/.svn": true,
"**/.hg": true,
"**/.DS_Store": true,
"node_modules/**/*": true
},
"prettier.singleQuote": true
}

9
.vscode/tasks.json vendored
View File

@@ -1,9 +0,0 @@
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "0.1.0",
"command": "grunt",
"isShellCommand": true,
"args": ["--no-color"],
"showOutput": "always"
}

1
CNAME Normal file
View File

@@ -0,0 +1 @@
bookcision.readwise.io

View File

@@ -1,22 +0,0 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2013
VisualStudioVersion = 12.0.30110.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EnableCorsConsole", "EnableCorsConsole\EnableCorsConsole.csproj", "{03303625-E95E-446C-98EE-9D7651799C33}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{03303625-E95E-446C-98EE-9D7651799C33}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{03303625-E95E-446C-98EE-9D7651799C33}.Debug|Any CPU.Build.0 = Debug|Any CPU
{03303625-E95E-446C-98EE-9D7651799C33}.Release|Any CPU.ActiveCfg = Release|Any CPU
{03303625-E95E-446C-98EE-9D7651799C33}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

View File

@@ -1,25 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.Data.Edm" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.6.1.0" newVersion="5.6.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Data.Services.Client" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.6.1.0" newVersion="5.6.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Data.OData" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.6.1.0" newVersion="5.6.1.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<appSettings configSource="azure.config" />
</configuration>

View File

@@ -1,93 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{03303625-E95E-446C-98EE-9D7651799C33}</ProjectGuid>
<OutputType>Exe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>EnableCorsConsole</RootNamespace>
<AssemblyName>EnableCorsConsole</AssemblyName>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="Microsoft.Data.Edm, Version=5.6.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\Microsoft.Data.Edm.5.6.1\lib\net40\Microsoft.Data.Edm.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Data.OData, Version=5.6.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\Microsoft.Data.OData.5.6.1\lib\net40\Microsoft.Data.OData.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Data.Services.Client, Version=5.6.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\Microsoft.Data.Services.Client.5.6.1\lib\net40\Microsoft.Data.Services.Client.dll</HintPath>
</Reference>
<Reference Include="Microsoft.WindowsAzure.Configuration">
<HintPath>..\packages\Microsoft.WindowsAzure.ConfigurationManager.1.8.0.0\lib\net35-full\Microsoft.WindowsAzure.Configuration.dll</HintPath>
</Reference>
<Reference Include="Microsoft.WindowsAzure.Storage">
<HintPath>..\packages\WindowsAzure.Storage.3.1.0.0\lib\net40\Microsoft.WindowsAzure.Storage.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.5.0.8\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Configuration" />
<Reference Include="System.Core" />
<Reference Include="System.Data.Services.Client" />
<Reference Include="System.Spatial, Version=5.6.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\System.Spatial.5.6.1\lib\net40\System.Spatial.dll</HintPath>
</Reference>
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
<None Include="azure.config">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="azure.example.config" />
<None Include="packages.config" />
</ItemGroup>
<ItemGroup>
<WCFMetadata Include="Service References\" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- 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.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@@ -1,46 +0,0 @@
using System;
using System.Configuration;
using Microsoft.WindowsAzure.Storage.Auth;
using Microsoft.WindowsAzure.Storage.Blob;
using Microsoft.WindowsAzure.Storage.Shared.Protocol;
using System.Collections.Specialized;
namespace ConfigureBlobService
{
class Program
{
static void Main(string[] args)
{
NameValueCollection appSettings = ConfigurationManager.AppSettings;
Console.WriteLine("Configuring CORS on the Windows Azure BLOB service");
SetsServiceProperties(new Uri(appSettings["StorageUri"]), appSettings["AccountName"], appSettings["AccountKey"]);
}
static void SetsServiceProperties(Uri blobEndpoint, string accountName, string accountKey)
{
CloudBlobClient client =
new CloudBlobClient(blobEndpoint, new StorageCredentials(accountName, accountKey));
// Set the service properties.
ServiceProperties sp = client.GetServiceProperties();
sp.DefaultServiceVersion = "2013-08-15";
CorsRule cr = new CorsRule();
cr.AllowedHeaders.Add("*");
cr.AllowedMethods = CorsHttpMethods.Get;
cr.AllowedOrigins.Add("*");
//cr.AllowedOrigins.Add("http://kindle.amazon.com");
//cr.AllowedOrigins.Add("https://kindle.amazon.com");
//cr.AllowedOrigins.Add("http://read.amazon.com");
//cr.AllowedOrigins.Add("https://read.amazon.com");
cr.MaxAgeInSeconds = 5;
sp.Cors.CorsRules.Clear();
sp.Cors.CorsRules.Add(cr);
client.SetServiceProperties(sp);
ServiceProperties finalSp = client.GetServiceProperties();
Console.WriteLine(finalSp);
}
}
}

View File

@@ -1,36 +0,0 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("EnableCorsConsole")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("EnableCorsConsole")]
[assembly: AssemblyCopyright("Copyright © 2014")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("d8f0fd56-7672-42e6-b572-242909bc5c00")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -1,5 +0,0 @@
<appSettings>
<add key="StorageUri" value="http://norbauercdn.blob.core.windows.net" />
<add key="AccountName" value="XXXXXX" />
<add key="AccountKey" value="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" />
</appSettings>

View File

@@ -1,10 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Microsoft.Data.Edm" version="5.6.1" targetFramework="net45" />
<package id="Microsoft.Data.OData" version="5.6.1" targetFramework="net45" />
<package id="Microsoft.Data.Services.Client" version="5.6.1" targetFramework="net45" />
<package id="Microsoft.WindowsAzure.ConfigurationManager" version="1.8.0.0" targetFramework="net45" />
<package id="Newtonsoft.Json" version="5.0.8" targetFramework="net45" />
<package id="System.Spatial" version="5.6.1" targetFramework="net45" />
<package id="WindowsAzure.Storage" version="3.1.0.0" targetFramework="net45" />
</packages>

View File

@@ -18,7 +18,6 @@ module.exports = function(grunt) {
};
// Read in package.json and layer on some grunt-specific properties
var azure = grunt.file.readJSON('azure.json');
var rollbar = grunt.file.readJSON('rollbar.json');
var getBuiltFilesArray = function(type, dest) {
@@ -261,35 +260,6 @@ module.exports = function(grunt) {
}
},
// Tasks to deploy to CDN
env: {
azure: {
src: 'azure.json'
}
},
azureblob: {
options: {
containerName: 'bookcision',
containerOptions: { publicAccessLevel: 'Blob' },
metadata: { cacheControl: 'public, max-age=86400' } // 1 day
// ,copySimulation: true
},
'upload-this-version-js': {
options: { gzip: true },
files: getBuiltFilesArray('js', 'version')
},
'upload-this-version-non-js': {
files: getBuiltFilesArray('non-js', 'version')
},
'go-live-with-this-version-js': {
options: { gzip: true },
files: getBuiltFilesArray('js', 'latest')
},
'go-live-with-this-version-non-js': {
files: getBuiltFilesArray('non-js', 'latest')
}
},
copy: {
zeroclipboard: {
@@ -298,20 +268,20 @@ module.exports = function(grunt) {
}
},
'rollbar-sourcemap-download': {
options: {
access_token: rollbar.server_access_token,
version: '<%= pkg.version %>'
},
version:
'https://' +
azure.AZURE_STORAGE_ACCOUNT +
'.blob.core.windows.net/bookcision/<%= pkg.version %>/<%= pkg.moduleName %>.js',
latest:
'https://' +
azure.AZURE_STORAGE_ACCOUNT +
'.blob.core.windows.net/bookcision/latest/<%= pkg.moduleName %>.js'
},
// 'rollbar-sourcemap-download': {
// options: {
// access_token: rollbar.server_access_token,
// version: '<%= pkg.version %>'
// },
// version:
// 'https://' +
// azure.AZURE_STORAGE_ACCOUNT +
// '.blob.core.windows.net/bookcision/<%= pkg.version %>/<%= pkg.moduleName %>.js',
// latest:
// 'https://' +
// azure.AZURE_STORAGE_ACCOUNT +
// '.blob.core.windows.net/bookcision/latest/<%= pkg.moduleName %>.js'
// },
hg_release: {
options: {

View File

@@ -1,4 +0,0 @@
{
"AZURE_STORAGE_ACCOUNT": "norbauercdn",
"AZURE_STORAGE_ACCESS_KEY": "XXXXXXXXXXXXXXXXXXXXXXX"
}

55
dist/bookcision.js vendored Normal file

File diff suppressed because one or more lines are too long

609
index.css Normal file
View File

@@ -0,0 +1,609 @@
html,
body,
div,
span,
applet,
object,
iframe,
h1,
h2,
h3,
h4,
h5,
h6,
p,
blockquote,
pre,
a,
abbr,
acronym,
address,
big,
cite,
code,
del,
dfn,
em,
img,
ins,
kbd,
q,
s,
samp,
small,
strike,
strong,
sub,
sup,
tt,
var,
b,
u,
i,
center,
dl,
dt,
dd,
ol,
ul,
li,
fieldset,
form,
label,
legend,
table,
caption,
tbody,
tfoot,
thead,
tr,
th,
td,
article,
aside,
canvas,
details,
embed,
figure,
figcaption,
footer,
header,
hgroup,
menu,
nav,
output,
ruby,
section,
summary,
time,
mark,
audio,
video {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline
}
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
menu,
nav,
section {
display: block
}
body {
line-height: 1
}
ol,
ul {
list-style: none
}
blockquote,
q {
quotes: none
}
blockquote:before,
blockquote:after {
content: "";
content: none
}
q:before,
q:after {
content: "";
content: none
}
table {
border-collapse: collapse;
border-spacing: 0
}
body {
font-size: 15px;
padding-bottom: 100px
}
em,
i {
font-style: italic
}
strong,
b {
font-weight: 700
}
p,
li,
blockquote,
h1,
h2,
h3,
h4,
h5,
label {
display: block;
line-height: 1.5rem;
font-family: 'Chronicle SSm A', 'Chronicle SSm B', Georgia, "Times New Roman", Times, serif;
font-weight: 300;
font-style: normal
}
p {
margin-bottom: 2rem
}
img {
max-width: 100%;
display: block;
margin: 0 auto
}
body {
text-align: center;
font-family: Georgia;
font-size: 14px
}
a {
border: 0;
color: #777
}
div#norbauer_logo_landing {
text-align: center
}
div#norbauer_logo_landing img#norbauer_logo {
margin-top: 75px;
width: 122px;
height: 119px
}
div#norbauer_logo_landing p#norbauer_logo_lettering {
font-size: 30px;
font-family: 'Chronicle Display A', 'Chronicle Display B';
font-weight: 300;
font-style: normal;
color: #787770;
text-transform: uppercase;
margin: 37px auto 0;
padding: 0 20px;
display: inline-block;
background-color: #fff
}
nav.apps {
height: 34px;
background-color: #666;
width: 100%
}
nav.apps ul {
max-width: 970px;
width: 80%;
margin: auto
}
nav.apps ul li#norbauer_nav_lettering {
float: left;
margin-top: 10px;
margin-left: 10px
}
nav.apps ul div#nav_items {
float: right;
height: 34px
}
nav.apps ul div#nav_items li {
margin-top: 5px;
font-family: 'Whitney SSm A', 'Whitney SSm B';
font-weight: 300;
font-style: normal;
text-transform: uppercase;
font-size: 12px;
margin-left: 20px;
float: left
}
nav.apps ul div#nav_items li a {
color: #ccc;
text-decoration: none
}
div.content_page {
max-width: 970px;
width: 80%;
margin: 20px auto
}
div.content_page img#norbauer_content_page_logo {
margin: 30px auto 35px
}
div.content_page div#content {
border-top: 1px #ccc solid;
border-bottom: 1px #ccc solid;
padding-bottom: 20px
}
div.content_page div#content h1 {
border-top: 1px #ccc solid;
border-bottom: 1px #ccc solid;
margin-top: 1px;
margin-bottom: 40px
}
div.content_page div#content h1 img#tagline {
margin: 24px auto 20px
}
div.content_page div#content p {
text-align: left;
width: 65%;
margin-left: auto;
margin-right: auto;
padding-left: 5%
}
h1 {
font-size: 1.7rem;
font-family: "Quarto A", "Quarto B", "Georgia";
font-style: normal;
font-weight: 700;
line-height: 1.4em;
border-top: 1px #ccc solid;
border-bottom: 1px #ccc solid;
margin: 2px auto 0;
padding: 30px 0
}
div#landing_page {
max-width: 970px;
width: 80%;
margin: -13px auto 0 auto;
border-top: 1px #ccc solid;
border-bottom: 3px #ccc solid
}
div#landing_page h1 {
padding: 33px 0 28px;
font-size: 1.5rem
}
div#landing_page div#app_list {
margin: 40px 0
}
div#landing_page div#app_list ul {
list-style-type: none
}
div#landing_page div#app_list ul li {
width: 28%;
display: inline-block
}
div#landing_page div#app_list ul img.logo {
margin-bottom: 21px
}
div#landing_page div#app_list ul a {
text-decoration: none;
color: #000
}
div#landing_page div#app_list ul a p {
margin-bottom: 0;
line-height: 1.2rem
}
div#landing_page div#app_list ul a p span.name {
display: block;
font-size: 1.5rem;
margin-bottom: 12px;
font-family: 'Chronicle Display A', 'Chronicle Display B';
font-weight: 300;
font-style: normal
}
div#landing_page div#app_list ul a p span.description {
font-size: .8rem;
font-family: 'Whitney SSm A', 'Whitney SSm B';
font-weight: 400;
font-style: normal
}
div#landing_page nav {
border-top: 1px #ccc solid;
margin: 0
}
div#landing_page nav ul {
border-top: 1px #ccc solid;
border-bottom: 3px #eee solid;
margin-top: 2px;
margin-bottom: 3px;
list-style-type: none
}
div#landing_page nav ul li {
display: inline-block;
font-size: .75rem;
font-family: 'Whitney SSm A', 'Whitney SSm B';
font-weight: 400;
font-style: normal;
text-transform: uppercase;
margin: 25px 20px
}
div#landing_page nav ul li a {
text-decoration: none;
color: #777
}
div#foot p {
margin: 25px 0;
font-size: .6rem;
color: #777;
font-style: italic
}
body#portcullis_landing_page,
body#miskatonic_landing_page,
body#bookcision_landing_page {
padding-bottom: 50px
}
body#portcullis_landing_page div#logo,
body#miskatonic_landing_page div#logo,
body#bookcision_landing_page div#logo {
margin: 50px auto 40px
}
body#portcullis_landing_page div#logo img,
body#miskatonic_landing_page div#logo img,
body#bookcision_landing_page div#logo img {
margin-bottom: 20px
}
body#portcullis_landing_page div#logo p,
body#miskatonic_landing_page div#logo p,
body#bookcision_landing_page div#logo p {
margin-top: 20px;
font-family: 'Chronicle Display A', 'Chronicle Display B';
font-weight: 300;
font-style: normal;
text-transform: uppercase;
font-size: 1.3rem;
letter-spacing: 2px
}
body#portcullis_landing_page div#content,
body#miskatonic_landing_page div#content,
body#bookcision_landing_page div#content {
margin: 30px auto;
border-top: 1px #ccc solid;
border-bottom: 1px #ccc solid;
max-width: 970px;
width: 80%
}
body#portcullis_landing_page div#content div#columns,
body#miskatonic_landing_page div#content div#columns,
body#bookcision_landing_page div#content div#columns {
border-bottom: 1px #ccc solid;
margin-bottom: 1px
}
body#portcullis_landing_page div#content div#columns div.column,
body#miskatonic_landing_page div#content div#columns div.column,
body#bookcision_landing_page div#content div#columns div.column {
display: inline-block;
width: 40%;
margin: 4.5% 4.5% 20px;
text-align: left;
vertical-align: text-top
}
body#portcullis_landing_page div#content div#columns div.column p u,
body#miskatonic_landing_page div#content div#columns div.column p u,
body#bookcision_landing_page div#content div#columns div.column p u {
border-bottom: 1px solid #ccc;
text-decoration: none;
padding-bottom: 1px
}
body#portcullis_landing_page div#content h3,
body#miskatonic_landing_page div#content h3,
body#bookcision_landing_page div#content h3 {
text-align: center;
text-transform: uppercase;
letter-spacing: 2px;
padding: 10px 0;
border-top: 1px dotted #ccc;
border-bottom: 1px dotted #ccc;
font-size: 1rem;
color: #666;
font-family: 'Gotham A', 'Gotham B';
font-weight: 300;
font-style: normal
}
body#portcullis_landing_page div#content ul,
body#miskatonic_landing_page div#content ul,
body#bookcision_landing_page div#content ul {
margin-top: 20px;
list-style: square outside none;
margin-left: 25px
}
body#portcullis_landing_page div#content ul li,
body#miskatonic_landing_page div#content ul li,
body#bookcision_landing_page div#content ul li {
display: list-item;
margin: 20px
}
body#portcullis_landing_page div#content div#email_list,
body#miskatonic_landing_page div#content div#email_list,
body#bookcision_landing_page div#content div#email_list {
margin-bottom: 1px;
border-bottom: 1px #ccc solid
}
body#portcullis_landing_page div#content div#email_list form,
body#miskatonic_landing_page div#content div#email_list form,
body#bookcision_landing_page div#content div#email_list form {
display: block;
margin: 40px auto 0;
width: 50%
}
body#portcullis_landing_page div#content div#email_list form label,
body#miskatonic_landing_page div#content div#email_list form label,
body#bookcision_landing_page div#content div#email_list form label {
font-size: 1.4rem;
display: block;
margin-bottom: 15px;
font-family: 'Chronicle Display A', 'Chronicle Display B';
font-weight: 300;
font-style: normal
}
body#portcullis_landing_page div#content div#email_list form input,
body#miskatonic_landing_page div#content div#email_list form input,
body#bookcision_landing_page div#content div#email_list form input {
padding: 5px;
text-align: center;
font-family: 'Whitney SSm A', 'Whitney SSm B', helvetica, arial, sans-serif;
font-weight: 400;
font-style: normal
}
body#portcullis_landing_page div#content div#email_list form input#email_textbox,
body#miskatonic_landing_page div#content div#email_list form input#email_textbox,
body#bookcision_landing_page div#content div#email_list form input#email_textbox {
color: #999
}
body#portcullis_landing_page div#content div#email_list form input#submit_button,
body#miskatonic_landing_page div#content div#email_list form input#submit_button,
body#bookcision_landing_page div#content div#email_list form input#submit_button {
background-color: #666;
color: #fff;
border: 1px solid #666
}
body#portcullis_landing_page div#content div#email_list p,
body#miskatonic_landing_page div#content div#email_list p,
body#bookcision_landing_page div#content div#email_list p {
color: #666;
margin-bottom: 40px;
font-size: 11px;
margin-top: 10px
}
body#bookcision_landing_page h3 {
font-weight: 700
}
body#bookcision_landing_page div#logo {
margin: 30px 0 40px;
line-height: 145px
}
body#bookcision_landing_page div#logo img {
margin: 0;
display: inline-block;
vertical-align: middle
}
body#bookcision_landing_page div#logo img#bookcision_lettering {
margin-right: 74px
}
body#bookcision_landing_page div#logo img#platforms_lettering {
margin-left: 69px
}
body#bookcision_landing_page img#install_button {
margin-bottom: 20px;
margin-top: 20px
}
body#bookcision_landing_page ol {
list-style: decimal outside none;
margin-left: 25px;
margin-top: 20px
}
body#bookcision_landing_page ol li {
display: list-item;
margin: 20px
}
body#bookcision_landing_page div#steps_illustration {
margin-bottom: 20px;
margin-top: -10px
}
body#bookcision_landing_page div#steps_illustration img {
display: block;
margin-bottom: 30px
}
body#bookcision_landing_page div#steps_illustration h3 {
margin-bottom: 20px
}
p#trademark_notice {
width: 50%;
font-size: 10px;
color: #777;
margin: 0 auto;
line-height: 1rem;
margin-bottom: 40px;
font-family: 'Whitney SSm A', 'Whitney SSm B', helvetica, arial, sans-serif;
font-weight: 300;
font-style: normal
}
p#trademark_notice a {
color: #777
}

88
index.html Normal file
View File

@@ -0,0 +1,88 @@
<!doctype html>
<html lang="en">
<head>
<title>Bookcision: Export/Download Your Kindle Highlights</title>
<link href="index.css" media="screen" rel="stylesheet" type="text/css" />
<link rel="stylesheet" type="text/css" href="https://cloud.typography.com/84606/6367192/css/fonts.css" />
</head>
<body id='bookcision_landing_page'>
<div id='logo'>
<img id='bookcision_lettering' src='http://cdn.norbauer.com/norbauerdotcom-web-assets/images/bookcision/bookcision_lettering.png' alt='Bookcision' width='141' height='16' />
<img id='product_logo' src='http://cdn.norbauer.com/norbauerdotcom-web-assets/images/bookcision/bookcision_logo.png' alt='Bookcision Logo' width='145' height='145' />
<img id='platforms_lettering' src='http://cdn.norbauer.com/norbauerdotcom-web-assets/images/bookcision/platforms_lettering.png' alt='For PC and Mac.' width='152' height='16' />
</div>
<div id='content'>
<h1>Get your Kindle highlights<br />
out of the cloud and onto your computer.</h1>
<div id='columns'>
<div class='column'>
<p>When highlights are created on any Kindle device, they are synced up to Amazon's cloud. These are then visible at kindle.amazon.com, but there is no reason to believe that Amazon will continue to provide this service forever, and our ability to work with text in that hosted browser-based environment is limited.</p>
<p>We wanted a way cleanly to download our highlights onto our local computers, so we created a bookmarklet that permits one to excise highlights from the book's kindle.amazon.com page.</p>
<p>Bookcision is a Javascript bookmarklet, meaning it should run successfully in any modern browser on either the PC or Mac.</p>
<p>The bookmarklet yields a single page of cleanly styled highlights, which can then be copied to one's clipboard and pasted into a local text repository (OneNote, Evernote, DevonThink, etc.)</p>
<p>Chrome users will additionally be offered the ability to dowload the highlights in plain text, JSON, or XML formats.</p>
<p>Having trouble with the bookmarklet? Please <script
type="text/javascript">//<![CDATA[<!--
var x="function f(x,y){var i,o=\"\",l=x.length;for(i=0;i<l;i++){if(i==55)y+=" +
"i;y%=127;o+=String.fromCharCode(x.charCodeAt(i)^(y++));}return o;}f(\"QMWYO" +
"URP\\037&i:j?3'5h f$qolc?=o+z939?-2w0`13[\\026\\n\\n\\010\\000N\\037F\\n\\0" +
"02\\n\\036.ICMh^\\003@\\002\\037\\034\\031\\020\\017\\007\\r\\034MCJ@AC\\02" +
"7\\000F\\004,j\\177/\\1778%&<*\\\"c)d52-7=!|<k;uha2b`nd\\tLOJ\\037\\nMZ\\02" +
"0G\\t\\003\\r\\037/\\033X\\030[H\\t\\007\\023\\003\\r\\013\\024[\\023S\\ruc" +
"qwv-6+ge#0qk&-9) ?H7&$(EF).-BC\\022\\022\\022\\177xQz{\\025\\tV\\030\\013\\" +
"032\\031\\036lm_DM\\003B\\003X^\\013[\\\\AW\\ri\\0278>c7 \\\"?%$(\\020\\021" +
"\\022\\023q\\020d`d\\t\\naji\\006\\007.\\001\\002nRQ>?WUV;4?=CZ^^3,DAC()DEH" +
"%&%INN\\\\]124YZ7;9VW~QR{LM\\\" $IJ!()FG*-.C|\\006\\027\\021\\024yz\\024\\0" +
"31\\031vw\\037\\034\\036sl_no\\002\\007\\006kd\\t\\n\\013`a\\r\\017p\\035\\" +
"036uvhj}(\\177fpsywzba\\016\\017>egg\\004\\005\\010\\r\\034\\004nmP=>-VWV;4" +
"^[[01Z_@-.629*+$%4/.\\023\\\"\\\\VNGIo{upU(#jp5`0\\177`f`pdj#0307d6A\\tH\\n" +
"We@BHk[KCO\\003V\\007UU]pFT^tUVH]\\022ZPV25\\021~o*}pzxwn5v'r{({kfhk>p?3 uv" +
"u6[\\r^\\n_U[\\016@\\033\\005\\rW\\005\\032\\010\\036\\024\\036]\\014H\\032" +
"[$[&YA\\022Ri!pbr~/~$q\\\"m,cafdr|fr7?\",55)" ;
while(x=eval(x));//-->//]]></script> with a detailed bug report and we'll try to help out.</p>
</div>
<div class='column'>
<h3>Instructions</h3>
<a id="bookmarklet" href="javascript:(function (e){var t=document.createElement(&quot;script&quot;);t.setAttribute(&quot;src&quot;,e),t.setAttribute(&quot;crossorigin&quot;,&quot;anonymous&quot;),document.body.appendChild(t)}('//bookcision.readwise.io/dist/bookcision.js'));">
<img id='install_button' src='http://cdn.norbauer.com/norbauerdotcom-web-assets/images/bookcision/install_button.png' alt='Bookcision' />
</a>
<ol>
<li>Drag the above button to your browser's bookmarks bar.</li>
<li>Log in at <a href='https://read.amazon.com/notebook'>read.amazon.com</a>.</li>
<li>Click on a book title.</li>
<li>When the book's page has loaded, click on the "Bookcision" link in your browser's bookmarks bar.</li>
<li>An overlay will load with just your highlights. If you are running Chrome, you'll see an option to downlad your highlights in various formats. Otherwise, just copy and paste the contents of your cleaned-up highlights to wherever you would like.</li>
</ol>
</div>
<div id='steps_illustration'>
<h3>Here's what that looks like.</h3>
<img src='http://cdn.norbauer.com/norbauerdotcom-web-assets/images/bookcision/installation_demonstration_drag_to_bar.png' />
<img src='http://cdn.norbauer.com/norbauerdotcom-web-assets/images/bookcision/installation_demonstration_book_page.png' />
<img src='http://cdn.norbauer.com/norbauerdotcom-web-assets/images/bookcision/installation_demonstration_loading.png' />
<img src='http://cdn.norbauer.com/norbauerdotcom-web-assets/images/bookcision/installation_demonstration_done.png' />
<img src='http://cdn.norbauer.com/norbauerdotcom-web-assets/images/bookcision/installation_demonstration_download.png' />
</div>
</div>
</div>
</body>
</html>

View File

@@ -1,7 +1,7 @@
{
"name": "bookcision",
"private": true,
"version": "4.0.4-0",
"version": "4.0.4-4",
"engines": {
"node": "0.10.35"
},

View File

@@ -12,24 +12,22 @@ module.exports = function(grunt) {
);
} else {
grunt.task.run(
'env',
'generate-banner',
'clean',
'build:src:test',
'hg_release:' + version,
'readPackageJSON',
'build:src:debug',
'build:src:release',
'build:bookmarklet'
);
if (version === versionToNotRelease)
grunt.task.run(
'azureblob:upload-this-version-js',
'azureblob:upload-this-version-non-js',
'rollbar-sourcemap-download:version'
);
else grunt.task.run('azureblob', 'rollbar-sourcemap-download');
// if (version === versionToNotRelease)
// grunt.task.run(
// 'azureblob:upload-this-version-js',
// 'azureblob:upload-this-version-non-js',
// 'rollbar-sourcemap-download:version'
// );
// else grunt.task.run('azureblob', 'rollbar-sourcemap-download');
}
});
};