⌈⌋ ⎇ branch:  freshcode


Check-in [f06d1aeef8]

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Introduce Trove tag selection on page_tags, tags: removed some natural languages, added new programming languages. Add JS .action links in submit page. HTML5shim for IE in header.
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: f06d1aeef81b6fdf511a62896672a92c586350e1
User & Date: mario 2014-07-27 04:05:17
Context
2014-07-27
22:51
Fixed feed aliases (due to RewriteRule recursion) check-in: 92a88f20e4 user: mario tags: trunk
04:05
Introduce Trove tag selection on page_tags, tags: removed some natural languages, added new programming languages. Add JS .action links in submit page. HTML5shim for IE in header. check-in: f06d1aeef8 user: mario tags: trunk
04:02
Utilize new :* expression placeholder for search query (binding though does not work for count()=? for some reason) check-in: 86b7fdab70 user: mario tags: trunk
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Changes to aux.php.

14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36


#-- Additional input filters


// Project names may be alphanumeric, and contain dashes
function proj_name($s) {
    return preg_replace("/[^a-z0-9-_]+|^[^a-z0-9]+|[^\w]+$|(?<=[-_])[-_]+/", "", strtolower($s));
}

// Tags is a comma-separated list, yet sometimes delimited with something else; normalize..
function f_tags($s) {
    return
        preg_replace(     # exception for "c++"
            ["/[-_.:]+/", "/(c\+\+(?=[\s,-]))?\+*/", "/[,;|]+/", "/[^a-z0-9,+\s-]+/", "/[,\s]+/", "/^\W+|\W+$/"],
            [  "-",           "$1",                    ",",             " ",            ", "    ,      ""      ],
            strtolower($s)
        );
}


#-- Template helpers








|





|
|
|







14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36


#-- Additional input filters


// Project names may be alphanumeric, and contain dashes
function proj_name($s) {
    return preg_replace("/[^a-z0-9-_]+|^[^a-z0-9]+|\W+$|(?<=[-_])[-_]+/", "", strtolower($s));
}

// Tags is a comma-separated list, yet sometimes delimited with something else; normalize..
function f_tags($s) {
    return
        preg_replace(     # exception for "c++" and "c#"
            ["~[-_.:/]+~", "/(([cflje]#|c\+\+)(?=[\s,-]))?[+#]*/", "/[,;|]+/", "/[^a-z0-9,+#\s-]+/", "/[,\s]+/", "/^\W+|\W+$/"],
            [  "-",            "$1",                               ",",             " ",             ", "    ,      ""      ],
            strtolower($s)
        );
}


#-- Template helpers

Changes to doc/mktrove.php.

60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
print var_export54(array(
    "Topic" => $TREE["Topic"],
    "Programming Language" => $TREE["Programming Language"],
    "Environment" => $TREE["Environment"],
    "Framework" => $TREE["Framework"],
    "Operating System" => $TREE["Operating System"],
    "Audience" => $TREE["Audience"],
    "Natural" => $TREE["Natural"],
));

// save mapping onto py-trove
file_put_contents(__DIR__."/trove.pypi-map.csv", json_encode($TMAP, JSON_PRETTY_PRINT));


#-- le functions







|







60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
print var_export54(array(
    "Topic" => $TREE["Topic"],
    "Programming Language" => $TREE["Programming Language"],
    "Environment" => $TREE["Environment"],
    "Framework" => $TREE["Framework"],
    "Operating System" => $TREE["Operating System"],
    "Audience" => $TREE["Audience"],
#    "Natural" => $TREE["Natural"],
));

// save mapping onto py-trove
file_put_contents(__DIR__."/trove.pypi-map.csv", json_encode($TMAP, JSON_PRETTY_PRINT));


#-- le functions

Changes to doc/trove.ods.

cannot compute difference between binary files

Changes to freshcode.css.

1
2
3
4
5
6
7
8
9
10
11
12
13
/**
 * api: css
 * type: stylesheet
 * title: freshcode.club layout+style
 * description: Simulates the late freecode.com layout and looks; well mostly.
 * version: 0.6.0
 *
 * Centered two-pane layout. The #main section is usually 33% of the screen width,
 * while the #sidebar floats at the right. They're repositioned only using padding:
 * to the outer html,body{}.
 *
 */






|







1
2
3
4
5
6
7
8
9
10
11
12
13
/**
 * api: css
 * type: stylesheet
 * title: freshcode.club layout+style
 * description: Simulates the late freecode.com layout and looks; well mostly.
 * version: 0.6.1
 *
 * Centered two-pane layout. The #main section is usually 33% of the screen width,
 * while the #sidebar floats at the right. They're repositioned only using padding:
 * to the outer html,body{}.
 *
 */

206
207
208
209
210
211
212




213
214
215
216
217
218
219
    font-weight: 200;
    font-size: 85%;
    color: #777;
}
#main label.inline {  font-weight: 200; margin: 4pt; }
#main label.inline input {  display: inline;  }






/**
 * Login box etc.
 *
 */
#main .box {
    margin: 20pt;







>
>
>
>







206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
    font-weight: 200;
    font-size: 85%;
    color: #777;
}
#main label.inline {  font-weight: 200; margin: 4pt; }
#main label.inline input {  display: inline;  }

.action {
    color: #697;
    border-bottom: 1px dashed #5d7;
}

/**
 * Login box etc.
 *
 */
#main .box {
    margin: 20pt;
481
482
483
484
485
486
487
488
489
490
491
492
493
494







495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512



