penguin/AstroJS

Javascript framework for my blog

commit 07ceb117dace7337ff8bed881c1a12de895029cb

author斟酌 鵬兄 <tgckpg@gmail.com>
date2015-10-26T23:50:11Z
subjectVarious bug fixes & Preferred option for SiteFile
commit 07ceb117dace7337ff8bed881c1a12de895029cb
Author: 斟酌 鵬兄 <tgckpg@gmail.com>
Date:   2015-10-26T23:50:11Z

    Various bug fixes & Preferred option for SiteFile
---
 .../Blog/AstroEdit/Visualizer/Snippet/Image.js     | 35 +++++---
 .../Blog/AstroEdit/Visualizer/Snippet/SiteFile.js  | 96 +++++++++++++++++-----
 .../Blog/AstroEdit/Visualizer/Snippet/Spoiler.js   | 12 ++-
 botanjs/src/Astro/Blog/Components/Entry/Blog.css   |  4 +
 botanjs/src/Astro/Blog/Components/Entry/Mega.css   | 62 ++++++--------
 botanjs/src/Astro/Blog/Components/Section.css      | 13 ++-
 botanjs/src/Astro/Blog/Components/SiteFile.css     |  3 -
 botanjs/src/Astro/Blog/Components/SiteFile.js      |  7 ++
 botanjs/src/Astro/Blog/Layout/MainFrame.css        |  2 +-
 9 files changed, 152 insertions(+), 82 deletions(-)

diff --git a/botanjs/src/Astro/Blog/AstroEdit/Visualizer/Snippet/Image.js b/botanjs/src/Astro/Blog/AstroEdit/Visualizer/Snippet/Image.js
index d0ca455..e387932 100644
--- a/botanjs/src/Astro/Blog/AstroEdit/Visualizer/Snippet/Image.js
+++ b/botanjs/src/Astro/Blog/AstroEdit/Visualizer/Snippet/Image.js
@@ -13,6 +13,8 @@
 	/** @type {Components.MessageBox} */
 	var MessageBox                        = __import( "Components.MessageBox" );
 
+	var compileProp = ns[ NS_INVOKE ]( "compileProp" );
+
 	var image = function( insertSnippet, snippetWrap, createContext, override )
 	{
 		var temp, i, j
@@ -25,12 +27,15 @@
 			)
 			, input_a = Dand.wrap(
 				"input", null, "v_snippet_input_single", null, new IKey( "type", "text" )
-			);
+			)
+			, input_preferred = Dand.wrapna('input', new IKey("type", "checkbox"))
+			;
 			
 			if (this._stage)
 			{
 				input_url.value = this._url;
 				input_a.value = this._href;
+				input_preferred.checked = (this._preferred == "on");
 			}
 			
 			// Popup MessageBox
@@ -41,27 +46,30 @@
 						, input_url
 						, Dand.wrapc( "v_instruction flsf", "Ancohr link(optional):" )
 						, input_a
+						, Dand.wrape([ input_preferred, Dand.textNode( "Preferred" ) ])
 					]
 				)
 				, "OK", "Cancel"
-				, visualizer.bind({ url:input_url, href:input_a, stage: this._stage })
+				, visualizer.bind({ url:input_url, href:input_a, stage: this._stage, preferred: input_preferred })
 			).show();
 		}
 		
 		, visualizer = function ( submitted, override )
 		{
-			var src, href
+			var src, href, preferred
 			, stage = this.stage;
 			
 			if ( override )
 			{
 				src = override.value;
 				href = override.href;
+				preferred = override.preferred ? "on" : "";
 			}
 			else
 			{
 				src = this.url.value;
 				href = this.href.value;
+				preferred = this.preferred.checked ? "on" : "";
 			}
 			
 			if ( submitted && src )
@@ -82,16 +90,17 @@
 							Dand.wrapna(
 								"img"
 								, [
-									new IKey("src", src)
-									, new IKey("style", "max-width: 100%")
+									new IKey( "src", src )
+									, new IKey( "style", "max-width: 100%" )
 								]
 							)
 							// caption
 							, Dand.wrapc( "v_description", i )
 						]
 						, [
-							new DataKey("value", src)
-							, new DataKey("href", href)
+							new DataKey( "value", src )
+							, new DataKey( "href", href )
+							, new DataKey( "preferred", preferred )
 						]
 					);
 					insertSnippet( j = snippetWrap( "Image", temp ), Boolean( override ) );
@@ -102,6 +111,7 @@
 					([
 						new DataKey( "value", src )
 						, new DataKey( "href", href )
+						, new DataKey( "preferred", preferred )
 					]);
 					
 					stage.firstChild.setAttribute("src", src);
