diff --git a/swh/deposit/static/css/bootstrap-responsive.min.css b/swh/deposit/static/css/bootstrap-responsive.min.css new file mode 100644 index 00000000..96a435be --- /dev/null +++ b/swh/deposit/static/css/bootstrap-responsive.min.css @@ -0,0 +1,9 @@ +/*! + * Bootstrap Responsive v2.3.2 + * + * Copyright 2013 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world by @mdo and @fat. + */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}@-ms-viewport{width:device-width}.hidden{display:none;visibility:hidden}.visible-phone{display:none!important}.visible-tablet{display:none!important}.hidden-desktop{display:none!important}.visible-desktop{display:inherit!important}@media(min-width:768px) and (max-width:979px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-tablet{display:inherit!important}.hidden-tablet{display:none!important}}@media(max-width:767px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-phone{display:inherit!important}.hidden-phone{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:inherit!important}.hidden-print{display:none!important}}@media(min-width:1200px){.row{margin-left:-30px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:30px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:1170px}.span12{width:1170px}.span11{width:1070px}.span10{width:970px}.span9{width:870px}.span8{width:770px}.span7{width:670px}.span6{width:570px}.span5{width:470px}.span4{width:370px}.span3{width:270px}.span2{width:170px}.span1{width:70px}.offset12{margin-left:1230px}.offset11{margin-left:1130px}.offset10{margin-left:1030px}.offset9{margin-left:930px}.offset8{margin-left:830px}.offset7{margin-left:730px}.offset6{margin-left:630px}.offset5{margin-left:530px}.offset4{margin-left:430px}.offset3{margin-left:330px}.offset2{margin-left:230px}.offset1{margin-left:130px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.564102564102564%;*margin-left:2.5109110747408616%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.564102564102564%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.45299145299145%;*width:91.39979996362975%}.row-fluid .span10{width:82.90598290598291%;*width:82.8527914166212%}.row-fluid .span9{width:74.35897435897436%;*width:74.30578286961266%}.row-fluid .span8{width:65.81196581196582%;*width:65.75877432260411%}.row-fluid .span7{width:57.26495726495726%;*width:57.21176577559556%}.row-fluid .span6{width:48.717948717948715%;*width:48.664757228587014%}.row-fluid .span5{width:40.17094017094017%;*width:40.11774868157847%}.row-fluid .span4{width:31.623931623931625%;*width:31.570740134569924%}.row-fluid .span3{width:23.076923076923077%;*width:23.023731587561375%}.row-fluid .span2{width:14.52991452991453%;*width:14.476723040552828%}.row-fluid .span1{width:5.982905982905983%;*width:5.929714493544281%}.row-fluid .offset12{margin-left:105.12820512820512%;*margin-left:105.02182214948171%}.row-fluid .offset12:first-child{margin-left:102.56410256410257%;*margin-left:102.45771958537915%}.row-fluid .offset11{margin-left:96.58119658119658%;*margin-left:96.47481360247316%}.row-fluid .offset11:first-child{margin-left:94.01709401709402%;*margin-left:93.91071103837061%}.row-fluid .offset10{margin-left:88.03418803418803%;*margin-left:87.92780505546462%}.row-fluid .offset10:first-child{margin-left:85.47008547008548%;*margin-left:85.36370249136206%}.row-fluid .offset9{margin-left:79.48717948717949%;*margin-left:79.38079650845607%}.row-fluid .offset9:first-child{margin-left:76.92307692307693%;*margin-left:76.81669394435352%}.row-fluid .offset8{margin-left:70.94017094017094%;*margin-left:70.83378796144753%}.row-fluid .offset8:first-child{margin-left:68.37606837606839%;*margin-left:68.26968539734497%}.row-fluid .offset7{margin-left:62.393162393162385%;*margin-left:62.28677941443899%}.row-fluid .offset7:first-child{margin-left:59.82905982905982%;*margin-left:59.72267685033642%}.row-fluid .offset6{margin-left:53.84615384615384%;*margin-left:53.739770867430444%}.row-fluid .offset6:first-child{margin-left:51.28205128205128%;*margin-left:51.175668303327875%}.row-fluid .offset5{margin-left:45.299145299145295%;*margin-left:45.1927623204219%}.row-fluid .offset5:first-child{margin-left:42.73504273504273%;*margin-left:42.62865975631933%}.row-fluid .offset4{margin-left:36.75213675213675%;*margin-left:36.645753773413354%}.row-fluid .offset4:first-child{margin-left:34.18803418803419%;*margin-left:34.081651209310785%}.row-fluid .offset3{margin-left:28.205128205128204%;*margin-left:28.0987452264048%}.row-fluid .offset3:first-child{margin-left:25.641025641025642%;*margin-left:25.53464266230224%}.row-fluid .offset2{margin-left:19.65811965811966%;*margin-left:19.551736679396257%}.row-fluid .offset2:first-child{margin-left:17.094017094017094%;*margin-left:16.98763411529369%}.row-fluid .offset1{margin-left:11.11111111111111%;*margin-left:11.004728132387708%}.row-fluid .offset1:first-child{margin-left:8.547008547008547%;*margin-left:8.440625568285142%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:30px}input.span12,textarea.span12,.uneditable-input.span12{width:1156px}input.span11,textarea.span11,.uneditable-input.span11{width:1056px}input.span10,textarea.span10,.uneditable-input.span10{width:956px}input.span9,textarea.span9,.uneditable-input.span9{width:856px}input.span8,textarea.span8,.uneditable-input.span8{width:756px}input.span7,textarea.span7,.uneditable-input.span7{width:656px}input.span6,textarea.span6,.uneditable-input.span6{width:556px}input.span5,textarea.span5,.uneditable-input.span5{width:456px}input.span4,textarea.span4,.uneditable-input.span4{width:356px}input.span3,textarea.span3,.uneditable-input.span3{width:256px}input.span2,textarea.span2,.uneditable-input.span2{width:156px}input.span1,textarea.span1,.uneditable-input.span1{width:56px}.thumbnails{margin-left:-30px}.thumbnails>li{margin-left:30px}.row-fluid .thumbnails{margin-left:0}}@media(min-width:768px) and (max-width:979px){.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:724px}.span12{width:724px}.span11{width:662px}.span10{width:600px}.span9{width:538px}.span8{width:476px}.span7{width:414px}.span6{width:352px}.span5{width:290px}.span4{width:228px}.span3{width:166px}.span2{width:104px}.span1{width:42px}.offset12{margin-left:764px}.offset11{margin-left:702px}.offset10{margin-left:640px}.offset9{margin-left:578px}.offset8{margin-left:516px}.offset7{margin-left:454px}.offset6{margin-left:392px}.offset5{margin-left:330px}.offset4{margin-left:268px}.offset3{margin-left:206px}.offset2{margin-left:144px}.offset1{margin-left:82px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.7624309392265194%;*margin-left:2.709239449864817%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.7624309392265194%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.43646408839778%;*width:91.38327259903608%}.row-fluid .span10{width:82.87292817679558%;*width:82.81973668743387%}.row-fluid .span9{width:74.30939226519337%;*width:74.25620077583166%}.row-fluid .span8{width:65.74585635359117%;*width:65.69266486422946%}.row-fluid .span7{width:57.18232044198895%;*width:57.12912895262725%}.row-fluid .span6{width:48.61878453038674%;*width:48.56559304102504%}.row-fluid .span5{width:40.05524861878453%;*width:40.00205712942283%}.row-fluid .span4{width:31.491712707182323%;*width:31.43852121782062%}.row-fluid .span3{width:22.92817679558011%;*width:22.87498530621841%}.row-fluid .span2{width:14.3646408839779%;*width:14.311449394616199%}.row-fluid .span1{width:5.801104972375691%;*width:5.747913483013988%}.row-fluid .offset12{margin-left:105.52486187845304%;*margin-left:105.41847889972962%}.row-fluid .offset12:first-child{margin-left:102.76243093922652%;*margin-left:102.6560479605031%}.row-fluid .offset11{margin-left:96.96132596685082%;*margin-left:96.8549429881274%}.row-fluid .offset11:first-child{margin-left:94.1988950276243%;*margin-left:94.09251204890089%}.row-fluid .offset10{margin-left:88.39779005524862%;*margin-left:88.2914070765252%}.row-fluid .offset10:first-child{margin-left:85.6353591160221%;*margin-left:85.52897613729868%}.row-fluid .offset9{margin-left:79.8342541436464%;*margin-left:79.72787116492299%}.row-fluid .offset9:first-child{margin-left:77.07182320441989%;*margin-left:76.96544022569647%}.row-fluid .offset8{margin-left:71.2707182320442%;*margin-left:71.16433525332079%}.row-fluid .offset8:first-child{margin-left:68.50828729281768%;*margin-left:68.40190431409427%}.row-fluid .offset7{margin-left:62.70718232044199%;*margin-left:62.600799341718584%}.row-fluid .offset7:first-child{margin-left:59.94475138121547%;*margin-left:59.838368402492065%}.row-fluid .offset6{margin-left:54.14364640883978%;*margin-left:54.037263430116376%}.row-fluid .offset6:first-child{margin-left:51.38121546961326%;*margin-left:51.27483249088986%}.row-fluid .offset5{margin-left:45.58011049723757%;*margin-left:45.47372751851417%}.row-fluid .offset5:first-child{margin-left:42.81767955801105%;*margin-left:42.71129657928765%}.row-fluid .offset4{margin-left:37.01657458563536%;*margin-left:36.91019160691196%}.row-fluid .offset4:first-child{margin-left:34.25414364640884%;*margin-left:34.14776066768544%}.row-fluid .offset3{margin-left:28.45303867403315%;*margin-left:28.346655695309746%}.row-fluid .offset3:first-child{margin-left:25.69060773480663%;*margin-left:25.584224756083227%}.row-fluid .offset2{margin-left:19.88950276243094%;*margin-left:19.783119783707537%}.row-fluid .offset2:first-child{margin-left:17.12707182320442%;*margin-left:17.02068884448102%}.row-fluid .offset1{margin-left:11.32596685082873%;*margin-left:11.219583872105325%}.row-fluid .offset1:first-child{margin-left:8.56353591160221%;*margin-left:8.457152932878806%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:710px}input.span11,textarea.span11,.uneditable-input.span11{width:648px}input.span10,textarea.span10,.uneditable-input.span10{width:586px}input.span9,textarea.span9,.uneditable-input.span9{width:524px}input.span8,textarea.span8,.uneditable-input.span8{width:462px}input.span7,textarea.span7,.uneditable-input.span7{width:400px}input.span6,textarea.span6,.uneditable-input.span6{width:338px}input.span5,textarea.span5,.uneditable-input.span5{width:276px}input.span4,textarea.span4,.uneditable-input.span4{width:214px}input.span3,textarea.span3,.uneditable-input.span3{width:152px}input.span2,textarea.span2,.uneditable-input.span2{width:90px}input.span1,textarea.span1,.uneditable-input.span1{width:28px}}@media(max-width:767px){body{padding-right:20px;padding-left:20px}.navbar-fixed-top,.navbar-fixed-bottom,.navbar-static-top{margin-right:-20px;margin-left:-20px}.container-fluid{padding:0}.dl-horizontal dt{float:none;width:auto;clear:none;text-align:left}.dl-horizontal dd{margin-left:0}.container{width:auto}.row-fluid{width:100%}.row,.thumbnails{margin-left:0}.thumbnails>li{float:none;margin-left:0}[class*="span"],.uneditable-input[class*="span"],.row-fluid [class*="span"]{display:block;float:none;width:100%;margin-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.span12,.row-fluid .span12{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="offset"]:first-child{margin-left:0}.input-large,.input-xlarge,.input-xxlarge,input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.input-prepend input,.input-append input,.input-prepend input[class*="span"],.input-append input[class*="span"]{display:inline-block;width:auto}.controls-row [class*="span"]+[class*="span"]{margin-left:0}.modal{position:fixed;top:20px;right:20px;left:20px;width:auto;margin:0}.modal.fade{top:-100px}.modal.fade.in{top:20px}}@media(max-width:480px){.nav-collapse{-webkit-transform:translate3d(0,0,0)}.page-header h1 small{display:block;line-height:20px}input[type="checkbox"],input[type="radio"]{border:1px solid #ccc}.form-horizontal .control-label{float:none;width:auto;padding-top:0;text-align:left}.form-horizontal .controls{margin-left:0}.form-horizontal .control-list{padding-top:0}.form-horizontal .form-actions{padding-right:10px;padding-left:10px}.media .pull-left,.media .pull-right{display:block;float:none;margin-bottom:10px}.media-object{margin-right:0;margin-left:0}.modal{top:10px;right:10px;left:10px}.modal-header .close{padding:10px;margin:-10px}.carousel-caption{position:static}}@media(max-width:979px){body{padding-top:0}.navbar-fixed-top,.navbar-fixed-bottom{position:static}.navbar-fixed-top{margin-bottom:20px}.navbar-fixed-bottom{margin-top:20px}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding:5px}.navbar .container{width:auto;padding:0}.navbar .brand{padding-right:10px;padding-left:10px;margin:0 0 0 -5px}.nav-collapse{clear:both}.nav-collapse .nav{float:none;margin:0 0 10px}.nav-collapse .nav>li{float:none}.nav-collapse .nav>li>a{margin-bottom:2px}.nav-collapse .nav>.divider-vertical{display:none}.nav-collapse .nav .nav-header{color:#777;text-shadow:none}.nav-collapse .nav>li>a,.nav-collapse .dropdown-menu a{padding:9px 15px;font-weight:bold;color:#777;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.nav-collapse .btn{padding:4px 10px 4px;font-weight:normal;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.nav-collapse .dropdown-menu li+li a{margin-bottom:2px}.nav-collapse .nav>li>a:hover,.nav-collapse .nav>li>a:focus,.nav-collapse .dropdown-menu a:hover,.nav-collapse .dropdown-menu a:focus{background-color:#f2f2f2}.navbar-inverse .nav-collapse .nav>li>a,.navbar-inverse .nav-collapse .dropdown-menu a{color:#999}.navbar-inverse .nav-collapse .nav>li>a:hover,.navbar-inverse .nav-collapse .nav>li>a:focus,.navbar-inverse .nav-collapse .dropdown-menu a:hover,.navbar-inverse .nav-collapse .dropdown-menu a:focus{background-color:#111}.nav-collapse.in .btn-group{padding:0;margin-top:5px}.nav-collapse .dropdown-menu{position:static;top:auto;left:auto;display:none;float:none;max-width:none;padding:0;margin:0 15px;background-color:transparent;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.nav-collapse .open>.dropdown-menu{display:block}.nav-collapse .dropdown-menu:before,.nav-collapse .dropdown-menu:after{display:none}.nav-collapse .dropdown-menu .divider{display:none}.nav-collapse .nav>li>.dropdown-menu:before,.nav-collapse .nav>li>.dropdown-menu:after{display:none}.nav-collapse .navbar-form,.nav-collapse .navbar-search{float:none;padding:10px 15px;margin:10px 0;border-top:1px solid #f2f2f2;border-bottom:1px solid #f2f2f2;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1)}.navbar-inverse .nav-collapse .navbar-form,.navbar-inverse .nav-collapse .navbar-search{border-top-color:#111;border-bottom-color:#111}.navbar .nav-collapse .nav.pull-right{float:none;margin-left:0}.nav-collapse,.nav-collapse.collapse{height:0;overflow:hidden}.navbar .btn-navbar{display:block}.navbar-static .navbar-inner{padding-right:10px;padding-left:10px}}@media(min-width:980px){.nav-collapse.collapse{height:auto!important;overflow:visible!important}} diff --git a/swh/deposit/static/css/style.css b/swh/deposit/static/css/style.css new file mode 100644 index 00000000..c74ea14b --- /dev/null +++ b/swh/deposit/static/css/style.css @@ -0,0 +1,501 @@ +/* +version: 0.1 +date: 21/09/15 +author: swh +email: swh +website: softwareheritage.org +version history: /style.css +*/ + +@import url(https://fonts.googleapis.com/css?family=Alegreya:400,400italic,700,700italic); +@import url(https://fonts.googleapis.com/css?family=Alegreya+Sans:400,400italic,500,500italic,700,700italic,100,300,100italic,300italic); + +html { + height: 100%; +} + +body { + font-family: 'Alegreya Sans', sans-serif; + font-size: 1.7rem; + line-height: 1.5; + color: rgba(0, 0, 0, 0.55); + padding-bottom: 120px; + min-height: 100%; + margin: 0; + position: relative; +} + +.heading { + font-family: 'Alegreya', serif; +} + +.shell, .text { + font-size: 0.7em; +} + +.logo img { + max-height: 40px; +} +.logo .navbar-brand { + padding: 5px; +} +.logo .sitename { + padding: 15px 5px; +} + +.jumbotron { + padding: 0; + background-color: rgba(0, 0, 0, 0); + position: fixed; + top: 0; + width: 100%; + z-index: 10; +} + +#swh-navbar-collapse { + border-top-style: none; + border-left-style: none; + border-right-style: none; + border-bottom: 5px solid; + border-image: linear-gradient(to right, rgb(226, 0, 38) 0%, rgb(254, 205, 27) 100%) 1 1 1 1; + width: 100%; + padding: 5px; +} + +.nav-horizontal { + float: right; +} + +h3[id], h4[id], a[id] { /* avoid in-page links covered by navbar */ + padding-top: 80px; + margin-top: -70px; +} + +h1, h2, h3, h4 { + margin: 0; + color: #e20026; + padding-bottom: 10px; +} +h1 { font-size: 1.8em; } +h2 { font-size: 1.2em; } +h3 { font-size: 1.1em; } + +a { + color: rgba(0, 0, 0, 0.75); + border-bottom-style: dotted; + border-bottom-width: 1px; + border-bottom-color: rgb(91, 94, 111); +} + +a:hover { + color: black; +} + +ul.dropdown-menu a, +.navbar-header a, +ul.navbar-nav a { /* No decoration on links in dropdown menu */ + border-bottom-style: none; + color: #323232; + font-weight: 700; +} + +.navbar-header a:hover, +ul.navbar-nav a:hover { + color: #8f8f8f; +} + +.sitename .first-word, .sitename .second-word { + color: rgba(0, 0, 0, 0.75); + font-weight: normal; + font-size: 1.8rem; +} + +.sitename .first-word { + font-family: 'Alegreya Sans', sans-serif; +} + +.sitename .second-word { + font-family: 'Alegreya', serif; +} + +ul.dropdown-menu > li, +ul.dropdown-menu > li > ul > li { /* No decoration on bullet points in dropdown menu */ + list-style-type: none; +} + +.page { + margin: 2em auto; + width: 35em; + border: 5px solid #ccc; + padding: 0.8em; + background: white; +} +.entries { + list-style: none; + margin: 0; + padding: 0; +} +.entries li { + margin: 0.8em 1.2em; +} +.entries li h2 { + margin-left: -1em; +} +.add-entry { + font-size: 0.9em; + border-bottom: 1px solid #ccc; +} +.add-entry dl { + font-weight: bold; +} +.metanav { + text-align: right; + font-size: 0.8em; + padding: 0.3em; + margin-bottom: 1em; + background: #fafafa; +} +.flash { + background: #cee5F5; + padding: 0.5em; + border: 1px solid #aacbe2; +} +.error { + background: #f0d6d6; + padding: 0.5em; +} + +.file-found { + color: #23BA49; +} +.file-notfound { + color: #FF4747; +} + +/* Bootstrap custom styling to correctly render multiple + * form-controls in an input-group: + * github.com/twbs/bootstrap/issues/12732 */ + +.input-group-field { + display: table-cell; + vertical-align: middle; + border-radius:4px; + min-width:1%; + white-space: nowrap; +} + +.input-group-field .form-control { + border-radius: inherit !important; +} + +.input-group-field:not(:first-child):not(:last-child) { + border-radius:0; +} + +.input-group-field:not(:first-child):not(:last-child) .form-control { + border-left-width: 0; + border-right-width: 0; +} + +.input-group-field:last-child { + border-top-left-radius:0; + border-bottom-left-radius:0; +} + +.input-group > span:not(:last-child) > button { + border-radius: 0; +} + +.multi-input-group > .input-group-btn { + vertical-align: bottom; + padding: 0; +} + +.dataTables_filter { + margin-top: 15px; +} + +.dataTables_filter input { + width: 70%; + float: right; +} + +tr.api-doc-route-upcoming > td, tr.api-doc-route-upcoming > td > a { + font-size: 90%; +} + +tr.api-doc-route-deprecated > td, tr.api-doc-route-deprecated > td > a { + color: red; +} + +#back-to-top { + display: initial; + position: fixed; + bottom: 30px; + right: 30px; + z-index: 10; +} + +#back-to-top a img { + display: block; + width: 32px; + height: 32px; + background-size: 32px 32px; + text-indent: -999px; + overflow: hidden; +} + +.table > thead > tr > th { + border-bottom: 1px solid #e20026; +} + +.table > tbody > tr > td { + border-style: none; +} + +pre { + background-color: #f5f5f5; +} + +.dataTables_wrapper { + position: static; +} + +/* breadcrumbs */ + +.bread-crumbs{ + display: inline-block; + overflow: hidden; + color: rgba(0, 0, 0, 0.55); +} + +bread-crumbs ul { + list-style-type: none; +} + +.bread-crumbs li { + float: left; + list-style-type: none; +} + +.bread-crumbs a { + color: rgba(0, 0, 0, 0.75); + border-bottom-style: none; +} + +.bread-crumbs a:hover { + color: rgba(0, 0, 0, 0.85); + text-decoration: underline; +} + +.title-small .bread-crumbs{ + margin: -30px 0 25px; +} + +#footer { + background-color: #262626; + color: hsl(0, 0%, 100%); + font-size: 1.2rem; + text-align: center; + padding-top: 20px; + padding-bottom: 20px; + position: absolute; + bottom: 0; + left: 0; + right: 0; +} +#footer a, +#footer a:visited { + color: hsl(0, 0%, 100%); +} +#footer a:hover { + text-decoration: underline; +} + +.highlightjs pre { + background-color: transparent; + border-radius: 0px; + border-color: transparent; +} + +.hljs { + background-color: transparent; + white-space: pre; +} + +.scrollable-menu { + max-height: 180px; + overflow-x: hidden; +} + +.swh-browse-top-navigation { + border-bottom: 1px solid #ddd; + min-height: 42px; + padding: 4px 5px 0px 5px; +} + +.swh-browse-bread-crumbs { + font-size: inherit; + vertical-align: text-top; + margin-bottom: 1px; +} + +.swh-browse-bread-crumbs li:nth-child(n+2)::before { + content: ""; + display: inline-block; + margin: 0 2px; +} + +.swh-metadata-table-row { + border-top: 1px solid #ddd !important; +} + +/* for block of numbers */ +td.hljs-ln-numbers { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + + text-align: center; + color: #ccc; + border-right: 1px solid #CCC; + vertical-align: top; + padding-right: 5px; + + /* your custom style here */ +} + +/* for block of code */ +td.hljs-ln-code { + padding-left: 10px; +} + +.btn-swh { + color: #6C6C6C; + background-color: #EAEAEA; + border-color: #ddd; + background-image: linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%); + background-repeat: repeat-x; + outline: none; +} + +.btn-swh:hover, +.btn-swh:focus, +.btn-swh:active, +.btn-swh.active, +.open .dropdown-toggle.btn-swh { + background-color: #e6ebf1; + background-image: linear-gradient(to bottom,#f1f1f1 0,#e6e6e6 100%); + border-color: rgb(197, 197, 197); +} + +.btn-swh.disabled, +.btn-swh[disabled], +fieldset[disabled] .btn-swh, +.btn-swh.disabled:hover, +.btn-swh[disabled]:hover, +fieldset[disabled] .btn-swh:hover, +.btn-swh.disabled:focus, +.btn-swh[disabled]:focus, +fieldset[disabled] .btn-swh:focus, +.btn-swh.disabled:active, +.btn-swh[disabled]:active, +fieldset[disabled] .btn-swh:active, +.btn-swh.disabled.active, +.btn-swh[disabled].active, +fieldset[disabled] .btn-swh.active { + background-color: #EAEAEA; + border-color: #EAEAEA; +} + +.btn-swh .badge { + color: #EAEAEA; + background-color: #6C6C6C; +} + +.swh-http-error { + margin: 0 auto; + text-align: center; +} + +.swh-http-error-head { + color: #2d353c; + font-size: 30px; +} + +.swh-http-error-code { + bottom: 60%; + color: #2d353c; + font-size: 96px; + line-height: 80px; + margin-bottom: 10px!important; +} + +.swh-http-error-desc { + font-size: 12px; + color: #647788; +} + +.swh-http-error-desc pre { + text-align: left; +} + +.swh-table { + border-bottom: none !important; +} + +.swh-counter { + font-size: 150%; +} +.swh-loading { + display : none; +} + +.swh-loading.show { + display:inline-block; + position: fixed; + background: white; + border: 1px solid black; + top: 50%; + left: 50%; + margin: -50px 0px 0px -50px; + text-align: center; + z-index:100; +} + +.swh-readme a { + outline: none; + border: none; +} + +.swh-readme table { + border-collapse: collapse; +} + +.swh-readme table, +.swh-readme table th, +.swh-readme table td { + padding: 6px 13px; + border: 1px solid #dfe2e5; +} + +.swh-readme table tr:nth-child(even) { + background-color: #f2f2f2; +} + +.swh-web-app-link:hover { + background-color: #efeff2; +} + +.swh-web-app-link a { + text-decoration: none; + outline: none; + border: none; +} + +.pager a { + outline: none; +} diff --git a/swh/deposit/static/img/icons/swh-logo-32x32.png b/swh/deposit/static/img/icons/swh-logo-32x32.png new file mode 100644 index 00000000..0207798d Binary files /dev/null and b/swh/deposit/static/img/icons/swh-logo-32x32.png differ diff --git a/swh/deposit/static/img/icons/swh-logo-deposit-180x180.png b/swh/deposit/static/img/icons/swh-logo-deposit-180x180.png new file mode 100644 index 00000000..545d6138 Binary files /dev/null and b/swh/deposit/static/img/icons/swh-logo-deposit-180x180.png differ diff --git a/swh/deposit/static/img/icons/swh-logo-deposit-192x192.png b/swh/deposit/static/img/icons/swh-logo-deposit-192x192.png new file mode 100644 index 00000000..ad59eedc Binary files /dev/null and b/swh/deposit/static/img/icons/swh-logo-deposit-192x192.png differ diff --git a/swh/deposit/static/img/icons/swh-logo-deposit-270x270.png b/swh/deposit/static/img/icons/swh-logo-deposit-270x270.png new file mode 100644 index 00000000..8ba4c216 Binary files /dev/null and b/swh/deposit/static/img/icons/swh-logo-deposit-270x270.png differ diff --git a/swh/deposit/static/img/swh-logo-deposit.png b/swh/deposit/static/img/swh-logo-deposit.png new file mode 100644 index 00000000..c183277f Binary files /dev/null and b/swh/deposit/static/img/swh-logo-deposit.png differ diff --git a/swh/deposit/static/img/swh-logo-deposit.svg b/swh/deposit/static/img/swh-logo-deposit.svg new file mode 100644 index 00000000..74c14ba4 --- /dev/null +++ b/swh/deposit/static/img/swh-logo-deposit.svg @@ -0,0 +1,160 @@ + + + +image/svg+xml + + + + +deposit + \ No newline at end of file diff --git a/swh/deposit/templates/homepage.html b/swh/deposit/templates/homepage.html new file mode 100644 index 00000000..764f789c --- /dev/null +++ b/swh/deposit/templates/homepage.html @@ -0,0 +1,44 @@ +{% extends "layout.html" %} +{% load static %} +{% block title %}The Software Heritage Deposit{% endblock %} + +{% block content %} +

Welcome to the Software Heritage deposit

+ +

Overview

+ +

+The long term goal of the Software Heritage initiative is +to collect all publicly available software in source +code form together with its development history, replicate it +massively to ensure its preservation, +and share it with everyone who needs it. +

+ +

What's the deposit?

+ +This is Software Heritage's +SWORD +2.0 Server implementation. + +**S.W.O.R.D** (**S**imple **W**eb-Service **O**ffering **R**epository +**D**eposit) is an interoperability standard for digital file deposit. + +This implementation will permit interaction between a client (a +repository, e.g. hal) and a server +(SWH repository) to +permit deposits of software source code archives with associated +metadata. + + +

Documentation

+ +

+

+

+ +{% endblock %} diff --git a/swh/deposit/templates/layout.html b/swh/deposit/templates/layout.html new file mode 100644 index 00000000..c0d208c6 --- /dev/null +++ b/swh/deposit/templates/layout.html @@ -0,0 +1,65 @@ + +{% load static %} + + + + + + {% block title %}{% endblock %} + + {% block header %}{% endblock %} + + + + + + + + + + + + + + + + + + + +
+
+
+
+ {% block content %}{% endblock %} +
+
+ +
+ back to top +
+ + diff --git a/swh/deposit/tests/api/test_common.py b/swh/deposit/tests/api/test_common.py index 6e446520..12585229 100644 --- a/swh/deposit/tests/api/test_common.py +++ b/swh/deposit/tests/api/test_common.py @@ -1,42 +1,42 @@ # Copyright (C) 2017 The Software Heritage developers # See the AUTHORS file at the top-level directory of this distribution # License: GNU General Public License version 3, or any later version # See top-level LICENSE file for more information from django.core.urlresolvers import reverse from nose.tools import istest from rest_framework import status from rest_framework.test import APITestCase from ..common import BasicTestCase, WithAuthTestCase class IndexNoAuthCase(APITestCase, BasicTestCase): """Access to main entry point is ok without authentication """ @istest def get_home_is_ok(self): """Without authentication, endpoint refuses access with 401 response """ url = reverse('home') response = self.client.get(url) self.assertEqual(response.status_code, status.HTTP_200_OK) - self.assertEqual(response.content, b'SWH Deposit API') + self.assertIn(b'The Software Heritage Deposit', response.content) class IndexWithAuthCase(WithAuthTestCase, APITestCase, BasicTestCase): """Access to main entry point is ok with authentication as well """ @istest def get_home_is_ok_2(self): """Without authentication, endpoint refuses access with 401 response """ url = reverse('home') response = self.client.get(url) self.assertEqual(response.status_code, status.HTTP_200_OK) - self.assertEqual(response.content, b'SWH Deposit API') + self.assertIn(b'The Software Heritage Deposit', response.content) diff --git a/swh/deposit/urls.py b/swh/deposit/urls.py index 1ddb71ed..e889fabe 100644 --- a/swh/deposit/urls.py +++ b/swh/deposit/urls.py @@ -1,45 +1,50 @@ -# Copyright (C) 2017 The Software Heritage developers +# Copyright (C) 2017-2018 The Software Heritage developers # See the AUTHORS file at the top-level directory of this distribution # License: GNU General Public License version 3, or any later version # See top-level LICENSE file for more information """swhdeposit URL Configuration The :data:`urlpatterns` list routes URLs to views. For more information please see: https://docs.djangoproject.com/en/1.11/topics/http/urls/ Examples: - Function views: 1. Add an import: ``from my_app import views`` 2. Add a URL to urlpatterns: ``url(r'^$', views.home, name='home')`` - Class-based views: 1. Add an import: ``from other_app.views import Home`` 2. Add a URL to urlpatterns: ``url(r'^$', Home.as_view(), name='home')`` - Including another URLconf: 1. Import the include function: ``from django.conf.urls import url, include`` 2. Add a URL to urlpatterns: ``url(r'^blog/', include('blog.urls'))`` """ from django.conf.urls import url, include -from django.http import HttpResponse +from django.shortcuts import render +from django.views.generic.base import RedirectView from rest_framework.urlpatterns import format_suffix_patterns +favicon_view = RedirectView.as_view(url='/static/img/icons/swh-logo-32x32.png', + permanent=True) -def index(req): - return HttpResponse('SWH Deposit API') + +def default_view(req): + return render(req, "homepage.html") urlpatterns = [ - url(r'^$', index, name='home'), + url(r'^favicon\.ico$', favicon_view), url(r'^1/', include('swh.deposit.api.urls')), url(r'^1/private/', include('swh.deposit.api.private.urls')), + url(r'^$', default_view, name='home'), ] urlpatterns = format_suffix_patterns(urlpatterns)