date filters #1
							
								
								
									
										264
									
								
								index.html
									
									
									
									
									
								
							
							
						
						
									
										264
									
								
								index.html
									
									
									
									
									
								
							@ -2,10 +2,12 @@
 | 
				
			|||||||
<script type="module">
 | 
					<script type="module">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import _ from "https://dev.jspm.io/lodash";
 | 
					import _ from "https://dev.jspm.io/lodash";
 | 
				
			||||||
 | 
					import styled from "https://dev.jspm.io/styled-components";
 | 
				
			||||||
import React from "https://dev.jspm.io/react/index.js";
 | 
					import React from "https://dev.jspm.io/react/index.js";
 | 
				
			||||||
import ReactDOM from "https://dev.jspm.io/react-dom/index.js";
 | 
					import ReactDOM from "https://dev.jspm.io/react-dom/index.js";
 | 
				
			||||||
import ReactDOMServer from "https://dev.jspm.io/react-dom/server.js";
 | 
					import ReactDOMServer from "https://dev.jspm.io/react-dom/server.js";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
let Util = {
 | 
					let Util = {
 | 
				
			||||||
    ParsePassage:inRef=>
 | 
					    ParsePassage:inRef=>
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
@ -17,6 +19,7 @@ let Util = {
 | 
				
			|||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
let h = React.createElement;
 | 
					let h = React.createElement;
 | 
				
			||||||
 | 
					let s = styled.default;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
let ElemApp = props =>
 | 
					let ElemApp = props =>
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@ -24,6 +27,7 @@ let ElemApp = props =>
 | 
				
			|||||||
    [
 | 
					    [
 | 
				
			||||||
        h(ElemTree, {key:"tree1", tree:App.State.Topics}),
 | 
					        h(ElemTree, {key:"tree1", tree:App.State.Topics}),
 | 
				
			||||||
        h(ElemTree, {key:"tree2", tree:App.State.Bible}),
 | 
					        h(ElemTree, {key:"tree2", tree:App.State.Bible}),
 | 
				
			||||||
 | 
					        h(ElemTree, {key:"tree3", tree:App.State.Date}),
 | 
				
			||||||
        h(ElemItems, {key:3})
 | 
					        h(ElemItems, {key:3})
 | 
				
			||||||
    ]
 | 
					    ]
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
@ -46,14 +50,15 @@ let ElemItems = props =>
 | 
				
			|||||||
        h("div", {key:2}, list),
 | 
					        h("div", {key:2}, list),
 | 
				
			||||||
        h("div", {key:3}, pages)
 | 
					        h("div", {key:3}, pages)
 | 
				
			||||||
    ]);
 | 
					    ]);
 | 
				
			||||||
}
 | 
					};
 | 
				
			||||||