@@ -114,7 +124,12 @@
 					temp = stage;
 				}
 				
-				i = { _url: src, _href: href, _stage: temp };
+				i = {
+					_url: src
+					, _href: href
+					, _preferred: preferred || "off"
+					, _stage: temp
+				};
 				
 				// Set context menu
 				createContext( i, j, handler );
@@ -138,10 +153,10 @@
 	{
 		// [img href=\"" + this.href.value + "\"]" + this.url.value + "[/img]
 		var element = IDOMElement( stage )
-		, href = element.getDAttribute( "href" );
+		, props = [ "href", "preferred" ]
 		
 		return "[img"
-			+ ( href ? (" href=\"" + href + "\"") : "" )
+			+ compileProp( element, props )
 			+ "]"
 			+ element.getDAttribute( "value" ) + "[/img]"
 			;
diff --git a/botanjs/src/Astro/Blog/AstroEdit/Visualizer/Snippet/SiteFile.js b/botanjs/src/Astro/Blog/AstroEdit/Visualizer/Snippet/SiteFile.js
index 44b358d..072ed83 100644
--- a/botanjs/src/Astro/Blog/AstroEdit/Visualizer/Snippet/SiteFile.js
+++ b/botanjs/src/Astro/Blog/AstroEdit/Visualizer/Snippet/SiteFile.js
@@ -19,8 +19,8 @@
 	/** @type {Astro.utils.Date} */
 	var XDate                             = __import( "Astro.utils.Date" );
 
-
 	var escapeStr = ns[ NS_INVOKE ]( "escapeStr" );
+	var compileProp = ns[ NS_INVOKE ]( "compileProp" );
 
 	var getData = __import( "System.Net.getData" );
 
@@ -37,10 +37,27 @@
 		, handler = function ()
 		{
 			// Input fields
-			var v_snippetInput = Dand.wrap("input", null, "v_snippet_input_single", null, new IKey("type", "text"));
+			var v_snippetInput = Dand.wrap("input", null, "v_snippet_input_single", null, new IKey("type", "text"))
+				, input_preferred = Dand.wrapna('input', new IKey("type", "checkbox"))
+				;
+
+			if ( this._stage )
+			{
+				v_snippetInput.value = this._content;
+				input_preferred.checked = ( this._preferred == "on" );
+			}
 
 			// Popup MessageBox
-			new MessageBox("Insert site file", v_snippetInput, "OK", "Cancel", visualizer.bind({code: v_snippetInput})).show();
+			new MessageBox("Insert site file"
+				, Dand.wrape([
+					v_snippetInput
+					, Dand.wrape([ input_preferred, Dand.textNode( "Preferred" ) ])
+				])
+			, "OK", "Cancel", visualizer.bind({
+				code: v_snippetInput
+				, preferred: input_preferred
+				, stage: this._stage
+			})).show();
 		}
 
 		, __applyData = function (e)
@@ -143,33 +160,66 @@
 		, visualizer = function ( submitted, override )
 		{
 
-			var hash = override ? override.value : this.code.value
-				, _obj = {file: hash};
+			var hash, _obj, stage = this.stage;
+
+			if( override )
+			{
+				hash = override.value;
+				preferred = override.preferred ? "on" : "";
+			}
+			else
+			{
+				hash = this.code.value;
+				preferred = this.preferred.checked ? "on" : "";
+			}
+
+			_obj = { file: hash };
 
 			if ( submitted && hash )
 			{
 				// Visualize component
+				if (!stage)
+				{
+					temp =  Dand.wrapc("v_box"
+						, [
+							Dand.wrape("Getting information from Server ...")
+							, Dand.wrapc("v_description", "Site file (hash): " + hash)
+						]
+						, [
+							new DataKey( "value", hash )
+							, new DataKey( "size", ( override && override.size ) || "large" )
+							, new IKey( "style", "max-height: 150px;" )
+							, new DataKey( "preferred", preferred )
+						]
+					);
 
-				temp =  Dand.wrapc("v_box"
-					, [
-						Dand.wrape("Getting information from Server ...")
-						, Dand.wrapc("v_description", "Site file (hash): " + hash)
-					]
-					, [
+					// Get data from site library
+					getData( config.path.info + hash, __applyData.bind({stage: temp, hash: hash}), loadFailed );
+
+					insertSnippet(
+						j = snippetWrap( "SiteFile", temp )
+						, !!override
+					);
+				}
+				else
+				{
+					IDOMElement( stage ).setAttribute([
 						new DataKey( "value", hash )
-						, new DataKey( "size", ( override && override.size ) || "large" )
-						, new IKey( "style", "max-height: 150px;" )
-					]
-				);
+						, new DataKey( "preferred", preferred )
+					]);
+					getData( config.path.info + hash, __applyData.bind({stage: temp, hash: hash}), loadFailed );
+				}
 
-				// Get data from site library
-				getData( config.path.info + hash, __applyData.bind({stage: temp, hash: hash}), loadFailed );
+			}
 
-				insertSnippet(j = snippetWrap("SiteFile", temp), Boolean(override));
+			i = {
+				_content: hash
+				, _preferred: preferred || "off"
+				, _stage: temp
+			};
 
-				// Set context menu
-				createContext(null, j);
-			}
+			// Set context menu
+			createContext( i, j, handler );
 		};
 
 		if (override)
