SystemOrganization addCategory: #'Package-Builder-Model'! SystemOrganization addCategory: #'Package-Builder-View'! WAFileLibrary subclass: #PBBuilderLibrary instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Package-Builder-View'! !PBBuilderLibrary methodsFor: 'files' stamp: 'lr 12/29/2008 23:04'! baselineCss ^ '/* * BASELIE CSS * * * * * * * * * * * * * * * * * * * * * * * Copyright (c) 2008 by Simon Raess * www.raess.com - simon(a)raess.com * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Permission is hereby granted, free of charge, to any * person obtaining a copy of this software and * associated documentation files (the "Software"), to * deal in the Software without restriction, including * without limitation the rights to use, copy, modify, * merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom * the Software is furnished to do so, subject to the * following conditions: * * The above copyright notice and this permission notice * shall be included in all copies or substantial portions * of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF * ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED * TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT * SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE * OR OTHER DEALINGS IN THE SOFTWARE. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* @group G E N E R A L /* * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* WINDOW */ html, body {height:100%;background:#eee} html body {margin:0;overflow:auto;padding:0;} *+html body {overflow:visible;} /* ie7 hack :( */ body { color: #333; /* optimize readability */ font-size: 75%; /* 16 x 0.75 = 12px */ line-height: 1.5em !! important; /* 12 x 1.5 = 18px */ font-family: "Lucida Grande",Geneva,Arial,sans-serif; vertical-align:baseline; /* baseline grid */ } /* CANVAS */ #page { background: #fafafa; position: relative; } /* CLASSIC PAGE LAYOUT */ #header,#content,#footer {overflow:hidden}; /* clear floats */ /* FLOATING AND CLEAR FLOATS */ .clear {clear:both;} .left {display:inline;float:left;} .right {display:inline;float:right;} .float {overflow:hidden;} /* TRANSPARENCY (custom/hacks/lte-ie-6.css) */ .transparent {opacity:0.8;-moz-opacity:0.8} /* HANGING QUOTE MARKS */ div.doublequote,p.doublequote,{text-indent:-.45em;} /* DEVELOPMENT UTILITIES */ .hide {display:none;} .invisible {display:invisible;} .marker {background:#ffc;} /* NICE HORIZONTAL FORMS */ fieldset.horizontal {overflow:hidden;} /* horizontal */ fieldset.horizontal div.namepanel {float:left;width:32%;} fieldset.horizontal div.datapanel {float:right;width:64%;} fieldset.horizontal input[type="text"],fieldset.horizontal textarea {float:right;width:99%;padding:0;} /* @end *//* @group N A V I G A T I O N /* * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* ALL LEVELS */ ul.menu {margin:0;padding:0;list-style:none;} ul.menu li {list-style:none;margin:0;padding:0;} ul.menu li a {display:block;height:100%;white-space:nowrap;} /* SERVICES */ p.meta {padding: 0 0.5em;} p.meta a {padding: 0 0.5em;white-space:nowrap;} p.meta a:hover { } p.meta a.active { } /* @end *//* @group T Y P O G R A P H Y /* * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* HEADINGS (h1,h2,h3,h4,h5,h6) */ /* (pt: 6,7,8,9,10,11,12,14,18,21,24,36,48,60,72) */ h1,h2,h3,h4,h5,h6 {font:inherit;font-weight:800;margin:0;} h1,h2,h3 {padding:0;} h1 {font-size:2em;line-height:1.5em;} /* 24/36 */ h2 {font-size:1.75em;line-height:1.714em;} /* 21/36 */ h3 {font-size:1.5em;line-height:2em;} /* 18/36 */ h4 {font-size:1.25em;line-height:1.2em;padding:0.6em 0;} /* 15/18 */ h5 {font-size:1em;line-height:1.5em;padding:0.75em 0;} /* 12/18 */ h6 {font-size:0.75em;line-height:2em;padding:1em 0;} /* 9/18px */ /* BLOCK ELEMENTS (address,blockquote,p,pre) */ address,p,pre {margin:0;} address,blockquote {font-style:italic;} p,pre {padding:0.75em 0;} address {letter-spacing:0.025em;font-size:0.75em;line-height:2em;padding:1em 0;} blockquote {border-left:4px solid #999;margin:0.75em 2.25em;padding:0 0.75em;} blockquote,blockquote:before,blockquote:after {content:'''';content:none;quotes:none;} center {display:block;margin:0 auto;text-align:center;} center * {text-align:left;} /* :) */ pre {font-family:"Andale Mono","Courier New",Courier,mono;white-space:pre;overflow:auto;} /* SPECIAL ELEMENTS (a,br,div,hr,iframe,img,span) */ a,br,div,span,img {font:inherit;margin:0;padding:0;} a {color:#69f;cursor:pointer;background-color:inherit;text-decoration:none;} a:visited {color:#999;background-color:inherit;} a:active,a:hover {text-decoration:underline;} a:focus,:focus {outline:none;} a img {border:0 none;} hr {border:0 solid;border-top-width:1px;color:inherit; font-size:0;height:0;line-height:0;margin:-1px 0 0;} /* PHYSICAL TEXT (b,i,big,small,sup,sub,tt) */ big,small,tt {line-height:0.9em;} sub,sup {font-size:0.75em;line-height:0.5em;} b {font-weight:800;} i {font-style:italic;} big {font-size:1.25em;} small {font-size:0.75;} sub {vertical-align:-0.5em;} sup {vertical-align:0.5em;} tt {font-family:Courier,"Courier New","Andale Mono",mono;} /* LOGICAL TEXT (abbr,acronym,cite,code,del,dfn,em,ins,kbd,q,samp,strong,var) */ abbr,acronym {letter-spacing:0.05em;font-variant:small-caps;} abbr[title],acronym[title],dfn[title] {border-bottom:dotted 1px;cursor:help;} abbr {text-transform:lowercase;} code,samp {font-family:Monaco,"Andale Mono",mono;white-space:pre;} kbd,q {font-family:Georgia,"Times New Roman",Times,serif;line-height:1em;} acronym,cite {text-transform:capitalize;} cite,dfn,em,q,strong,var {font-style: italic;} code,var {font-size: 0.75em;line-height:1.2em;} em,dfn {word-spacing:0.1em;} em,kbd,var {letter-spacing:0.05em;} q,q:before,q:after {content:'''';content:none;quotes:none;} dfn {text-transform:uppercase;} del {text-decoration:line-through;} ins {text-decoration:underline;} strong {font-weight:800;} /* LIST ELEMENTS (dl,ol,ul,dd,dt,li) */ dl,dd,dt,li,ol,ul {margin:0;} dl,ol,ul {font:inherit;padding:0.75em 3em;} dd {padding:0 3em;} dt,li {padding:0;} dl {list-style-type:none;} ol {list-style-type:decimal;} ol ol {list-style-type:lower-alpha;} ol ul {list-style-type:circle;} ul {list-style-type:square;} ul ul {list-style-type:disc;} ul ol {list-style-type:upper-roman;} li {list-style-type:inherit;list-style-position:outside;} /* TABLE ELEMENTS (caption,col,colgroup,table,thead,tfoot,tbody,td,th,tr) */ col,colgroup,thead,tfoot,tbody,tr {margin:0;padding:0;} col,colgroup {visibility:hidden;} caption{text-align:left;font-size:0.75em;line-height:2em;padding:0 0 1em;margin:1em 0 0;} table {border-collapse:collapse;border-spacing:0;margin:0.75em 0;padding:0;width:100%;} table,td,th,thead,tfoot,tbody,tr {border:0 solid;color:inherit;font:inherit;} td,th {border-bottom-width:1px;border-top-width:1px;margin:0;padding:0 0.25em;vertical-align:top;line-height:1.4167em;} th{text-align:left;font-weight:800;} thead,tfoot {background: #ddd;} /* FORM ELEMENTS (fieldset,form,legend, button,input,label,option,optgroup,select,textarea) */ form {display:block;} form,fieldset,legend {margin:0;} form,label,legend,select {padding:0;} fieldset {border:0 none;padding:0.75em 0;} fieldset p {padding-top:0;padding-bottom:0;} legend {font-weight:800;} input,label,textarea {font:inherit;margin:0 0.25em 0 0;} input[type="checkbox"],input[type="radio"] {vertical-align:middle;} select {font-size:0.9em;margin:-2px 0.25em -2px 0;} input[type="text"] {height:1.4em;line-height:1.4em;vertical-align:top;} textarea,input[type="text"] {border:1px solid #666;color:#333;margin:-1px 0;padding:0 0.25em;width:15em;} textarea {height:15em;display:block;} button,input[type="submit"],input[type="reset"],input[type="button"] {font-size: 0.75em;vertical-align:top;} /* @end */'! ! !PBBuilderLibrary methodsFor: 'files' stamp: 'lr 12/29/2008 23:31'! builderCss ^ 'html, body, #page { color: #002842; background: #fff; font-family: Helvetica, Verdana, Arial, sans-serif; } a, a:visited { color: #008aff; } #header { background: url(seaside.png) no-repeat; width: 200px; height: 106px; } #header, #content, #footer { width: 800px; margin: 10px auto; } td, th { border-top: 0; border-bottom: 0; padding: 2px 0; } th a { color: #002842; text-decoration: none; font-weight: 800; font-size: 1.5em; line-height: 2em; } '! ! !PBBuilderLibrary methodsFor: 'files' stamp: 'lr 12/29/2008 23:27'! seasidePng "The official logo was designed by Samuel Morello. He released it under the Creative Commons Attribution-No Derivative Works 3.0 license (http://creativecommons.org/licenses/by-nd/3.0/)." | cache | cache := #(nil) beMutable. (cache at: 1) isNil ifTrue: [ cache at: 1 put: #(137 80 78 71 13 10 26 10 0 0 0 13 73 72 68 82 0 0 0 200 0 0 0 107 8 3 0 0 0 5 14 61 236 0 0 0 25 116 69 88 116 83 111 102 116 119 97 114 101 0 65 100 111 98 101 32 73 109 97 103 101 82 101 97 100 121 113 201 101 60 0 0 3 0 80 76 84 69 132 164 183 238 198 176 162 187 202 255 135 0 155 183 200 167 197 216 8 94 145 5 149 237 255 165 0 207 175 160 223 3 1 238 238 238 222 222 222 8 150 238 229 21 3 183 212 230 78 164 217 139 186 214 71 132 168 1 88 141 196 217 229 232 232 232 102 182 232 17 99 149 211 211 211 0 142 229 235 235 235 234 234 234 193 205 213 1 83 133 254 72 0 73 170 229 1 86 137 0 137 220 217 225 230 42 150 217 199 144 144 203 204 205 12 96 147 2 143 229 255 156 0 211 218 223 189 203 211 208 208 208 0 146 236 178 192 200 246 151 78 35 110 154 209 221 229 53 121 161 163 205 231 219 219 219 214 214 214 118 188 231 203 213 219 145 196 226 121 161 186 220 220 220 37 158 232 12 152 238 212 212 212 43 162 235 88 178 233 255 107 0 16 154 238 237 189 169 216 216 216 12 146 229 206 74 74 132 189 225 210 56 54 125 181 215 255 147 0 255 99 0 255 91 0 0 144 232 238 211 197 241 110 42 255 116 0 0 140 226 255 82 0 176 197 209 49 165 236 247 57 0 138 197 232 140 192 224 194 208 216 133 195 233 143 192 221 255 125 0 55 117 154 107 154 181 115 159 185 80 137 171 182 180 180 243 180 143 153 189 212 99 174 220 151 201 232 217 222 225 42 114 158 202 209 212 97 149 179 131 169 191 28 158 236 185 163 163 174 208 229 110 176 217 9 140 220 87 171 223 199 191 191 214 152 118 0 145 234 2 148 237 245 157 94 200 112 108 29 146 218 9 91 141 18 148 227 210 214 216 235 31 0 225 228 230 168 191 205 217 78 48 26 105 152 157 203 232 3 90 142 143 170 186 19 155 238 126 192 232 0 135 217 50 160 228 198 200 201 182 199 210 228 156 145 109 147 171 67 124 158 216 221 223 241 43 1 58 162 228 23 97 141 15 142 218 64 170 235 59 167 235 242 167 114 157 201 228 95 146 177 236 225 221 20 153 233 0 146 235 134 192 228 184 134 132 26 102 148 106 151 178 0 138 223 111 157 184 240 50 0 223 226 228 225 226 226 5 145 231 8 148 234 98 141 167 152 176 190 213 35 29 22 156 238 185 206 219 163 182 194 120 155 176 5 142 226 217 219 220 16 93 139 147 199 230 29 107 153 17 152 236 198 210 217 191 211 223 226 137 93 8 143 226 159 198 222 48 111 150 3 147 234 35 103 144 228 229 230 3 145 232 211 213 214 5 88 138 79 175 234 54 167 236 14 150 233 5 92 144 229 229 229 251 251 251 228 228 228 230 230 230 252 252 252 247 247 247 250 250 250 249 249 249 224 224 224 227 227 227 248 248 248 243 243 243 246 246 246 244 244 244 245 245 245 241 241 241 240 240 240 242 242 242 226 226 226 225 225 225 231 231 231 21 102 151 226 227 227 228 229 229 221 221 221 144 199 232 189 197 202 103 151 180 14 144 224 5 144 229 208 216 221 64 127 166 183 100 100 220 223 224 251 87 27 246 236 230 224 85 85 23 153 232 26 153 229 245 130 46 88 142 175 95 144 172 214 217 219 172 203 222 13 139 216 66 161 219 12 89 136 221 224 226 77 129 160 253 121 14 216 205 200 143 199 234 250 100 11 145 177 197 252 112 13 248 78 0 250 89 0 148 174 190 237 85 55 242 104 29 200 93 84 251 119 36 228 124 70 253 253 253 254 254 254 255 255 255 148 77 63 186 0 0 23 172 73 68 65 84 120 218 212 155 11 84 84 231 181 199 81 8 24 230 136 6 56 48 14 136 84 171 69 192 2 206 1 65 209 73 198 68 25 72 17 212 168 248 106 19 49 40 106 47 182 209 24 174 33 190 72 53 105 53 177 154 164 162 141 77 172 137 137 49 239 230 250 224 204 153 215 57 243 126 153 78 181 213 235 189 183 183 105 82 155 222 155 107 109 111 31 51 116 239 239 59 243 64 161 139 68 71 195 151 181 178 100 6 87 190 223 236 189 255 251 191 247 153 36 244 12 170 19 194 211 231 59 9 131 139 195 104 182 88 204 198 208 96 7 9 233 255 243 155 223 100 61 38 125 104 144 131 4 77 127 171 173 253 70 149 194 222 7 201 160 2 209 223 95 11 231 45 70 97 186 62 187 6 19 72 200 60 68 87 91 171 107 184 83 114 89 130 131 26 196 58 68 167 171 213 233 254 82 196 58 174 75 174 65 5 98 26 162 211 232 116 77 181 111 169 195 201 21 10 5 141 70 99 16 36 57 97 80 213 250 16 93 189 166 54 177 169 225 78 47 36 23 66 152 45 78 155 205 105 213 7 67 131 11 228 30 93 98 125 109 83 65 61 36 151 205 98 54 91 29 63 124 242 191 102 205 122 82 97 55 15 46 16 251 51 186 154 196 218 250 130 26 221 91 156 95 161 184 255 201 255 79 75 197 195 65 166 13 42 16 231 51 154 154 26 157 174 96 88 77 195 223 159 124 235 63 242 242 230 61 69 72 118 64 241 15 38 16 163 227 25 77 65 65 125 109 205 176 97 137 160 94 154 250 250 63 61 133 28 179 118 248 109 131 8 36 20 50 187 190 83 95 48 44 177 182 105 216 176 97 5 53 53 53 137 154 131 105 105 16 146 213 143 178 206 193 146 90 40 80 86 207 253 127 4 134 154 90 13 5 73 172 157 247 212 188 121 105 169 207 143 135 86 31 76 24 20 20 122 139 201 243 195 123 190 254 71 8 200 176 2 13 20 73 65 65 77 125 67 94 158 78 115 48 245 223 191 173 101 109 131 65 181 192 186 219 21 247 63 243 155 250 250 68 40 14 56 245 181 137 5 5 137 186 188 60 77 98 226 159 82 103 45 231 4 116 44 9 95 126 14 235 61 95 255 159 250 166 196 130 97 242 73 108 208 36 66 56 0 167 166 126 211 203 203 139 124 164 205 223 94 16 139 77 161 176 5 67 253 207 125 160 185 150 239 104 52 192 81 83 32 147 20 36 54 52 212 54 52 104 224 133 196 121 105 171 199 51 42 226 234 111 39 136 149 229 241 8 30 48 27 193 254 96 140 14 205 53 7 40 26 26 154 128 163 64 179 233 249 115 199 88 135 57 116 123 77 163 211 96 160 32 130 41 40 131 68 99 19 193 50 218 254 6 151 175 39 71 3 150 177 150 112 96 153 20 212 92 125 121 185 50 108 233 111 31 136 217 111 48 140 221 122 234 84 171 32 248 123 113 244 62 70 251 144 223 232 160 249 97 110 225 229 107 160 62 26 26 242 116 137 240 167 171 105 203 57 214 65 125 240 237 3 81 25 12 35 166 79 155 54 124 106 169 228 181 196 130 4 205 38 147 213 24 1 49 185 197 59 223 250 139 78 87 47 151 73 65 83 131 174 73 151 87 219 148 152 168 73 251 107 145 95 30 77 110 33 72 168 119 111 48 24 30 155 113 247 180 225 41 41 175 123 125 30 99 56 185 140 142 28 154 113 172 137 82 25 45 78 5 175 30 127 231 223 255 175 86 211 68 64 52 13 77 160 87 160 190 245 154 121 169 95 101 220 183 46 181 204 168 77 122 114 173 96 196 111 88 32 32 91 16 100 253 115 162 232 70 16 56 118 160 192 67 74 39 199 26 194 215 244 22 187 75 101 96 184 29 255 242 141 90 13 144 212 52 212 98 150 53 229 61 117 85 247 167 180 180 111 203 33 137 63 136 69 214 166 28 75 48 182 166 161 212 31 71 144 245 197 17 16 19 75 40 198 102 182 182 142 40 5 13 200 193 225 47 136 211 147 221 166 200 225 3 69 111 53 64 75 108 106 168 39 229 210 52 47 237 169 171 243 82 239 213 170 236 198 91 33 191 246 176 52 9 108 47 16 155 193 240 217 150 187 33 32 109 207 49 140 2 174 108 85 17 138 201 89 187 167 31 217 114 100 238 252 67 130 228 50 155 205 122 68 65 22 143 130 255 223 134 196 97 5 186 6 168 115 168 250 196 250 131 169 105 7 211 82 191 42 146 228 138 55 136 5 32 198 206 63 117 234 33 65 242 218 141 49 53 237 64 16 200 172 226 182 251 8 136 21 179 170 180 124 238 145 45 119 223 61 13 75 167 92 242 249 60 22 11 33 193 164 212 91 221 190 134 68 104 135 58 84 46 157 166 169 30 140 86 234 166 84 57 185 226 13 194 242 134 204 211 195 225 131 255 133 79 204 209 95 3 130 153 181 191 14 64 220 122 61 164 213 99 15 65 44 40 7 252 133 148 86 145 241 217 173 132 132 214 189 201 15 32 154 188 122 226 123 55 109 58 120 245 234 65 28 71 238 213 130 249 141 55 8 4 100 236 105 172 232 226 169 162 40 68 65 130 65 10 2 153 53 234 62 70 116 233 21 188 225 177 242 8 6 254 133 182 49 111 50 1 143 19 72 140 132 164 39 100 249 97 94 83 77 67 67 34 112 252 235 243 223 125 57 53 53 45 109 19 146 220 249 51 144 146 56 131 184 120 126 43 126 190 197 109 191 102 24 201 44 23 137 209 234 176 17 16 124 131 128 56 121 254 103 229 91 128 99 90 152 99 127 221 212 69 106 181 202 1 36 122 57 37 45 67 242 234 235 243 116 77 181 243 254 186 124 199 248 29 171 239 77 165 231 121 209 21 119 27 159 195 243 167 48 32 251 235 198 48 12 171 39 26 107 194 106 240 67 95 255 12 53 171 142 128 64 6 126 70 57 182 236 206 218 157 178 126 253 254 182 81 51 31 212 106 37 151 211 14 32 180 61 90 135 228 105 106 243 116 16 143 229 227 213 62 175 168 29 255 252 44 4 89 237 117 199 27 36 200 243 135 118 147 128 212 189 19 128 146 14 99 208 131 32 109 163 0 196 231 134 12 220 77 210 106 213 227 143 9 165 167 33 177 70 141 154 115 153 227 24 55 36 151 57 12 114 79 94 109 94 222 213 131 79 173 30 31 96 21 46 5 116 151 234 111 127 247 175 171 171 253 158 120 131 132 32 34 89 36 225 179 2 12 99 130 182 224 244 163 198 142 248 108 225 228 82 195 103 40 190 8 226 5 144 201 119 147 242 88 8 58 45 108 5 240 81 115 14 140 227 184 42 133 203 105 178 144 93 34 20 251 61 121 121 243 160 204 159 223 81 133 107 45 236 46 172 192 168 25 131 2 58 73 92 65 160 237 241 124 230 238 105 41 171 182 2 135 2 82 196 129 24 243 79 31 129 178 158 254 248 47 134 147 79 254 62 70 130 158 153 69 56 86 101 34 200 227 132 227 192 35 74 78 171 112 217 98 64 16 99 19 204 182 16 2 148 100 189 197 233 81 40 20 46 187 57 174 170 69 210 1 174 56 182 117 114 166 200 48 60 220 199 10 28 153 187 143 108 33 234 116 100 55 214 14 128 136 146 0 153 69 228 106 238 88 65 144 164 103 49 177 14 124 229 17 165 82 171 112 219 76 86 90 237 65 235 61 128 145 54 107 121 181 32 251 171 16 62 193 178 130 26 4 227 216 71 100 157 53 249 73 91 247 137 162 228 36 205 34 115 238 145 176 56 165 144 128 80 144 210 85 248 82 202 158 177 146 228 245 62 139 1 249 10 130 112 42 5 174 118 137 0 7 205 247 167 165 165 190 188 90 158 109 35 255 153 96 40 94 94 43 214 146 27 33 36 135 38 151 151 103 250 188 172 222 4 205 98 6 193 64 137 69 109 170 11 131 100 82 180 211 99 189 151 50 91 103 144 128 124 101 156 82 169 6 16 123 4 196 245 228 172 123 151 23 137 42 231 173 120 98 69 250 132 133 206 19 32 82 54 254 231 165 167 166 173 47 222 179 66 18 204 57 188 97 50 114 192 141 167 207 192 87 219 34 32 35 104 136 230 78 46 31 51 245 131 58 2 242 131 7 149 74 70 225 118 160 254 146 254 163 183 43 24 109 149 164 114 152 131 61 113 7 1 145 244 228 16 159 72 221 46 136 212 41 146 68 35 96 162 133 174 135 53 13 63 238 201 148 132 242 226 253 81 144 135 40 200 225 51 117 117 248 26 130 92 110 84 86 75 170 24 16 163 217 233 86 41 220 206 190 56 110 50 72 40 104 243 71 6 10 94 101 13 66 117 103 174 34 22 229 117 65 176 241 80 10 132 227 141 86 159 207 59 118 95 91 12 136 236 75 8 5 130 188 125 57 87 89 173 133 123 59 76 22 61 181 91 104 28 77 38 82 218 113 6 177 168 104 167 27 59 98 68 233 99 24 20 43 154 245 105 49 32 147 177 62 214 23 111 23 25 81 244 158 218 127 45 200 126 153 99 227 211 107 222 121 148 227 180 94 21 202 175 89 31 246 141 100 210 138 207 23 6 98 151 31 116 48 202 220 122 106 250 170 85 83 247 60 244 115 32 113 243 134 173 17 16 48 94 11 167 17 231 190 142 97 12 162 55 171 152 132 36 12 34 139 216 204 237 89 239 188 121 65 173 213 2 8 175 80 120 162 17 9 253 179 139 36 220 28 8 50 42 241 32 74 173 97 85 74 73 201 58 196 243 110 217 52 18 16 5 180 61 106 188 178 170 2 172 40 45 44 38 36 177 32 51 215 45 122 19 122 39 195 28 171 56 193 105 181 90 152 145 227 14 130 197 231 112 41 88 86 225 177 144 217 21 90 114 105 214 42 89 149 214 195 89 40 240 44 1 65 51 251 186 36 168 120 126 198 112 106 120 213 1 149 87 88 184 190 184 184 23 200 254 186 167 63 86 7 32 235 196 103 199 108 159 250 224 79 181 218 28 4 49 199 19 4 212 41 39 186 39 96 173 33 163 65 16 50 247 144 249 142 218 240 182 253 83 199 10 124 24 164 109 138 87 0 42 152 177 208 240 46 170 98 84 18 128 172 199 144 32 136 240 16 246 149 226 182 237 19 3 140 87 244 110 125 15 146 108 227 26 45 228 86 124 65 66 33 179 92 215 20 68 96 245 10 224 56 125 228 141 55 104 69 64 25 215 213 181 101 18 16 242 89 183 77 241 161 163 154 75 43 250 1 0 17 132 249 196 174 3 136 55 6 132 17 125 210 136 125 196 53 94 214 106 25 133 199 9 32 198 120 128 132 87 7 6 195 138 5 87 150 44 107 110 94 214 178 66 144 114 124 62 95 214 145 125 0 178 42 235 245 173 251 136 250 212 61 43 8 8 66 100 117 138 24 11 18 16 21 8 66 222 233 5 178 11 56 132 215 139 177 236 95 29 201 105 197 56 128 196 148 53 145 167 159 119 118 93 108 222 156 61 97 66 242 230 74 9 188 148 248 201 175 129 227 204 145 201 146 36 150 83 21 133 174 215 15 8 3 32 252 252 225 50 136 15 64 82 16 164 120 238 46 224 192 86 9 1 217 184 134 227 36 119 12 72 207 13 131 92 35 79 100 166 104 252 232 236 217 179 217 200 209 221 145 209 2 238 118 69 214 190 125 111 76 27 126 74 242 138 204 39 111 207 153 51 103 212 152 75 189 64 188 172 64 64 224 211 126 128 241 197 128 48 80 36 175 35 200 250 226 233 165 18 128 204 32 115 213 184 69 28 103 80 220 68 16 98 158 236 78 167 53 98 104 13 134 137 93 155 17 3 57 146 59 50 50 202 30 13 4 42 166 238 59 115 230 204 225 44 201 199 48 21 27 1 100 251 155 36 8 125 128 212 61 32 74 160 197 20 100 20 1 153 76 65 142 140 144 36 169 116 21 177 241 35 115 171 185 156 155 7 18 179 142 229 109 100 230 134 188 90 112 81 198 0 14 8 72 198 201 78 181 250 167 27 55 2 199 225 61 146 200 4 170 22 61 61 114 81 5 35 242 138 62 65 160 242 133 24 144 0 227 147 50 215 163 98 23 23 111 245 122 47 205 32 166 113 237 29 48 142 16 23 47 175 182 110 8 36 162 178 148 196 111 7 63 11 241 72 39 73 53 33 187 36 155 112 228 231 31 213 106 63 217 184 113 230 225 195 239 29 46 159 200 4 2 85 199 212 208 16 4 87 95 32 168 197 18 130 44 164 5 115 159 154 17 189 153 195 9 71 219 190 242 173 219 1 99 206 129 109 235 138 148 74 62 214 51 126 113 144 112 89 27 12 187 10 135 38 37 117 2 137 193 132 67 222 71 52 24 31 13 93 144 116 188 131 128 36 112 218 79 126 57 19 65 218 218 166 63 48 145 1 22 134 145 60 214 88 16 31 5 193 154 254 5 105 243 229 41 116 102 87 3 73 233 244 226 98 34 218 163 8 6 12 35 133 69 74 134 165 158 241 139 131 132 203 218 131 20 159 182 63 92 86 114 118 194 132 205 203 78 240 60 155 195 243 141 52 167 206 99 151 88 66 56 70 39 112 92 46 128 188 248 34 128 180 213 109 127 238 18 184 12 81 97 141 130 140 154 194 80 16 18 18 0 129 234 153 145 130 205 113 206 125 90 117 21 35 206 0 12 116 94 115 8 198 182 113 157 69 69 28 171 26 176 250 94 11 210 91 158 220 128 113 161 165 153 170 19 92 189 236 2 230 215 135 203 200 15 199 119 1 136 208 18 1 89 57 238 237 183 127 69 64 224 115 157 58 229 18 52 4 133 41 22 68 140 130 148 99 131 121 108 42 186 149 57 7 102 115 90 136 223 179 239 17 43 60 231 0 98 108 187 12 28 74 137 165 99 213 231 6 161 195 93 100 175 73 154 119 123 89 88 101 147 187 187 187 187 48 8 21 205 201 112 186 63 250 16 110 35 156 71 144 209 163 19 170 57 110 54 128 124 240 65 219 254 54 114 246 180 130 142 42 194 32 224 74 24 209 79 65 128 100 6 238 74 90 201 86 235 0 128 112 18 20 20 41 113 18 141 109 227 102 143 7 14 145 85 185 7 28 144 24 16 172 8 79 14 153 237 236 196 250 35 199 149 227 17 149 237 238 238 232 200 190 0 23 104 207 38 80 75 241 83 45 220 44 131 40 171 171 87 94 126 245 87 31 212 81 16 248 215 153 249 240 11 50 200 126 2 2 110 236 52 225 40 62 13 144 135 246 20 211 101 201 108 37 231 21 212 129 11 15 206 164 43 135 145 119 21 22 21 21 85 123 33 177 92 196 250 126 62 144 176 123 226 233 115 47 16 60 248 243 149 205 145 180 234 198 170 206 72 130 27 36 117 227 153 208 8 28 21 101 221 97 16 101 53 119 226 193 153 95 251 160 110 191 28 146 54 116 238 114 31 105 35 62 209 15 173 142 54 240 148 231 86 188 57 166 141 114 108 155 173 172 246 230 48 85 85 85 39 22 205 158 189 168 19 130 1 135 19 144 195 102 183 70 2 50 48 144 136 202 78 92 80 113 8 81 28 65 167 193 144 91 66 57 210 151 118 101 19 142 140 37 144 249 157 19 58 186 187 55 95 1 142 198 178 228 40 8 87 205 169 223 25 115 24 64 138 101 146 85 165 212 52 98 41 140 90 164 14 176 146 144 69 2 210 86 247 226 212 153 114 65 108 251 221 183 148 213 130 138 101 170 212 106 152 165 170 149 74 200 42 206 203 230 168 220 192 129 206 119 64 1 145 65 168 9 228 27 43 211 203 74 154 203 150 84 192 127 31 133 183 139 112 100 183 124 42 8 149 200 145 159 191 12 204 233 143 219 247 126 84 153 11 191 114 229 44 105 135 249 20 164 138 227 212 85 199 90 199 188 23 37 153 79 76 35 213 166 69 106 53 206 82 235 233 12 130 20 175 110 167 5 81 164 172 134 79 95 193 50 132 4 80 180 2 96 40 220 30 224 136 38 214 128 64 66 46 244 178 67 47 110 150 171 225 56 180 12 224 152 88 130 28 201 203 176 50 23 116 35 71 254 226 42 244 19 120 63 126 215 146 100 154 112 50 136 40 130 140 6 124 98 235 152 51 197 68 185 234 234 178 240 87 183 210 141 244 34 45 128 248 70 96 179 160 26 123 224 242 29 107 183 109 131 128 20 41 181 120 111 23 12 105 188 96 240 179 72 1 63 194 32 34 115 12 24 132 112 52 166 71 60 96 71 71 51 234 172 33 137 190 112 5 65 62 77 70 142 252 119 213 140 32 17 142 220 139 68 187 206 118 135 65 48 181 0 196 231 245 182 238 110 171 195 233 123 212 24 52 232 91 137 149 61 112 23 167 245 51 226 138 185 180 50 176 168 59 149 179 199 141 27 217 94 132 153 5 23 247 120 108 46 133 124 224 39 8 135 21 56 244 3 228 64 144 144 9 229 137 150 3 181 78 25 29 45 8 210 69 56 160 170 5 73 218 69 64 70 3 8 111 130 145 149 31 90 130 24 221 231 151 70 34 2 2 188 96 209 39 151 0 196 251 233 41 186 156 90 135 83 82 57 9 1 128 112 188 200 136 83 234 100 142 113 141 80 210 185 160 79 202 106 17 34 0 1 112 56 108 54 143 203 237 6 10 135 195 110 50 65 157 71 57 6 4 2 89 148 132 221 130 90 114 114 210 63 132 203 46 35 100 19 58 37 201 235 19 55 32 7 130 176 32 169 124 203 4 194 177 84 104 201 136 128 228 174 219 56 115 102 150 207 43 121 165 201 31 144 244 153 173 14 136 98 57 21 39 4 201 1 223 146 245 43 108 22 143 172 201 37 226 164 132 72 250 128 195 99 115 218 237 224 176 157 128 227 128 63 202 24 3 231 0 16 92 70 85 52 19 142 230 243 45 23 241 98 224 203 119 193 109 203 80 119 187 147 59 189 190 220 164 37 39 17 36 63 61 32 230 8 200 129 177 75 134 86 18 5 89 57 242 151 96 82 126 93 10 17 145 70 188 136 31 251 129 59 180 208 232 202 105 159 187 163 154 243 43 152 0 19 120 103 205 186 7 239 34 24 1 14 194 168 134 66 119 219 224 242 38 171 213 36 31 139 197 28 198 24 40 7 128 96 251 56 79 242 234 98 133 224 189 208 140 165 144 145 126 72 224 87 52 147 105 35 185 101 201 197 227 39 73 133 228 231 87 50 94 232 52 73 84 19 150 124 24 11 210 248 3 4 57 51 2 64 188 83 190 134 233 243 200 74 14 234 191 156 62 34 128 225 130 85 168 124 129 42 89 100 65 98 13 172 63 71 69 194 225 192 130 192 99 38 71 175 15 99 12 152 163 39 1 250 222 135 11 104 64 134 10 48 75 252 150 92 248 9 40 232 138 18 90 250 84 175 200 41 89 41 202 111 192 59 23 15 9 4 68 238 35 223 34 32 135 159 243 121 125 187 158 38 94 99 77 53 87 165 85 191 243 54 254 112 151 146 211 98 41 176 1 42 178 156 196 178 44 82 96 117 56 77 248 20 58 246 24 229 239 116 12 152 163 39 193 8 50 155 68 56 206 22 10 62 145 169 196 11 255 54 64 239 75 198 191 8 198 201 157 147 68 201 207 243 93 164 213 79 40 20 174 7 121 241 197 233 173 111 78 217 78 58 221 184 92 37 199 107 213 31 175 123 245 237 113 80 33 156 1 115 200 230 81 9 62 31 152 104 136 5 209 42 196 160 250 36 19 200 8 49 95 147 24 208 74 33 193 98 48 20 86 82 193 26 10 1 97 86 46 43 249 109 18 227 149 65 232 216 132 103 194 206 202 246 99 140 15 94 191 208 76 64 210 49 32 194 249 72 106 125 107 237 90 116 141 117 103 254 155 88 38 218 32 88 8 201 199 119 220 177 0 56 68 210 227 224 120 220 238 136 198 218 136 60 17 140 24 128 96 175 47 123 12 108 55 146 96 231 13 67 31 38 28 29 101 157 0 18 80 63 26 96 200 7 31 1 57 249 253 197 63 26 90 113 12 38 12 81 2 13 104 63 75 42 164 11 57 62 76 143 128 116 254 110 237 171 175 126 173 142 14 20 208 232 238 2 77 18 114 176 95 147 61 174 87 129 28 14 208 37 20 89 23 182 13 140 5 214 70 180 34 174 65 248 28 28 61 9 78 168 221 189 178 242 102 159 239 196 189 43 76 158 10 187 12 2 243 248 178 63 23 86 225 139 226 130 194 11 216 11 175 144 10 233 32 32 185 103 73 102 141 126 165 72 89 52 242 192 28 114 168 241 104 47 194 9 79 165 80 33 137 90 237 39 189 218 142 154 68 100 214 233 180 199 80 232 251 68 248 28 24 0 98 229 249 206 174 240 18 33 227 133 189 185 162 8 211 181 195 73 65 224 181 13 133 48 192 1 70 99 122 201 241 230 19 0 178 148 244 144 142 189 18 28 57 179 70 255 4 58 66 227 35 7 72 171 3 140 71 214 20 18 14 217 122 192 191 17 131 72 108 68 100 173 150 176 60 25 251 163 24 56 6 22 59 207 79 188 18 177 233 25 25 217 123 79 120 37 193 224 138 130 76 10 48 62 209 215 62 1 223 173 132 144 60 76 102 147 140 178 143 197 64 37 237 235 163 71 239 196 214 214 120 121 45 96 172 253 193 184 217 56 80 192 96 148 3 154 68 202 130 182 57 104 16 112 119 179 57 86 99 141 253 81 124 222 5 104 66 8 230 213 11 205 81 16 136 74 203 37 65 32 53 146 76 65 240 161 204 143 203 200 123 31 65 58 237 237 166 191 155 222 146 158 159 79 57 70 47 70 16 101 238 236 145 151 71 174 185 171 16 71 10 208 87 148 91 15 84 133 157 156 235 36 86 111 236 179 44 190 224 86 61 33 132 206 41 41 187 59 10 2 87 172 32 35 45 130 116 100 108 104 4 14 233 66 50 121 103 47 68 235 60 253 77 42 102 139 95 35 32 144 90 90 180 91 136 67 230 34 47 117 226 212 110 64 30 89 105 183 54 70 78 159 197 125 3 15 107 18 66 22 226 1 155 209 244 70 72 202 112 177 16 1 1 251 36 52 210 55 19 0 170 37 140 1 0 239 79 122 31 57 222 61 167 172 246 121 113 152 192 158 173 196 137 66 133 3 158 195 110 183 134 251 53 165 8 246 39 178 55 68 65 64 66 65 168 7 126 98 87 73 44 201 82 0 57 113 156 228 91 247 80 175 36 9 87 232 229 219 193 246 53 102 147 63 34 192 239 95 82 38 188 255 254 187 63 57 135 45 131 85 249 37 152 88 25 175 159 78 20 104 4 99 42 186 223 48 220 12 12 10 66 72 248 19 149 155 163 36 205 32 180 151 74 104 190 181 0 136 68 250 69 126 201 191 169 213 129 143 47 134 75 227 251 79 64 30 157 155 180 3 10 4 172 173 138 206 18 196 119 16 12 90 220 189 40 250 251 154 242 141 63 136 37 32 102 55 238 28 132 138 165 199 195 36 217 141 48 62 53 211 24 149 237 242 29 171 164 49 120 133 227 96 180 238 44 33 28 191 223 57 73 118 226 202 106 45 175 34 183 119 185 93 110 89 107 77 114 117 27 251 13 194 205 163 144 65 108 188 124 132 93 93 217 180 0 54 12 133 2 191 40 71 232 226 146 50 26 130 119 199 131 99 210 170 213 43 127 180 115 241 206 239 29 69 12 53 90 113 192 160 51 30 206 70 160 181 182 200 92 20 193 136 31 65 4 132 236 79 248 220 246 11 228 25 90 123 54 169 227 13 67 193 167 156 167 209 201 143 100 210 81 40 99 86 208 162 231 88 73 4 138 99 12 126 191 159 37 38 214 227 116 80 161 149 39 138 152 142 29 87 130 8 8 114 116 94 60 126 182 185 144 124 59 119 25 105 113 47 156 131 118 254 82 152 131 40 236 232 215 142 226 120 205 170 34 235 14 142 97 113 83 64 10 219 227 113 58 173 22 200 38 252 71 54 30 125 245 186 184 125 169 10 58 187 225 211 206 18 156 206 187 120 222 47 72 231 105 18 173 132 145 232 227 230 140 72 199 131 151 142 210 53 38 220 91 37 170 181 1 217 139 147 133 7 218 15 20 90 179 37 90 220 55 91 95 7 224 126 219 31 38 91 81 178 246 241 165 83 239 4 51 168 90 125 244 181 8 199 251 175 236 160 238 9 47 238 114 185 101 121 114 83 10 168 8 106 63 244 250 222 86 246 22 81 32 136 139 55 180 164 147 117 73 217 68 65 144 26 55 16 65 154 164 228 36 168 133 164 119 55 156 60 121 242 181 247 255 240 196 185 162 48 7 117 79 242 186 67 30 40 80 159 204 102 57 153 250 8 198 45 248 63 9 0 132 7 16 180 191 201 149 21 133 9 47 144 8 124 175 72 201 177 18 218 239 73 47 253 249 165 115 69 69 178 237 160 123 27 226 194 137 15 116 134 41 122 25 192 96 252 75 187 15 16 15 130 200 54 190 228 5 154 73 139 199 147 89 66 146 103 34 226 58 56 31 113 79 196 140 71 79 212 8 222 232 96 116 195 32 48 143 52 46 145 167 17 185 34 222 157 132 79 139 224 218 42 190 138 110 10 212 162 159 165 225 112 202 251 14 51 117 80 189 66 17 254 26 210 173 167 32 91 20 158 255 180 49 153 62 9 164 133 253 135 29 242 211 9 5 20 181 138 53 128 196 230 132 215 177 177 238 169 255 194 190 213 16 114 31 225 133 31 119 101 200 147 30 132 35 1 203 218 199 210 86 237 241 184 220 209 117 172 211 212 11 163 79 19 216 115 155 14 116 118 22 68 183 50 251 36 112 156 124 109 241 19 59 194 67 145 27 29 135 188 41 112 133 215 177 212 61 245 187 240 184 109 24 196 107 89 114 36 31 211 254 163 63 236 252 201 43 71 17 67 89 21 126 60 65 14 10 84 120 85 112 93 28 130 183 49 153 174 3 9 153 88 145 9 168 35 242 36 97 247 118 123 112 182 187 126 85 96 12 222 248 194 35 94 32 193 160 221 64 65 184 106 250 208 139 110 199 77 22 115 244 220 196 125 71 28 65 204 22 147 194 224 99 188 146 63 242 180 200 110 183 152 123 203 147 241 203 161 78 253 131 4 17 196 106 119 120 92 189 159 22 133 167 236 254 139 162 231 203 116 8 136 209 98 49 217 29 116 147 105 115 68 214 177 255 68 157 190 92 16 81 16 189 197 98 53 81 7 229 188 110 184 187 93 238 233 115 130 244 144 139 234 193 114 88 172 228 244 150 167 47 99 93 247 3 66 252 17 4 5 124 184 37 82 224 193 65 134 65 31 134 134 232 20 113 237 22 112 208 48 68 159 179 83 219 218 123 149 57 88 0 122 127 243 33 20 253 127 1 190 52 230 233 139 128 244 196 117 117 118 43 65 122 6 59 70 236 247 181 6 53 70 79 207 63 4 24 0 133 51 241 30 228 174 147 219 0 0 0 0 73 69 78 68 174 66 96 130) asByteArray ]. ^ cache at: 1! ! !PBBuilderLibrary methodsFor: 'accessing' stamp: 'lr 12/29/2008 23:05'! selectorsToInclude ^ #( baselineCss builderCss )! ! !WAPackage methodsFor: '*package-builder' stamp: 'lr 11/29/2008 16:44'! addToSource: aSource | package | package := PBPackage new title: self name; name: self name; comment: self description; addToSource: aSource. dependencies do: [ :each | package addDependency: (aSource addPackage: each) ]. ^ package addToSource: aSource! ! WAObject subclass: #PBBuilder instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Package-Builder-Model'! !PBBuilder methodsFor: 'building' stamp: 'lr 10/18/2008 19:03'! build: aModel selected: aCollection url: aUrl self subclassResponsibility! ! !PBBuilder methodsFor: 'accessing' stamp: 'lr 10/4/2008 21:34'! comment self subclassResponsibility! ! !PBBuilder methodsFor: 'private' stamp: 'lr 12/31/2008 10:50'! identifier: aString uppercase: aBoolean | upper input char | upper := aBoolean. input := aString readStream. ^ String streamContents: [ :stream | [ input atEnd ] whileFalse: [ char := input next. char isAlphaNumeric ifTrue: [ stream nextPut: (upper ifTrue: [ char asUppercase ] ifFalse: [ char asLowercase ]). upper := false ]. char = $- ifTrue: [ upper := true ] ] ]! ! !PBBuilder methodsFor: 'utilities' stamp: 'lr 12/23/2008 13:52'! repositoriesOf: aCollectionOfPackages ^ (aCollectionOfPackages collect: [ :each | each location ]) asSet asSortedCollection! ! !PBBuilder methodsFor: 'accessing' stamp: 'lr 10/4/2008 21:34'! title self subclassResponsibility! ! PBBuilder subclass: #PBConfigMapBuilder instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Package-Builder-Model'! !PBConfigMapBuilder methodsFor: 'building' stamp: 'lr 12/24/2008 19:52'! build: aModel selected: aCollection url: anUrl ^ WAMimeDocument on: (String streamContents: [ :stream | stream nextPut: $(; cr. (self repositoriesOf: aCollection) do: [ :each | stream tab; nextPutAll: 'repository ('; print: each; nextPut: $); cr ]. aCollection do: [ :each | stream tab; nextPutAll: 'dependency ('; print: each title; nextPut: $ ; print: each name; nextPut: $ ; print: each uuid; nextPut: $); cr ]. stream nextPut: $); cr. stream nextPut: $"; nextPutAll: aModel title; nextPut: $ ; nextPutAll: aModel version; nextPut: $"; cr. stream nextPut: $"; nextPutAll: anUrl printString; nextPut: $" ]) mimeType: 'application/monticello-map' fileName: aModel title asLowercase , '-' , aModel version , '.mcm'! ! !PBConfigMapBuilder methodsFor: 'accessing' stamp: 'lr 12/24/2008 20:11'! comment ^ 'Creates a Monticello Configuration of the selected packages.'! ! !PBConfigMapBuilder methodsFor: 'accessing' stamp: 'lr 12/24/2008 20:11'! title ^ 'Monticello Configuration'! ! PBBuilder subclass: #PBInstallerBuilder instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Package-Builder-Model'! !PBInstallerBuilder methodsFor: 'building' stamp: 'lr 12/12/2008 18:41'! build: aModel selected: aCollection url: anUrl ^ WAMimeDocument on: (String streamContents: [ :stream | stream nextPut: $"; nextPutAll: aModel title; nextPut: $ ; nextPutAll: aModel version; nextPut: $"; cr. stream nextPut: $"; nextPutAll: anUrl printString; nextPut: $"; cr. stream nextPut: $!!; cr. stream nextPutAll: '(HTTPSocket httpGet: ''http://installer.pbwiki.com/f/Installer.st'') fileIn.'; cr. stream nextPutAll: '!!'; cr. aCollection do: [ :package | stream nextPutAll: '(Installer repository: '; print: package locationHost; nextPut: $); cr. stream nextPutAll: ' project: '; print: package locationProject; nextPut: $;; cr. stream nextPutAll: ' install: '; print: package name; cr. stream nextPutAll: '!!'; cr ] ]) mimeType: 'application/smalltalk-changeset' fileName: aModel title asLowercase , '-' , aModel version , '.cs'! ! !PBInstallerBuilder methodsFor: 'accessing' stamp: 'lr 11/29/2008 16:51'! comment ^ 'Creates an Installer script that loads the sources from Monticello.'! ! !PBInstallerBuilder methodsFor: 'accessing' stamp: 'lr 11/29/2008 16:51'! title ^ 'Installer Script'! ! PBBuilder subclass: #PBLoadScriptBuilder instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Package-Builder-Model'! !PBLoadScriptBuilder methodsFor: 'building' stamp: 'lr 12/24/2008 19:17'! build: aModel selected: aCollection url: anUrl ^ WAMimeDocument on: (String streamContents: [ :stream | stream nextPut: $"; nextPutAll: aModel title; nextPut: $ ; nextPutAll: aModel version; nextPut: $"; cr. stream nextPut: $"; nextPutAll: anUrl printString; nextPut: $"; cr. stream nextPut: $!!; cr. (self repositoriesOf: aCollection) do: [ :each | stream nextPutAll: 'MCRepositoryGroup default addRepository: ('. stream nextPutAll: (MCHttpRepository creationTemplateLocation: each user: '' password: ''); nextPut: $); cr. stream nextPut: $!!; cr ]. aCollection do: [ :package | stream nextPutAll: '[ (('; nextPutAll: (MCHttpRepository creationTemplateLocation: package location user: '' password: ''); nextPut: $); cr. stream tab; tab; nextPutAll: 'loadVersionFromFileNamed: '; print: package fileName; nextPut: $); cr. stream tab; tab; tab; nextPutAll: 'load ]'; cr. stream tab; nextPutAll: 'on: Warning do: [ :err | err resume ]'; cr. stream nextPut: $!!; cr ] ]) mimeType: 'application/smalltalk-changeset' fileName: aModel title asLowercase , '-' , aModel version , '.cs'! ! !PBLoadScriptBuilder methodsFor: 'accessing' stamp: 'lr 12/24/2008 20:13'! comment ^ 'Creates a Monticello load script of the selected packages.'! ! !PBLoadScriptBuilder methodsFor: 'accessing' stamp: 'lr 12/12/2008 18:41'! title ^ 'Load Script'! ! PBBuilder subclass: #PBSakeBuilder instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Package-Builder-Model'! !PBSakeBuilder methodsFor: 'building' stamp: 'lr 12/31/2008 12:24'! build: aModel selected: aCollection url: anUrl ^ WAMimeDocument on: (String streamContents: [ :stream | stream nextPut: $"; nextPutAll: aModel title; nextPut: $ ; nextPutAll: aModel version; nextPut: $"; cr. stream nextPut: $"; nextPutAll: anUrl printString; nextPut: $"; cr. stream cr. stream nextPutAll: '(HTTPSocket httpGet: ''http://installer.pbwiki.com/f/Installer.st'') fileIn!!'; cr. stream nextPutAll: 'Installer install: ''Packages''!!'; cr. stream cr. stream nextPutAll: 'Packages subclass: #'; nextPutAll: (self className: aModel); cr. stream tab; nextPutAll: 'instanceVariableNames: '''''; cr. stream tab; nextPutAll: 'classVariableNames: '''''; cr. stream tab; nextPutAll: 'poolDictionaries: '''''; cr. stream tab; nextPutAll: 'category: ''Seaside-Sake''!!'; cr. stream cr. stream nextPut: $!!; nextPutAll: (self className: aModel); nextPutAll: ' class methodsFor: '; print: #accessing; nextPut: $!!; cr. stream nextPutAll: 'findPath'; cr. stream tab; nextPutAll: '^ Array with: self!! !!'; cr. stream cr. aCollection do: [ :package | stream nextPut: $!!; nextPutAll: (self className: aModel); nextPutAll: ' methodsFor: '; print: (package group ifNil: [ #private ]) asLowercase; nextPut: $!!; cr. stream nextPutAll: (self methodName: package); cr. stream tab; nextPutAll: 'self name: '; print: package title; nextPut: $.; cr. stream tab; nextPutAll: 'self version: '; print: aModel version; nextPut: $.; cr. stream tab; nextPutAll: 'self info url: '; print: package location , package fileName; nextPut: $.; cr. package comment isNil ifFalse: [ stream tab; nextPutAll: 'self info description: '; print: package comment; nextPut: $.; cr ]. package group isNil ifFalse: [ stream tab; nextPutAll: 'self info category: '; print: package group; nextPut: $.; cr ]. package dependencies isEmpty ifFalse: [ stream tab; nextPutAll: 'self dependsOn: #('. package dependencies do: [ :each | stream print: each title ] separatedBy: [ stream nextPut: $ ]. stream nextPutAll: ').'; cr ]. stream tab; nextPutAll: 'self action: self defaultAction'. package postloads do: [ :each | stream nextPut: $.; cr; tab; nextPutAll: 'self addAction: (self class named: '; print: each title; nextPutAll: ') defaultAction' ]. stream nextPutAll: '!! !!'; cr; cr ] ]) mimeType: 'text/smalltalk-filein' fileName: aModel title asLowercase , '-' , aModel version , '.st'! ! !PBSakeBuilder methodsFor: 'private' stamp: 'lr 12/31/2008 09:57'! className: aSource ^ self identifier: aSource titleAndVersion uppercase: true! ! !PBSakeBuilder methodsFor: 'accessing' stamp: 'lr 12/31/2008 10:42'! comment ^ 'Creates a class with the Sake definition of the selected packages.'! ! !PBSakeBuilder methodsFor: 'private' stamp: 'lr 12/31/2008 10:55'! methodName: aPackage ^ aPackage title select: [ :each | each isAlphaNumeric ]! ! !PBSakeBuilder methodsFor: 'accessing' stamp: 'lr 12/31/2008 10:42'! title ^ 'Sake Package Definition'! ! PBBuilder subclass: #PBUniverseBuilder instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Package-Builder-Model'! !PBUniverseBuilder methodsFor: 'building' stamp: 'lr 12/13/2008 13:18'! build: aModel selected: aCollection url: anUrl ^ WAMimeDocument on: (String streamContents: [ :stream | stream nextPutAll: ''; cr. stream nextPutAll: ''; cr. aCollection do: [ :package | stream nextPutAll: ''; cr. stream tab; nextPutAll: ''; nextPutAll: package title escapeEntities; nextPutAll: ''; cr. stream tab; nextPutAll: ''; nextPutAll: package name escapeEntities; nextPutAll: ''; cr. package group isNil ifFalse: [ stream tab; nextPutAll: ''; nextPutAll: package group escapeEntities; nextPutAll: ''; cr ]. package comment isNil ifFalse: [ stream tab; nextPutAll: ''; nextPutAll: package comment escapeEntities; nextPutAll: ''; cr ]. stream tab; nextPutAll: ''; nextPutAll: (package location , package fileName) escapeEntities; nextPutAll: ''; cr. stream tab; nextPutAll: 'Seaside Core Development Team'; cr. package dependencies isEmpty ifFalse: [ stream tab; nextPutAll: ''; cr. package dependencies do: [ :each | stream tab; tab; nextPutAll: ''; nextPutAll: each title escapeEntities; nextPutAll: ''; cr ]. stream tab; nextPutAll: ''; cr ]. stream nextPutAll: ''; cr ] ]) mimeType: 'text/xml+universe' fileName: aModel title asLowercase , '-' , aModel version , '.packages'! ! !PBUniverseBuilder methodsFor: 'accessing' stamp: 'lr 12/31/2008 09:25'! comment ^ 'Creates a Package Universe from the selected packages.'! ! !PBUniverseBuilder methodsFor: 'accessing' stamp: 'lr 12/12/2008 15:46'! title ^ 'Package Universe'! ! WAObject subclass: #PBPackage instanceVariableNames: 'source title comment name uuid location group dependencies postloads' classVariableNames: '' poolDictionaries: '' category: 'Package-Builder-Model'! !PBPackage methodsFor: 'querying' stamp: 'lr 11/30/2008 13:32'! addDependenciesTo: aCollection (aCollection includes: self) ifFalse: [ self dependencies do: [ :each | each addDependenciesTo: aCollection ]. aCollection add: self. self postloads do: [ :each | each addDependenciesTo: aCollection ] ]. ^ aCollection! ! !PBPackage methodsFor: 'adding' stamp: 'lr 11/30/2008 13:05'! addDependency: aPackage | package | package := self source addPackage: aPackage. (package isNil or: [ dependencies includes: package ]) ifFalse: [ dependencies := dependencies copyWith: package ]. ^ package! ! !PBPackage methodsFor: 'adding' stamp: 'lr 11/30/2008 13:24'! addPostload: aPackage | package | package := self source addPackage: aPackage. (package isNil or: [ postloads includes: package ]) ifFalse: [ postloads := postloads copyWith: package. package addDependency: self ]. ^ package! ! !PBPackage methodsFor: 'adding' stamp: 'lr 12/18/2008 21:21'! addToSource: aSource ^ aSource packageNamed: self name ifAbsent: [ | working repository package | working := MCWorkingCopy allManagers detect: [ :each | self title = each packageName ] ifNone: [ self error: 'Working copy for ' , self title , ' not found.' ]. working modified ifTrue: [ self error: 'Working copy for ' , self title , ' is modified.' ]. repository := PBSource findRepository: working repositoryGroup repositories withVersion: working currentVersionInfo name. self name: working currentVersionInfo name. self location: repository locationWithTrailingSlash. self uuid: working currentVersionInfo id asString. aSource packages add: (self setSource: aSource) ]! ! !PBPackage methodsFor: 'querying' stamp: 'lr 11/30/2008 13:06'! allDependencies "Answer an ordered collection of dependencies for the receiving package." ^ self addDependenciesTo: OrderedCollection new! ! !PBPackage methodsFor: 'accessing' stamp: 'lr 12/18/2008 16:06'! comment "The pacakge description." ^ comment! ! !PBPackage methodsFor: 'accessing' stamp: 'lr 10/4/2008 22:06'! comment: aString comment := aString! ! !PBPackage methodsFor: 'accessing-readonly' stamp: 'lr 10/4/2008 21:07'! dependencies "Answer the direct dependencies." ^ dependencies! ! !PBPackage methodsFor: 'querying' stamp: 'lr 12/13/2008 13:17'! fileName ^ self name , '.mcz'! ! !PBPackage methodsFor: 'accessing' stamp: 'lr 12/18/2008 16:06'! group "The group name." ^ group! ! !PBPackage methodsFor: 'accessing' stamp: 'lr 11/29/2008 16:57'! group: aString group := aString! ! !PBPackage methodsFor: 'querying' stamp: 'lr 10/18/2008 12:44'! id ^ name copyUpToLast: $-! ! !PBPackage methodsFor: 'initialization' stamp: 'lr 11/30/2008 13:50'! initialize super initialize. dependencies := #(). postloads := #()! ! !PBPackage methodsFor: 'accessing' stamp: 'lr 12/18/2008 16:05'! location "The repository URL." ^ location! ! !PBPackage methodsFor: 'accessing' stamp: 'lr 11/29/2008 16:46'! location: aString location := (aString beginsWith: 'http://') ifFalse: [ 'http://' , aString ] ifTrue: [ aString ]! ! !PBPackage methodsFor: 'accessing' stamp: 'lr 12/18/2008 16:05'! name "The full version name." ^ name! ! !PBPackage methodsFor: 'accessing' stamp: 'lr 10/4/2008 21:11'! name: aString name := aString! ! !PBPackage methodsFor: 'querying' stamp: 'lr 10/18/2008 18:54'! packageName ^ self name copyUpToLast: $-! ! !PBPackage methodsFor: 'accessing-readonly' stamp: 'lr 11/30/2008 13:23'! postloads "Answer the postload packages." ^ postloads! ! !PBPackage methodsFor: 'printing' stamp: 'lr 11/30/2008 12:43'! printOn: aStream super printOn: aStream. aStream nextPut: $(; print: self title; nextPut: $)! ! !PBPackage methodsFor: 'initialization' stamp: 'lr 11/30/2008 13:04'! setSource: aSource source := aSource! ! !PBPackage methodsFor: 'accessing-readonly' stamp: 'lr 11/30/2008 13:04'! source ^ source! ! !PBPackage methodsFor: 'accessing' stamp: 'lr 12/18/2008 16:05'! title "The package name." ^ title! ! !PBPackage methodsFor: 'accessing' stamp: 'lr 10/4/2008 21:45'! title: aString title := aString! ! !PBPackage methodsFor: 'accessing' stamp: 'lr 12/18/2008 16:06'! uuid "The version identifier." ^ uuid! ! !PBPackage methodsFor: 'accessing' stamp: 'lr 10/18/2008 18:36'! uuid: aString uuid := aString! ! !PBPackage methodsFor: 'querying' stamp: 'lr 12/13/2008 13:18'! version | repository | repository := MCHttpRepository location: self location user: '' password: ''. ^ repository versionFromFileNamed: self fileName! ! WAObject subclass: #PBSource instanceVariableNames: 'title version packages groups configs' classVariableNames: '' poolDictionaries: '' category: 'Package-Builder-Model'! PBSource class instanceVariableNames: 'repositoryCache repositoryCacheValidUntil'! PBSource class instanceVariableNames: 'repositoryCache repositoryCacheValidUntil'! !PBSource class methodsFor: 'accessing' stamp: 'lr 12/18/2008 15:47'! directory ^ (FileDirectory default directoryNamed: 'distributions') assureExistence! ! !PBSource class methodsFor: 'querying' stamp: 'lr 12/18/2008 21:23'! findRepository: aCollection withVersion: aString (repositoryCache isNil or: [ repositoryCacheValidUntil isNil or: [ repositoryCacheValidUntil < TimeStamp now ] ]) ifTrue: [ repositoryCacheValidUntil := TimeStamp now + 1 hour. repositoryCache := Dictionary new ]. aCollection do: [ :repository | (repository isKindOf: MCHttpRepository) ifTrue: [ ((repositoryCache at: repository ifAbsentPut: [ repository allFileNames ]) anySatisfy: [ :each | each beginsWith: aString ]) ifTrue: [ ^ repository ] ] ]. self error: 'HTTP repository for ' , aString , ' not found.'! ! !PBSource class methodsFor: 'instance-creation' stamp: 'lr 12/18/2008 16:02'! load "Load all the distributions form the default directory." | distributions | distributions := OrderedCollection new. self directory fileNames sort do: [ :each | [ distributions addLast: (self load: each) ] ifError: [ ] ]. ^ distributions asArray! ! !PBSource class methodsFor: 'instance-creation' stamp: 'lr 12/18/2008 15:48'! load: aString "Load the distribution aString form the default directory." | stream | stream := ReferenceStream fileNamed: (self directory fullNameFor: aString). ^ [ stream next ] ensure: [ stream close ]! ! !PBSource class methodsFor: 'distributions' stamp: 'lr 12/23/2008 14:01'! seaside "self seaside verify; save: '001 Seaside 2.9.0-a2.obj'" | model | model := self new. model title: 'Seaside'; version: '2.9.0-alpha2'. " packages " model addPackages: WAPackage packages. " groups " model addGroup: 'Core Library' select: [ :each | (each name beginsWith: 'Seaside-') ]. model addGroup: 'Server Adaptors' select: [ :each | (each name includesSubString: 'Adaptors') ]. model addGroup: 'Web 2.0' select: [ :each | (each name beginsWith: 'Javascript') or: [ (each name beginsWith: 'Scriptaculous') or: [ (each name beginsWith: 'JQuery') or: [ (each name beginsWith: 'Comet') or: [ (each name beginsWith: 'RSS') or: [ (each name beginsWith: 'HTML5') ] ] ] ] ] ]. model addGroup: 'Development' select: [ :each | (each name includesSubString: 'Development') ]. model addGroup: 'Examples' select: [ :each | (each name includesSubString: 'Examples') ]. model addGroup: 'Tests' select: [ :each | (each name includesSubString: 'Tests') ]. " special dependencies " (((model packageNamed: 'Seaside-Adaptors-Comanche') addDependency: 'KomHttpServer') addDependency: 'KomServices') addDependency: 'DynamicBindings'. ((model packageNamed: 'Seaside-Swazoo') group: nil; addDependency: 'Swazoo') addDependency: 'Sport'. ((model packageNamed: 'Seaside-Slime') group: 'Development'; addDependency: 'Refactoring-Core') addDependency: 'AST'. " special post load " model packages do: [ :each | (each name includesSubString: '-Squeak') ifTrue: [ (model packageNamed: (each title copyReplaceAll: '-Squeak' with: '') ifAbsent: [ model packageNamed: 'Seaside-Platform' ]) addPostload: each title. each group: nil ] ]. " configurations " model addConfig: 'Development' reject: [ :each | (each name includesSubString: 'Tests') or: [ (each name includesSubString: 'Swazoo') ] ]. model addConfig: 'Integration' reject: [ :each | (each name includesSubString: 'Examples') or: [ (each name includesSubString: 'Swazoo') ] ]. model addConfig: 'Deployment' reject: [ :each | (each name includesSubString: 'Examples') or: [ (each name includesSubString: 'Tests') or: [ (each name includesSubString: 'Slime') or: [ (each name includesSubString: 'Swazoo') ] or: [ (each name includesSubString: 'Development') ] ] ] ]. ^ model! ! !PBSource methodsFor: 'adding' stamp: 'lr 11/29/2008 17:25'! addConfig: aString reject: aBlock "Adds a configuration named aString containing those packages for which aBlock evaluates to false." self addConfig: aString select: [ :each | (aBlock value: each) not ]! ! !PBSource methodsFor: 'adding' stamp: 'lr 12/23/2008 14:06'! addConfig: aString select: aBlock "Adds a configuration named aString containing those packages for which aBlock evaluates to true." configs add: aString -> (self packagesSorted: (self packages select: [ :each | each group notNil and: [ aBlock value: each ] ]))! ! !PBSource methodsFor: 'adding' stamp: 'lr 11/29/2008 16:59'! addGroup: aString "Adds a group named aString." (groups includes: aString) ifFalse: [ groups add: aString ]! ! !PBSource methodsFor: 'adding' stamp: 'lr 11/29/2008 16:59'! addGroup: aString reject: aBlock "Adds a group named aString containing those packages for which aBlock evaluates to false." self addGroup: aString reject: [ :each | (aBlock value: each) not ]! ! !PBSource methodsFor: 'adding' stamp: 'lr 11/29/2008 16:59'! addGroup: aString select: aBlock "Adds a group named aString containing those packages for which aBlock evaluates to true." self addGroup: aString. self packages do: [ :each | (aBlock value: each) ifTrue: [ each group: aString ] ]! ! !PBSource methodsFor: 'adding' stamp: 'lr 11/29/2008 16:54'! addPackage: aPackage "Add a single package to the receiver. The package can be represented as a String, a PackageInfo, a WAPackage, or as a PBPackage. Answer an existing or newly added package." ^ aPackage addToSource: self! ! !PBSource methodsFor: 'adding' stamp: 'lr 11/29/2008 16:55'! addPackages: aCollection "Add a collection of packages to the receiver." ^ aCollection do: [ :each | self addPackage: each ]! ! !PBSource methodsFor: 'querying' stamp: 'lr 12/14/2008 17:46'! analizer | analizerClass | analizerClass := Smalltalk at: #PDPackageAnalyzer ifAbsent: [ self error: 'PDPackageAnalyzer not found' ]. ^ analizerClass onPackagesNamed: (self packages collect: [ :each | each title ])! ! !PBSource methodsFor: 'enumerating' stamp: 'lr 11/29/2008 16:49'! configurationsDo: aBlock aBlock value: 'All Packages' value: self packages. configs do: [ :assoc | aBlock value: assoc key value: assoc value ]. aBlock value: 'No Packages' value: Set new! ! !PBSource methodsFor: 'enumerating' stamp: 'lr 11/29/2008 17:21'! groupsDo: aBlock groups do: [ :name | aBlock value: name value: (self packagesSorted: (self packages select: [ :package | package group = name ])) ]! ! !PBSource methodsFor: 'initialization' stamp: 'lr 11/30/2008 13:50'! initialize super initialize. packages := Set new. groups := OrderedCollection new. configs := OrderedCollection new! ! !PBSource methodsFor: 'querying' stamp: 'lr 11/30/2008 12:52'! packageNamed: aString ^ self packageNamed: aString ifAbsent: [ nil ]! ! !PBSource methodsFor: 'querying' stamp: 'lr 12/18/2008 16:14'! packageNamed: aString ifAbsent: aBlock ^ self packages detect: [ :each | each title beginsWith: aString ] ifNone: aBlock! ! !PBSource methodsFor: 'querying' stamp: 'lr 10/4/2008 22:19'! packages ^ packages! ! !PBSource methodsFor: 'querying' stamp: 'lr 11/29/2008 17:20'! packagesSorted: aCollection ^ aCollection asArray sort: [ :a :b | a title < b title ]! ! !PBSource methodsFor: 'printing' stamp: 'lr 10/4/2008 21:52'! printOn: aStream super printOn: aStream. aStream nextPutAll: ' ('; print: self title; nextPutAll: ')'! ! !PBSource methodsFor: 'actions' stamp: 'lr 12/23/2008 14:39'! save: aString | stream | packages := self packagesSorted: packages. stream := ReferenceStream newFileNamed: (self class directory fullNameFor: aString). [ stream nextPut: self ] ensure: [ stream close ]. packages := packages asSet! ! !PBSource methodsFor: 'accessing' stamp: 'lr 10/4/2008 21:52'! title ^ title! ! !PBSource methodsFor: 'accessing' stamp: 'lr 10/4/2008 21:52'! title: aString title := aString! ! !PBSource methodsFor: 'querying' stamp: 'lr 12/18/2008 16:14'! titleAndVersion ^ self title , ' ' , self version! ! !PBSource methodsFor: 'actions' stamp: 'lr 12/18/2008 16:43'! verify self verify: self analizer! ! !PBSource methodsFor: 'actions' stamp: 'lr 12/14/2008 19:19'! verify: anAnalizer "Verify the receiving source model with the static code analysis." | relation other dependency | relation := anAnalizer relation. self packages do: [ :package | other := relation packages detect: [ :each | each packageName = package title ] ifNone: [ nil ]. other isNil ifFalse: [ other dependentPackages do: [ :depend | dependency := self packages detect: [ :each | each title = depend packageName ] ifNone: [ nil ]. dependency isNil ifFalse: [ (package allDependencies includes: dependency) ifFalse: [ package addDependency: dependency. Transcript show: package title; show: ' is missing '; show: dependency title; show: ' ('; show: (other dependencies detect: [ :each | each target = depend ]) reason; show: ')'; cr ] ] ] ] ]! ! !PBSource methodsFor: 'accessing' stamp: 'lr 10/4/2008 20:35'! version ^ version! ! !PBSource methodsFor: 'accessing' stamp: 'lr 12/18/2008 16:02'! version: aString version := aString! ! !PackageInfo methodsFor: '*package-builder' stamp: 'lr 12/18/2008 21:37'! addToSource: aSource ^ (WAPackage packages detect: [ :each | self packageName = each name ] ifNone: [ WAPackage new name: self packageName ]) addToSource: aSource! ! WAComponent subclass: #PBBuilderView instanceVariableNames: 'model selected dependent url' classVariableNames: '' poolDictionaries: '' category: 'Package-Builder-View'! PBBuilderView class instanceVariableNames: 'distributions builders'! PBBuilderView class instanceVariableNames: 'distributions builders'! !PBBuilderView class methodsFor: 'accessing' stamp: 'lr 12/31/2008 10:42'! builders ^ builders ifNil: [ builders := Array with: PBLoadScriptBuilder new with: PBConfigMapBuilder new with: PBSakeBuilder new ]! ! !PBBuilderView class methodsFor: 'accessing' stamp: 'lr 12/18/2008 16:16'! distributions ^ distributions ifNil: [ distributions := PBSource load ]! ! !PBBuilderView class methodsFor: 'initialization' stamp: 'lr 12/18/2008 21:00'! flush distributions := builders := nil! ! !PBBuilderView class methodsFor: 'initialization' stamp: 'lr 12/29/2008 23:01'! initialize | application | application := self registerAsApplication: 'builder'. application addLibrary: PBBuilderLibrary; addLibrary: JQGoogleLibrary! ! !PBBuilderView methodsFor: 'accessing-dynamic' stamp: 'lr 12/18/2008 16:17'! builders ^ self class builders! ! !PBBuilderView methodsFor: 'accessing' stamp: 'lr 10/18/2008 15:08'! dependent ^ dependent! ! !PBBuilderView methodsFor: 'accessing' stamp: 'lr 11/30/2008 12:32'! dependent: aCollection dependent := aCollection asSet! ! !PBBuilderView methodsFor: 'accessing-dynamic' stamp: 'lr 12/18/2008 16:17'! distributions ^ self class distributions! ! !PBBuilderView methodsFor: 'actions' stamp: 'lr 11/30/2008 13:36'! download: aBuilder self requestContext respond: (WAResponse document: (aBuilder build: self model selected: self ordered url: self url))! ! !PBBuilderView methodsFor: 'initialization' stamp: 'lr 12/18/2008 16:30'! initialRequest: aRequest | package | super initialRequest: aRequest. aRequest fields at: 'distribution' ifPresent: [ :value | self distributions do: [ :each | each titleAndVersion = value ifTrue: [ self model: each ] ] ]. aRequest fields at: 'packages' ifPresent: [ :value | (value findTokens: $,) do: [ :name | package := self model packageNamed: name ifAbsent: [ nil ]. package isNil ifFalse: [ self selected add: package ] ]. self refresh ]! ! !PBBuilderView methodsFor: 'initialization' stamp: 'lr 11/30/2008 12:32'! initialize super initialize. self dependent: #(). self selected: #() ! ! !PBBuilderView methodsFor: 'testing' stamp: 'lr 10/4/2008 22:38'! isChecked: aPackage ^ dependent includes: aPackage! ! !PBBuilderView methodsFor: 'testing' stamp: 'lr 10/4/2008 22:56'! isDisabled: aPackage (selected includes: aPackage) ifTrue: [ ^ false ]. (dependent includes: aPackage) ifTrue: [ ^ true ]. ^ false ! ! !PBBuilderView methodsFor: 'accessing' stamp: 'lr 12/18/2008 16:25'! model ^ model ifNil: [ model := self distributions last ]! ! !PBBuilderView methodsFor: 'accessing' stamp: 'lr 12/18/2008 16:25'! model: aSource self initialize. model := aSource! ! !PBBuilderView methodsFor: 'accessing-dynamic' stamp: 'lr 12/13/2008 12:58'! ordered "Answer all the packages in the order they should be loaded." | result | result := OrderedCollection new: self dependent size. self selected do: [ :package | package addDependenciesTo: result ]. ^ result asArray! ! !PBBuilderView methodsFor: 'actions' stamp: 'lr 11/30/2008 13:31'! refresh dependent := Set new. selected do: [ :package | package addDependenciesTo: dependent ]! ! !PBBuilderView methodsFor: 'rendering' stamp: 'lr 12/29/2008 23:18'! renderBodyOn: html self renderIntroOn: html. self renderConfigsOn: html. self renderGroupsOn: html. self renderDownloadOn: html! ! !PBBuilderView methodsFor: 'rendering-body' stamp: 'lr 12/18/2008 16:56'! renderConfigsOn: html html heading level: 2; with: 'Configurations'. html unorderedList: [ self model configurationsDo: [ :label :packages | html listItem: [ html anchor onClick: (html jQuery getScript script: [ :s | self selected: packages; updateCheckboxesOn: s ]); with: label ] ] ]! ! !PBBuilderView methodsFor: 'rendering' stamp: 'lr 12/30/2008 18:11'! renderContentOn: html url := html context actionUrl withoutParameters. html div id: 'page'; with: [ html div id: 'header'; with: [ self renderHeaderOn: html ]. html div id: 'content'; with: [ self renderBodyOn: html ]. html div id: 'footer'; with: [ self renderFooterOn: html ] ]! ! !PBBuilderView methodsFor: 'rendering-body' stamp: 'lr 12/24/2008 20:13'! renderDownloadOn: html html heading level: 2; with: 'Download'. html unorderedList: [ self class builders do: [ :each | html listItem: [ html anchor callback: [ self download: each ]; with: each title. html html: ' — '. html text: each comment ] ] ]! ! !PBBuilderView methodsFor: 'rendering' stamp: 'lr 12/29/2008 23:18'! renderFooterOn: html! ! !PBBuilderView methodsFor: 'rendering-body' stamp: 'lr 12/18/2008 16:55'! renderGroupsOn: html html heading level: 2; with: 'Packages'. html table: [ self model groupsDo: [ :group :packages | html tableRow: [ html tableHeading colSpan: 3; with: [ html anchor onClick: (html jQuery getScript script: [ :s | self toggleAll: packages; updateCheckboxesOn: s ]); with: group ] ]. packages do: [ :package | html tableRow title: package name; with: [ self renderPackage: package on: html ] ] ] ]! ! !PBBuilderView methodsFor: 'rendering' stamp: 'lr 12/29/2008 23:18'! renderHeaderOn: html! ! !PBBuilderView methodsFor: 'rendering-body' stamp: 'lr 12/18/2008 16:14'! renderIntroOn: html html paragraph: [ self distributions size = 1 ifTrue: [ html text: 'You are downloading '; text: self model titleAndVersion; text: '.' ] ifFalse: [ html form: [ html text: 'Select the distribution of your choice: '. html select selected: self model; onChange: 'submit()'; list: self distributions; labels: [ :value | value titleAndVersion ]; callback: [ :value | self model: value ] ] ] ]! ! !PBBuilderView methodsFor: 'rendering-body' stamp: 'lr 12/12/2008 15:28'! renderPackage: aPackage on: html html tableData class: 'checkbox'; with: [ html checkbox id: aPackage id; value: (self isChecked: aPackage); disabled: (self isDisabled: aPackage); onChange: (html jQuery getScript script: [ :s | self toggle: aPackage; updateCheckboxesOn: s ]) ]. html tableData class: 'title'; with: [ html label for: aPackage id; with: aPackage title ]. html tableData class: 'description'; with: aPackage comment! ! !PBBuilderView methodsFor: 'accessing-dynamic' stamp: 'lr 10/18/2008 15:08'! selected ^ selected! ! !PBBuilderView methodsFor: 'actions' stamp: 'lr 10/22/2008 21:51'! selected: aCollection selected := Set withAll: aCollection. self refresh! ! !PBBuilderView methodsFor: 'actions' stamp: 'lr 12/18/2008 16:31'! toggle: aPackage (self isChecked: aPackage) ifTrue: [ selected remove: aPackage ifAbsent: [ ] ] ifFalse: [ selected add: aPackage ]. self refresh! ! !PBBuilderView methodsFor: 'actions' stamp: 'lr 12/18/2008 16:54'! toggleAll: aCollection | count | count := aCollection count: [ :each | selected includes: each ]. count = aCollection size ifFalse: [ selected addAll: aCollection ] ifTrue: [ aCollection do: [ :each | selected remove: each ifAbsent: [ ] ] ]. self refresh! ! !PBBuilderView methodsFor: 'scripts' stamp: 'lr 12/12/2008 15:29'! updateCheckboxesOn: aScript self model groupsDo: [ :group :packages | packages do: [ :package | aScript << (aScript jQuery id: package id) attributeAt: 'checked' put: (self isChecked: package); attributeAt: 'disabled' put: (self isDisabled: package) ] ]! ! !PBBuilderView methodsFor: 'updating' stamp: 'lr 12/30/2008 18:08'! updateRoot: aHtmlRoot super updateRoot: aHtmlRoot. aHtmlRoot title: 'The Seaside Builder'. aHtmlRoot script beJavascript; with: 'var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www."); document.write(unescape("%3Cscript src=''" + gaJsHost + "google-analytics.com/ga.js'' type=''text/javascript''%3E%3C/script%3E"));'. aHtmlRoot script beJavascript; with: 'try { var pageTracker = _gat._getTracker("UA-2075184-5"); pageTracker._trackPageview(); } catch(err) {}'! ! !PBBuilderView methodsFor: 'accessing-dynamic' stamp: 'lr 12/30/2008 18:23'! url url := url withoutParameters. url addParameter: 'distribution' value: self model titleAndVersion. url addParameter: 'packages' value: (String streamContents: [ :stream | self selected do: [ :each | stream nextPutAll: each title ] separatedBy: [ stream nextPut: $, ] ]). ^ url! ! !String methodsFor: '*package-builder' stamp: 'lr 11/29/2008 12:42'! addToSource: aSource ^ (PackageOrganizer default packageNamed: self ifAbsent: [ self error: 'Unknown package named ' , self printString ]) addToSource: aSource! ! PBBuilderView initialize!