edit-page.html 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687
  1. <!DOCTYPE html>
  2. <html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout/layout}">
  3. <head>
  4. <title>Edit Page</title>
  5. <link rel="stylesheet" type="text/css" href="/css/edit-page.css" />
  6. <script src="/js/edit-page.js" defer></script>
  7. </head>
  8. <body>
  9. <div layout:fragment="content" class="ui container" id="app">
  10. <input type="hidden" id="pageId" th:value="${pageId}" />
  11. <input type="hidden" id="pageState" th:value="${pageState}" />
  12. <!-- Floating Bar -->
  13. <div id="floatingBar">
  14. <div class="ui circular raised segment" style="padding: 10px !important;">
  15. <button class="ui circular green icon button tooltip" v-if="page.reviewState != null && page.reviewState != 'Under_Review'" id="saveButton" data-content="Save Changes" v-on:click="updatePage()">
  16. <i class="save icon"></i>
  17. </button>
  18. <button id="previewButton" v-on:click="previewPage()" target="_blank" class="ui circular icon blue button tooltip" data-content="Preview">
  19. <i class="search icon"></i>
  20. </button>
  21. </div>
  22. </div>
  23. <!-- END Floating Bar -->
  24. <!-- Under Review Notification -->
  25. <div class="ui message visible" v-if="page.reviewState != null && ( page.reviewState == 'Review_Requested' || page.reviewState == 'Under_Review' )">
  26. <h2 class="ui dividing header">{{ page.details.title }}</h2>
  27. <h4><i class="angle double right icon"></i>{{ page.reviewState.replace("_", " ") }}</h4>
  28. <p v-if="page.reviewState == 'Review_Requested'">
  29. This page us currently waiting to be reviewed by a member of staff. During this period your page cannot be modified. Once a member of staff
  30. has been assigned to review your page you will be notified via email. This process may take up to 48 hours some during busy periods of high
  31. submissions.
  32. </p>
  33. <p v-if="page.reviewState == 'Under_Review'">
  34. This page is currently under Review by a member of staff. During this period your page <b>cannot be modified</b>. Once a member of staff has
  35. reviewed your submission <b>you will recieve an email notifying you of the outcome</b>. If your submission is accepted it will automatically
  36. become live on the store. If your submission is unsuccessful the email will contain details to help you make the necessary changes and the
  37. page will become editable. This information will also be available in <a href="/user/my-pages">My Pages</a>.
  38. </p>
  39. </div>
  40. <!-- END: Under Review Notification -->
  41. <form class="ui form" id="form" v-if="page.details != null && (page.reviewState == 'None' || page.reviewState == 'Rejected')">
  42. <input type="hidden" name="page-id" th:value="${pageId}" />
  43. <h1 class="ui dividing center aligned header">
  44. <span v-if="pageState == 'draft'">Draft Editor</span>
  45. <span v-if="pageState == 'amendment'">Amendment Editor</span>
  46. </h1>
  47. <div class="ui black raised padded circular segment">
  48. You can resume editing this store page by visiting <a href="/user/my-pages/">My Pages</a> page at any time. There is no time limit. You can
  49. save any changes made at any time, however all fields marked with a red asterisk (<span style="color: #db2828">*</span>) <b>must</b> be
  50. filled before your software will be submitted for approval.
  51. </div>
  52. <br />
  53. <br />
  54. <!-- Details -->
  55. <div>
  56. <h2 class="ui header">Details</h2>
  57. <p>
  58. Provide all details necessary for the user to understand what your software does. This information will be shown in various forms in the
  59. store. It is important that you describe your software effectively so the user understands exactly what this software does and why they
  60. should use it.
  61. </p>
  62. <br />
  63. <table class="ui very basic striped celled table">
  64. <tr>
  65. <td class="collapsing right aligned">
  66. <div class="required field"><label>Page Title</label></div>
  67. </td>
  68. <td>
  69. <p>Choose a title for your software. Use Title Case text formatting.</p>
  70. <div class="ui fitted segment">
  71. <div class="right aligned floating ui blue label tooltip" data-content="Minimum Length: 6" data-variation="mini">
  72. <span id="titleCount"></span>&nbsp;&nbsp;/&nbsp;&nbsp;64
  73. </div>
  74. <input id="titleInput" type="text" name="title" :value="page.details.title" v-on:keyup="titleKeyUp($event)" maxlength="64" />
  75. </div>
  76. </td>
  77. </tr>
  78. <tr>
  79. <td class="collapsing right aligned">
  80. <div class="required field"><label>Short Description</label></div>
  81. </td>
  82. <td>
  83. <p>
  84. The short description will appear in most places where your software is shown and should provide a brief description of what
  85. this software achieves.
  86. </p>
  87. <div class="ui fitted segment">
  88. <div class="right aligned floating ui blue label tooltip" data-content="Minimum Length: 10" data-variation="mini">
  89. <span id="shortDescCount"></span>&nbsp;&nbsp;/&nbsp;&nbsp;255
  90. </div>
  91. <textarea v-on:keyup="shortDescKeyUp()" id="shortDescTextArea" rows="2" name="short-description" maxlength="255">{{
  92. page.details.shortDescription
  93. }}</textarea>
  94. </div>
  95. </td>
  96. </tr>
  97. <tr>
  98. <td class="collapsing right aligned">
  99. <div class="required field"><label>Description</label></div>
  100. </td>
  101. <td>
  102. <p>
  103. <a href="https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet" target="_blank">Markdown</a>
  104. allowed. Provide an in-depth explanation of what your software does. You may provide basic instruction on how to use your
  105. software if required.<br />
  106. If your software requires extensive documentation you must provide a documentation website. Extensive documentation in the
  107. description is forbidden and <b>may result in your page being rejected</b>.
  108. </p>
  109. <div class="ui fitted segment">
  110. <div class="right aligned floating ui blue label tooltip" data-content="Minimum Length: 50" data-variation="mini">
  111. <span id="longDescCount"></span>&nbsp;&nbsp;/&nbsp;&nbsp;10,000
  112. </div>
  113. <textarea v-on:keyup="longDescKeyUp()" rows="20" id="descriptionTextArea" name="description" maxlength="10000">{{
  114. page.details.description
  115. }}</textarea>
  116. </div>
  117. </td>
  118. </tr>
  119. <tr>
  120. <td>
  121. <div class="required field"><label>Category</label></div>
  122. </td>
  123. <td>
  124. <div class="ui fluid selection dropdown">
  125. <input type="hidden" name="category" :value="page.categoryId" />
  126. <i class="dropdown icon"></i>
  127. <div class="text"></div>
  128. <div class="menu">
  129. <div class="item" th:each="category : ${categories}" th:if="${category.parent != null}" th:data-value="${category.id}" th:text="${category.parent.name + ' > ' + category.name}"></div>
  130. </div>
  131. </div>
  132. </td>
  133. </tr>
  134. <tr>
  135. <td class="collapsing right aligned">Tags</td>
  136. <td>
  137. <p>
  138. Tags are words or short phrases that describe the content of your software. They help by supporting searches and similar
  139. products and increase the likelihood of your page being viewed. Type your tag and press the <b>return key</b> at add it.
  140. </p>
  141. <select name="tags" multiple="" class="ui fluid search selection multiple" id="tagsDropdown" data-value="value">
  142. <option v-for="tag in page.details.tags.split(',')" :value="tag" selected>{{ tag }}</option>
  143. </select>
  144. </td>
  145. </tr>
  146. </table>
  147. </div>
  148. <!-- END: Details -->
  149. <br />
  150. <div class="ui divider"></div>
  151. <br />
  152. <!-- Version Data -->
  153. <div>
  154. <h2 class="ui header">Version Information</h2>
  155. <p>
  156. Version data helps users to understand when the software has been updated and what state the software is in. Alpha and Beta software is
  157. deemed less stable than Release software. In addition you may also specify specific versions of jMonkeyEngine that your software is
  158. compatible with.
  159. </p>
  160. <br />
  161. <table class="ui very basic striped celled table">
  162. <tr>
  163. <td class="collapsing right aligned">
  164. <div class="required field"><label>Version</label></div>
  165. </td>
  166. <td>
  167. <p>
  168. Provide the version number of the product. As a general rule version numbers follow
  169. <a href="https://semver.org/">Semantic Versioning</a>.
  170. </p>
  171. <p>
  172. Given a version number MAJOR.MINOR.PATCH, increment the:
  173. </p>
  174. <ul>
  175. <li>MAJOR version when you make incompatible API changes.</li>
  176. <li>MINOR version when you add functionality in a backwards-compatible manner.</li>
  177. <li>and PATCH version when you make backwards-compatible bug fixes</li>
  178. </ul>
  179. <div class="ui labeled input">
  180. <div class="ui label">
  181. v
  182. </div>
  183. <input type="text" placeholder="1.0.0" name="versiondata-version" :value="page.versionData.version" />
  184. </div>
  185. </td>
  186. </tr>
  187. <tr>
  188. <td class="collapsing right aligned">
  189. <div class="required field"><label>State</label></div>
  190. </td>
  191. <td>
  192. <p>
  193. Alpha releases are <i>very</i> early versions of the next major update. Beta releases are early versions of the next major
  194. update. Releases are considered stable and useable in production.
  195. </p>
  196. <div class="ui selection dropdown">
  197. <input type="hidden" name="versiondata-state" />
  198. <i class="dropdown icon"></i>
  199. <div class="text">
  200. {{ page.versionData.state }}
  201. </div>
  202. <div class="menu">
  203. <div class="item">Alpha</div>
  204. <div class="item">Beta</div>
  205. <div class="item">Release</div>
  206. </div>
  207. </div>
  208. </td>
  209. </tr>
  210. <tr>
  211. <td class="collapsing right aligned">Engine Version</td>
  212. <td>
  213. <p>
  214. Specify which version(s) of jMonkeyEngine that this software is compatible with. If you do not specify a version then
  215. <b>3.1 and above</b> will be displayed.
  216. </p>
  217. <input type="text" name="versiondata-enginecompatibility" :value="page.versionData.engineCompatibility" placeholder="3.1 and above" maxlength="255" />
  218. </td>
  219. </tr>
  220. </table>
  221. </div>
  222. <!-- END: Version Data -->
  223. <br />
  224. <div class="ui divider"></div>
  225. <br />
  226. <!-- Build Data -->
  227. <div>
  228. <h2 class="ui header">Build Information</h2>
  229. <p>
  230. This section defines how the gradle data is generated for the end-user. You have the option of specifying custom repositories,
  231. dependencies and store dependencies. This data will be used to generate gradle build information.
  232. </p>
  233. <br />
  234. <table class="ui very basic striped celled table">
  235. <tr>
  236. <td class="collapsing right aligned">
  237. Repositories
  238. </td>
  239. <td>
  240. <p>
  241. Specify any repositories that your software will require to compile. Use the buttons below to add common repositories.
  242. </p>
  243. <p>
  244. <b>JitPack</b> allows users to publish git repositories as project dependencies completely free. To use jitpack you must
  245. obtain the gradle dependency string that it generates. To obtain the dependency string: .
  246. </p>
  247. <ul>
  248. <li>Click the <span class="ui yellow text">jitpack</span> button below.</li>
  249. <li>
  250. Visit the jitpack website with your repository by
  251. <a target="_blank" id="jitpackHelperLink" href="#">clicking here</a> or visit
  252. <a target="_blank" href="https://jitpack.io">jitpack.io</a> yourself.
  253. </li>
  254. <li>
  255. Choose a version to use. You can use either a release, build, branch or commit.
  256. </li>
  257. <li>
  258. Scroll down to "Step 2. Add the dependency" on the jitpack website and copy the dependency value to the dependencies
  259. textbox below.
  260. </li>
  261. </ul>
  262. <div class="field">
  263. <div class="ui small buttons">
  264. <a class="ui black button" @click="addRepo('jcenter()')">jcenter</a>
  265. <a class="ui black button" @click="addRepo('mavenCentral()')">mavenCentral</a>
  266. <a class="ui black button" @click="addRepo('maven { url \'https://jitpack.io\' }')">jitpack</a>
  267. <a class="ui black button" @click="addRepo('')">Custom</a>
  268. </div>
  269. </div>
  270. <div class="field" v-for="(repo, index) in page.buildData.repositories.split(',')">
  271. <div v-if="index == 0" class="ui input">
  272. <input type="text" name="builddata-repositories" :value="repo" v-on:keyup="updateRepo(index, $event)" />
  273. </div>
  274. <div v-else class="ui action input">
  275. <input type="text" name="builddata-repositories" :value="repo" v-on:keyup="updateRepo(index, $event)" />
  276. <a class="ui red icon button tooltip" data-content="delete" @click="removeRepo(index)"><i class="ui close icon"></i></a>
  277. </div>
  278. </div>
  279. </td>
  280. </tr>
  281. <tr>
  282. <td class="collapsing right aligned">Dependencies</td>
  283. <td>
  284. <p>
  285. If your software or any dependencies are hosted on jcenter, mavenCentral, jitpack or any other dependency host, specify the
  286. gradle dependency string here. You may specify the variable <code><span class="ui yellow text">$VERSION</span></code> to use
  287. the version from the version information value on this page.
  288. </p>
  289. <div class="field">
  290. <div class="ui small buttons">
  291. <a class="ui green button" @click="addHostedDependency('')"><i class="plus icon"></i>Add</a>
  292. </div>
  293. </div>
  294. <div class="field" v-for="(dependency, index) in page.buildData.hostedDependencies.split(',')">
  295. <div v-if="index == 0" class="ui input">
  296. <input type="text" name="builddata-hostedependencies" :value="dependency" v-on:keyup="updateHostedDependency(index, $event)" placeholder="gradle dependency string: e.g. implementation com.mycompany:myproduct:1.0" />
  297. </div>
  298. <div v-else class="ui action input">
  299. <input type="text" name="builddata-hostedependencies" :value="dependency" v-on:keyup="updateHostedDependency(index, $event)" placeholder="gradle dependency string: e.g. implementation com.mycompany:myproduct:1.0" />
  300. <a class="ui red icon button tooltip" data-content="delete" @click="removeHostedDependency(index)"><i class="ui close icon"></i></a>
  301. </div>
  302. </div>
  303. </td>
  304. </tr>
  305. <tr>
  306. <td class="collapsing right aligned">Store Dependencies</td>
  307. <td>
  308. <p>
  309. Specify any required dependencies that are listed on the store. For example: If your software is a GUI skin for a GUI
  310. library, specify the store ID for the GUI library. The pages you add here will display your page as an "add-on".
  311. </p>
  312. <div class="field">
  313. <div class="ui small buttons">
  314. <a class="ui green button" @click="addStoreDependency('')"><i class="plus icon"></i>Add</a>
  315. </div>
  316. </div>
  317. <div class="field" v-for="(dependency, index) in page.buildData.storeDependencies.split(',')">
  318. <div v-if="index == 0" class="ui input">
  319. <input type="text" name="builddata-storedependencies" :value="dependency" v-on:keyup="updateStoreDependency(index, $event)" placeholder="store id: e.g. 8ba1fac1-8c93-432a-833d-9df8c258d423" />
  320. </div>
  321. <div v-else class="ui action input">
  322. <input type="text" name="builddata-storedependencies" :value="dependency" v-on:keyup="updateStoreDependency(index, $event)" placeholder="store id: e.g. 8ba1fac1-8c93-432a-833d-9df8c258d423" />
  323. <a class="ui red icon button tooltip" data-content="delete" @click="removeStoreDependency(index)"><i class="ui close icon"></i></a>
  324. </div>
  325. </div>
  326. </td>
  327. </tr>
  328. </table>
  329. </div>
  330. <!-- END: Build Data -->
  331. <br />
  332. <div class="ui divider"></div>
  333. <br />
  334. <!-- Media Links -->
  335. <div>
  336. <h2 class="ui header">Image and Video Media</h2>
  337. <table class="ui very basic striped celled table">
  338. <tr>
  339. <td class="collapsing right aligned">
  340. <div class="required field"><label>Images</label></div>
  341. </td>
  342. <td>
  343. <p>
  344. Images must have the dimensions of <b>1280x720</b> and be in <b>JPEG</b> format. All other dimensions and formats will be
  345. rejected. The first image will be treated as the cover image and will be shown wherever your software is displayed.
  346. <b>Images must not contain adult material</b>.
  347. </p>
  348. <div class="three fields" v-for="(r, row) in 3">
  349. <div class="field" v-for="(n, index) in 3">
  350. <img :id="'sshot_' + getImageIndex(r, n) + '_preview'" class="sshot-img" :class="getArrayLength(page.mediaLinks.imageIds) > getImageIndex(r, n) ? '' : 'hidden-element'"
  351. :src="getArrayLength(page.mediaLinks.imageIds) > getImageIndex(r, n) ? '/image/' + page.mediaLinks.imageIds.split(',')[getImageIndex(r, n)] : '#'" />
  352. <input :id="'sshot_' + getImageIndex(r, n)" :name="'sshot_' + getImageIndex(r, n)" type="file" accept="image/jpeg" @change="screenshotChanged($event, '#sshot_' + getImageIndex(r, n) + '_preview')"
  353. :disabled="getArrayLength(page.mediaLinks.imageIds) > getImageIndex(r, n)" />
  354. <i class="times circle outline icon clear-img" :data-index="getImageIndex(r, n)" @click="clearScreenshot($event)"></i>
  355. <div class="img-error ui warning message">
  356. <ul></ul>
  357. </div>
  358. </div>
  359. </div>
  360. <select multiple name="deleted-images" id="deletedImages" style="visibility: hidden; display: none;"> </select>
  361. </td>
  362. </tr>
  363. <tr>
  364. <td class="collapsing right aligned">
  365. Background Image
  366. </td>
  367. <td>
  368. <p>
  369. Select an image index that will be used as the background for your store page. <b>Indexes start at zero</b>.
  370. Leave the input field blank if you do not want a background image.
  371. </p>
  372. <!--
  373. <div class="ui fluid selection dropdown">
  374. <input type="hidden" name="category" :value="page.categoryId" />
  375. <i class="dropdown icon"></i>
  376. <div class="text"></div>
  377. <div class="menu">
  378. <div class="item" th:each="category : ${categories}" th:if="${category.parent != null}" th:data-value="${category.id}" th:text="${category.parent.name + ' > ' + category.name}"></div>
  379. </div>
  380. </div>
  381. -->
  382. <div class="ui selection dropdown">
  383. <input type="hidden" name="backgroundImageIndex" :value="getBackgroundImageIndex(page.mediaLinks.backgroundImageIndex)" />
  384. <i class="dropdown icon"></i>
  385. <div class="text"></div>
  386. <div class="menu">
  387. <div class="item" v-for="(n, index) in 9" :data-value="index">Image {{ n }}</div>
  388. <div class="item" :data-value="9">No Background</div>
  389. </div>
  390. </div>
  391. </td>
  392. </tr>
  393. <tr>
  394. <td class="collapsing right aligned">Videos</td>
  395. <td>
  396. <p>
  397. Showcase your software with videos. Specify the <b>ID</b> of a <b>public</b> youtube video. A maximum of 3 videos may be
  398. submitted. Please ensure <b>no adult material or language</b> is recorded.
  399. </p>
  400. <div class="three fields">
  401. <div class="field">
  402. <input id="video-1" name="medialinks-youtubevideo" type="text" placeholder="youtube-id" :value="page.mediaLinks.videoIds.split(',').length > 0 ? page.mediaLinks.videoIds.split(',')[0] : ''" />
  403. </div>
  404. <div class="field">
  405. <input id="video-2" name="medialinks-youtubevideo" type="text" placeholder="youtube-id" :value="page.mediaLinks.videoIds.split(',').length > 1 ? page.mediaLinks.videoIds.split(',')[1] : ''" />
  406. </div>
  407. <div class="field">
  408. <input id="video-3" name="medialinks-youtubevideo" type="text" placeholder="youtube-id" :value="page.mediaLinks.videoIds.split(',').length > 2 ? page.mediaLinks.videoIds.split(',')[2] : ''" />
  409. </div>
  410. </div>
  411. </td>
  412. </tr>
  413. </table>
  414. </div>
  415. <!-- END: Media Links -->
  416. <br />
  417. <div class="ui divider"></div>
  418. <br />
  419. <!-- External Links -->
  420. <div>
  421. <h2 class="ui header">External Links</h2>
  422. <table class="ui very basic striped celled table">
  423. <tr>
  424. <td class="collapsing right aligned">Documentation</td>
  425. <td>
  426. <p>
  427. Documentation is not required but is highly encouraged.
  428. </p>
  429. <input type="text" name="externallinks-documentation" placeholder="https://www.mysite.com/mysoftware/docs/" :value="page.externalLinks.docsWebsite" />
  430. </td>
  431. </tr>
  432. <tr>
  433. <td class="collapsing right aligned">Publisher</td>
  434. <td>
  435. <p>
  436. A publisher website is not required but is highly encouraged.
  437. </p>
  438. <input type="text" name="externallinks-publishersite" placeholder="https://www.mysite.com" :value="page.externalLinks.publisherWebsite" />
  439. </td>
  440. </tr>
  441. <tr>
  442. <td class="collapsing right aligned">JME Hub Thread</td>
  443. <td>
  444. <p>
  445. If you have created a thread on the JME Community Hub you can add a link here to make it easier
  446. for users to find.
  447. </p>
  448. <input type="text" name="externallinks-hublink" placeholder="https://hub.jmonkeyengine.org" :value="page.externalLinks.hubLink" />
  449. </td>
  450. </tr>
  451. </table>
  452. </div>
  453. <!-- END: External Links -->
  454. <!-- Open Source Data -->
  455. <div v-if="page.softwareType == 'OpenSource' || page.softwareType == 'Sponsored'">
  456. <br />
  457. <div class="ui divider"></div>
  458. <br />
  459. <h2 class="ui header">Open Source Data</h2>
  460. <p>
  461. Licenses determine what others can do with your software. If you're having trouble deciding which license to use, give our
  462. <a href="/legal/license/opensource/" target="_blank">OpenSource License chooser</a> a try.
  463. </p>
  464. <table class="ui very basic celled striped table">
  465. <tr>
  466. <td class="collapsing right aligned">
  467. <div class="required field"><label>Git Repository</label></div>
  468. </td>
  469. <td>
  470. <p>
  471. Specify the git repository that contains the source code of your work. Your repository must be hosted on either
  472. <i class="github icon"></i><a href="https://github.com" target="_blank">GitHub</a>, <i class="bitbucket icon"></i><a href="https://bitbucket.org" target="_blank">BitBucket</a> or <i class="gitlab icon"></i><a href="https://gitlab.com"
  473. target="_blank">GitLab</a>.
  474. </p>
  475. <div class="ui fluid input">
  476. <input type="text" name="opensource-git-repo" :value="page.openSourceData.gitRepository" />
  477. </div>
  478. </td>
  479. </tr>
  480. <tr>
  481. <td class="collapsing right aligned">Forked Repository</td>
  482. <td>
  483. <div class="ui checkbox">
  484. <input type="checkbox" name="opensource-forked" v-model="page.openSourceData.fork" />
  485. <label>This project is a fork of another repository</label>
  486. </div>
  487. </td>
  488. </tr>
  489. <tr v-if="page.openSourceData.fork">
  490. <td class="collapsing right aligned">
  491. <div class="required field"><label>Fork</label></div>
  492. </td>
  493. <td>
  494. <div class="ui fluid input">
  495. <input type="text" name="opensource-fork-repo" :value="page.openSourceData.forkRepository" placeholder="e.g. https://github.com/jMonkeyEngine/jmonkeyengine" />
  496. </div>
  497. </td>
  498. </tr>
  499. <tr>
  500. <td class="collapsing right aligned">
  501. <div class="required field"><label>Software License</label></div>
  502. </td>
  503. <td>
  504. <p>
  505. Determines what others can do with your source code.
  506. </p>
  507. <div class="ui fluid selection dropdown">
  508. <input type="hidden" name="opensource-softwarelicense" />
  509. <i class="dropdown icon"></i>
  510. <div class="text">
  511. {{ page.openSourceData.softwareLicense == null ? "Select a License" : page.openSourceData.softwareLicense.name }}
  512. </div>
  513. <div class="menu">
  514. <div class="item" th:each="license : ${softwareLicenses}" th:text="${license.name}"></div>
  515. </div>
  516. </div>
  517. </td>
  518. </tr>
  519. <tr>
  520. <td class="collapsing right aligned">
  521. <div class="required field"><label>Media License</label></div>
  522. </td>
  523. <td>
  524. <p>
  525. Determines what others can do with your images, models, sounds and any other file that is not deemed source-code.
  526. </p>
  527. <div class="ui fluid selection dropdown">
  528. <input type="hidden" name="opensource-medialicense" />
  529. <div class="text">
  530. {{ page.openSourceData.mediaLicense == null ? "Select a License" : page.openSourceData.mediaLicense.name }}
  531. </div>
  532. <i class="dropdown icon"></i>
  533. <div class="menu">
  534. <div class="item" th:each="license : ${mediaLicenses}" th:text="${license.name}" th:data-value="${license.name}"></div>
  535. </div>
  536. </div>
  537. </td>
  538. </tr>
  539. </table>
  540. <br />
  541. <div class="ui divider"></div>
  542. <br />
  543. </div>
  544. <!-- END: Open Source Data -->
  545. <!-- Price -->
  546. <div v-if="page.softwareType == 'Sponsored' || page.softwareType == 'Paid'">
  547. <h2 v-if="page.softwareType == 'Paid'" class="ui header">Software Price</h2>
  548. <h2 v-else class="ui header">Sponsor Price</h2>
  549. <p v-if="page.softwareType == 'Paid'">
  550. The price of your software in United States Dollars (USD) that users must pay to obtain a copy of your software.
  551. </p>
  552. <p v-else>
  553. The price users may sponsor you if they wish.
  554. </p>
  555. <div class="field">
  556. <div class="ui labeled input">
  557. <div class="ui label">$</div>
  558. <input type="text" name="paymentdata-price" placeholder="5.00" :value="page.paymentData.price.toFixed(2)" />
  559. </div>
  560. </div>
  561. <br />
  562. <div class="ui divider"></div>
  563. <br />
  564. </div>
  565. <!-- END: Price -->
  566. </form>
  567. <!-- Submit Page -->
  568. <div v-if="page.details != null && (page.reviewState == 'None' || page.reviewState == 'Rejected')">
  569. <h2 class="ui header">Save & Preview</h2>
  570. <p>
  571. Save your changes or preview your page. Your preview will mark areas in <span class="ui red text">red</span> for areas that are required.
  572. <b>Hint:</b> You can also use the floating save/preview buttons located at the bottom-right of your screen.
  573. </p>
  574. <button class="ui green button" v-on:click="updatePage()">Save Changes</button>
  575. <button class="ui blue button" v-on:click="previewPage()">Preview Your Page</button>
  576. <br />
  577. <div class="ui divider"></div>
  578. <br />
  579. <div v-if="page.reviewState != null && !page.reviewState !== 'Under_Review'">
  580. <h1 class="ui header">Submit Your Store Page For Review</h1>
  581. <p>
  582. When you are sure that your page is ready to be reviewed you may submit it. The content will be reviewed by a member of staff to ensure
  583. your page has complied with our <a href="#">Terms of Service</a> and <a href="#">Submission Rules</a>. After pageReview you will recieve
  584. an email describing the outcome of the pageReview.
  585. </p>
  586. <div class="ui warning message">
  587. <i class="exclamation triangle icon"></i>
  588. Please ensure that you have <b>saved any changes</b> you have made by clicking the save button before submitting your page for approval.
  589. </div>
  590. <form class="ui form" id="submitPageForm">
  591. <input type="hidden" th:value="${pageId}" name="pageId" />
  592. </form>
  593. <button class="ui labeled icon button black" :disabled="page.staffReview != null && page.reviewState == 'Under_Review'" v-on:click="saveAndSubmitPage()">
  594. <i class="arrow right icon"></i>Submit Page for Review
  595. </button>
  596. </div>
  597. <!-- END: Submit Asset -->
  598. </div>
  599. <div v-else>
  600. <button class="ui blue button" v-on:click="previewPage()">Preview Your Page</button>
  601. </div>
  602. <br /><br />
  603. </div>
  604. </body>
  605. </html>