Ranking on categories
This commit is contained in:
@@ -49,7 +49,6 @@ footer .links {
|
|||||||
padding: 1em;
|
padding: 1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
#main-nav { float: right; padding: 0; }
|
|
||||||
#main-nav li { display: inline-block; margin-right: 1em; }
|
#main-nav li { display: inline-block; margin-right: 1em; }
|
||||||
#main-nav img { height: 1.2em; margin: 0 -.4em; }
|
#main-nav img { height: 1.2em; margin: 0 -.4em; }
|
||||||
#main-nav img:hover { transform: scale(1.2); }
|
#main-nav img:hover { transform: scale(1.2); }
|
||||||
@@ -152,6 +151,7 @@ p.subtitle { margin-top: .2em; }
|
|||||||
.stick-top { top: 0; position: sticky; padding: .8em 0 .5em; background: #FFF; }
|
.stick-top { top: 0; position: sticky; padding: .8em 0 .5em; background: #FFF; }
|
||||||
.xscroll { overflow-x: scroll; max-width: 100%; }
|
.xscroll { overflow-x: scroll; max-width: 100%; }
|
||||||
.yscroll { overflow-y: scroll; max-height: 80vh; }
|
.yscroll { overflow-y: scroll; max-height: 80vh; }
|
||||||
|
.floatr, #main-nav { float: right; }
|
||||||
table.alternate td, table.alternate th { padding: .5em; }
|
table.alternate td, table.alternate th { padding: .5em; }
|
||||||
table.alternate tr:nth-child(even) { background: #DDD; }
|
table.alternate tr:nth-child(even) { background: #DDD; }
|
||||||
table.alternate tr:nth-child(odd) { background: #F9F9F9; }
|
table.alternate tr:nth-child(odd) { background: #F9F9F9; }
|
||||||
|
|||||||
@@ -41,7 +41,6 @@ Given A → B, B depends on A
|
|||||||
```
|
```
|
||||||
digraph Dependency {
|
digraph Dependency {
|
||||||
"." -> html_root
|
"." -> html_root
|
||||||
"." -> html_ranking
|
|
||||||
"." -> download_itunes
|
"." -> download_itunes
|
||||||
"." -> bundle_combine
|
"." -> bundle_combine
|
||||||
download_itunes -> index_app_names
|
download_itunes -> index_app_names
|
||||||
@@ -51,6 +50,7 @@ digraph Dependency {
|
|||||||
index_app_names -> index_rank
|
index_app_names -> index_rank
|
||||||
index_app_names -> index_categories
|
index_app_names -> index_categories
|
||||||
index_categories -> html_categories
|
index_categories -> html_categories
|
||||||
|
html_categories -> html_ranking
|
||||||
index_rank -> html_bundle
|
index_rank -> html_bundle
|
||||||
index_rank -> html_index_domains
|
index_rank -> html_index_domains
|
||||||
index_domains -> html_index_domains
|
index_domains -> html_index_domains
|
||||||
|
|||||||
@@ -15,8 +15,11 @@ def process(affected=None, per_page=60):
|
|||||||
if affected and cid not in affected:
|
if affected and cid not in affected:
|
||||||
continue
|
continue
|
||||||
out_dir = mylib.path_add(base, cid)
|
out_dir = mylib.path_add(base, cid)
|
||||||
A = HTML.h2(HTML.a_path([(parent, '../')], cname))
|
# full url since categories can have page 2, 3, etc.
|
||||||
Z = HTML.p_download_json('data.json', 'category_{}.json'.format(cid))
|
A = '<h2>' + HTML.a_path([(parent, '/category/')], cname) + \
|
||||||
|
'<a class="snd floatr" href="ranking/">Ranking</a></h2>'
|
||||||
|
Z = HTML.p_download_json('data.json', 'category-{}.json'.format(cid))
|
||||||
|
# does BREAK html_ranking!! call html_categories before html_ranking
|
||||||
_, a = HTML.write_app_pages(out_dir, json['apps'],
|
_, a = HTML.write_app_pages(out_dir, json['apps'],
|
||||||
cname, per_page, pre=A, post=Z)
|
cname, per_page, pre=A, post=Z)
|
||||||
print(' {} ({})'.format(cname, a))
|
print(' {} ({})'.format(cname, a))
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import index_app_names # get_sorted_app_names
|
|||||||
def process(per_page=60):
|
def process(per_page=60):
|
||||||
print('generating html: app-index ...')
|
print('generating html: app-index ...')
|
||||||
title = 'Apps (A–Z)'
|
title = 'Apps (A–Z)'
|
||||||
header = HTML.h2(HTML.a_path([('Results', '/results/')], title))
|
header = '<h2>' + HTML.a_path([('Results', '/results/')], title) + '</h2>'
|
||||||
p, a = HTML.write_app_pages(mylib.path_out('index', 'apps'),
|
p, a = HTML.write_app_pages(mylib.path_out('index', 'apps'),
|
||||||
index_app_names.get_sorted_app_names(),
|
index_app_names.get_sorted_app_names(),
|
||||||
title, per_page=per_page, pre=header)
|
title, per_page=per_page, pre=header)
|
||||||
|
|||||||
@@ -2,31 +2,59 @@
|
|||||||
|
|
||||||
import lib_common as mylib
|
import lib_common as mylib
|
||||||
import lib_html as HTML
|
import lib_html as HTML
|
||||||
import index_rank
|
import index_rank # fname_ranking_category, fname_ranking_all
|
||||||
|
|
||||||
|
|
||||||
def process():
|
def html_base(*pathlist):
|
||||||
print('generating html: ranking ...')
|
return '''
|
||||||
title = 'Ranking'
|
<h2>{}</h2>
|
||||||
header = HTML.a_path([('Results', '/results/')], title)
|
|
||||||
base = mylib.path_out('ranking')
|
|
||||||
HTML.write(base, f'''
|
|
||||||
<h2>{header}</h2>
|
|
||||||
<p>
|
<p>
|
||||||
This ranking shows only the 500 most recently updated applications.<br>
|
This ranking shows only 500 of the most recently updated applications.<br>
|
||||||
If you're missing an app, feel free to contribute a new app recording.
|
If you're missing an app, feel free to contribute a new app recording.
|
||||||
</p>
|
</p>
|
||||||
<div class="xscroll yscroll">
|
<div class="xscroll yscroll">
|
||||||
<table id="rank-list" class="alternate"><tr><td>Loading …</td></tr></table>
|
<table id="rank-list" class="alternate"><tr><td>Loading …</td></tr></table>
|
||||||
</div>
|
</div>
|
||||||
{ HTML.p_download_json('data.json', 'ranking-all.json') }
|
'''.format(HTML.a_path(pathlist, 'Ranking'))
|
||||||
|
|
||||||
|
|
||||||
|
def html_script_chunk(fname):
|
||||||
|
return '''
|
||||||
<script type="text/javascript" src="/static/ranking.js"></script>
|
<script type="text/javascript" src="/static/ranking.js"></script>
|
||||||
<script type="text/javascript" src="/static/lozad.js"></script>
|
<script type="text/javascript" src="/static/lozad.js"></script>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
rank_js('data.json');
|
rank_js('{}');
|
||||||
</script>''', title=title)
|
</script>'''.format(fname)
|
||||||
mylib.symlink(index_rank.fname_ranking_list(),
|
|
||||||
|
|
||||||
|
def write_ranking_category(cid, category_name):
|
||||||
|
base = mylib.path_out('category', cid, 'ranking')
|
||||||
|
# full urls since categories can have page 2, 3, etc.
|
||||||
|
src = html_base(('All Categories', '/category/'),
|
||||||
|
(category_name, '/category/{}/'.format(cid)))
|
||||||
|
src += HTML.p_download_json('data.json',
|
||||||
|
'results-category-{}.json'.format(cid))
|
||||||
|
src += html_script_chunk('data.json')
|
||||||
|
HTML.write(base, src, title='Category Ranking: ' + category_name)
|
||||||
|
mylib.symlink(index_rank.fname_ranking_category(cid),
|
||||||
mylib.path_add(base, 'data.json'))
|
mylib.path_add(base, 'data.json'))
|
||||||
|
|
||||||
|
|
||||||
|
def write_ranking_all(title, base_dir):
|
||||||
|
src = html_base(('Results', '/results/'))
|
||||||
|
src += HTML.p_download_json('data.json', 'results-all.json')
|
||||||
|
src += html_script_chunk('data.json')
|
||||||
|
HTML.write(base_dir, src, title=title)
|
||||||
|
mylib.symlink(index_rank.fname_ranking_all(),
|
||||||
|
mylib.path_add(base_dir, 'data.json'))
|
||||||
|
|
||||||
|
|
||||||
|
def process():
|
||||||
|
print('generating html: ranking ...')
|
||||||
|
write_ranking_all('Ranking', mylib.path_out('ranking'))
|
||||||
|
for _, json in mylib.enum_categories():
|
||||||
|
cid, name = json['meta']
|
||||||
|
write_ranking_category(cid, name)
|
||||||
print('')
|
print('')
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -21,6 +21,16 @@ def fname_cat_name_compact():
|
|||||||
return mylib.path_data_index('category_names_compact.json')
|
return mylib.path_data_index('category_names_compact.json')
|
||||||
|
|
||||||
|
|
||||||
|
def fname_cat_individual(cid):
|
||||||
|
return mylib.path_data_index('category', 'id_{}.json'.format(cid))
|
||||||
|
|
||||||
|
|
||||||
|
def make_dir_individuals():
|
||||||
|
pth = mylib.path_data_index('category')
|
||||||
|
mylib.rm_dir(pth)
|
||||||
|
mylib.mkdir(pth)
|
||||||
|
|
||||||
|
|
||||||
def load_json_if_not_already(noNames=False):
|
def load_json_if_not_already(noNames=False):
|
||||||
global _dict_apps, _dict_names
|
global _dict_apps, _dict_names
|
||||||
if not _dict_apps:
|
if not _dict_apps:
|
||||||
@@ -85,11 +95,9 @@ def persist_individual_files():
|
|||||||
return ret
|
return ret
|
||||||
|
|
||||||
index = sorted_reverse_index()
|
index = sorted_reverse_index()
|
||||||
pth = mylib.path_data_index('category')
|
make_dir_individuals()
|
||||||
mylib.rm_dir(pth)
|
|
||||||
mylib.mkdir(pth)
|
|
||||||
for cid, cname in _dict_names.items():
|
for cid, cname in _dict_names.items():
|
||||||
mylib.json_write(mylib.path_add(pth, 'id_{}.json'.format(cid)),
|
mylib.json_write(fname_cat_individual(cid),
|
||||||
{'meta': [cid, cname], 'apps': index[cid]})
|
{'meta': [cid, cname], 'apps': index[cid]})
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -16,8 +16,19 @@ def fname_app_rank():
|
|||||||
return mylib.path_data_index('app_rank.json')
|
return mylib.path_data_index('app_rank.json')
|
||||||
|
|
||||||
|
|
||||||
def fname_ranking_list():
|
def fname_ranking_all():
|
||||||
return mylib.path_data_index('ranking_list.json')
|
return mylib.path_data_index('ranking_all.json')
|
||||||
|
|
||||||
|
|
||||||
|
def fname_ranking_category(cid):
|
||||||
|
return mylib.path_data_index('rank', 'id_{}.json'.format(cid))
|
||||||
|
|
||||||
|
|
||||||
|
def make_dir_individuals(reset=False):
|
||||||
|
pth = mylib.path_data_index('rank')
|
||||||
|
if reset:
|
||||||
|
mylib.rm_dir(pth)
|
||||||
|
mylib.mkdir(pth)
|
||||||
|
|
||||||
|
|
||||||
def json_to_list(json):
|
def json_to_list(json):
|
||||||
@@ -75,10 +86,7 @@ def write_ranking_category_list(index, affected_ids):
|
|||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
pth = mylib.path_data_index('rank')
|
make_dir_individuals(reset)
|
||||||
if reset:
|
|
||||||
mylib.rm_dir(pth)
|
|
||||||
mylib.mkdir(pth)
|
|
||||||
for _, json in mylib.enum_categories():
|
for _, json in mylib.enum_categories():
|
||||||
cid, cname = json['meta']
|
cid, cname = json['meta']
|
||||||
ids = [bid for bid, _ in json['apps']]
|
ids = [bid for bid, _ in json['apps']]
|
||||||
@@ -90,8 +98,7 @@ def write_ranking_category_list(index, affected_ids):
|
|||||||
ret.append(x)
|
ret.append(x)
|
||||||
if len(ids) == 0 or len(ret) >= MAX_RANKING_LIMIT:
|
if len(ids) == 0 or len(ret) >= MAX_RANKING_LIMIT:
|
||||||
break
|
break
|
||||||
mylib.json_write(mylib.path_add(pth, 'id_{}.json'.format(cid)),
|
mylib.json_write(fname_ranking_category(cid), ret, pretty=False)
|
||||||
ret, pretty=False)
|
|
||||||
|
|
||||||
|
|
||||||
def write_ranking_list(index, affected_ids):
|
def write_ranking_list(index, affected_ids):
|
||||||
@@ -105,7 +112,7 @@ def write_ranking_list(index, affected_ids):
|
|||||||
if len(ret) > MAX_RANKING_LIMIT: # limit to most recent X entries
|
if len(ret) > MAX_RANKING_LIMIT: # limit to most recent X entries
|
||||||
ret = ret[:MAX_RANKING_LIMIT]
|
ret = ret[:MAX_RANKING_LIMIT]
|
||||||
# mylib.sort_by_name(ret, 1)
|
# mylib.sort_by_name(ret, 1)
|
||||||
mylib.json_write(fname_ranking_list(), ret, pretty=False)
|
mylib.json_write(fname_ranking_all(), ret, pretty=False)
|
||||||
|
|
||||||
|
|
||||||
def write_rank_index(index):
|
def write_rank_index(index):
|
||||||
|
|||||||
@@ -57,10 +57,6 @@ def div(inner, attr=None):
|
|||||||
return xml('div', inner, attr)
|
return xml('div', inner, attr)
|
||||||
|
|
||||||
|
|
||||||
def h2(inner, attr=None):
|
|
||||||
return xml('h2', inner, attr)
|
|
||||||
|
|
||||||
|
|
||||||
def a_path(parts, suffix):
|
def a_path(parts, suffix):
|
||||||
''' expects (name, url) tuples '''
|
''' expects (name, url) tuples '''
|
||||||
return ' / '.join(['<a href="{}">{}</a>'.format(url, title)
|
return ' / '.join(['<a href="{}">{}</a>'.format(url, title)
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import html_bundle
|
|||||||
import html_categories
|
import html_categories
|
||||||
import html_index_apps
|
import html_index_apps
|
||||||
import html_index_domains
|
import html_index_domains
|
||||||
|
import html_ranking
|
||||||
import html_root
|
import html_root
|
||||||
import index_app_names
|
import index_app_names
|
||||||
import index_categories
|
import index_categories
|
||||||
@@ -35,9 +36,10 @@ def rebuild_html(bundle_ids=None, cat_ids=None, inclIApp=True, inclRoot=False):
|
|||||||
if bundle_ids:
|
if bundle_ids:
|
||||||
html_bundle.process(bundle_ids) # after index_rank
|
html_bundle.process(bundle_ids) # after index_rank
|
||||||
html_categories.process(affected=cat_ids) # after index_categories
|
html_categories.process(affected=cat_ids) # after index_categories
|
||||||
html_index_domains.process() # after index_domains
|
html_ranking.process() # after html_categories
|
||||||
|
html_index_domains.process() # after index_domains & index_rank
|
||||||
if inclIApp:
|
if inclIApp:
|
||||||
html_index_apps.process()
|
html_index_apps.process() # after index_categories
|
||||||
else:
|
else:
|
||||||
print('no new bundle, not rebuilding index')
|
print('no new bundle, not rebuilding index')
|
||||||
if inclRoot: # TODO: remove check if root contains dynamic content
|
if inclRoot: # TODO: remove check if root contains dynamic content
|
||||||
@@ -73,7 +75,7 @@ def combine_and_update(bundle_ids):
|
|||||||
# 3. re-calculate combined.json
|
# 3. re-calculate combined.json
|
||||||
bundle_combine.process(bundle_ids)
|
bundle_combine.process(bundle_ids)
|
||||||
# 4. re-build indices
|
# 4. re-build indices
|
||||||
index_rank.process(bundle_ids) # after bundle_combine
|
index_rank.process(bundle_ids) # after bundle_combine & index_app_names
|
||||||
index_domains.process(bundle_ids) # after bundle_combine
|
index_domains.process(bundle_ids) # after bundle_combine
|
||||||
# 5. make all html files
|
# 5. make all html files
|
||||||
rebuild_html(bundle_ids, inclIApp=len(new_ids) > 0)
|
rebuild_html(bundle_ids, inclIApp=len(new_ids) > 0)
|
||||||
|
|||||||
@@ -1,149 +1,149 @@
|
|||||||
<svg width="666pt" height="332pt" viewBox="0.00 0.00 666.00 332.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
<svg width="666pt" height="404pt" viewBox="0.00 0.00 666.00 404.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
<g id="graph1" class="graph" transform="scale(1 1) rotate(0) translate(4 328)">
|
<g id="graph1" class="graph" transform="scale(1 1) rotate(0) translate(4 400)">
|
||||||
<title>Dependency</title>
|
<title>Dependency</title>
|
||||||
<polygon fill="white" stroke="white" points="-4,5 -4,-328 663,-328 663,5 -4,5"></polygon>
|
<polygon fill="white" stroke="white" points="-4,5 -4,-400 663,-400 663,5 -4,5"></polygon>
|
||||||
<!-- . -->
|
<!-- . -->
|
||||||
<g id="node1" class="node"><title>.</title>
|
<g id="node1" class="node"><title>.</title>
|
||||||
<ellipse fill="none" stroke="black" cx="350" cy="-306" rx="27" ry="18"></ellipse>
|
<ellipse fill="none" stroke="black" cx="401" cy="-378" rx="27" ry="18"></ellipse>
|
||||||
<text text-anchor="middle" x="350" y="-301.8" font-family="Times,serif" font-size="14.00">.</text>
|
<text text-anchor="middle" x="401" y="-373.8" font-family="Times,serif" font-size="14.00">.</text>
|
||||||
</g>
|
</g>
|
||||||
<!-- html_root -->
|
<!-- html_root -->
|
||||||
<g id="node3" class="node"><title>html_root</title>
|
<g id="node3" class="node"><title>html_root</title>
|
||||||
<ellipse fill="none" stroke="black" cx="62" cy="-234" rx="49.1927" ry="18"></ellipse>
|
<ellipse fill="none" stroke="black" cx="205" cy="-306" rx="49.1927" ry="18"></ellipse>
|
||||||
<text text-anchor="middle" x="62" y="-229.8" font-family="Times,serif" font-size="14.00">html_root</text>
|
<text text-anchor="middle" x="205" y="-301.8" font-family="Times,serif" font-size="14.00">html_root</text>
|
||||||
</g>
|
</g>
|
||||||
<!-- .->html_root -->
|
<!-- .->html_root -->
|
||||||
<g id="edge2" class="edge"><title>.->html_root</title>
|
<g id="edge2" class="edge"><title>.->html_root</title>
|
||||||
<path fill="none" stroke="black" d="M324.697,-299.678C282.214,-290.628 193.935,-271.336 120,-252 116.225,-251.013 112.323,-249.953 108.41,-248.864"></path>
|
<path fill="none" stroke="black" d="M377.747,-368.695C345.989,-357.353 288.45,-336.804 248.551,-322.554"></path>
|
||||||
<polygon fill="black" stroke="black" points="109.304,-245.48 98.7285,-246.118 107.394,-252.214 109.304,-245.48"></polygon>
|
<polygon fill="black" stroke="black" points="249.66,-319.234 239.065,-319.166 247.306,-325.826 249.66,-319.234"></polygon>
|
||||||
</g>
|
|
||||||
<!-- html_ranking -->
|
|
||||||
<g id="node5" class="node"><title>html_ranking</title>
|
|
||||||
<ellipse fill="none" stroke="black" cx="192" cy="-234" rx="63.108" ry="18"></ellipse>
|
|
||||||
<text text-anchor="middle" x="192" y="-229.8" font-family="Times,serif" font-size="14.00">html_ranking</text>
|
|
||||||
</g>
|
|
||||||
<!-- .->html_ranking -->
|
|
||||||
<g id="edge4" class="edge"><title>.->html_ranking</title>
|
|
||||||
<path fill="none" stroke="black" d="M328.031,-295.267C303.853,-284.555 264.414,-267.082 234.212,-253.702"></path>
|
|
||||||
<polygon fill="black" stroke="black" points="235.322,-250.365 224.762,-249.515 232.487,-256.765 235.322,-250.365"></polygon>
|
|
||||||
</g>
|
</g>
|
||||||
<!-- download_itunes -->
|
<!-- download_itunes -->
|
||||||
<g id="node7" class="node"><title>download_itunes</title>
|
<g id="node5" class="node"><title>download_itunes</title>
|
||||||
<ellipse fill="none" stroke="black" cx="350" cy="-234" rx="77.0235" ry="18"></ellipse>
|
<ellipse fill="none" stroke="black" cx="349" cy="-306" rx="77.0235" ry="18"></ellipse>
|
||||||
<text text-anchor="middle" x="350" y="-229.8" font-family="Times,serif" font-size="14.00">download_itunes</text>
|
<text text-anchor="middle" x="349" y="-301.8" font-family="Times,serif" font-size="14.00">download_itunes</text>
|
||||||
</g>
|
</g>
|
||||||
<!-- .->download_itunes -->
|
<!-- .->download_itunes -->
|
||||||
<g id="edge6" class="edge"><title>.->download_itunes</title>
|
<g id="edge4" class="edge"><title>.->download_itunes</title>
|
||||||
<path fill="none" stroke="black" d="M350,-287.697C350,-279.983 350,-270.712 350,-262.112"></path>
|
<path fill="none" stroke="black" d="M389.46,-361.465C383.072,-352.867 374.978,-341.97 367.71,-332.187"></path>
|
||||||
<polygon fill="black" stroke="black" points="353.5,-262.104 350,-252.104 346.5,-262.104 353.5,-262.104"></polygon>
|
<polygon fill="black" stroke="black" points="370.373,-329.902 361.6,-323.962 364.754,-334.076 370.373,-329.902"></polygon>
|
||||||
</g>
|
</g>
|
||||||
<!-- bundle_combine -->
|
<!-- bundle_combine -->
|
||||||
<g id="node9" class="node"><title>bundle_combine</title>
|
<g id="node7" class="node"><title>bundle_combine</title>
|
||||||
<ellipse fill="none" stroke="black" cx="489" cy="-162" rx="75.1062" ry="18"></ellipse>
|
<ellipse fill="none" stroke="black" cx="489" cy="-234" rx="75.1062" ry="18"></ellipse>
|
||||||
<text text-anchor="middle" x="489" y="-157.8" font-family="Times,serif" font-size="14.00">bundle_combine</text>
|
<text text-anchor="middle" x="489" y="-229.8" font-family="Times,serif" font-size="14.00">bundle_combine</text>
|
||||||
</g>
|
</g>
|
||||||
<!-- .->bundle_combine -->
|
<!-- .->bundle_combine -->
|
||||||
<g id="edge8" class="edge"><title>.->bundle_combine</title>
|
<g id="edge6" class="edge"><title>.->bundle_combine</title>
|
||||||
<path fill="none" stroke="black" d="M371.786,-295.269C390.483,-286.116 417.294,-270.993 436,-252 453.946,-233.779 468.309,-208.337 477.532,-189.32"></path>
|
<path fill="none" stroke="black" d="M411.22,-361.296C418.026,-350.783 427.129,-336.613 435,-324 448.199,-302.848 462.854,-278.648 473.562,-260.827"></path>
|
||||||
<polygon fill="black" stroke="black" points="480.809,-190.574 481.878,-180.033 474.469,-187.607 480.809,-190.574"></polygon>
|
<polygon fill="black" stroke="black" points="476.631,-262.515 478.774,-252.14 470.628,-258.914 476.631,-262.515"></polygon>
|
||||||
</g>
|
</g>
|
||||||
<!-- download_tracker -->
|
<!-- download_tracker -->
|
||||||
<g id="node29" class="node"><title>download_tracker</title>
|
<g id="node29" class="node"><title>download_tracker</title>
|
||||||
<ellipse fill="none" stroke="black" cx="564" cy="-234" rx="80.1284" ry="18"></ellipse>
|
<ellipse fill="none" stroke="black" cx="563" cy="-306" rx="80.1284" ry="18"></ellipse>
|
||||||
<text text-anchor="middle" x="564" y="-229.8" font-family="Times,serif" font-size="14.00">download_tracker</text>
|
<text text-anchor="middle" x="563" y="-301.8" font-family="Times,serif" font-size="14.00">download_tracker</text>
|
||||||
</g>
|
</g>
|
||||||
<!-- .->download_tracker -->
|
<!-- .->download_tracker -->
|
||||||
<g id="edge30" class="edge"><title>.->download_tracker</title>
|
<g id="edge30" class="edge"><title>.->download_tracker</title>
|
||||||
<path fill="none" stroke="black" d="M373.719,-297.241C406.6,-286.486 466.94,-266.749 510.878,-252.376"></path>
|
<path fill="none" stroke="black" d="M423.186,-367.414C447.609,-356.86 487.511,-339.619 518.449,-326.251"></path>
|
||||||
<polygon fill="black" stroke="black" points="512.131,-255.649 520.547,-249.214 509.954,-248.996 512.131,-255.649"></polygon>
|
<polygon fill="black" stroke="black" points="519.944,-329.417 527.735,-322.238 517.167,-322.992 519.944,-329.417"></polygon>
|
||||||
</g>
|
</g>
|
||||||
<!-- index_app_names -->
|
<!-- index_app_names -->
|
||||||
<g id="node11" class="node"><title>index_app_names</title>
|
<g id="node9" class="node"><title>index_app_names</title>
|
||||||
<ellipse fill="none" stroke="black" cx="315" cy="-162" rx="80.1456" ry="18"></ellipse>
|
<ellipse fill="none" stroke="black" cx="315" cy="-234" rx="80.1456" ry="18"></ellipse>
|
||||||
<text text-anchor="middle" x="315" y="-157.8" font-family="Times,serif" font-size="14.00">index_app_names</text>
|
<text text-anchor="middle" x="315" y="-229.8" font-family="Times,serif" font-size="14.00">index_app_names</text>
|
||||||
</g>
|
</g>
|
||||||
<!-- download_itunes->index_app_names -->
|
<!-- download_itunes->index_app_names -->
|
||||||
<g id="edge10" class="edge"><title>download_itunes->index_app_names</title>
|
<g id="edge8" class="edge"><title>download_itunes->index_app_names</title>
|
||||||
<path fill="none" stroke="black" d="M341.527,-216.055C337.503,-208.007 332.602,-198.205 328.113,-189.226"></path>
|
<path fill="none" stroke="black" d="M340.77,-288.055C336.902,-280.091 332.2,-270.411 327.876,-261.51"></path>
|
||||||
<polygon fill="black" stroke="black" points="331.24,-187.654 323.638,-180.275 324.979,-190.785 331.24,-187.654"></polygon>
|
<polygon fill="black" stroke="black" points="330.908,-259.741 323.391,-252.275 324.612,-262.8 330.908,-259.741"></polygon>
|
||||||
</g>
|
</g>
|
||||||
<!-- index_rank -->
|
<!-- index_rank -->
|
||||||
<g id="node13" class="node"><title>index_rank</title>
|
<g id="node11" class="node"><title>index_rank</title>
|
||||||
<ellipse fill="none" stroke="black" cx="403" cy="-90" rx="54.219" ry="18"></ellipse>
|
<ellipse fill="none" stroke="black" cx="403" cy="-162" rx="54.219" ry="18"></ellipse>
|
||||||
<text text-anchor="middle" x="403" y="-85.8" font-family="Times,serif" font-size="14.00">index_rank</text>
|
<text text-anchor="middle" x="403" y="-157.8" font-family="Times,serif" font-size="14.00">index_rank</text>
|
||||||
</g>
|
</g>
|
||||||
<!-- bundle_combine->index_rank -->
|
<!-- bundle_combine->index_rank -->
|
||||||
<g id="edge12" class="edge"><title>bundle_combine->index_rank</title>
|
<g id="edge10" class="edge"><title>bundle_combine->index_rank</title>
|
||||||
<path fill="none" stroke="black" d="M468.619,-144.411C457.21,-135.125 442.832,-123.421 430.444,-113.338"></path>
|
<path fill="none" stroke="black" d="M468.619,-216.411C457.21,-207.125 442.832,-195.421 430.444,-185.338"></path>
|
||||||
<polygon fill="black" stroke="black" points="432.608,-110.586 422.643,-106.988 428.189,-116.015 432.608,-110.586"></polygon>
|
<polygon fill="black" stroke="black" points="432.608,-182.586 422.643,-178.988 428.189,-188.015 432.608,-182.586"></polygon>
|
||||||
</g>
|
</g>
|
||||||
<!-- index_domains -->
|
<!-- index_domains -->
|
||||||
<g id="node15" class="node"><title>index_domains</title>
|
<g id="node13" class="node"><title>index_domains</title>
|
||||||
<ellipse fill="none" stroke="black" cx="559" cy="-90" rx="70.0665" ry="18"></ellipse>
|
<ellipse fill="none" stroke="black" cx="559" cy="-162" rx="70.0665" ry="18"></ellipse>
|
||||||
<text text-anchor="middle" x="559" y="-85.8" font-family="Times,serif" font-size="14.00">index_domains</text>
|
<text text-anchor="middle" x="559" y="-157.8" font-family="Times,serif" font-size="14.00">index_domains</text>
|
||||||
</g>
|
</g>
|
||||||
<!-- bundle_combine->index_domains -->
|
<!-- bundle_combine->index_domains -->
|
||||||
<g id="edge14" class="edge"><title>bundle_combine->index_domains</title>
|
<g id="edge12" class="edge"><title>bundle_combine->index_domains</title>
|
||||||
<path fill="none" stroke="black" d="M505.589,-144.411C514.352,-135.648 525.268,-124.732 534.943,-115.057"></path>
|
<path fill="none" stroke="black" d="M505.589,-216.411C514.352,-207.648 525.268,-196.732 534.943,-187.057"></path>
|
||||||
<polygon fill="black" stroke="black" points="537.448,-117.502 542.044,-107.956 532.498,-112.552 537.448,-117.502"></polygon>
|
<polygon fill="black" stroke="black" points="537.448,-189.502 542.044,-179.956 532.498,-184.552 537.448,-189.502"></polygon>
|
||||||
</g>
|
</g>
|
||||||
<!-- index_app_names->index_rank -->
|
<!-- index_app_names->index_rank -->
|
||||||
<g id="edge18" class="edge"><title>index_app_names->index_rank</title>
|
<g id="edge16" class="edge"><title>index_app_names->index_rank</title>
|
||||||
<path fill="none" stroke="black" d="M335.855,-144.411C347.529,-135.125 362.242,-123.421 374.917,-113.338"></path>
|
<path fill="none" stroke="black" d="M335.855,-216.411C347.529,-207.125 362.242,-195.421 374.917,-185.338"></path>
|
||||||
<polygon fill="black" stroke="black" points="377.253,-115.952 382.901,-106.988 372.896,-110.474 377.253,-115.952"></polygon>
|
<polygon fill="black" stroke="black" points="377.253,-187.952 382.901,-178.988 372.896,-182.474 377.253,-187.952"></polygon>
|
||||||
</g>
|
</g>
|
||||||
<!-- index_categories -->
|
<!-- index_categories -->
|
||||||
<g id="node16" class="node"><title>index_categories</title>
|
<g id="node14" class="node"><title>index_categories</title>
|
||||||
<ellipse fill="none" stroke="black" cx="245" cy="-90" rx="76.1936" ry="18"></ellipse>
|
<ellipse fill="none" stroke="black" cx="245" cy="-162" rx="76.1936" ry="18"></ellipse>
|
||||||
<text text-anchor="middle" x="245" y="-85.8" font-family="Times,serif" font-size="14.00">index_categories</text>
|
<text text-anchor="middle" x="245" y="-157.8" font-family="Times,serif" font-size="14.00">index_categories</text>
|
||||||
</g>
|
</g>
|
||||||
<!-- index_app_names->index_categories -->
|
<!-- index_app_names->index_categories -->
|
||||||
<g id="edge20" class="edge"><title>index_app_names->index_categories</title>
|
<g id="edge18" class="edge"><title>index_app_names->index_categories</title>
|
||||||
<path fill="none" stroke="black" d="M298.055,-144.055C289.371,-135.371 278.644,-124.644 269.114,-115.114"></path>
|
<path fill="none" stroke="black" d="M298.055,-216.055C289.371,-207.371 278.644,-196.644 269.114,-187.114"></path>
|
||||||
<polygon fill="black" stroke="black" points="271.335,-112.385 261.789,-107.789 266.385,-117.335 271.335,-112.385"></polygon>
|
<polygon fill="black" stroke="black" points="271.335,-184.385 261.789,-179.789 266.385,-189.335 271.335,-184.385"></polygon>
|
||||||
</g>
|
</g>
|
||||||
<!-- html_bundle -->
|
<!-- html_bundle -->
|
||||||
<g id="node24" class="node"><title>html_bundle</title>
|
<g id="node24" class="node"><title>html_bundle</title>
|
||||||
<ellipse fill="none" stroke="black" cx="396" cy="-18" rx="59.2871" ry="18"></ellipse>
|
<ellipse fill="none" stroke="black" cx="396" cy="-90" rx="59.2871" ry="18"></ellipse>
|
||||||
<text text-anchor="middle" x="396" y="-13.8" font-family="Times,serif" font-size="14.00">html_bundle</text>
|
<text text-anchor="middle" x="396" y="-85.8" font-family="Times,serif" font-size="14.00">html_bundle</text>
|
||||||
</g>
|
</g>
|
||||||
<!-- index_rank->html_bundle -->
|
<!-- index_rank->html_bundle -->
|
||||||
<g id="edge24" class="edge"><title>index_rank->html_bundle</title>
|
<g id="edge24" class="edge"><title>index_rank->html_bundle</title>
|
||||||
<path fill="none" stroke="black" d="M401.27,-71.6966C400.498,-63.9827 399.571,-54.7125 398.711,-46.1124"></path>
|
<path fill="none" stroke="black" d="M401.27,-143.697C400.498,-135.983 399.571,-126.712 398.711,-118.112"></path>
|
||||||
<polygon fill="black" stroke="black" points="402.188,-45.7064 397.71,-36.1043 395.223,-46.403 402.188,-45.7064"></polygon>
|
<polygon fill="black" stroke="black" points="402.188,-117.706 397.71,-108.104 395.223,-118.403 402.188,-117.706"></polygon>
|
||||||
</g>
|
</g>
|
||||||
<!-- html_index_domains -->
|
<!-- html_index_domains -->
|
||||||
<g id="node26" class="node"><title>html_index_domains</title>
|
<g id="node26" class="node"><title>html_index_domains</title>
|
||||||
<ellipse fill="none" stroke="black" cx="566" cy="-18" rx="92.3709" ry="18"></ellipse>
|
<ellipse fill="none" stroke="black" cx="566" cy="-90" rx="92.3709" ry="18"></ellipse>
|
||||||
<text text-anchor="middle" x="566" y="-13.8" font-family="Times,serif" font-size="14.00">html_index_domains</text>
|
<text text-anchor="middle" x="566" y="-85.8" font-family="Times,serif" font-size="14.00">html_index_domains</text>
|
||||||
</g>
|
</g>
|
||||||
<!-- index_rank->html_index_domains -->
|
<!-- index_rank->html_index_domains -->
|
||||||
<g id="edge26" class="edge"><title>index_rank->html_index_domains</title>
|
<g id="edge26" class="edge"><title>index_rank->html_index_domains</title>
|
||||||
<path fill="none" stroke="black" d="M434.815,-75.3371C459.181,-64.8733 493.128,-50.2949 520.384,-38.5898"></path>
|
<path fill="none" stroke="black" d="M434.815,-147.337C459.181,-136.873 493.128,-122.295 520.384,-110.59"></path>
|
||||||
<polygon fill="black" stroke="black" points="521.912,-41.7428 529.719,-34.5808 519.149,-35.3108 521.912,-41.7428"></polygon>
|
<polygon fill="black" stroke="black" points="521.912,-113.743 529.719,-106.581 519.149,-107.311 521.912,-113.743"></polygon>
|
||||||
</g>
|
</g>
|
||||||
<!-- index_domains->html_index_domains -->
|
<!-- index_domains->html_index_domains -->
|
||||||
<g id="edge28" class="edge"><title>index_domains->html_index_domains</title>
|
<g id="edge28" class="edge"><title>index_domains->html_index_domains</title>
|
||||||
<path fill="none" stroke="black" d="M560.73,-71.6966C561.502,-63.9827 562.429,-54.7125 563.289,-46.1124"></path>
|
<path fill="none" stroke="black" d="M560.73,-143.697C561.502,-135.983 562.429,-126.712 563.289,-118.112"></path>
|
||||||
<polygon fill="black" stroke="black" points="566.777,-46.403 564.29,-36.1043 559.812,-45.7064 566.777,-46.403"></polygon>
|
<polygon fill="black" stroke="black" points="566.777,-118.403 564.29,-108.104 559.812,-117.706 566.777,-118.403"></polygon>
|
||||||
</g>
|
</g>
|
||||||
<!-- html_index_apps -->
|
<!-- html_index_apps -->
|
||||||
<g id="node18" class="node"><title>html_index_apps</title>
|
<g id="node16" class="node"><title>html_index_apps</title>
|
||||||
<ellipse fill="none" stroke="black" cx="77" cy="-18" rx="77.3345" ry="18"></ellipse>
|
<ellipse fill="none" stroke="black" cx="77" cy="-90" rx="77.3345" ry="18"></ellipse>
|
||||||
<text text-anchor="middle" x="77" y="-13.8" font-family="Times,serif" font-size="14.00">html_index_apps</text>
|
<text text-anchor="middle" x="77" y="-85.8" font-family="Times,serif" font-size="14.00">html_index_apps</text>
|
||||||
</g>
|
</g>
|
||||||
<!-- index_categories->html_index_apps -->
|
<!-- index_categories->html_index_apps -->
|
||||||
<g id="edge16" class="edge"><title>index_categories->html_index_apps</title>
|
<g id="edge14" class="edge"><title>index_categories->html_index_apps</title>
|
||||||
<path fill="none" stroke="black" d="M208.96,-73.9832C183.604,-63.4182 149.48,-49.1998 122.285,-37.8687"></path>
|
<path fill="none" stroke="black" d="M208.96,-145.983C183.604,-135.418 149.48,-121.2 122.285,-109.869"></path>
|
||||||
<polygon fill="black" stroke="black" points="123.558,-34.6074 112.981,-33.9919 120.865,-41.0689 123.558,-34.6074"></polygon>
|
<polygon fill="black" stroke="black" points="123.558,-106.607 112.981,-105.992 120.865,-113.069 123.558,-106.607"></polygon>
|
||||||
</g>
|
</g>
|
||||||
<!-- html_categories -->
|
<!-- html_categories -->
|
||||||
<g id="node22" class="node"><title>html_categories</title>
|
<g id="node20" class="node"><title>html_categories</title>
|
||||||
<ellipse fill="none" stroke="black" cx="245" cy="-18" rx="72.5712" ry="18"></ellipse>
|
<ellipse fill="none" stroke="black" cx="245" cy="-90" rx="72.5712" ry="18"></ellipse>
|
||||||
<text text-anchor="middle" x="245" y="-13.8" font-family="Times,serif" font-size="14.00">html_categories</text>
|
<text text-anchor="middle" x="245" y="-85.8" font-family="Times,serif" font-size="14.00">html_categories</text>
|
||||||
</g>
|
</g>
|
||||||
<!-- index_categories->html_categories -->
|
<!-- index_categories->html_categories -->
|
||||||
<g id="edge22" class="edge"><title>index_categories->html_categories</title>
|
<g id="edge20" class="edge"><title>index_categories->html_categories</title>
|
||||||
|
<path fill="none" stroke="black" d="M245,-143.697C245,-135.983 245,-126.712 245,-118.112"></path>
|
||||||
|
<polygon fill="black" stroke="black" points="248.5,-118.104 245,-108.104 241.5,-118.104 248.5,-118.104"></polygon>
|
||||||
|
</g>
|
||||||
|
<!-- html_ranking -->
|
||||||
|
<g id="node22" class="node"><title>html_ranking</title>
|
||||||
|
<ellipse fill="none" stroke="black" cx="245" cy="-18" rx="63.108" ry="18"></ellipse>
|
||||||
|
<text text-anchor="middle" x="245" y="-13.8" font-family="Times,serif" font-size="14.00">html_ranking</text>
|
||||||
|
</g>
|
||||||
|
<!-- html_categories->html_ranking -->
|
||||||
|
<g id="edge22" class="edge"><title>html_categories->html_ranking</title>
|
||||||
<path fill="none" stroke="black" d="M245,-71.6966C245,-63.9827 245,-54.7125 245,-46.1124"></path>
|
<path fill="none" stroke="black" d="M245,-71.6966C245,-63.9827 245,-54.7125 245,-46.1124"></path>
|
||||||
<polygon fill="black" stroke="black" points="248.5,-46.1043 245,-36.1043 241.5,-46.1044 248.5,-46.1043"></polygon>
|
<polygon fill="black" stroke="black" points="248.5,-46.1043 245,-36.1043 241.5,-46.1044 248.5,-46.1043"></polygon>
|
||||||
</g>
|
</g>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 9.4 KiB After Width: | Height: | Size: 9.4 KiB |
@@ -3,9 +3,9 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8"/>
|
<meta charset="utf-8"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=0.75" />
|
<meta name="viewport" content="width=device-width, initial-scale=0.75" />
|
||||||
<script type="text/javascript" src="/static/script.js?1"></script>
|
<script type="text/javascript" src="/static/script.js?2"></script>
|
||||||
<title>#_TITLE_#AppCheck: Privacy Monitor</title>
|
<title>#_TITLE_#AppCheck: Privacy Monitor</title>
|
||||||
<link rel="stylesheet" type="text/css" href="/static/style.css?1">
|
<link rel="stylesheet" type="text/css" href="/static/style.css?2">
|
||||||
<link rel="stylesheet" type="text/css" href="/static/fonts/font.css">
|
<link rel="stylesheet" type="text/css" href="/static/fonts/font.css">
|
||||||
<link rel="apple-touch-icon" sizes="180x180" href="/static/favicon/apple-touch-icon.png">
|
<link rel="apple-touch-icon" sizes="180x180" href="/static/favicon/apple-touch-icon.png">
|
||||||
<link rel="icon" type="image/png" sizes="32x32" href="/static/favicon/favicon-32x32.png">
|
<link rel="icon" type="image/png" sizes="32x32" href="/static/favicon/favicon-32x32.png">
|
||||||
|
|||||||
Reference in New Issue
Block a user