JSON datasourcing completed. Readme to follow

This commit is contained in:
supermamon
2016-05-09 17:29:18 +08:00
parent 7ecc8594d7
commit a060d335fe
18 changed files with 427 additions and 449 deletions

View File

@@ -1,20 +1,21 @@
# Reposi3
A Cydia repository template. This template contains sample on how you can easily make depiction pages without replicating your html pages. The pages are styled using [Bootsrap](http://getbootstrap.com/) which is really easy to use. You can see how it looks like by visiting [this sample repo](https://supermamon.github.io/Reposi3/) on your desktop or mobile phone.
Most data for this repo is stored on XML files and are loaded on the depiction page dynamically. See the guide below on how to set it up. Note that this guide doesn't cover creating .deb files but will briefly cover assiging depictions.
Data for this repo is stored on JSON files (XML for previous version) and are loaded on the depiction page dynamically. See the guide below on how to set it up. Note that this guide doesn't cover creating .deb files but will briefly cover assigning depictions.
## How to install this template
### 1. Download
The latest release will always be [here](https://github.com/supermamon/Reposi3/archive/master.zip).
XML-based release can be found at [here](https://github.com/supermamon/Reposi3/archive/5bd586b197fce985f179ab0e3b7b06eb494aada7.zip).
### 2. Extract
Extract the contents into a subfolder on your website. If you're using [Github Pages](https://pages.github.com/), it should be under `username.github.io/repo`. You can change `repo` to anything you want like `cydia` for example. So your repo url would be `https://username.github.io/cydia`. For this guide we'll assume that you are using github your repo url is `https://username.github.io/repo`.
#### 3. Personalize
Edit `Release` file. Modify the items pointed by `<--`
Origin: Reposi3 <--
Origin: Reposi3 <--
Label: Reposi3 <--
Suite: stable
Version: 1.0
@@ -32,7 +33,7 @@ At this point your repo is basically ready to be added into Cydia. You can also
#### 1. A basic depiction page
Let's start with a simple one. First, of course, add your `.deb` files into the `debs` folder. Then, inside the `depictions` folder, duplicate the folder `com.supermamon.oldpackage`. You will see 2 xml files -- `info.xml` and `changelog.xml`. Edit the 2 files and put in the information regarding you package. The tags are pretty much self-explanatory. Contact [@reposi3](https://twitter.com/reposi3) or [@supermamon](https://twitter.com/supermamon) for questions.
`info.xml`.
`info.xml`.
```xml
<package>
<id>com.supermamon.oldpackage</id>
@@ -115,4 +116,4 @@ Compress your Packages file to bzip2 and there you have it! In case you haven't
## What Next?
If you want to put more information on your depictions, see the other sample in `\depictions\com.supermamon.newpackage\`. This sample contains all the information that is supported.
Also, this guide is mostly a work in progress. I'll add up more details soon -- screenshots, more samples, repo icon, etc. If you have any questions, contact [@reposi3](https://twitter.com/reposi3) or [@supermamon](https://twitter.com/supermamon).
Also, this guide is mostly a work in progress. I'll add up more details soon -- screenshots, more samples, repo icon, etc. If you have any questions, contact [@reposi3](https://twitter.com/reposi3) or [@supermamon](https://twitter.com/supermamon).

View File

@@ -6,115 +6,104 @@
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script type="text/javascript" src="js/jquery.querystring.js"></script>
<script type="text/javascript" src="js/data-loader-engine.js"></script>
<script type="text/javascript" src="js/ios_version_check.js"></script>
<script type="text/javascript" src="../js/jquery.querystring.js"></script>
<script type="text/javascript" src="../js/ios_version_check.js"></script>
<script type="text/javascript" src="../js/json-renderer-1.0.0.js"></script>
<style>
@media (max-width: 767px) {
body{background:#efeff4!important;margin:0;padding:0;border:0;outline:0;box-sizing:border-box}
}
@media (max-width: 767px) {
body{background:#efeff4!important;margin:0;padding:0;border:0;outline:0;box-sizing:border-box}
}
</style>
<script type="text/javascript">
bundleid = $.QueryString['p'];
var bundleid = $.QueryString['p'];
var isCydia = (navigator.userAgent.search(/Cydia/) != -1);
var contentBlocks = {
"#changeLogList" :
{"type":"articles"
,"source" :"changelog"
,"titleSource" :"version"
,"paragraphSource" :"change"
,"titleElement" : "<h5>"
,"paragraphContainer": "<ul class='list-group'>"
,"paragraphElement" : "<li class='list-group-item'>"
var content = [
{
'data-source' : '../repo-info.json',
'elements' : {
'#repoFooterLinks': {'type':'custom', "source":"footerlinks",
"render" : function(element,source) {
if ($(source).size() == 0) {$('#externalLinksContainer').hide()}
$.each(source, function(index,data) {
var p = $("<li class='list-group-item'>");
var a = $("<a class='btn btn-link'>")
.attr("href",data.url)
.attr("target",isCydia?"_blank":"self");
if (data.icon) {
$(a).append($("<span>").attr("class",data.icon));
}
$(a).append(' '+data.name);
$(p).append(a)
$(element).append(p);
}); // each
} // render
} //#repoFooterLinks
} //elements
},
{
'data-source' : (bundleid+'/package-info.json'),
'elements' : {
'title' : {'type':'text','source':'packagename'},
'#changeLogList' : {'type':'custom','source':'changelog',
'listElement':"<li class='list-group-item'>",
'render' : function(element, source) {
if ((!source)) {
$('#packageInformation').hide();
$('#packageError').show();
}
$.each(source, function(key,value) {
var h5 = $("<h5>").text(key);
var ul = $("<ul class='list-group'>");
$(element).append(h5);
$.each(value, function(index, item){
var li = $("<li class='list-group-item'>").text(item);
$(ul).append(li);
});
$(element).append(ul);
});
}
},
}// elements
}
];
}
}
$( document ).ready(function() {
$.ajax({
type : "GET",
dataType: "xml",
url : (bundleid+"/changelog.xml"),
success : function(xml){
data_loader_engine(contentBlocks,xml)
},
cache : false,
error: function() {
$("#packageError").show();
$("#packageInformation").hide();
}
}); //ajax
}); // ready
$( document ).ready(function() {
var writer = new JSONRenderer({
verbose : true,
contentDefinition : content,
onDataFileError : function(file) {
$('#packageInformation').hide();
$('#packageError').show();
}
});
writer.render();
}); // ready
</script>
</head>
<body>
<br />
<div id="packageInformation">
<div class="container" id="changeLogList">
</div>
<div class="container" id="changeLogList">
</div>
</div>
<div id="packageError" style="display:none">
<div class="container">
<div class="alert alert-danger">
<strong>Oh snap!</strong> The package you are tying to view is not hosted on this repository.
</div>
</div>
<div class="container">
<div class="alert alert-danger">
<strong>Oh snap!</strong> The package you are tying to view is not hosted on this repository.
</div>
</div>
</div>
<!-- REPO FOOTER ----------------------------------------------------------- -->
<script type="text/javascript">
var repoContents = {
"#repoFooterLinks" :
{"type":"custom"
,"source":"repo>footerlinks>link"
,"render":function(element,source) {
$.each(source, function(index,data) {
var p = $("<li class='list-group-item'>");
var a = $("<a class='btn btn-link'>");
a.attr("href",$(data).find('url').text());
if ($(data).find('iconclass')) {
var i = $("<span>")
i.attr("class",$(data).find('iconclass').text());
console.log(i);
$(a).append(i);
}
$(a).append(' '+$(data).find('name').text());
$(p).append(a)
$(element).append(p);
}); //each
} //render
}
}
$( document ).ready(function() {
$.ajax({type: "GET", dataType: "xml",url : ("../repo.xml"),cache: false,
success : function(xml){
data_loader_engine(repoContents,xml);
if (navigator.userAgent.search(/Cydia/) != -1) {
$("a").each(function() {
console.log($(this).text());
$(this).attr("target","_blank");
});
}
},
error: function() {$("#contactInfo").hide()}
}); //ajax
}); // ready
</script>
<div id="contactInfo">
<div class="container">
<h5>CONTACT</h5>
<ul class="list-group" id="repoFooterLinks">
</ul>
</div>
<div class="container">
<h5>CONTACT</h5>
<ul class="list-group" id="repoFooterLinks">
</ul>
</div>
</div>
<!-- REPO FOOTER ENDS ------------------------------------------------------ -->
</body>
</html>

View File

@@ -1,12 +0,0 @@
<changelog>
<changes>
<version>1.0.0-2</version>
<change>Second release</change>
<change>It has feature 1</change>
<change>It has feature 2</change>
</changes>
<changes>
<version>1.0.0-1</version>
<change>Initial Release</change>
</changes>
</changelog>

View File

@@ -1,43 +0,0 @@
<package>
<id>com.supermamon.fullpackage</id>
<name>Full Package</name>
<version>2.0.0-1</version>
<compatibility>
<firmware>
<miniOS>7.0</miniOS>
</firmware>
</compatibility>
<dependencies>
<package>mobilesubstrate</package>
</dependencies>
<descriptionlist>
<description>This is an package will full depictions.</description>
<description>It has more description lines.</description>
<description><![CDATA[
You can also have<br/>
a multi-line item.
]]>
</description>
</descriptionlist>
<screenshots>
<screenshot>
<description>This is a description for screenshot 1. It's Cydia!</description>
<image>cydia.jpg</image>
</screenshot>
<screenshot>
<description>This is a description for screenshot 2. It's another Cydia!</description>
<image>cydia.jpg</image>
</screenshot>
</screenshots>
<changelog>
<change>Second release</change>
<change>It has feature 1</change>
<change>It has feature 2</change>
</changelog>
<links>
<link>
<name>/r/jailbreak</name>
<url>https://www.reddit.com/r/jailbreak</url>
</link>
</links>
</package>

View File

@@ -1,6 +1,7 @@
{
"id" : "com.supermamon.fullpackage",
"packagename" : "Full Package",
"author" : "@supermamon",
"compatibility" : {
"firmware" : {
"miniOS" : "9.0"
@@ -25,7 +26,7 @@
"screenshots" : {
"1.0.0" : [
{"image":"cydia.jpg", "description":"This is a description for screenshot 1. It's Cydia!"},
{"image":"cydia.jpg","description":"This is a description for screenshot 2. It's another Cydia!"}
{"image":"shot1.jpg","description":"Another screenshot"}
]
}
}

View File

@@ -1,6 +0,0 @@
<changelog>
<changes>
<version>1.0.0-1</version>
<change>Initial release</change>
</changes>
</changelog>

View File

@@ -1,23 +0,0 @@
<package>
<id>com.supermamon.oldpackage</id>
<name>Old Package</name>
<version>1.0.0-1</version>
<compatibility>
<firmware>
<maxiOS>7.0</maxiOS>
<otherVersions>unsupported</otherVersions>
<!--
for otherVersions, you can put either unsupported or unconfirmed
-->
</firmware>
</compatibility>
<dependencies></dependencies>
<descriptionlist>
<description>This is an old package. Requires iOS 7 and below..</description>
</descriptionlist>
<screenshots></screenshots>
<changelog>
<change>Initial release</change>
</changelog>
<links></links>
</package>

View File

@@ -1,9 +1,10 @@
{
"id" : "com.supermamon.oldpackage",
"packagename" : "Old Package",
"author" : "@supermamon",
"compatibility" : {
"firmware" : {
"miniOS" : "7.0"
"maxiOS" : "7.0"
}
},
"descriptions" : [

View File

@@ -6,10 +6,9 @@
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
<script src="https://code.jquery.com/jquery-2.2.3.min.js"></script>
<script type="text/javascript" src="js/jquery.querystring.js"></script>
<script type="text/javascript" src="js/data-loader-engine.js"></script>
<script type="text/javascript" src="../js/json-data-loader-engine.js"></script>
<script type="text/javascript" src="js/ios_version_check.js"></script>
<script type="text/javascript" src="../js/jquery.querystring.js"></script>
<script type="text/javascript" src="../js/ios_version_check.js"></script>
<script type="text/javascript" src="../js/json-renderer-1.0.0.js"></script>
<style>
@media (max-width: 767px) {
body{background:#efeff4!important;margin:0;padding:0;border:0;outline:0;box-sizing:border-box}
@@ -26,7 +25,6 @@
{
'data-source' : '../repo-info.json',
'elements' : {
'.maintainer' : {'type':'text','source':'maintainer'},
'#repoFooterLinks': {'type':'custom', "source":"footerlinks",
"render" : function(element,source) {
if ($(source).size() == 0) {$('#externalLinksContainer').hide()}
@@ -34,7 +32,7 @@
var p = $("<li class='list-group-item'>");
var a = $("<a class='btn btn-link'>")
.attr("href",data.url)
.attr("target",isCydia?"_blank":"self");
.attr("target",isCydia?"_blank":"_self");
if (data.icon) {
$(a).append($("<span>").attr("class",data.icon));
}
@@ -51,6 +49,7 @@
'elements' : {
'title' : {'type':'text','source':'packagename'},
'.packagename' : {'type':'text','source':'packagename'},
'.author' : {'type':'text','source':'author'},
'#packageHeader' : {'type':'custom','source':'packagename',
'render' : function(e,s) {
if (!isCydia) {$(e).show();}
@@ -75,7 +74,7 @@
'afterRender':function(e,data) {
var a = $('<A>')
.attr('href','screenshots.html?p='+bundleid)
.attr("target",isCydia?"_blank":"self")
.attr("target",isCydia?"_blank":"_self")
.text('Screenshots');
$(e).append($("<li class='list-group-item'>").append(a));
}
@@ -87,7 +86,7 @@
'afterRender':function(e,data) {
var a = $('<A>')
.attr('href','changelog.html?p='+bundleid)
.attr("target",isCydia?"_blank":"self")
.attr("target",isCydia?"_blank":"_self")
.text('Full ChangeLog');
$(e).append($("<li class='list-group-item'>").append(a));
}
@@ -103,14 +102,16 @@
}// elements
}
];
$( document ).ready(function() {
var loader = new JSONContentLoader(content, function(src) {
var writer = new JSONRenderer({
verbose : false,
contentDefinition : content,
onDataFileError : function(file) {
$('#packageInformation').hide();
$('#packageError').show();
});
loader.render();
}); // ready
}
});
writer.render();
</script>
</head>
<body>
@@ -118,10 +119,10 @@
<div id="packageInformation">
<div id="packageHeader" class="container" style="hide">
<div id="packageHeader" class="container" style="display:none">
<div class="jumbotron">
<h1 class="packagename"></h1>
<p>brought to you by <span class="maintainer"></span></p>
<p>by <span class="author"></span></p>
</div>
</div>

View File

@@ -1,78 +0,0 @@
function data_loader_engine(contentBlocks,xml) {
/* Loop through each if the contentBlocks */
$.each(contentBlocks, function (key,contentInfo){
console.log('Processing '+key);
console.log(' type= '+contentInfo.type);
// go out if key element does not exits
if (!($(key).length)) {return}
switch(contentInfo.type) {
case "text":
var content = $(xml).find(contentInfo.source).text();
$(key).html(content)
break;
case "link":
console.log(' url= '+contentInfo.url);
console.log(' text= '+contentInfo.text);
var url = contentInfo.url;
var params = [];
if (contentInfo.params) {
$.each(contentInfo.params, function(){
this[1] = escape(this[1]);
params[params.length] = this.join('=');
});
}
url = url+'?'+params.join('&');
$(key).append( $("<a></a>")
.attr("href",url)
.text(contentInfo.text)
);
break;
case "list":
var list = $(xml).find(contentInfo.source);
if (list.size()==0) {
if (contentInfo.emptyListCallback) {
contentInfo.emptyListCallback($(key))
}
} else {
if (!!contentInfo.reverseRender) {
list = $(list).get().reverse();
}
$.each(list, function(index,value){
var item = $(value).text()
if (!!contentInfo.reverseRender) {
$(key).prepend( $(contentInfo.paragraphElement).html("<p>"+item+"</p>") )
} else {
$(key).append( $(contentInfo.paragraphElement).html("<p>"+item+"</p>") )
}
});
}
break;
case "articles":
var articles = $(xml).find(contentInfo.source).children();
var titleID = 0;
$.each(articles,function(index,article){
var articleTitle = $(article).find(contentInfo.titleSource).text()
$(key).append( $(contentInfo.titleElement).html(articleTitle));
var container = $(contentInfo.paragraphContainer).attr("id",++titleID);
$(key).append($(container));
$.each( $(article).find(contentInfo.paragraphSource), function(index,paragraph){
$(container).append( $(contentInfo.paragraphElement).html("<p>"+$(paragraph).text()+"</p>") )
}) //paragraph
}) //article
break;
case "custom":
if (!key) {return}
contentInfo.render( $(key), $(xml).find(contentInfo.source) )
break;
}//switch
}); //each
}

View File

@@ -1,135 +1,115 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Screenshots</title>
<title>/supermamon/</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script type="text/javascript" src="js/jquery.querystring.js"></script>
<script type="text/javascript" src="js/data-loader-engine.js"></script>
<script type="text/javascript" src="js/ios_version_check.js"></script>
<script src="https://code.jquery.com/jquery-2.2.3.min.js"></script>
<script type="text/javascript" src="../js/jquery.querystring.js"></script>
<script type="text/javascript" src="../js/ios_version_check.js"></script>
<script type="text/javascript" src="../js/json-renderer-1.0.0.js"></script>
<style>
@media (max-width: 767px) {
body{background:#efeff4!important;margin:0;padding:0;border:0;outline:0;box-sizing:border-box}
}
@media (max-width: 767px) {
body{background:#efeff4!important;margin:0;padding:0;border:0;outline:0;box-sizing:border-box}
}
</style>
<script type="text/javascript">
bundleid = $.QueryString['p'];
var bundleid = $.QueryString['p'];
var isCydia = (navigator.userAgent.search(/Cydia/) != -1);
var contentBlocks = {
"#screenshotsList" :
{"type":"custom"
,"source" :"package>screenshots>screenshot"
,"render" : function(element,source){
console.log($(source).size());
if ($(source).size()==0) {
$(element).append( $("<div class='alert alert-danger'>The aren't any screenshots for this package</div>") );
return;
}
$.each(source, function(index,data) {
var th = $("<div class='thumbnail'>");
th.append($("<p>")
.text($(data).find('description').text())
)
th.append($("<img>")
.attr("src",bundleid+'/screenshots/'+$(data).find('image').text())
)
$(element).append(th);
});
}
}
}
$( document ).ready(function() {
$.ajax({
type : "GET",
dataType: "xml",
url : (bundleid+"/info.xml"),
success : function(xml){
document.title = $(xml).find("package>name").text();
data_loader_engine(contentBlocks,xml)
},
cache : false,
error: function() {
$("#packageError").show();
$("#packageInformation").hide();
}
}); //ajax
}); // ready
</script>
var content = [
{
'data-source' : '../repo-info.json',
'elements' : {
'#repoFooterLinks': {'type':'custom', "source":"footerlinks",
"render" : function(element,source) {
if ($(source).size() == 0) {$('#externalLinksContainer').hide()}
$.each(source, function(index,data) {
var p = $("<li class='list-group-item'>");
var a = $("<a class='btn btn-link'>")
.attr("href",data.url)
.attr("target",isCydia?"_blank":"self");
if (data.icon) {
$(a).append($("<span>").attr("class",data.icon));
}
$(a).append(' '+data.name);
$(p).append(a)
$(element).append(p);
}); // each
} // render
} //#repoFooterLinks
} //elements
},
{
'data-source' : (bundleid+'/package-info.json'),
'elements' : {
'title' : {'type':'text','source':'packagename'},
'#screenshotsList': {'type':'custom','source':'screenshots','select':'firstValue',
'listElement':"<li class='list-group-item'>",
'render' : function(element, source) {
if ((!source)) {
$('#packageInformation').hide();
$('#packageError').show();
}
var key = Object.keys(source)[0];
source = source[key];
if ($(source).size() == 0) {
$('#packageInformation').hide();
$('#packageError').show();
}
$.each(source, function(index,data) {
var th = $("<div class='thumbnail'>");
th.append($("<p>")
.text(data.description)
)
th.append($("<img>")
.attr("src",bundleid+'/screenshots/'+data.image)
)
$(element).append(th);
});
}
},
}// elements
}
];
$( document ).ready(function() {
var writer = new JSONRenderer({
verbose : false,
contentDefinition : content,
onDataFileError : function(file) {
$('#packageInformation').hide();
$('#packageError').show();
}
});
writer.render();
}); // ready
</script>
</head>
<body>
<br />
<div id="packageInformation">
<div class="container">
<h5>SCREENSHOTS</h5>
<ul id="screenshotsList" class="list-group">
</ul>
</div>
<div class="container">
<h5>SCREENSHOTS</h5>
<ul id="screenshotsList" class="list-group"></ul>
</div>
</div>
<div id="packageError" style="display:none">
<div class="container">
<div class="alert alert-danger">
<strong>Oh snap!</strong> The package you are tying to view is not hosted on this repository.
</div>
</div>
<div class="container">
<div class="alert alert-warning">
There are no screenshots available for this package.
</div>
</div>
</div>
<!-- REPO FOOTER ----------------------------------------------------------- -->
<script type="text/javascript">
var repoContents = {
"#repoFooterLinks" :
{"type":"custom"
,"source":"repo>footerlinks>link"
,"render":function(element,source) {
$.each(source, function(index,data) {
var p = $("<li class='list-group-item'>");
var a = $("<a class='btn btn-link'>");
a.attr("href",$(data).find('url').text());
if ($(data).find('iconclass')) {
var i = $("<span>")
i.attr("class",$(data).find('iconclass').text());
console.log(i);
$(a).append(i);
}
$(a).append(' '+$(data).find('name').text());
$(p).append(a)
$(element).append(p);
}); //each
} //render
}
}
$( document ).ready(function() {
$.ajax({type: "GET", dataType: "xml",url : ("../repo.xml"),cache: false,
success : function(xml){
data_loader_engine(repoContents,xml);
if (navigator.userAgent.search(/Cydia/) != -1) {
$("a").each(function() {
console.log($(this).text());
$(this).attr("target","_blank");
});
}
},
error: function() {$("#contactInfo").hide()}
}); //ajax
}); // ready
</script>
<div id="contactInfo">
<div class="container">
<h5>CONTACT</h5>
<ul class="list-group" id="repoFooterLinks">
</ul>
</div>
<div class="container">
<h5>CONTACT</h5>
<ul class="list-group" id="repoFooterLinks">
</ul>
</div>
</div>
<!-- REPO FOOTER ENDS ------------------------------------------------------ -->
</body>
</html>

View File

@@ -6,15 +6,16 @@
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
<script src="https://code.jquery.com/jquery-2.2.3.min.js"></script>
<script type="text/javascript" src="js/json-data-loader-engine.js"></script>
<script type="text/javascript" src="js/json-renderer-1.0.0.js"></script>
<script type="text/javascript">
var content = [
{
'data-source' : 'repo-info.json',
'elements' : {
'title' : {'type':'text','source':'name'},
'.reponame' : {'type':'text','source':'name'},
'#cydia-repo-url' : {'type':'custom','source':'repo-url', render : function(e,src) {
'elements' : {
'title' : {'type':'text','source':'name'},
'.reponame' : {'type':'text','source':'name'},
'#cydia-repo-url' : {'type':'custom','source':'repo-url'
, render : function(e,src) {
$(e).attr('href',"cydia://url/https://cydia.saurik.com/api/share#?source="+src);
} //render
}//#cydia-repo-url
@@ -23,23 +24,35 @@
{
'data-source' : 'pkg-list.json',
'elements' : {
'#packages' : {'type':'custom','source':'packages', render : function(e,src) {
// i'm expecting an array
$.each(src, function(idx,package) {
var p = $("<li class='list-group-item'>");
var a = $("<a class='btn btn-link'>");
a.attr("href","depictions/?p=" + package);
$(a).append(package);
$(p).append(a);
$(e).append(p);
});
}} //#packages
'#packages' : {'type':'custom','source':'packages',
render : function(e,src) {
$.each(src, function(idx,package) {
var pid = package.replace(/\./gi,'_');
var p = $("<li class='list-group-item'>");
var a = $("<a class='btn btn-link'>");
$(a).attr("id",pid);
$(a).attr("href","depictions/?p=" + package);
$(p).append(a);
$(e).append(p);
var pkg = [{
'data-source' : "depictions/"+package+"/package-info.json",
'elements' : {}
}];
pkg[0]['elements']['#'+pid] = {'type':'text','source':'packagename'};
(new JSONRenderer({verbose:false,contentDefinition:pkg}))
.render();
});
} //render
} //#packages
} //containers
} //content item
];
$(document).ready(function(){
var loader = new JSONContentLoader(content);
loader.render();
var writer = new JSONRenderer({
verbose : false,
contentDefinition : content
});
writer.render();
}) //ready
</script>
</head>

View File

@@ -13,6 +13,7 @@ var VERSION_CHECK_UNSUPPORTED = "Only compatible with iOS %s to %s &#x1f61e;";
function ios_version_check(minIOS,maxIOS,otherIOS,callBack) {
"use strict";
if (!minIOS) {minIOS = "1.0"}
function parseVersionString(version) {
var bits = version.split(".");

View File

@@ -1,18 +1,25 @@
var JSONContentLoader = function(contentInfo,onDataSourceFail) {
this.verbose = false;
this.contentInfo = contentInfo;
if (onDataSourceFail) {
this.onDataSourceFail = onDataSourceFail;
}
}
JSONContentLoader.prototype.log = function(msg) {
if (this.verbose) {
console.log(msg);
}
}
JSONContentLoader.prototype.runEngine = function(elements, data)
{
var self = this;
$.each(elements, function (element, sourceDef) {
console.log('Rendering '+element);
console.log(' .type='+sourceDef.type);
console.log(' .source='+sourceDef.source);
self.log('Rendering '+element);
self.log(' .type='+sourceDef.type);
self.log(' .source='+sourceDef.source);
// go out if key element does not exits
if (!($(element).length)) {return}
@@ -22,15 +29,15 @@ JSONContentLoader.prototype.runEngine = function(elements, data)
}
if (sourceDef.select) {
console.log(' .has select filter = '+sourceDef.select);
self.log(' .has select filter = '+sourceDef.select);
switch (sourceDef.select) {
case 'firstKey' :
content = Object.keys(content)[0];
console.log(' newcontent = '+content);
self.log(' newcontent = '+content);
break;
case 'firstValue' :
content = $(content)[0];
console.log(' newcontent = '+content);
self.log(' newcontent = '+content);
break;
default :
}
@@ -38,7 +45,7 @@ JSONContentLoader.prototype.runEngine = function(elements, data)
switch (sourceDef.type) {
case 'text' :
console.log(' Setting text of '+element+' to '+content);
self.log(' Setting text of '+element+' to '+content);
$(element).html(content);
break;
case 'list' :
@@ -61,38 +68,40 @@ JSONContentLoader.prototype.runEngine = function(elements, data)
}
break;
case 'custom' :
console.log(' Calling render("'+element+'",('+data[sourceDef.source]+'))');
self.log(' Calling render("'+element+'",('+content+'))');
sourceDef.render( element, content);
default:
} // switch
if(sourceDef.afterRender) {
console.log(' Running afterRender');
self.log(' Running afterRender');
sourceDef.afterRender(element, content);
}
});
}
JSONContentLoader.prototype.onDataSourceFail = function(src) {
console.log("onDataSourceFail triggered for "+src);
self.log("onDataSourceFail triggered for "+src);
return this
}
JSONContentLoader.prototype.render = function()
{
var loader = this;
$.each(this.contentInfo, function(idx, webpart) {
console.log(webpart);
var self = this;
$.each(self.contentInfo, function(idx, webpart) {
self.log(webpart);
if (webpart['data-source'] != '') {
$.getJSON(webpart['data-source'], function(data) {
loader.runEngine(webpart['elements'], data);
self.runEngine(webpart['elements'], data);
})
.fail(function() {
console.log( "getJSON failed for "+webpart['data-source'] );
if (loader.onDataSourceFail) {
loader.onDataSourceFail(webpart['data-source']);
self.log( "getJSON failed for "+webpart['data-source'] );
if (self.onDataSourceFail) {
self.onDataSourceFail(webpart['data-source']);
}
});
} else {
loader.runEngine(webpart['elements'], null);
self.runEngine(webpart['elements'], null);
}
});
}

168
js/json-renderer-1.0.0.js Executable file
View File

@@ -0,0 +1,168 @@
var JSONRenderer = function(props) {
console.log('JSONRenderer.constructor');
this.props = props;
console.log(' .props.verbose='+this.props.verbose);
this.log = function(msg) {
if (this.props.verbose) {
console.log(msg);
}
}
}
JSONRenderer.prototype.onNoContentDefinition = function(obj) {
if (obj) {
obj.log("prototype.onNoContentDefinition");
} else {
console.log("prototype.onNoContentDefinition");
}
}
JSONRenderer.prototype.onNoDataSourceProvided = function(definition,obj) {
if (obj) {
obj.log("prototype.onNoDataSourceProvided");
} else {
console.log("prototype.onNoDataSourceProvided");
}
}
JSONRenderer.prototype.onDataFileError = function(file,obj) {
if (obj) {
obj.log("prototype.onDataFileError--" + file);
} else {
console.log("prototype.onDataFileError--" + file);
}
}
JSONRenderer.prototype.raiseError = function(fnErrorName, args) {
this.log("prototype.raiseError ("+fnErrorName+")");
var fnError = this[fnErrorName];
if (this.props[fnErrorName]) {
this.log(" "+fnErrorName+" was overridden. Using it instead.");
fnError = this.props[fnErrorName];
}
if (!!args) {
return fnError(args,this);
} else {
return fnError(this);
}
}
JSONRenderer.prototype.runEngine = function(elements, data)
{
var self = this;
$.each(elements, function (element, sourceDef) {
self.log('Rendering '+element);
self.log(' .type='+sourceDef.type);
self.log(' .source='+sourceDef.source);
self.log(' .element='+element);
// go out if key element does not exits
if (!$(element)) {return}
var content;
if (sourceDef.source != '') {
self.log(' .loading data');
content = data[sourceDef.source];
}
self.log(' .data='+content);
if (sourceDef.select) {
self.log(' .has select filter = '+sourceDef.select);
switch (sourceDef.select) {
case 'firstKey' :
content = Object.keys(content)[0];
self.log(' newcontent = '+content);
break;
case 'firstValue' :
content = $(content)[0];
self.log(' newcontent = '+content);
break;
default :
}
} //if (sourceDef.select)
switch (sourceDef.type) {
case 'text' :
self.log(' Setting text of '+element+' to '+content);
$(element).html(content);
break;
case 'list' :
if ($(content).size()==0) {
if (sourceDef.ifEmpty) {
sourceDef.ifEmpty($(element));
}
} else {
// not empty
if (!!sourceDef.reverse) {
content = $(content).get().reverse();
}
$.each(content, function(index,value){
if (!!sourceDef.reverse) {
$(element).prepend( $(sourceDef.listElement).html("<p>"+value+"</p>") )
} else {
$(element).append( $(sourceDef.listElement).html("<p>"+value+"</p>") )
}
});
}
break;
case 'custom' :
self.log(' Calling render("'+element+'",('+content+'))');
sourceDef.render( element, content);
default:
} // switch
if(sourceDef.afterRender) {
self.log(' Running afterRender');
sourceDef.afterRender(element, content);
}
});
}
JSONRenderer.prototype.preRender = function() {
this.log('JSONRenderer.preRender start');
if (!this.props.contentDefinition) {
this.raiseError('onNoContentDefinition');
this.log('JSONRenderer.preRender exit(false)');
return false;
}
this.log('JSONRenderer.preRender exit(true)');
return true;
}
JSONRenderer.prototype.render = function()
{
var self = this;
self.log('JSONRenderer.render start');
if (!self.preRender()) {return false}
console.log(this.props.contentDefinition);
// loop through each definition
$.each(this.props.contentDefinition, function(idx, thisDefinition) {
self.log(" reading definition["+idx+"]");
self.log(" data-source = "+ thisDefinition['data-source']);
var dataSource = thisDefinition['data-source'];
if (!dataSource) {
dataSource = '';
}
if (dataSource == 'NONE') {
self.runEngine(thisDefinition['elements'], null);
} else if (dataSource != '') {
// try loading the data-source
$.getJSON(dataSource, function(data) {
self.runEngine(thisDefinition['elements'], data);
})
.fail(function() {
self.log(" Failed loading " + dataSource );
self.raiseError('onDataFileError', dataSource)
});
} else {
self.log(" Encountered a definition without a data-source");
self.raiseError('onNoDataSourceProvided', thisDefinition);
}
}); //.each
}

View File

@@ -1,24 +0,0 @@
<repo>
<footerLinksComment>
The links indicated below will appear at the bottom of every depiction.
</footerLinksComment>
<footerlinks>
<link>
<name>Follow me on Twitter</name>
<url>https://twitter.com/reposi3</url>
<iconclass>glyphicon glyphicon-user</iconclass>
</link>
<link>
<name>I want this depiction template</name>
<url>https://github.com/supermamon/Reposi3</url>
<iconclass>glyphicon glyphicon-thumbs-up</iconclass>
</link>
</footerlinks>
<packagesComment>
The bundleIDs listed below are used to load the names and description of tweaks on the repo main page.
</packagesComment>
<packages>
<package>com.supermamon.newpackage</package>
<package>com.supermamon.oldpackage</package>
</packages>
</repo>