513
514
515
516
517
518
519
 * Submit form: trove select list (<ul> instead of <select>
 *
 */
#trove_tags {
    margin: 0; padding: 0;
    display: inline-block;
    position: relative;
    top: -60px;
    width: 175px;
    height: 170px;
    overflow-y: scroll;
    overflow-x: hidden;
    border: 1px solid #ccc;
    font-size: 85%;







}
#trove_tags span {
    display: block;
    margin: 0; padding: 0;
    padding-left: 10px;
    font-weight: 200;
}
#trove_tags > span {
    padding: 0;
}
#trove_tags span > span {
    background: url("img/dotleader.png") no-repeat;
}
#trove_tags span.optgroup {
    font-weight: 900;
}
#trove_tags span > span.option:hover, #trove_tags span.optgroup > b:hover {
    background: #ccf;



}


/**
 * Page footer
 *
 */







|






>
>
>
>
>
>
>


















>
>
>







485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
 * Submit form: trove select list (<ul> instead of <select>
 *
 */
#trove_tags {
    margin: 0; padding: 0;
    display: inline-block;
    position: relative;
    top: -70px;
    width: 175px;
    height: 170px;
    overflow-y: scroll;
    overflow-x: hidden;
    border: 1px solid #ccc;
    font-size: 85%;
}
#trove_tags.pick-tags {
    width: 220px;
    height: 950px;
    top: 0px;
    border: none;
    font-size: 92%;
}
#trove_tags span {
    display: block;
    margin: 0; padding: 0;
    padding-left: 10px;
    font-weight: 200;
}
#trove_tags > span {
    padding: 0;
}
#trove_tags span > span {
    background: url("img/dotleader.png") no-repeat;
}
#trove_tags span.optgroup {
    font-weight: 900;
}
#trove_tags span > span.option:hover, #trove_tags span.optgroup > b:hover {
    background: #ccf;
}
#trove_tags .option.selected, #tag_cloud a.selected {
    background: #fba;
}


/**
 * Page footer
 *
 */

Changes to gimmicks.js.

1
2
3
4
5
6
7


8






9
10
11
12
13
14
15
/**
 * api: jquery
 * title: UI behaviour
 * description: Well, just client-side interface features
 * version: 0.2
 * depends: jquery-ui
 *


 * 






 *
 */


// DOM ready
$(document).ready(function(){





|
|

>
>
|
>
>
>
>
>
>







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/**
 * api: jquery
 * title: UI behaviour
 * description: Well, just client-side interface features
 * version: 0.3
 * depends: jquery, jquery-ui
 *
 * Collects a few event callbacks to toggle and trigger all the things.
 *  → Compacted entries (.trimmed class)
 *  → Trove tags
 *      → Injection to submit_form input box
 *      → Or appending to links on page_tags cloud
 *  → Action links (green dotted underline)
 *      → Lock entry in submit_form
 *      → Injecting $version placeholder in URLs
 *      → Sidebar box for submit_imports
 *
 */


// DOM ready
$(document).ready(function(){

25
26
27
28
29
30
31
32
33
34
35
36
37
38









39
40














































    // Likewise for compacted news feeds in #sidebar
    $(".forum .entry").one("click", function(){
        $(this).find(".excerpt, .content, .funcs").toggleClass("trimmed");
    });
    
    
    // Trove tags select box
    $("#trove_tags .option").click(function(){
        var $tags = $("#tags");
        var tags = $tags.val();
        $tags.val(tags + (tags.length ? ", " : "") + $(this).data("tag"));
    });










});





















































|
|

|
|


>
>
>
>
>
>
>
>
>
|
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102

    // Likewise for compacted news feeds in #sidebar
    $(".forum .entry").one("click", function(){
        $(this).find(".excerpt, .content, .funcs").toggleClass("trimmed");
    });
    
    
    // Trove tags add to input#tags field
    $("#trove_tags.add-tags .option").click(function(){
        var $tags = $("#tags");
        var prev = $tags.val();
        $tags.val(prev + (prev.length ? ", " : "") + $(this).data("tag"));
    });

    // Trove tags highlight in page_tags cloud
    $("#trove_tags.pick-tags .option").click(function(){

        // highlight in trove box
        $(this).toggleClass("selected");
        var tag = $(this).data("tag");

        // and in tag cloud
        $("#tag_cloud a:contains('"+tag+"')").toggleClass("selected");
    });
    
    // Append trove[]= selection to any clicked links in tag cloud
    $("#tag_cloud a").click(function(){

        // array from selected tags
        var tags = $("#trove_tags b.selected, #trove_tags .option.selected").map(function(){
            return $(this).data("tag");
        }).get();
        
        // append to current link
        if (tags.length) {
            this.href += "&trove[]=" + tags.join("&trove[]=");
        }
    });
    
    
    // submit_form: lock entry
    $(".action.lock-entry").click(function(){
        var $lock = $("input[name='lock']");
        if (!$lock.val().length) {
            $lock.val($lock.val("placeholder"));
        }
    });

    // submit_form: apply $version placeholder in URLs
    $(".action.version-placeholder").click(function(){
        var $input = $(this).parent().parent().find("input, textarea").eq(0);
        var version = $("input[name='version']").val();
        if (version.length) {
            $input.val($input.val().replace(version, "$version"));
        }
    });

    // submit_form: apply $version placeholder in URLs
    $(".action.submit-import").click(function(){
        $("#sidebar section").eq(0).hide();
        $("#sidebar .submit-import").fadeToggle("trimmed");
    });

});






Changes to index.php.

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
/**
 * api: php
 * title: Freshcode.club
 * description: FLOSS software release tracking website
 * version: 0.5.0
 * author: mario
 * license: AGPL
 * 
 * Implements a freshmeat/freecode-like directory for open source
 * release publishing / tracking.
 *
 */





|







1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
/**
 * api: php
 * title: Freshcode.club
 * description: FLOSS software release tracking website
 * version: 0.5.2
 * author: mario
 * license: AGPL
 * 
 * Implements a freshmeat/freecode-like directory for open source
 * release publishing / tracking.
 *
 */

lib/htmlpurifier.phar became a regular file.