@@ -199,6 +249,10 @@
 		{
 			options += " size=\"" + opt + "\"";
 		}
+		if( opt = stage.getDAttribute( "preferred" ) )
+		{
+			options += " preferred=\"" + opt + "\"";
+		}
 
 		return "[sitefile" + options + "]"
 			+ escapeStr( stage.getDAttribute( "value" ) )
diff --git a/botanjs/src/Astro/Blog/AstroEdit/Visualizer/Snippet/Spoiler.js b/botanjs/src/Astro/Blog/AstroEdit/Visualizer/Snippet/Spoiler.js
index 98a3098..7fd6313 100644
--- a/botanjs/src/Astro/Blog/AstroEdit/Visualizer/Snippet/Spoiler.js
+++ b/botanjs/src/Astro/Blog/AstroEdit/Visualizer/Snippet/Spoiler.js
@@ -92,13 +92,11 @@
 				else
 				{
 					IDOMElement(stage).setAttribute
-					(
-						[
-							new DataKey("value", content)
-							, new DataKey("title", title)
-							, new DataKey("expanded", expanded)
-						]
-					);
+					([
+						new DataKey("value", content)
+						, new DataKey("title", title)
+						, new DataKey("expanded", expanded)
+					]);
 					
 					temp = stage.firstChild;
 					temp.removeChild(temp.firstChild);
diff --git a/botanjs/src/Astro/Blog/Components/Entry/Blog.css b/botanjs/src/Astro/Blog/Components/Entry/Blog.css
index 31e1fe5..792da57 100644
--- a/botanjs/src/Astro/Blog/Components/Entry/Blog.css
+++ b/botanjs/src/Astro/Blog/Components/Entry/Blog.css
@@ -1,3 +1,7 @@
+.b_entry img {
+	max-width: 100%;
+}
+
 .b_entry {
 	background-color: #FAFAFA;
 	/* box-shadow: 0 0 8px -2px black; */
diff --git a/botanjs/src/Astro/Blog/Components/Entry/Mega.css b/botanjs/src/Astro/Blog/Components/Entry/Mega.css
index 3140bce..96e5251 100644
--- a/botanjs/src/Astro/Blog/Components/Entry/Mega.css
+++ b/botanjs/src/Astro/Blog/Components/Entry/Mega.css
@@ -1,36 +1,35 @@
-.m_title {
-	font-size: 2.5em;
-	color: #444;
+.it-shucks > a {
+	float: right;
 }
 
-.m_more {
-	color: #76400C;
-}
-
-.mega_entry span {
-    display: block;
-}
-
-.mega_entry {
+.mega-entry {
 	border: 6px solid white;
 	background: white;
 	color: black;
 
 	position: relative;
-	margin: 1em;
+	margin: 0.5em;
 
 	display: block;
 
 	word-wrap: break-word;
 
 	box-shadow: 0 0 0 1px #D4D7C9;
+
+	max-width: 80%;
+	width: 600px;
 }
 
-.mega_entry:hover {
+.mega-entry:hover {
 	text-decoration: none;
 }
 
-.mega_entry:after {
+.mega-entry .cCont > img {
+	position: absolute;
+	max-width: 100%;
+}
+
+.mega-entry .cCont:after {
 	content: attr(data-content);
 
 	width: 100%;
@@ -39,7 +38,6 @@
 	top: 100%;
 
 	position: absolute;
-	overflow: hidden;
 
 	color: white;
 	background: rgba(0, 0, 0, 0.65);
@@ -65,13 +63,13 @@
 	transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); /* easeOutCubic */
 }
 
-.mega_entry:focus:after, .mega_entry:hover:after {
+.mega-entry .cCont:focus:after, .mega-entry .cCont:hover:after {
 	top: 50%;
 	height: 50%;
 	padding: 0.5em;
 }
 
-.mega_entry > #noteTag {
+.mega-entry > #noteTag {
 	background: black;
 }
 
@@ -90,35 +88,21 @@
 	top: 10px;
 }
 
-.mega_entry > .cCont {
+.mega-entry > .cCont {
     position: relative;
-
+	color: white;
+	overflow: hidden;
 	height: 130px;
-	background-position: center top;
-	background-repeat: no-repeat;
-	background-color: #EEE;
-
-	background-image: url('http://file.astropenguin.net/blog/layout-images/archived.png');
 }
 
-.mega_entry > .cCont:before {
-    content: attr(data-content);
-    position: absolute;
-
-    line-height: 100%;
-	font-size: 2.5em;
+.mega-entry .cCont > h2 {
+	position: absolute;
 
-	padding: 0.1em;
 
+	padding: 0 0.2em;
 	text-shadow: 2px 2px 8px black;
-	color: white;
-
-    width: 100%;
-    height: 100%;
-
-    box-sizing: border-box;
 
-    background-color: rgba( 0, 0, 0, 0.2 );
+	z-index: 1;
 }
 
 .cDate {
diff --git a/botanjs/src/Astro/Blog/Components/Section.css b/botanjs/src/Astro/Blog/Components/Section.css
index ace4998..e0e7d0f 100644
--- a/botanjs/src/Astro/Blog/Components/Section.css
+++ b/botanjs/src/Astro/Blog/Components/Section.css
@@ -15,9 +15,20 @@
 .section-buttons > a[data-name="blog"] {
     background-color: purple;
 }
-.section-buttons > a[data-name="wenku8"] {
+.section-buttons > a[data-name="works"] {
     background-color: royalblue;
 }
+.section-buttons > a[data-name="album"] {
+	background-color: crimson;
+	background-image:
+		repeating-linear-gradient(
+			45deg, transparent
+			, transparent 2px, rgba(0,0,0,.2) 2px
+			, rgba(0,0,0,.2) 3px, transparent 3px
+			, transparent 5px, rgba(0,0,0,.2) 5px
+		);
+}
+
 .section-buttons > a > span {
     padding: 0.75em 0.5em;
 }
diff --git a/botanjs/src/Astro/Blog/Components/SiteFile.css b/botanjs/src/Astro/Blog/Components/SiteFile.css
index 149ec0f..14a9aee 100644
--- a/botanjs/src/Astro/Blog/Components/SiteFile.css
+++ b/botanjs/src/Astro/Blog/Components/SiteFile.css
@@ -1,6 +1,3 @@
-.site_file {
-	margin: 0.5em 0;
-}
 .sf_regular sup { vertical-align: baseline; }
 
 .sf_regular {
diff --git a/botanjs/src/Astro/Blog/Components/SiteFile.js b/botanjs/src/Astro/Blog/Components/SiteFile.js
index f1b9a32..ab1563b 100644
--- a/botanjs/src/Astro/Blog/Components/SiteFile.js
+++ b/botanjs/src/Astro/Blog/Components/SiteFile.js
@@ -1,6 +1,8 @@
 (function(){
 	var ns = __namespace( "Astro.Blog.Components" );
 
+	/** @type {System.Debug} */
+	var debug                            = __import( "System.Debug" );
 	/** @type {System.utils.IKey} */
 	var IKey                             = __import( "System.utils.IKey" );
 	/** @type {Dandelion} */
@@ -23,6 +25,11 @@
 		if( !config ) throw new Error( "config is not defined" );
 		// TODO: Make a trigger for downloading from server
 		var stage = Dand.id( id );
+		if( !stage )
+		{
+			debug.Info( "[SiteFile] id not found: " + id );
+			return;
+		}
 		this.id = id;
 		this.hash = hash;
 		this.type =  IDOMElement( stage ).getDAttribute( "type" );
diff --git a/botanjs/src/Astro/Blog/Layout/MainFrame.css b/botanjs/src/Astro/Blog/Layout/MainFrame.css
index a71b426..cc9a361 100644
--- a/botanjs/src/Astro/Blog/Layout/MainFrame.css
+++ b/botanjs/src/Astro/Blog/Layout/MainFrame.css
@@ -63,7 +63,7 @@ h6, .h6 { font-size: 0.5em; }
 }
 
 .right { text-align: right; }
-.panel { padding: 1.2em; }
+.panel { padding: 0.5em 1.2em 1.2em 1.2em; }
 
 /* transition properties */
 div#header, div#mbody, div#contact, div#horizon {