let ElemItem = props =>
 | 
					let ElemItem = props =>
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return h("div", {key:0}, [
 | 
					    return h("div", {key:0}, [
 | 
				
			||||||
        h("div", {key:1},
 | 
					        h("div", {key:1},
 | 
				
			||||||
        [
 | 
					        [
 | 
				
			||||||
            h("span", {key:2}, props.title),
 | 
					            h("span", {key:2}, props.title),
 | 
				
			||||||
            h("em", {key:3}, props.id)
 | 
					            h("em", {key:3}, props.id),
 | 
				
			||||||
 | 
					            h("strong", {key:4}, props.date),
 | 
				
			||||||
        ]
 | 
					        ]
 | 
				
			||||||
        ),
 | 
					        ),
 | 
				
			||||||
        h("small", {key:4}, props.bible)
 | 
					        h("small", {key:4}, props.bible)
 | 
				
			||||||
@ -126,31 +131,17 @@ let ElemPager = ({count, active}) =>
 | 
				
			|||||||
    return h("div", {}, children);
 | 
					    return h("div", {}, children);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
let ElemTopics = props =>
 | 
					let ElemColumn = s.div`
 | 
				
			||||||
{
 | 
					    display:inline-block;
 | 
				
			||||||
    let children = App.State.Topics.All.map( t=>
 | 
					    vertical-align:top;
 | 
				
			||||||
    {
 | 
					`;
 | 
				
			||||||
        return h(ElemTopic, {
 | 
					 | 
				
			||||||
            onClick:e=>App.Update.Topic(t),
 | 
					 | 
				
			||||||
            key:t.id,
 | 
					 | 
				
			||||||
            label:t.display, 
 | 
					 | 
				
			||||||
            active:t.active
 | 
					 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
    });
 | 
					 | 
				
			||||||
    return h("div", null, children);
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
let ElemTopic = props =>
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    let label = props.active? props.label+" !" : props.label;
 | 
					 | 
				
			||||||
    return h("button", {onClick:props.onClick}, label);
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
let ElemTree = ({tree}) =>
 | 
					let ElemTree = ({tree}) =>
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    let activeItems = tree.Active.map( a=>{
 | 
					    let activeItems = tree.Active.map( a=>{
 | 
				
			||||||
        return h("button", {disabled:a.Parent?false:true, key:a.ID, onClick:e=>App.Update.Select(a, tree)}, a.Display )
 | 
					        return h("button", {disabled:a.Parent?false:true, key:a.ID, onClick:e=>App.Update.Select(a, tree)}, a.Display )
 | 
				
			||||||
     })
 | 
					    });
 | 
				
			||||||
    return h("div", {},
 | 
					    return h(ElemColumn, {},
 | 
				
			||||||
    [
 | 
					    [
 | 
				
			||||||
        h("h3", {key:"title"}, tree.Display),
 | 
					        h("h3", {key:"title"}, tree.Display),
 | 
				
			||||||
        h("div", {key:"filters-active"}, [
 | 
					        h("div", {key:"filters-active"}, [
 | 
				
			||||||
@ -162,7 +153,7 @@ let ElemTree = ({tree}) =>
 | 
				
			|||||||
            h(ElemTreeNode, {key:"tree", node:tree.Root, tree:tree})
 | 
					            h(ElemTreeNode, {key:"tree", node:tree.Root, tree:tree})
 | 
				
			||||||
        ])
 | 
					        ])
 | 
				
			||||||
    ]);
 | 
					    ]);
 | 
				
			||||||
}
 | 
					};
 | 
				
			||||||
let ElemTreeNode = ({node, tree}) =>
 | 
					let ElemTreeNode = ({node, tree}) =>
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    let children = [];
 | 
					    let children = [];
 | 
				
			||||||
@ -409,25 +400,30 @@ var App = {
 | 
				
			|||||||
                    Node.Create("1 Thessalonians")
 | 
					                    Node.Create("1 Thessalonians")
 | 
				
			||||||
                ])
 | 
					                ])
 | 
				
			||||||
            ])
 | 
					            ])
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        Date:
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Display:"Date",
 | 
				
			||||||
 | 
					            Results:[],
 | 
				
			||||||
 | 
					            Active:[],
 | 
				
			||||||
 | 
					            Root:
 | 
				
			||||||
 | 
					            Node.Create("all", "All", [
 | 
				
			||||||
 | 
					                Node.Create("", "Unclassified"),
 | 
				
			||||||
 | 
					                Node.Create("8", "1980s"),
 | 
				
			||||||
 | 
					                Node.Create("9", "1990s"),
 | 
				
			||||||
 | 
					                Node.Create("0", "2000s"),
 | 
				
			||||||
 | 
					                Node.Create("1", "2010s"),
 | 
				
			||||||
 | 
					                Node.Create("2", "2020s")
 | 
				
			||||||
 | 
					            ])
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    Update:
 | 
				
			||||||
    RootDOM:document.querySelector("#root"),
 | 
					 | 
				
			||||||
    RootComponent:ElemApp,
 | 
					 | 
				
			||||||
    Render:()=>ReactDOM.render( h(App.RootComponent), App.RootDOM ),
 | 
					 | 
				
			||||||
    ApplyFilters:()=>
 | 
					 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        App.State.Items.Active = _.union(App.State.Topics.Results, App.State.Bible.Results);
 | 
					        Load:(file)=>
 | 
				
			||||||
        if(App.State.Items.Active.length == 0)
 | 
					 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            App.State.Items.Active = App.State.Items.All;
 | 
					            let leafStructure = inTree=>
 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        App.State.Pages.All = _.chunk(App.State.Items.Active, 10);
 | 
					 | 
				
			||||||
        App.State.Pages.Active = 0;
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    LeafStructure:(inTree)=>
 | 
					 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
        let output = {};
 | 
					                let output = [];
 | 
				
			||||||
                Node.IterateDown(inTree.Root, n=>
 | 
					                Node.IterateDown(inTree.Root, n=>
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    if(!n.Children)
 | 
					                    if(!n.Children)
 | 
				
			||||||
@ -436,10 +432,97 @@ var App = {
 | 
				
			|||||||
                    }
 | 
					                    }
 | 
				
			||||||
                });
 | 
					                });
 | 
				
			||||||
                return output;
 | 
					                return output;
 | 
				
			||||||
    },
 | 
					            };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Update:
 | 
					            let structTopics = leafStructure(App.State.Topics)
 | 
				
			||||||
 | 
					            let structBible = leafStructure(App.State.Bible);
 | 
				
			||||||
 | 
					            let structDate = leafStructure(App.State.Date);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            fetch(file)
 | 
				
			||||||
 | 
					            .then(inAccept=>inAccept.text())
 | 
				
			||||||
 | 
					            .then(inAccept=>
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
 | 
					                let itrUp = inLeaf=>
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    Node.IterateUp(inLeaf, inBranch=>
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        inBranch.Leaves = _.union(inBranch.Leaves, inLeaf.Leaves)
 | 
				
			||||||
 | 
					                    });
 | 
				
			||||||
 | 
					                };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                let columns = inAccept.split("|");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                for(let i=0; i<columns.length; i+=5)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    let title  = columns[i+0];
 | 
				
			||||||
 | 
					                    let id     = columns[i+1];
 | 
				
			||||||
 | 
					                    let date   = columns[i+2];
 | 
				
			||||||
 | 
					                    let bible  = columns[i+3].split("*");
 | 
				
			||||||
 | 
					                    let topics = columns[i+4].split("*");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    let output = { title, id, date, topics, bible };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    var matched, match;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    // match topics
 | 
				
			||||||
 | 
					                    matched = false;
 | 
				
			||||||
 | 
					                    topics.forEach(t=>
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        match = structTopics[t];
 | 
				
			||||||
 | 
					                        if(match)
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            match.Leaves.push(output);
 | 
				
			||||||
 | 
					                            matched = true;
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    });
 | 
				
			||||||
 | 
					                    if(!matched)
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        structTopics[""].Leaves.push(output);
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    // match bible
 | 
				
			||||||
 | 
					                    matched = false;
 | 
				
			||||||
 | 
					                    bible.forEach(t=>
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        match = structBible[ Util.ParsePassage(t)[0] ];
 | 
				
			||||||
 | 
					                        if(match)
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            match.Leaves.push(output);
 | 
				
			||||||
 | 
					                            matched = true;
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    });
 | 
				
			||||||
 | 
					                    if(!matched)
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        structBible[""].Leaves.push(output);
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    // match date
 | 
				
			||||||
 | 
					                    matched = false;
 | 
				
			||||||
 | 
					                    match = structDate[date[2]];
 | 
				
			||||||
 | 
					                    if(match)
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        match.Leaves.push(output);
 | 
				
			||||||
 | 
					                        matched = true;
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    if(!matched)
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        structDate[""].Leaves.push(output);
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    App.State.Items.All.push(output);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                Object.values(structTopics).forEach(itrUp);
 | 
				
			||||||
 | 
					                Object.values(structBible).forEach(itrUp);
 | 
				
			||||||
 | 
					                Object.values(structDate).forEach(itrUp);
 | 
				
			||||||
 | 
					            })
 | 
				
			||||||
 | 
					            .then(inAccept=>
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                App.ApplyFilters();
 | 
				
			||||||
 | 
					                App.Render();
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
        Interact:(inNode)=>
 | 
					        Interact:(inNode)=>
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if(inNode.Open)
 | 
					            if(inNode.Open)
 | 
				
			||||||
@ -493,96 +576,6 @@ var App = {
 | 
				
			|||||||
            App.ApplyFilters();
 | 
					            App.ApplyFilters();
 | 
				
			||||||
            App.Render();
 | 
					            App.Render();
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        Load:(file)=>
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            fetch(file)
 | 
					 | 
				
			||||||
            .then(inAccept=>inAccept.text())
 | 
					 | 
				
			||||||
            .then(inAccept=>
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                let structTopics = App.LeafStructure(App.State.Topics);
 | 
					 | 
				
			||||||
                let structBible = App.LeafStructure(App.State.Bible);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                let itrUp = inLeaf=>
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    Node.IterateUp(inLeaf, inBranch=>
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        inBranch.Leaves = _.union(inBranch.Leaves, inLeaf.Leaves)
 | 
					 | 
				
			||||||
                    });
 | 
					 | 
				
			||||||
                };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                let columns = inAccept.split("|");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                for(let i=0; i<columns.length; i+=5)
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    let title  = columns[i+0];
 | 
					 | 
				
			||||||
                    let id     = columns[i+1];
 | 
					 | 
				
			||||||
                    let year   = columns[i+2];
 | 
					 | 
				
			||||||
                    let bible  = columns[i+3].split("*");
 | 
					 | 
				
			||||||
                    let topics = columns[i+4].split("*");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    let output = { title, id, year, topics, bible };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    let matched = false;
 | 
					 | 
				
			||||||
                    topics.forEach(t=>
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        let match = structTopics[t];
 | 
					 | 
				
			||||||
                        if(match)
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            match.Leaves.push(output);
 | 
					 | 
				
			||||||
                            matched = true;
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                    });
 | 
					 | 
				
			||||||
                    if(!matched)
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        structTopics[""].Leaves.push(output);
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                    matched = false;
 | 
					 | 
				
			||||||
                    bible.forEach(t=>
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        let passage = Util.ParsePassage(t);
 | 
					 | 
				
			||||||
                        let match = structBible[ passage[0] ];
 | 
					 | 
				
			||||||
                        if(match)
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            match.Leaves.push(output);
 | 
					 | 
				
			||||||
                            matched = true;
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                    });
 | 
					 | 
				
			||||||
                    if(!matched)
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        structBible[""].Leaves.push(output);
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    App.State.Items.All.push(output);
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                Object.values(structTopics).forEach(itrUp);
 | 
					 | 
				
			||||||
                Object.values(structBible).forEach(itrUp);
 | 
					 | 
				
			||||||
                console.log(App.State.Items.All.length);
 | 
					 | 
				
			||||||
            })
 | 
					 | 
				
			||||||
            .then(inAccept=>
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                App.ApplyFilters();
 | 
					 | 
				
			||||||
                App.Render();
 | 
					 | 
				
			||||||
            });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        Topic:(topic)=>
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            if(topic.active)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                topic.active = false;
 | 
					 | 
				
			||||||
                App.State.Topics.Active = App.State.Topics.Active.filter( t=>t.id != topic.id );
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            else
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                topic.active = true;
 | 
					 | 
				
			||||||
                App.State.Topics.Active.push(topic);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            App.ApplyFilters();
 | 
					 | 
				
			||||||
            App.Render();
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        Page:(page)=>
 | 
					        Page:(page)=>
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if(page !== false)
 | 
					            if(page !== false)
 | 
				
			||||||
@ -591,6 +584,19 @@ var App = {
 | 
				
			|||||||
                App.Render();
 | 
					                App.Render();
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    RootDOM:document.querySelector("#root"),
 | 
				
			||||||
 | 
					    RootComponent:ElemApp,
 | 
				
			||||||
 | 
					    Render:()=>ReactDOM.render( h(App.RootComponent), App.RootDOM ),
 | 
				
			||||||
 | 
					    ApplyFilters:()=>
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        App.State.Items.Active = _.union(App.State.Topics.Results, App.State.Bible.Results, App.State.Date.Results);
 | 
				
			||||||
 | 
					        if(App.State.Items.Active.length == 0)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            App.State.Items.Active = App.State.Items.All;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        App.State.Pages.All = _.chunk(App.State.Items.Active, 10);
 | 
				
			||||||
 | 
					        App.State.Pages.Active = 0;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user