cannot compute difference between binary files

Changes to page_projects.php.

47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
    include("template/projects_sidebar.php");
    include("template/projects_description.php");


    #-- Display all other released versions
    ?> <article class=release-list>  <h4>Recent Releases</h4> <?php
    do {
        prepare_output($entry);
        include("template/projects_release_entry.php");
    }
    while ($entry = $releases->fetch());
    ?> </article> <?php

    // html tail
    include("template/bottom.php");
}









<


|







47
48
49
50
51
52
53

54
55
56
57
58
59
60
61
62
63
    include("template/projects_sidebar.php");
    include("template/projects_description.php");


    #-- Display all other released versions
    ?> <article class=release-list>  <h4>Recent Releases</h4> <?php
    do {

        include("template/projects_release_entry.php");
    }
    while ($entry = $releases->fetch() and prepare_output($entry) + 1);
    ?> </article> <?php

    // html tail
    include("template/bottom.php");
}


Changes to page_tags.php.

12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47

48
49

50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
 * Currently just outputs a plain search result list. Later versions
 * should delegate this to a proper /search feature.
 *
 */


include("template/header.php");
?> <section id=main> <?php




#-- search by tags
if ($_GET->words["name"]) {

    print "<h2>Projects with tags: {$_GET->words->html['name']}</h2><p><dl>";

    $result = db("
        SELECT release.name, SUBSTR(description,1,222) AS description, version, MAX(t_changed),
               image, homepage, download, title, t_published
        FROM release
        LEFT JOIN tags ON release.name = tags.name
        WHERE tags.tag IN (??)
        GROUP BY release.name LIMIT 50",
        $_GET->words->p_csv["name"]
    );
    foreach ($result as $entry) {
        prepare_output($entry);
        include("template/search_entry.php");
    }
}


#-- print tag cloude
else {


    print "<h2>Tags</h2>
    <p>";


    // Query `tags` table to generate a cloud
    $tags = db("SELECT COUNT(name) AS cnt, tag FROM tags GROUP BY tag")->fetchAll();
    $count = array_column($tags, "cnt");
    if ($count) {
        $avg = count($count) / array_sum($count);

        // Print tag cloud
        foreach ($tags as $t) {

            // average
            $n = 
            $q = 1.0*$t["cnt"] / 1.0*$avg;
            
            /**
             * Qantify
             * - Values 0.1 - 20.0 are transitioned into the range 0.3 - 2.0
             */
            $q = atan($q * 0.75 + 0.1) * 1.55;
            
            // font size
            $q = sprintf("%.1f", $q * 100);

            // output
            print " <a href=\"/search?tag=" . urlencode($t["tag"])
                . "\" class=tag style=\"font-size: $q%;\"> $t[tag]</a> ";
        }

    }
    print "</p>";
}


include("template/bottom.php");


?>







<


|
|
|
<
|
|
|
|
<
<
|
<
<
<
<
<
<
<
<
|
|

<
|
<
|
>
|
|
>

|
|
|
|
|

|
|

|
|
|
|
|
|
|
|
|
|
|
|

|
|
|
|

|
|
<






12
13
14
15
16
17
18

19
20
21
22
23

24
25
26
27


28








29
30
31

32

33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67

68
69
70
71
72
73
 * Currently just outputs a plain search result list. Later versions
 * should delegate this to a proper /search feature.
 *
 */


include("template/header.php");



#-- sidebar with Trove list
?><aside id=sidebar>
<div id=trove_tags class=pick-tags>

<?php
print tags::trove_select(tags::$tree);
?>
</div>


</aside><?php












#-- print tag cloud

?>
<section id=main>
<h2>Tags</h2>
<p id=tag_cloud>
<?php

// Query `tags` table to generate a cloud
$tags = db("SELECT COUNT(name) AS cnt, tag FROM tags GROUP BY tag")->fetchAll();
$count = array_column($tags, "cnt");
if ($count) {
    $avg = count($count) / array_sum($count);

    // Print tag cloud
    foreach ($tags as $t) {

        // average
        $n = 
        $q = 1.0*$t["cnt"] / 1.0*$avg;
        
        /**
         * Qantify
         * - Values 0.1 - 20.0 are transitioned into the range 0.3 - 2.0
         */
        $q = atan($q * 0.75 + 0.1) * 1.55;
        
        // font size
        $q = sprintf("%.1f", $q * 100);

        // output
        print " <a href=\"/search?tag=" . urlencode($t["tag"])
            . "\" class=tag style=\"font-size: $q%;\"> $t[tag]</a> ";
    }

}
?></p><?php



include("template/bottom.php");


?>

