pagination
This commit is contained in:
parent
0732033c6b
commit
14cadbef04
127
index.html
127
index.html
@ -1,9 +1,20 @@
|
|||||||
<div id="root"></div>
|
<div id="root"></div>
|
||||||
<script type="module">
|
<script type="module">
|
||||||
|
|
||||||
import _ from "https://dev.jspm.io/lodash";
|
import _ from "https://dev.jspm.io/lodash";
|
||||||
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 = {
|
||||||
|
ParsePassage:inRef=>
|
||||||
|
{
|
||||||
|
let indexNumeric = inRef.lastIndexOf(" ");
|
||||||
|
let partBook = inRef.substring(0, indexNumeric);
|
||||||
|
let chapterVerse = inRef.substring(indexNumeric+1).split(":");
|
||||||
|
return [partBook, chapterVerse[0], chapterVerse[1]];
|
||||||
|
}
|
||||||
|
};
|
||||||
let h = React.createElement;
|
let h = React.createElement;
|
||||||
|
|
||||||
let ElemApp = props =>
|
let ElemApp = props =>
|
||||||
@ -12,7 +23,6 @@ let ElemApp = props =>
|
|||||||
[
|
[
|
||||||
h("h4", {key:0}, "topics"),
|
h("h4", {key:0}, "topics"),
|
||||||
h(ElemTopics, {key:1}),
|
h(ElemTopics, {key:1}),
|
||||||
h("h4", {key:2}, "results"),
|
|
||||||
h(ElemItems, {key:3})
|
h(ElemItems, {key:3})
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
@ -20,17 +30,95 @@ let ElemApp = props =>
|
|||||||
|
|
||||||
let ElemItems = props =>
|
let ElemItems = props =>
|
||||||
{
|
{
|
||||||
let children = App.State.Items.Active.map( i=>h(ElemItem, {...i, key:i.id} ) );
|
let list = App.State.Pages.All[App.State.Pages.Active].map( i=>h(ElemItem, {...i, key:i.id} ) );
|
||||||
return h("div", null, children);
|
|
||||||
|
let pages = h(ElemPager, {count:App.State.Pages.All.length, active:App.State.Pages.Active}, null);
|
||||||
|
|
||||||
|
return h("div", null, [
|
||||||
|
h("h4", {key:0}, App.State.Items.Active.length+" results"),
|
||||||
|
h("div", {key:1}, pages),
|
||||||
|
h("div", {key:2}, list),
|
||||||
|
h("div", {key:3}, pages)
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
let ElemItem = props =>
|
let ElemItem = props =>
|
||||||
{
|
{
|
||||||
return h("div", {key:0}, [
|
return h("div", {key:0}, [
|
||||||
h("h3", {key:1}, props.title),
|
h("div", {key:1},
|
||||||
h("p", {key:2}, props.id),
|
[
|
||||||
|
h("span", {key:0}, props.title),
|
||||||
|
h("em", {key:1}, props.id)
|
||||||
|
]
|
||||||
|
),
|
||||||
h("small", {key:3}, props.bible)
|
h("small", {key:3}, props.bible)
|
||||||
])
|
])
|
||||||
};
|
};
|
||||||
|
let ElemPager = ({count, active}) =>
|
||||||
|
{
|
||||||
|
var children;
|
||||||
|
var blockIntro, blockAt, blockOutro;
|
||||||
|
var hitLeft, hitRight;
|
||||||
|
|
||||||
|
let renderRange = (inStart, inStop) =>
|
||||||
|
{
|
||||||
|
let output = [];
|
||||||
|
for(let i=inStart; i<=inStop; i++)
|
||||||
|
{
|
||||||
|
output.push(h("button", {key:i, onClick:e=>App.Update("page", i)}, i+1));
|
||||||
|
}
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
let renderSpacer = () => h("span", {key:Math.random()}, "…");
|
||||||
|
|
||||||
|
|
||||||
|
blockIntro = [0, 1, 2];
|
||||||
|
blockAt = [active-1, active, active+1];
|
||||||
|
blockOutro = [count-3, count-2, count-1];
|
||||||
|
|
||||||
|
hitLeft = _.last(blockIntro) >= _.head(blockAt);
|
||||||
|
hitRight = _.last(blockAt) >= _.head(blockOutro);
|
||||||
|
|
||||||
|
if(count < 2)
|
||||||
|
{
|
||||||
|
children = [];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if( (hitLeft && hitRight) || count < 7)
|
||||||
|
{
|
||||||
|
children = renderRange(_.head(blockIntro), _.last(blockOutro))
|
||||||
|
}
|
||||||
|
else if(!hitLeft && hitRight)
|
||||||
|
{
|
||||||
|
children = [
|
||||||
|
...renderRange(_.head(blockIntro), _.last(blockIntro)),
|
||||||
|
renderSpacer(),
|
||||||
|
...renderRange(Math.min(_.head(blockAt), _.head(blockOutro)), _.last(blockOutro)) /* merge end */
|
||||||
|
];
|
||||||
|
}
|
||||||
|
else if(hitLeft && !hitRight)
|
||||||
|
{
|
||||||
|
children = [
|
||||||
|
...renderRange(_.head(blockIntro), Math.max(_.last(blockAt), _.last(blockIntro)) ), /* merge beginning */
|
||||||
|
renderSpacer(),
|
||||||
|
...renderRange(_.head(blockOutro), _.last(blockOutro))
|
||||||
|
];
|
||||||
|
}
|
||||||
|
else if(!hitLeft && !hitRight)
|
||||||
|
{
|
||||||
|
children = [
|
||||||
|
...renderRange(_.head(blockIntro), _.last(blockIntro)),
|
||||||
|
renderSpacer(),
|
||||||
|
...renderRange(_.head(blockAt), _.last(blockAt)),
|
||||||
|
renderSpacer(),
|
||||||
|
...renderRange(_.head(blockOutro), _.last(blockOutro))
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return h("div", {}, children);
|
||||||
|
};
|
||||||
|
|
||||||
let ElemTopics = props =>
|
let ElemTopics = props =>
|
||||||
{
|
{
|
||||||
@ -59,6 +147,11 @@ var App = {
|
|||||||
All:[],
|
All:[],
|
||||||
Active:[]
|
Active:[]
|
||||||
},
|
},
|
||||||
|
Pages:
|
||||||
|
{
|
||||||
|
All:[],
|
||||||
|
Active:0,
|
||||||
|
},
|
||||||
Topics:
|
Topics:
|
||||||
{
|
{
|
||||||
All:
|
All:
|
||||||
@ -66,27 +159,32 @@ var App = {
|
|||||||
{
|
{
|
||||||
id:"gospel-the",
|
id:"gospel-the",
|
||||||
display:"The Gospel",
|
display:"The Gospel",
|
||||||
active:false
|
active:false,
|
||||||
|
members:[]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id:"jesus-christ",
|
id:"jesus-christ",
|
||||||
display:"Jesus Christ",
|
display:"Jesus Christ",
|
||||||
active:false
|
active:false,
|
||||||
|
members:[]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id:"biblical-figures",
|
id:"biblical-figures",
|
||||||
display:"Biblical Figures",
|
display:"Biblical Figures",
|
||||||
active:false
|
active:false,
|
||||||
|
members:[]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id:"free-will",
|
id:"free-will",
|
||||||
display:"Free Will",
|
display:"Free Will",
|
||||||
active:false
|
active:false,
|
||||||
|
members:[]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id:"secular-culture",
|
id:"secular-culture",
|
||||||
display:"Secular Culture",
|
display:"Secular Culture",
|
||||||
active:false
|
active:false,
|
||||||
|
members:[]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
Active:[]
|
Active:[]
|
||||||
@ -123,6 +221,8 @@ var App = {
|
|||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
App.State.Pages.All = _.chunk(App.State.Items.Active, 10);
|
||||||
|
App.State.Pages.Active = 0;
|
||||||
},
|
},
|
||||||
Update:(...action)=>
|
Update:(...action)=>
|
||||||
{
|
{
|
||||||
@ -168,6 +268,13 @@ var App = {
|
|||||||
App.ApplyFilters();
|
App.ApplyFilters();
|
||||||
App.Render();
|
App.Render();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case "page" :
|
||||||
|
if(action[1] !== false)
|
||||||
|
{
|
||||||
|
App.State.Pages.Active = action[1];
|
||||||
|
App.Render();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user