Changes to tags.php.

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
/**
 * API: freshcode
 * title: Tags and Trove
 * description: Provides categorization backend for tree-mapped tags and Trove grouping.
 * version: 0.1
 * type: library
 * category: taxonomy
 * doc: http://fossil.include-once.org/freshcode/wiki/Trove+map
 * license: mixed
 *
 * This module provides major tags in a tree, which serves as base for trove categories.
 * 





|







1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
/**
 * API: freshcode
 * title: Tags and Trove
 * description: Provides categorization backend for tree-mapped tags and Trove grouping.
 * version: 0.2
 * type: library
 * category: taxonomy
 * doc: http://fossil.include-once.org/freshcode/wiki/Trove+map
 * license: mixed
 *
 * This module provides major tags in a tree, which serves as base for trove categories.
 * 
53
54
55
56
57
58
59

60
61
62
63
64
65
66
        "GNU LGPLv3" => "GNU Library/Lesser General Public License 3.0",
        "Affero GPL" => "Affero GNU Public License 2.0",
        "Affero GPLv3" => "GNU Affero General Public License v3",
        "AFL" => "Academic Free License 3.0",
        "APL" => "Adaptive Public License",
        "APSL" => "Apple Public Source License",
        "AAL" => "Attribution Assurance Licenses",

        "BSL" => "Boost Software License",
        "CECILL" => "CeCILL License 2.1",
        "CATOSL" => "Computer Associates Trusted Open Source License 1.1",
        "CDDL" => "Common Development and Distribution License 1.0",
        "CPAL" => "Common Public Attribution License 1.0",
        "CUA" => "CUA Office Public License Version 1.0",
        "EUDatagrid" => "EU DataGrid Software License",







>







53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
        "GNU LGPLv3" => "GNU Library/Lesser General Public License 3.0",
        "Affero GPL" => "Affero GNU Public License 2.0",
        "Affero GPLv3" => "GNU Affero General Public License v3",
        "AFL" => "Academic Free License 3.0",
        "APL" => "Adaptive Public License",
        "APSL" => "Apple Public Source License",
        "AAL" => "Attribution Assurance Licenses",
        "BSDL-4" => "BSD 4-Clause 'Old' License",
        "BSL" => "Boost Software License",
        "CECILL" => "CeCILL License 2.1",
        "CATOSL" => "Computer Associates Trusted Open Source License 1.1",
        "CDDL" => "Common Development and Distribution License 1.0",
        "CPAL" => "Common Public Attribution License 1.0",
        "CUA" => "CUA Office Public License Version 1.0",
        "EUDatagrid" => "EU DataGrid Software License",
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
        "HPND" => "Historical Permission Notice and Disclaimer",
        "IPL" => "IBM Public License 1.0",
        "IPA" => "IPA Font License",
        "ISC" => "ISC License",
        "LPPL" => "LaTeX Project Public License 1.3c",
        "LPL" => "Lucent Public License Version 1.02",
        "MirOS" => "MirOS Licence",
        "MS" => "Microsoft Reciprocal License",
        "MIT" => "MIT license",
        "Motosoto" => "Motosoto License",
        "Multics" => "Multics License",
        "NASA" => "NASA Open Source Agreement 1.3",
        "NTP" => "NTP License",
        "Naumen" => "Naumen Public License",
        "NGPL" => "Nethack General Public License",
        "Nokia" => "Nokia Open Source License",







|
<







75
76
77
78
79
80
81
82

83
84
85
86
87
88
89
        "HPND" => "Historical Permission Notice and Disclaimer",
        "IPL" => "IBM Public License 1.0",
        "IPA" => "IPA Font License",
        "ISC" => "ISC License",
        "LPPL" => "LaTeX Project Public License 1.3c",
        "LPL" => "Lucent Public License Version 1.02",
        "MirOS" => "MirOS Licence",
        "MS-RL" => "Microsoft Reciprocal License",

        "Motosoto" => "Motosoto License",
        "Multics" => "Multics License",
        "NASA" => "NASA Open Source Agreement 1.3",
        "NTP" => "NTP License",
        "Naumen" => "Naumen Public License",
        "NGPL" => "Nethack General Public License",
        "Nokia" => "Nokia Open Source License",
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144

145

146
147
148
149
150
151
152
153
154
155
156
157
158
159


    /**
     * Tag tree.
     *
     */
    static public $tree =
    [
        "Topic" => [
            "Adaptive Technologies",
            "Artistic Software",
            "Communication",
            "Communication" => [
                "BBS",
                "Chat",
                "Chat" => [
                    "AOL Instant Messenger",
                    "ICQ",
                    "Internet Relay Chat",

                    "Unix Talk"

                ],
                "Conferencing",
                "Email",
                "Email" => [
                    "Address Book",
                    "Email Client",
                    "Filters",
                    "Mailing List Server",
                    "Mail Transport Agent",
                    "IMAP",
                    "POP3"
                ],
                "Fax",
                "FIDO",







|








<


>
|
>






|







126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141

142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160


    /**
     * Tag tree.
     *
     */
    static public $tree =
        [
        "Topic" => [
            "Adaptive Technologies",
            "Artistic Software",
            "Communication",
            "Communication" => [
                "BBS",
                "Chat",
                "Chat" => [

                    "ICQ",
                    "Internet Relay Chat",
                    "Skype",
                    "Unix Talk",
                    "XMPP"
                ],
                "Conferencing",
                "Email",
                "Email" => [
                    "Address Book",
                    "Email Client",
                    "Email Filter",
                    "Mailing List Server",
                    "Mail Transport Agent",
                    "IMAP",
                    "POP3"
                ],
                "Fax",
                "FIDO",
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
                "GNUstep",
                "KDE",
                "PicoGUI",
                "Screen Savers",
                "Window Manager",
                "Window Manager" => [
                    "Afterstep",
                    "Applets",
                    "Blackbox",
                    "CTWM",
                    "Enlightenment",
                    "Fluxbox",
                    "FVWM",
                    "IceWM",
                    "MetaCity",







|







176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
                "GNUstep",
                "KDE",
                "PicoGUI",
                "Screen Savers",
                "Window Manager",
                "Window Manager" => [
                    "Afterstep",
                    "Applet",
                    "Blackbox",
                    "CTWM",
                    "Enlightenment",
                    "Fluxbox",
                    "FVWM",
                    "IceWM",
                    "MetaCity",
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
                "Finger",
                "Log Analysis",
                "DNS",
                "Proxy Server",
                "WAP",
                "WWW",
                "WWW" => [
                    "Browsers",
                    "Dynamic Content",
                    "Dynamic Content" => [
                        "CGI Tools/Libraries",
                        "Message Boards",
                        "News/Diary",
                        "Page Counters"
                    ],
                    "HTTP Servers",
                    "Indexing/Search",
                    "Session",
                    "Site Management",
                    "Site Management" => [
                        "Link Checking"
                    ],
                    "WSGI"
                ]
            ],
            "Multimedia",
            "Multimedia" => [
                "Graphics",
                "Graphics" => [
                    "3D Modeling",
                    "3D Rendering",
                    "Capture",
                    "Capture" => [
                        "Digital Camera",
                        "Scanners",
                        "Screen Capture"
                    ],
                    "Editor",
                    "Editor" => [
                        "Raster-Based",
                        "Vector-Based"
                    ],







|


|
|

|

|


















|







223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
                "Finger",
                "Log Analysis",
                "DNS",
                "Proxy Server",
                "WAP",
                "WWW",
                "WWW" => [
                    "Browser",
                    "Dynamic Content",
                    "Dynamic Content" => [
                        "CGI Library",
                        "Message Board",
                        "News/Diary",
                        "Page Counter"
                    ],
                    "HTTP Server",
                    "Indexing/Search",
                    "Session",
                    "Site Management",
                    "Site Management" => [
                        "Link Checking"
                    ],
                    "WSGI"
                ]
            ],
            "Multimedia",
            "Multimedia" => [
                "Graphics",
                "Graphics" => [
                    "3D Modeling",
                    "3D Rendering",
                    "Capture",
                    "Capture" => [
                        "Digital Camera",
                        "Scanner",
                        "Screen Capture"
                    ],
                    "Editor",
                    "Editor" => [
                        "Raster-Based",
                        "Vector-Based"
                    ],
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
            "Sociology",
            "Sociology" => [
                "Genealogy",
                "History"
            ],
            "Software Development",
            "Software Development" => [
                "Assemblers",
                "Bug Tracking",
                "Build Tool",
                "Code Generator",
                "Compiler",
                "Debugger",
                "Disassembler",
                "Documentation",







|







337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
            "Sociology",
            "Sociology" => [
                "Genealogy",
                "History"
            ],
            "Software Development",
            "Software Development" => [
                "Assembler",
                "Bug Tracking",
                "Build Tool",
                "Code Generator",
                "Compiler",
                "Debugger",
                "Disassembler",
                "Documentation",
362
363
364
365
366
367
368
369


370
371
372
373
374
375
376
                    "Python Module",
                    "Ruby Modules",
                    "Tcl Extension"
                ],
                "Localization",
                "Object Brokering",
                "Object Brokering" => [
                    "CORBA"


                ],
                "Pre-processor",
                "Quality Assurance",
                "Testing",
                "Testing" => [
                    "Traffic Generation"
                ],







|
>
>







363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
                    "Python Module",
                    "Ruby Modules",
                    "Tcl Extension"
                ],
                "Localization",
                "Object Brokering",
                "Object Brokering" => [
                    "CORBA",
                    "D-Bus",
                    "SOAP"
                ],
                "Pre-processor",
                "Quality Assurance",
                "Testing",
                "Testing" => [
                    "Traffic Generation"
                ],
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
                "Boot" => [
                    "Init"
                ],
                "Clustering",
                "Console Font",
                "Distributed Computing",
                "Emulator",
                "Filesystems",
                "Hardware",
                "Hardware" => [
                    "Hardware Driver",
                    "Mainframes",
                    "Symmetric Multi-processing"
                ],
                "Installation",







|







395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
                "Boot" => [
                    "Init"
                ],
                "Clustering",
                "Console Font",
                "Distributed Computing",
                "Emulator",
                "Filesystem",
                "Hardware",
                "Hardware" => [
                    "Hardware Driver",
                    "Mainframes",
                    "Symmetric Multi-processing"
                ],
                "Installation",
469
470
471
472
473
474
475

476
477
478
479

480
481

482
483
484
485
486
487
488
489
490
491
492
493

494
495

496
497

498
499

500
501
502

503
504
505




506
507
508
509
510
511
512
513
514
515
516
517
518
519

520
521
522
523
524
525
526
527
528
529

530
531
532
533
534
535
536
        ],
        "Programming Language" => [
            "Ada",
            "APL",
            "ASP",
            "Assembly",
            "Awk",

            "Basic",
            "C",
            "C#",
            "C++",

            "Cold Fusion",
            "Cython",

            "Delphi",
            "Dylan",
            "Eiffel",
            "Emacs-Lisp",
            "Erlang",
            "Euler",
            "Euphoria",
            "Forth",
            "Fortran",
            "Go",
            "Groovy",
            "Haskell",

            "Java",
            "JavaScript",

            "Lisp",
            "Logo",

            "ML",
            "Modula",

            "Objective C",
            "Object Pascal",
            "OCaml",

            "Pascal",
            "Perl",
            "PHP",




            "Pike",
            "Pliant",
            "PL/SQL",
            "PROGRESS",
            "Prolog",
            "Python",
            "Python" => [
                "CPython",
                "IronPython",
                "Jython",
                "PyPy",
                "Stackless"
            ],
            "REBOL",

            "Regex",
            "Rexx",
            "Ruby",
            "Scala",
            "Scheme",
            "Simula",
            "Smalltalk",
            "SQL",
            "Tcl",
            "Unix Shell",

            "YACC",
            "Zope"
        ],
        "Environment" => [
            "Console",
            "Console" => [
                "Curses",







>




>


>






<





>


>


>


>



>



>
>
>
>

<












>










>







472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493

494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520

521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
        ],
        "Programming Language" => [
            "Ada",
            "APL",
            "ASP",
            "Assembly",
            "Awk",
            "Bash",
            "Basic",
            "C",
            "C#",
            "C++",
            "Clojure",
            "Cold Fusion",
            "Cython",
            "D",
            "Delphi",
            "Dylan",
            "Eiffel",
            "Emacs-Lisp",
            "Erlang",
            "Euler",

            "Forth",
            "Fortran",
            "Go",
            "Groovy",
            "Haskell",
            "Haxe",
            "Java",
            "JavaScript",
            "Lua",
            "Lisp",
            "Logo",
            "Matlab",
            "ML",
            "Modula",
            "Oberon",
            "Objective C",
            "Object Pascal",
            "OCaml",
            "Parrot",
            "Pascal",
            "Perl",
            "PHP",
            "PHP" => [
                "HHVM",
                "Quercus"
            ],
            "Pike",

            "PL/SQL",
            "PROGRESS",
            "Prolog",
            "Python",
            "Python" => [
                "CPython",
                "IronPython",
                "Jython",
                "PyPy",
                "Stackless"
            ],
            "REBOL",
            "R",
            "Regex",
            "Rexx",
            "Ruby",
            "Scala",
            "Scheme",
            "Simula",
            "Smalltalk",
            "SQL",
            "Tcl",
            "Unix Shell",
            "Vala",
            "YACC",
            "Zope"
        ],
        "Environment" => [
            "Console",
            "Console" => [
                "Curses",
569
570
571
572
573
574
575

576
577
578
579
580
581
582
            "C++" => [
                "Boost"
            ],
            "Groovy" => [
                "Grails"
            ],
            "Java" => [

                "Spring",
                "Sinatra",
                "Struts",
                "OpenXava"
            ],
            "JavaScript" => [
                "AngularJS",







>







584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
            "C++" => [
                "Boost"
            ],
            "Groovy" => [
                "Grails"
            ],
            "Java" => [
                "Hibernate",
                "Spring",
                "Sinatra",
                "Struts",
                "OpenXava"
            ],
            "JavaScript" => [
                "AngularJS",
627
628
629
630
631
632
633

634
635
636
637
638
639
640
641
642


643
644
645

646
647
648
649
650
651

652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
            ],
            "Ruby" => [
                "Rails"
            ]
        ],
        "Operating System" => [
            "BeOS",

            "MacOS",
            "MS-DOS",
            "Windows",
            "OS2",
            "Cross-plattform",
            "PalmOS",
            "PDA Systems",
            "POSIX",
            "AIX",


            "FreeBSD",
            "NetBSD",
            "OpenBSD",

            "Hurd",
            "HP-UX",
            "IRIX",
            "Linux",
            "SCO",
            "Solaris",

            "Unix"
        ],
        "Audience" => [
            "Customer Service",
            "Developers",
            "Education",
            "End Users",
            "Financial and Insurance Industry",
            "Healthcare Industry",
            "Information Technology",
            "Legal Industry",
            "Manufacturing",
            "Religion",
            "Science/Research",
            "System Administrators",
            "Telecommunications Industry"
        ],
        "Natural" => [
            "Afrikaans",
            "Arabic",
            "Bengali",
            "Bosnian",
            "Bulgarian",
            "Catalan",
            "Chinese",
            "Traditional-Chinese",
            "Croatian",
            "Czech",
            "Danish",
            "Dutch",
            "English",
            "Esperanto",
            "Finnish",
            "French",
            "Galician",
            "German",
            "Greek",
            "Hebrew",
            "Hindi",
            "Hungarian",
            "Icelandic",
            "Indonesian",
            "Italian",
            "Japanese",
            "Javanese",
            "Korean",
            "Latin",
            "Latvian",
            "Macedonian",
            "Malay",
            "Marathi",
            "Norwegian",
            "Panjabi",
            "Persian",
            "Polish",
            "Portuguese",
            "Brazilian-Portuguese",
            "Romanian",
            "Russian",
            "Serbian",
            "Slovak",
            "Slovenian",
            "Spanish",
            "Swedish",
            "Tamil",
            "Telugu",
            "Thai",
            "Turkish",
            "Ukranian",
            "Urdu",
            "Vietnamese"
        ]
    ];


    /**
     * Try to map SPDX.org names onto our license tags,
     * or find entry in long description;
     *







>









>
>
|
|
|
>






>

















<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<







643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689























































690
691
692
693
694
695
696
            ],
            "Ruby" => [
                "Rails"
            ]
        ],
        "Operating System" => [
            "BeOS",
            "Darwin",
            "MacOS",
            "MS-DOS",
            "Windows",
            "OS2",
            "Cross-plattform",
            "PalmOS",
            "PDA Systems",
            "POSIX",
            "AIX",
            "BSD",
            "BSD" => [
                "FreeBSD",
                "NetBSD",
                "OpenBSD"
            ],
            "Hurd",
            "HP-UX",
            "IRIX",
            "Linux",
            "SCO",
            "Solaris",
            "QNX",
            "Unix"
        ],
        "Audience" => [
            "Customer Service",
            "Developers",
            "Education",
            "End Users",
            "Financial and Insurance Industry",
            "Healthcare Industry",
            "Information Technology",
            "Legal Industry",
            "Manufacturing",
            "Religion",
            "Science/Research",
            "System Administrators",
            "Telecommunications Industry"
        ],























































    ];


    /**
     * Try to map SPDX.org names onto our license tags,
     * or find entry in long description;
     *
813
814
815
816
817
818
819








820
821
822
823
824
825
826
            }
        }
        
        return $html;
    }











}




?>







>
>
>
>
>
>
>
>







779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
            }
        }
        
        return $html;
    }



    /**
     * Returns just leaves from trove $tree.
     *
     */
    function leaves() {
        return iterator_to_array(new RecursiveIteratorIterator(new RecursiveArrayIterator(self::$tree)));
    }

}




?>

Changes to template/header.php.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
<?php
/**
 * api: freshcode
 * type: template
 * title: HTML page header
 * description: Starts <html> and <head>, outputs top bar / menus etc.
 * version: 0.5
 *
 * Optionally injects a `$header_add` list, or allows to override the
 * page $title.
 *
 */
?>
<!DOCTYPE html>
<html>
<head> 
    <title><?= isset($title) ? $title : "freshcode.club" ?></title>
    <meta name=version content=0.5.1>
    <meta charset=UTF-8>
    <link rel=stylesheet href="/freshcode.css?0.6.0">
    <link rel="shortcut icon" href="/img/changes.png">
    <base href="//<?= HTTP_HOST ?>/">
    <script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

    <script src="/gimmicks.js"></script>
    <?php if (isset($header_add)) { print $header_add . "\n"; } ?>
</head>
<body>

<nav id=topbar>
Open source community software release tracking.






|










|

|



>







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
/**
 * api: freshcode
 * type: template
 * title: HTML page header
 * description: Starts <html> and <head>, outputs top bar / menus etc.
 * version: 0.5.2
 *
 * Optionally injects a `$header_add` list, or allows to override the
 * page $title.
 *
 */
?>
<!DOCTYPE html>
<html>
<head> 
    <title><?= isset($title) ? $title : "freshcode.club" ?></title>
    <meta name=version content=0.5.2>
    <meta charset=UTF-8>
    <link rel=stylesheet href="/freshcode.css?0.6.1">
    <link rel="shortcut icon" href="/img/changes.png">
    <base href="//<?= HTTP_HOST ?>/">
    <script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <!--[if lt IE 9]><script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.2/html5shiv.min.js"></script><![endif]-->
    <script src="/gimmicks.js"></script>
    <?php if (isset($header_add)) { print $header_add . "\n"; } ?>
</head>
<body>

<nav id=topbar>
Open source community software release tracking.

Changes to template/submit_form.php.

74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100

           <label>
               Tags<br>
                  <input id=tags name=tags size=50 placeholder="game, desktop, gtk, python" value="$data[tags]"
                         maxlength=150 pattern="^\s*((c\+\+|\w+([-.]\w+)*(\[,;\s]+)?){0,10}\s*$"
                         style="display:inline-block">
                  <span style="inline-block; height: 0px; overflow: visible; position: absolute;">
                      <img src=img/addtrove.png with=100 height=150 style="position:relative;top:-140px;">
                      <span id=trove_tags>{$_(tags::trove_select(tags::$tree))}</span>
                  </span>
               <small style="width:60%">Categorize your project. Tags can be made up of letters, numbers and dashes. 
               This can include usage context, application type, programming languages, related projects,
               etc.</small>
           </label>

           <label>
               Image
               <input type=url name=image size=50 placeholder="http://i.imgur.com/xyzbar.png" value="$data[image]" maxlength=250>
               <small>Provide a preview image of up to 120x90 px.
               It will be fetched and displayed later. (Else a homepage screenshot will appear.)</small>
           </label>
        </p>


        <h3>Release Submission</h3>
        <p>
           <label>







|
|









|
|







74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100

           <label>
               Tags<br>
                  <input id=tags name=tags size=50 placeholder="game, desktop, gtk, python" value="$data[tags]"
                         maxlength=150 pattern="^\s*((c\+\+|\w+([-.]\w+)*(\[,;\s]+)?){0,10}\s*$"
                         style="display:inline-block">
                  <span style="inline-block; height: 0px; overflow: visible; position: absolute;">
                      <img src=img/addtrove.png with=100 height=150 style="position:relative;top:-150px;">
                      <span id=trove_tags class=add-tags>{$_(tags::trove_select(tags::$tree))}</span>
                  </span>
               <small style="width:60%">Categorize your project. Tags can be made up of letters, numbers and dashes. 
               This can include usage context, application type, programming languages, related projects,
               etc.</small>
           </label>

           <label>
               Image
               <input type=url name=image size=50 placeholder="http://i.imgur.com/xyzbar.png" value="$data[image]" maxlength=250>
               <small>Previews will be 120x90 px large. Alternatively a homepage screenshot
               will appear later.</small>
           </label>
        </p>


        <h3>Release Submission</h3>
        <p>
           <label>
126
127
128
129
130
131
132
133

134
135
136
137
138
139
140
141

142
143
144
145
146
147
148
149
               <small>Summarize the changes in this release. Documentation additions are as
               crucial as new features or fixed issues.</small>
           </label>

           <label>
               Download URL
               <input name=download size=50 type=url placeholder="http://project.example.org/" value="$data[download]" maxlength=250>
               <small>In particular for the download link one could utilize the <b><kbd>\$version</kbd></b> placeholder.</small>

           </label>

           <label>
               Other URLs
               <textarea cols=60 rows=5 name=urls maxlength=2000>$data[urls]</textarea>
               <small>A list of comma or newline-separated project URLs
               like <code>src = http://foo, deb = http://bar</code>.
               Common link types include src / rpm / deb / txz / dvcs / release-notes / forum, etc.

               Either may contain a <b>\$version</b> placeholder again.</small>
           </label>
        </p>


        <h3>Automatic Release Tracking</h3>
        <p>
           <em>You can skip this section.</em>







|
>








>
|







126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
               <small>Summarize the changes in this release. Documentation additions are as
               crucial as new features or fixed issues.</small>
           </label>

           <label>
               Download URL
               <input name=download size=50 type=url placeholder="http://project.example.org/" value="$data[download]" maxlength=250>
               <small>In particular for the download link one could apply the
               <a class="action version-placeholder"><b><kbd>\$version</kbd></b> placeholder</a>.</small>
           </label>

           <label>
               Other URLs
               <textarea cols=60 rows=5 name=urls maxlength=2000>$data[urls]</textarea>
               <small>A list of comma or newline-separated project URLs
               like <code>src = http://foo, deb = http://bar</code>.
               Common link types include src / rpm / deb / txz / dvcs / release-notes / forum, etc.
               Either may contain a <a class="action version-placeholder">\$version placeholder</a>
               again.</small>
           </label>
        </p>


        <h3>Automatic Release Tracking</h3>
        <p>
           <em>You can skip this section.</em>
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196

197
198
199
200
201
202
203
        <h3>Publish</h3>
        <p>
           Please proofread again before saving.

           <label>
               Submitter
               <input name=submitter size=50 placeholder="Your Name,  optional@example.com" value="$data[submitter]" maxlength=100>
               <small>Give us your name or nick name here. Optionally list a <a href="//gravatar.com/">gravatar</a> email.</small>
           </label>

           <label>
               Lock Entry
               <input name=lock size=50 placeholder="$_SESSION[openid]" value="$data[lock]" maxlength=250>
               <small>Normally all projects can be edited by everyone (WikiStyle).
               If you commit to yours, you can however lock this submission against an OpenID
               handle. (Or even provide a comma-separated list here for multiple contributors.)</small>

           </label>
        </p>
        <p>
           <b>Terms and Conditions</b>
           <label class=inline><input type=checkbox name="req[os]" value=1 required> It's open source / libre / Free software or pertains BSD/Linux.</label>
           <label class=inline><input type=checkbox name="req[cc]" value=1 required> Your entry is shareable under the <a href="http://creativecommons.org/licenses/by-sa/4.0/">CC-BY-SA</a> license.</label>
        </p>







|






|
|
>







183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
        <h3>Publish</h3>
        <p>
           Please proofread again before saving.

           <label>
               Submitter
               <input name=submitter size=50 placeholder="Your Name,  optional@example.com" value="$data[submitter]" maxlength=100>
               <small>List your name or nick name here. Optionally add a gravatar email.</small>
           </label>

           <label>
               Lock Entry
               <input name=lock size=50 placeholder="$_SESSION[openid]" value="$data[lock]" maxlength=250>
               <small>Normally all projects can be edited by everyone (WikiStyle).
               If you commit to yours, you can however <a class="action lock-entry"><b>lock</b> this project</a>
               against one or multiple OpenID handles (comma-separated, take care to use exact URLs).
               Or add a password hash for using the submit API.
           </label>
        </p>
        <p>
           <b>Terms and Conditions</b>
           <label class=inline><input type=checkbox name="req[os]" value=1 required> It's open source / libre / Free software or pertains BSD/Linux.</label>
           <label class=inline><input type=checkbox name="req[cc]" value=1 required> Your entry is shareable under the <a href="http://creativecommons.org/licenses/by-sa/4.0/">CC-BY-SA</a> license.</label>
        </p>

Changes to template/submit_import.php.

8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 * until hovered over.
 *
 */

?>

    <style>
       .submit-import.trimmed { opacity: 0.2; margin-top: 30pt; }
       .submit-import.trimmed:hover, .submit-import.trimmed:focus { opacity: 1.0; }
    </style>

    <form action="/submit" method=POST enctype="multipart/form-data" class="submit-import trimmed">
    <!-- <a onclick="$('.submit-import').toggleClass('trimmed'); $(this).hide();">Import project..</a> -->
    <section>
        <a>
        <h5>Import</h5>
        <p>
           Alternatively you can import basic project information.
           <label>
              From
              <select name=import_via style="font-size: 125%"><option title="releases.json, common.js, package.json, bower.json, composer.json">JSON<option title="Description of a Project XML">DOAP<option title="Python Package Info">PKG-INFO<option title="Freecode.com project listing">freecode<option title="Sourceforge.net project homepage">sourceforge</select>
              <small>Which file format or service to use for importing.</small>
           </label>
           <label>
              with Name







|
<



<




|







8
9
10
11
12
13
14
15

16
17
18

19
20
21
22
23
24
25
26
27
28
29
30
 * until hovered over.
 *
 */

?>

    <style>
       .submit-import.trimmed { display: none; }

    </style>

    <form action="/submit" method=POST enctype="multipart/form-data" class="submit-import trimmed">

    <section>
        <a>
        <h5>Import</h5>
        <p>
           Automatically fill in basic project description
           <label>
              From
              <select name=import_via style="font-size: 125%"><option title="releases.json, common.js, package.json, bower.json, composer.json">JSON<option title="Description of a Project XML">DOAP<option title="Python Package Info">PKG-INFO<option title="Freecode.com project listing">freecode<option title="Sourceforge.net project homepage">sourceforge</select>
              <small>Which file format or service to use for importing.</small>
           </label>
           <label>
              with Name

Changes to template/submit_sidebar.php.

13
14
15
16
17
18
19
20
21
22
23
24
25
26

27

28
29
30



31
32
33
34
    <section>
        <h5>Submit project<br>and/or release</h5>
        <p>
           You can submit <em title="Free, Libre, and Open Source Software">FLOSS</em>
           or <em title="or Solaris/Darwin/Hurd">BSD/Linux</em> software here.
           It's not required that you're a developer of said project.
        </p>
        <p>
           You can always edit the common project information together with
           a current release.  It will show up on the frontpage whenever you
           update a new version number and a changelog summary.
        </p>
    </section>


    <?php if ($is_new) {

       include("template/submit_import.php");
    }
    ?>



    
</aside>
<section id=main>








|



|
<

>
|
>
|
|
|
>
>
>




13
14
15
16
17
18
19
20
21
22
23
24

25
26
27
28
29
30
31
32
33
34
35
36
37
38
    <section>
        <h5>Submit project<br>and/or release</h5>
        <p>
           You can submit <em title="Free, Libre, and Open Source Software">FLOSS</em>
           or <em title="or Solaris/Darwin/Hurd">BSD/Linux</em> software here.
           It's not required that you're a developer of said project.
        </p>
        <p><small>
           You can always edit the common project information together with
           a current release.  It will show up on the frontpage whenever you
           update a new version number and a changelog summary.
        </small></p>


        <?php
        if ($is_new) {
           print "<p>Or <a class='action submit-import'
           style='color:blue'>import</a> a project..</p>";
        }
        ?>
    </section>

    <?php include("template/submit_import.php"); ?>
    
</aside>
<section id=main>