Added Rock and Fossil pages
This commit is contained in:
3
.idea/dataSources.xml
generated
3
.idea/dataSources.xml
generated
@@ -2,8 +2,9 @@
|
|||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="DataSourceManagerImpl" format="xml" hash="1501324042">
|
<component name="DataSourceManagerImpl" format="xml" hash="1501324042">
|
||||||
<data-source source="LOCAL" name="Django default" uuid="7e6a0f4c-659f-4195-8d38-0f33b1a39655">
|
<data-source source="LOCAL" name="Django default" uuid="7e6a0f4c-659f-4195-8d38-0f33b1a39655">
|
||||||
|
<driver-ref>sqlite.xerial</driver-ref>
|
||||||
<jdbc-driver>org.sqlite.JDBC</jdbc-driver>
|
<jdbc-driver>org.sqlite.JDBC</jdbc-driver>
|
||||||
<jdbc-url>jdbc:sqlite:$PROJECT_DIR$/db.sqlite3</jdbc-url>
|
<jdbc-url>jdbc:sqlite:H:\GitHub\rockviewer\db.sqlite3</jdbc-url>
|
||||||
<libraries>
|
<libraries>
|
||||||
<library>
|
<library>
|
||||||
<url>file://$USER_HOME$/.PyCharm30/config/jdbc-drivers/xerial-sqlite-license.txt</url>
|
<url>file://$USER_HOME$/.PyCharm30/config/jdbc-drivers/xerial-sqlite-license.txt</url>
|
||||||
|
|||||||
2
.idea/misc.xml
generated
2
.idea/misc.xml
generated
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="ProjectRootManager" version="2" project-jdk-name="Python 2.7.4 virtualenv at ~/.virtualenvs/rockviewer" project-jdk-type="Python SDK" />
|
<component name="ProjectRootManager" version="2" project-jdk-name="Python 2.7.5 virtualenv at C:\Envs\rockviewer" project-jdk-type="Python SDK" />
|
||||||
</project>
|
</project>
|
||||||
|
|
||||||
|
|||||||
6
.idea/rockviewer.iml
generated
6
.idea/rockviewer.iml
generated
@@ -11,7 +11,7 @@
|
|||||||
</component>
|
</component>
|
||||||
<component name="NewModuleRootManager">
|
<component name="NewModuleRootManager">
|
||||||
<content url="file://$MODULE_DIR$" />
|
<content url="file://$MODULE_DIR$" />
|
||||||
<orderEntry type="jdk" jdkName="Python 2.7.4 virtualenv at ~/.virtualenvs/rockviewer" jdkType="Python SDK" />
|
<orderEntry type="jdk" jdkName="Python 2.7.5 virtualenv at C:\Envs\rockviewer" jdkType="Python SDK" />
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
</component>
|
</component>
|
||||||
<component name="PyDocumentationSettings">
|
<component name="PyDocumentationSettings">
|
||||||
@@ -20,9 +20,5 @@
|
|||||||
<component name="TemplatesService">
|
<component name="TemplatesService">
|
||||||
<option name="TEMPLATE_CONFIGURATION" value="Django" />
|
<option name="TEMPLATE_CONFIGURATION" value="Django" />
|
||||||
</component>
|
</component>
|
||||||
<component name="TestRunnerService">
|
|
||||||
<option name="projectConfiguration" value="Unittests" />
|
|
||||||
<option name="PROJECT_TEST_RUNNER" value="Unittests" />
|
|
||||||
</component>
|
|
||||||
</module>
|
</module>
|
||||||
|
|
||||||
|
|||||||
484
.idea/workspace.xml
generated
484
.idea/workspace.xml
generated
@@ -2,11 +2,16 @@
|
|||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="ChangeListManager">
|
<component name="ChangeListManager">
|
||||||
<list default="true" id="56ba8ed1-8d88-44b6-a1d9-9818bc65c9ae" name="Default" comment="">
|
<list default="true" id="56ba8ed1-8d88-44b6-a1d9-9818bc65c9ae" name="Default" comment="">
|
||||||
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/mineral_detail.html" />
|
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/fossil_detail.html" />
|
||||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/dataSources.ids" afterPath="$PROJECT_DIR$/.idea/dataSources.ids" />
|
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/fossil_practice.html" />
|
||||||
|
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/rock_detail.html" />
|
||||||
|
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/rock_practice.html" />
|
||||||
|
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/sample_detail.html" />
|
||||||
|
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/sample_practice.html" />
|
||||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/db.sqlite3" afterPath="$PROJECT_DIR$/db.sqlite3" />
|
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/db.sqlite3" afterPath="$PROJECT_DIR$/db.sqlite3" />
|
||||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/base.html" afterPath="$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/base.html" />
|
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/base.html" afterPath="$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/base.html" />
|
||||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/dataSources.xml" afterPath="$PROJECT_DIR$/.idea/dataSources.xml" />
|
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/dataSources.xml" afterPath="$PROJECT_DIR$/.idea/dataSources.xml" />
|
||||||
|
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/mineral_detail.html" afterPath="$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/mineral_detail.html" />
|
||||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/minerals_practice.html" afterPath="$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/minerals_practice.html" />
|
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/minerals_practice.html" afterPath="$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/minerals_practice.html" />
|
||||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/misc.xml" afterPath="$PROJECT_DIR$/.idea/misc.xml" />
|
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/misc.xml" afterPath="$PROJECT_DIR$/.idea/misc.xml" />
|
||||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/three_d_viewer/models.py" afterPath="$PROJECT_DIR$/three_d_viewer/models.py" />
|
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/three_d_viewer/models.py" afterPath="$PROJECT_DIR$/three_d_viewer/models.py" />
|
||||||
@@ -35,53 +40,44 @@
|
|||||||
<favorites_list name="rockviewer" />
|
<favorites_list name="rockviewer" />
|
||||||
</component>
|
</component>
|
||||||
<component name="FileEditorManager">
|
<component name="FileEditorManager">
|
||||||
|
<splitter split-orientation="horizontal" split-proportion="0.5">
|
||||||
|
<split-first>
|
||||||
<leaf>
|
<leaf>
|
||||||
<file leaf-file-name="base.html" pinned="false" current="false" current-in-tab="false">
|
<file leaf-file-name="sample_practice.html" pinned="false" current="false" current-in-tab="false">
|
||||||
<entry file="file://$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/Old/base.html">
|
<entry file="file://$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/sample_practice.html">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state line="33" column="16" selection-start="1288" selection-end="1288" vertical-scroll-proportion="0.0" vertical-offset="440" max-vertical-offset="1095">
|
<state line="6" column="107" selection-start="174" selection-end="228" vertical-scroll-proportion="-3.9230769" vertical-offset="0" max-vertical-offset="476">
|
||||||
<folding />
|
<folding />
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
</file>
|
</file>
|
||||||
<file leaf-file-name="mineral_detail.html" pinned="false" current="false" current-in-tab="false">
|
<file leaf-file-name="minerals_selftest.html" pinned="false" current="false" current-in-tab="false">
|
||||||
<entry file="file://$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/Old/mineral_detail.html">
|
<entry file="file://$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/minerals_selftest.html">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state line="62" column="23" selection-start="1779" selection-end="1779" vertical-scroll-proportion="0.0" vertical-offset="930" max-vertical-offset="1320">
|
<state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="-0.0" vertical-offset="0" max-vertical-offset="323">
|
||||||
<folding />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
</file>
|
|
||||||
<file leaf-file-name="minerals_practice.html" pinned="false" current="false" current-in-tab="false">
|
|
||||||
<entry file="file://$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/minerals_practice.html">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state line="19" column="18" selection-start="546" selection-end="546" vertical-scroll-proportion="0.0" vertical-offset="285" max-vertical-offset="420">
|
|
||||||
<folding>
|
<folding>
|
||||||
<marker date="1393026264539" expanded="true" signature="79:525" placeholder="..." />
|
<marker date="1393199109031" expanded="true" signature="117:456" placeholder="..." />
|
||||||
<marker date="1393026264539" expanded="true" signature="106:441" placeholder="..." />
|
|
||||||
<marker date="1393026264539" expanded="true" signature="119:430" placeholder="..." />
|
|
||||||
<marker date="1393026264539" expanded="true" signature="161:416" placeholder="..." />
|
|
||||||
<marker date="1393026264539" expanded="true" signature="210:398" placeholder="..." />
|
|
||||||
</folding>
|
</folding>
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
</file>
|
</file>
|
||||||
<file leaf-file-name="detail.html" pinned="false" current="false" current-in-tab="false">
|
<file leaf-file-name="sample_detail.html" pinned="false" current="false" current-in-tab="false">
|
||||||
<entry file="file://$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/Old/detail.html">
|
<entry file="file://$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/sample_detail.html">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state line="389" column="50" selection-start="10513" selection-end="10523" vertical-scroll-proportion="0.0" vertical-offset="5640" max-vertical-offset="6525">
|
<state line="74" column="0" selection-start="1859" selection-end="1859" vertical-scroll-proportion="-48.384617" vertical-offset="0" max-vertical-offset="6987">
|
||||||
<folding />
|
<folding>
|
||||||
|
<element signature="e#10953#10971#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
</file>
|
</file>
|
||||||
<file leaf-file-name="minerals_practice.html" pinned="false" current="false" current-in-tab="false">
|
<file leaf-file-name="rock_practice.html" pinned="false" current="false" current-in-tab="false">
|
||||||
<entry file="file://$PROJECT_DIR$/docs/prototype/3dvol/revised/minerals_practice.html">
|
<entry file="file://$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/rock_practice.html">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state line="96" column="63" selection-start="4901" selection-end="4916" vertical-scroll-proportion="0.0" vertical-offset="1001" max-vertical-offset="1800">
|
<state line="2" column="51" selection-start="104" selection-end="104" vertical-scroll-proportion="-1.3076923" vertical-offset="0" max-vertical-offset="136">
|
||||||
<folding />
|
<folding />
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
@@ -90,16 +86,25 @@
|
|||||||
<file leaf-file-name="base.html" pinned="false" current="false" current-in-tab="false">
|
<file leaf-file-name="base.html" pinned="false" current="false" current-in-tab="false">
|
||||||
<entry file="file://$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/base.html">
|
<entry file="file://$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/base.html">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state line="10" column="19" selection-start="272" selection-end="272" vertical-scroll-proportion="0.0" vertical-offset="150" max-vertical-offset="990">
|
<state line="40" column="80" selection-start="2035" selection-end="2035" vertical-scroll-proportion="-18.0" vertical-offset="212" max-vertical-offset="1122">
|
||||||
<folding />
|
<folding />
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
</file>
|
</file>
|
||||||
<file leaf-file-name="mineral_detail.html" pinned="false" current="true" current-in-tab="true">
|
<file leaf-file-name="mineral_detail.html" pinned="false" current="false" current-in-tab="false">
|
||||||
<entry file="file://$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/mineral_detail.html">
|
<entry file="file://$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/mineral_detail.html">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state line="418" column="56" selection-start="11478" selection-end="11478" vertical-scroll-proportion="0.3713389" vertical-offset="5915" max-vertical-offset="7020">
|
<state line="32" column="40" selection-start="1034" selection-end="1034" vertical-scroll-proportion="-20.923077" vertical-offset="0" max-vertical-offset="1445">
|
||||||
|
<folding />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
</file>
|
||||||
|
<file leaf-file-name="rock_detail.html" pinned="false" current="false" current-in-tab="false">
|
||||||
|
<entry file="file://$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/rock_detail.html">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state line="3" column="16" selection-start="84" selection-end="84" vertical-scroll-proportion="-1.9615384" vertical-offset="0" max-vertical-offset="697">
|
||||||
<folding />
|
<folding />
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
@@ -108,31 +113,57 @@
|
|||||||
<file leaf-file-name="views.py" pinned="false" current="false" current-in-tab="false">
|
<file leaf-file-name="views.py" pinned="false" current="false" current-in-tab="false">
|
||||||
<entry file="file://$PROJECT_DIR$/three_d_viewer/views.py">
|
<entry file="file://$PROJECT_DIR$/three_d_viewer/views.py">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state line="65" column="19" selection-start="2102" selection-end="2102" vertical-scroll-proportion="0.0" vertical-offset="975" max-vertical-offset="1380">
|
<state line="132" column="48" selection-start="4307" selection-end="4307" vertical-scroll-proportion="0.0" vertical-offset="845" max-vertical-offset="2380">
|
||||||
<folding />
|
<folding />
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
</file>
|
</file>
|
||||||
<file leaf-file-name="models.py" pinned="false" current="false" current-in-tab="false">
|
<file leaf-file-name="models.py" pinned="false" current="true" current-in-tab="true">
|
||||||
<entry file="file://$PROJECT_DIR$/three_d_viewer/models.py">
|
<entry file="file://$PROJECT_DIR$/three_d_viewer/models.py">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state line="67" column="9" selection-start="2009" selection-end="2009" vertical-scroll-proportion="0.0" vertical-offset="1005" max-vertical-offset="1950">
|
<state line="76" column="48" selection-start="2316" selection-end="2316" vertical-scroll-proportion="1.0130011" vertical-offset="357" max-vertical-offset="2431">
|
||||||
<folding />
|
<folding>
|
||||||
|
<element signature="e#62#90#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
</file>
|
</file>
|
||||||
<file leaf-file-name="urls.py" pinned="false" current="false" current-in-tab="false">
|
<file leaf-file-name="fossil_practice.html" pinned="false" current="false" current-in-tab="false">
|
||||||
<entry file="file://$PROJECT_DIR$/three_d_viewer/urls.py">
|
<entry file="file://$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/fossil_practice.html">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state line="12" column="4" selection-start="769" selection-end="769" vertical-scroll-proportion="0.0" vertical-offset="180" max-vertical-offset="375">
|
<state line="2" column="39" selection-start="92" selection-end="92" vertical-scroll-proportion="-1.3076923" vertical-offset="0" max-vertical-offset="136">
|
||||||
<folding />
|
<folding />
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
</file>
|
</file>
|
||||||
</leaf>
|
</leaf>
|
||||||
|
</split-first>
|
||||||
|
<split-second>
|
||||||
|
<leaf>
|
||||||
|
<file leaf-file-name="urls.py" pinned="false" current="false" current-in-tab="true">
|
||||||
|
<entry file="file://$PROJECT_DIR$/three_d_viewer/urls.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state line="15" column="79" selection-start="1112" selection-end="1112" vertical-scroll-proportion="0.21911922" vertical-offset="0" max-vertical-offset="931">
|
||||||
|
<folding />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
</file>
|
||||||
|
<file leaf-file-name="fossil_detail.html" pinned="false" current="false" current-in-tab="false">
|
||||||
|
<entry file="file://$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/fossil_detail.html">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state line="32" column="39" selection-start="1032" selection-end="1032" vertical-scroll-proportion="-20.923077" vertical-offset="0" max-vertical-offset="697">
|
||||||
|
<folding />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
</file>
|
||||||
|
</leaf>
|
||||||
|
</split-second>
|
||||||
|
</splitter>
|
||||||
</component>
|
</component>
|
||||||
<component name="FindManager">
|
<component name="FindManager">
|
||||||
<FindUsagesManager>
|
<FindUsagesManager>
|
||||||
@@ -153,19 +184,26 @@
|
|||||||
<option value="C:/Python27/Lib/site-packages/dajaxice/urls.py" />
|
<option value="C:/Python27/Lib/site-packages/dajaxice/urls.py" />
|
||||||
<option value="$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/Old/detail.html" />
|
<option value="$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/Old/detail.html" />
|
||||||
<option value="$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/home.html" />
|
<option value="$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/home.html" />
|
||||||
|
<option value="$PROJECT_DIR$/three_d_viewer/templates/sample_practice.html" />
|
||||||
<option value="$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/minerals_practice.html" />
|
<option value="$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/minerals_practice.html" />
|
||||||
<option value="$PROJECT_DIR$/three_d_viewer/urls.py" />
|
<option value="$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/rock_practice.html" />
|
||||||
<option value="$PROJECT_DIR$/three_d_viewer/models.py" />
|
<option value="$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/fossil_practice.html" />
|
||||||
<option value="$PROJECT_DIR$/three_d_viewer/views.py" />
|
<option value="$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/sample_detail.html" />
|
||||||
<option value="$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/base.html" />
|
<option value="$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/rock_detail.html" />
|
||||||
<option value="$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/mineral_detail.html" />
|
<option value="$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/mineral_detail.html" />
|
||||||
|
<option value="$PROJECT_DIR$/three_d_viewer/views.py" />
|
||||||
|
<option value="$PROJECT_DIR$/three_d_viewer/urls.py" />
|
||||||
|
<option value="$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/fossil_detail.html" />
|
||||||
|
<option value="$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/base.html" />
|
||||||
|
<option value="$PROJECT_DIR$/three_d_viewer/models.py" />
|
||||||
</list>
|
</list>
|
||||||
</option>
|
</option>
|
||||||
</component>
|
</component>
|
||||||
<component name="ProjectFrameBounds">
|
<component name="ProjectFrameBounds">
|
||||||
<option name="y" value="36" />
|
<option name="x" value="-8" />
|
||||||
<option name="width" value="1920" />
|
<option name="y" value="-8" />
|
||||||
<option name="height" value="1175" />
|
<option name="width" value="2576" />
|
||||||
|
<option name="height" value="1576" />
|
||||||
</component>
|
</component>
|
||||||
<component name="ProjectLevelVcsManager" settingsEditedManually="false">
|
<component name="ProjectLevelVcsManager" settingsEditedManually="false">
|
||||||
<OptionsSetting value="true" id="Add" />
|
<OptionsSetting value="true" id="Add" />
|
||||||
@@ -193,6 +231,7 @@
|
|||||||
<sortByType />
|
<sortByType />
|
||||||
</navigator>
|
</navigator>
|
||||||
<panes>
|
<panes>
|
||||||
|
<pane id="Scope" />
|
||||||
<pane id="ProjectPane">
|
<pane id="ProjectPane">
|
||||||
<subPane>
|
<subPane>
|
||||||
<PATH>
|
<PATH>
|
||||||
@@ -339,78 +378,15 @@
|
|||||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
||||||
</PATH_ELEMENT>
|
</PATH_ELEMENT>
|
||||||
</PATH>
|
</PATH>
|
||||||
<PATH>
|
|
||||||
<PATH_ELEMENT>
|
|
||||||
<option name="myItemId" value="rockviewer" />
|
|
||||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
|
|
||||||
</PATH_ELEMENT>
|
|
||||||
<PATH_ELEMENT>
|
|
||||||
<option name="myItemId" value="rockviewer" />
|
|
||||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
|
||||||
</PATH_ELEMENT>
|
|
||||||
<PATH_ELEMENT>
|
|
||||||
<option name="myItemId" value="docs" />
|
|
||||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
|
||||||
</PATH_ELEMENT>
|
|
||||||
</PATH>
|
|
||||||
<PATH>
|
|
||||||
<PATH_ELEMENT>
|
|
||||||
<option name="myItemId" value="rockviewer" />
|
|
||||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
|
|
||||||
</PATH_ELEMENT>
|
|
||||||
<PATH_ELEMENT>
|
|
||||||
<option name="myItemId" value="rockviewer" />
|
|
||||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
|
||||||
</PATH_ELEMENT>
|
|
||||||
<PATH_ELEMENT>
|
|
||||||
<option name="myItemId" value="docs" />
|
|
||||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
|
||||||
</PATH_ELEMENT>
|
|
||||||
<PATH_ELEMENT>
|
|
||||||
<option name="myItemId" value="prototype" />
|
|
||||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
|
||||||
</PATH_ELEMENT>
|
|
||||||
<PATH_ELEMENT>
|
|
||||||
<option name="myItemId" value="3dvol" />
|
|
||||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
|
||||||
</PATH_ELEMENT>
|
|
||||||
</PATH>
|
|
||||||
<PATH>
|
|
||||||
<PATH_ELEMENT>
|
|
||||||
<option name="myItemId" value="rockviewer" />
|
|
||||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
|
|
||||||
</PATH_ELEMENT>
|
|
||||||
<PATH_ELEMENT>
|
|
||||||
<option name="myItemId" value="rockviewer" />
|
|
||||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
|
||||||
</PATH_ELEMENT>
|
|
||||||
<PATH_ELEMENT>
|
|
||||||
<option name="myItemId" value="docs" />
|
|
||||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
|
||||||
</PATH_ELEMENT>
|
|
||||||
<PATH_ELEMENT>
|
|
||||||
<option name="myItemId" value="prototype" />
|
|
||||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
|
||||||
</PATH_ELEMENT>
|
|
||||||
<PATH_ELEMENT>
|
|
||||||
<option name="myItemId" value="3dvol" />
|
|
||||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
|
||||||
</PATH_ELEMENT>
|
|
||||||
<PATH_ELEMENT>
|
|
||||||
<option name="myItemId" value="revised" />
|
|
||||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
|
||||||
</PATH_ELEMENT>
|
|
||||||
</PATH>
|
|
||||||
</subPane>
|
</subPane>
|
||||||
</pane>
|
</pane>
|
||||||
<pane id="Scope" />
|
|
||||||
</panes>
|
</panes>
|
||||||
</component>
|
</component>
|
||||||
<component name="PropertiesComponent">
|
<component name="PropertiesComponent">
|
||||||
<property name="options.splitter.main.proportions" value="0.3" />
|
<property name="options.splitter.main.proportions" value="0.3" />
|
||||||
<property name="WebServerToolWindowFactoryState" value="false" />
|
<property name="WebServerToolWindowFactoryState" value="false" />
|
||||||
<property name="recentsLimit" value="5" />
|
<property name="recentsLimit" value="5" />
|
||||||
<property name="options.lastSelected" value="editor.preferences.appearance" />
|
<property name="options.lastSelected" value="com.jetbrains.python.configuration.PyIntegratedToolsModulesConfigurable" />
|
||||||
<property name="FullScreen" value="false" />
|
<property name="FullScreen" value="false" />
|
||||||
<property name="DefaultHtmlFileTemplate" value="Html5" />
|
<property name="DefaultHtmlFileTemplate" value="Html5" />
|
||||||
<property name="options.splitter.details.proportions" value="0.2" />
|
<property name="options.splitter.details.proportions" value="0.2" />
|
||||||
@@ -429,6 +405,7 @@
|
|||||||
<recent name="H:\GitHub\rockviewer\three_d_viewer\templates\three_d_viewer" />
|
<recent name="H:\GitHub\rockviewer\three_d_viewer\templates\three_d_viewer" />
|
||||||
</key>
|
</key>
|
||||||
<key name="MoveFile.RECENT_KEYS">
|
<key name="MoveFile.RECENT_KEYS">
|
||||||
|
<recent name="H:\GitHub\rockviewer\three_d_viewer\templates\three_d_viewer" />
|
||||||
<recent name="H:\GitHub\rockviewer\three_d_viewer\templates\three_d_viewer\Old" />
|
<recent name="H:\GitHub\rockviewer\three_d_viewer\templates\three_d_viewer\Old" />
|
||||||
</key>
|
</key>
|
||||||
</component>
|
</component>
|
||||||
@@ -517,27 +494,7 @@
|
|||||||
<option name="PARAMETERS" value="" />
|
<option name="PARAMETERS" value="" />
|
||||||
<method />
|
<method />
|
||||||
</configuration>
|
</configuration>
|
||||||
<configuration default="true" type="Python.DjangoServer" factoryName="Django server">
|
<configuration default="true" type="JavascriptDebugType" factoryName="JavaScript Debug" singleton="true">
|
||||||
<option name="INTERPRETER_OPTIONS" value="" />
|
|
||||||
<option name="PARENT_ENVS" value="true" />
|
|
||||||
<envs>
|
|
||||||
<env name="PYTHONUNBUFFERED" value="1" />
|
|
||||||
</envs>
|
|
||||||
<option name="SDK_HOME" value="" />
|
|
||||||
<option name="WORKING_DIRECTORY" value="" />
|
|
||||||
<option name="IS_MODULE_SDK" value="false" />
|
|
||||||
<option name="ADD_CONTENT_ROOTS" value="true" />
|
|
||||||
<option name="ADD_SOURCE_ROOTS" value="true" />
|
|
||||||
<module name="rockviewer" />
|
|
||||||
<option name="launchJavascriptDebuger" value="false" />
|
|
||||||
<option name="port" value="8000" />
|
|
||||||
<option name="host" value="" />
|
|
||||||
<option name="additionalOptions" value="" />
|
|
||||||
<option name="browserUrl" value="" />
|
|
||||||
<option name="runTestServer" value="false" />
|
|
||||||
<option name="runNoReload" value="false" />
|
|
||||||
<option name="useCustomRunCommand" value="false" />
|
|
||||||
<option name="customRunCommand" value="" />
|
|
||||||
<method />
|
<method />
|
||||||
</configuration>
|
</configuration>
|
||||||
<configuration default="true" type="tests" factoryName="Unittests">
|
<configuration default="true" type="tests" factoryName="Unittests">
|
||||||
@@ -563,7 +520,27 @@
|
|||||||
<option name="USE_PARAM" value="false" />
|
<option name="USE_PARAM" value="false" />
|
||||||
<method />
|
<method />
|
||||||
</configuration>
|
</configuration>
|
||||||
<configuration default="true" type="JavascriptDebugType" factoryName="JavaScript Debug" singleton="true">
|
<configuration default="true" type="Python.DjangoServer" factoryName="Django server">
|
||||||
|
<option name="INTERPRETER_OPTIONS" value="" />
|
||||||
|
<option name="PARENT_ENVS" value="true" />
|
||||||
|
<envs>
|
||||||
|
<env name="PYTHONUNBUFFERED" value="1" />
|
||||||
|
</envs>
|
||||||
|
<option name="SDK_HOME" value="" />
|
||||||
|
<option name="WORKING_DIRECTORY" value="" />
|
||||||
|
<option name="IS_MODULE_SDK" value="false" />
|
||||||
|
<option name="ADD_CONTENT_ROOTS" value="true" />
|
||||||
|
<option name="ADD_SOURCE_ROOTS" value="true" />
|
||||||
|
<module name="rockviewer" />
|
||||||
|
<option name="launchJavascriptDebuger" value="false" />
|
||||||
|
<option name="port" value="8000" />
|
||||||
|
<option name="host" value="" />
|
||||||
|
<option name="additionalOptions" value="" />
|
||||||
|
<option name="browserUrl" value="" />
|
||||||
|
<option name="runTestServer" value="false" />
|
||||||
|
<option name="runNoReload" value="false" />
|
||||||
|
<option name="useCustomRunCommand" value="false" />
|
||||||
|
<option name="customRunCommand" value="" />
|
||||||
<method />
|
<method />
|
||||||
</configuration>
|
</configuration>
|
||||||
<configuration default="true" type="tests" factoryName="Doctests">
|
<configuration default="true" type="tests" factoryName="Doctests">
|
||||||
@@ -672,32 +649,36 @@
|
|||||||
<created>1392989898846</created>
|
<created>1392989898846</created>
|
||||||
<updated>1392989898846</updated>
|
<updated>1392989898846</updated>
|
||||||
</task>
|
</task>
|
||||||
<option name="localTasksCounter" value="2" />
|
<task id="LOCAL-00002" summary="Set mineral properties to use the correct font">
|
||||||
|
<created>1393200126352</created>
|
||||||
|
<updated>1393200126352</updated>
|
||||||
|
</task>
|
||||||
|
<option name="localTasksCounter" value="3" />
|
||||||
<servers />
|
<servers />
|
||||||
</component>
|
</component>
|
||||||
<component name="ToolWindowManager">
|
<component name="ToolWindowManager">
|
||||||
<frame x="0" y="36" width="1920" height="1175" extended-state="0" />
|
<frame x="-8" y="-8" width="2576" height="1576" extended-state="6" />
|
||||||
<editor active="false" />
|
<editor active="false" />
|
||||||
<layout>
|
<layout>
|
||||||
|
<window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
|
||||||
<window_info id="Changes" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
|
<window_info id="Changes" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
|
||||||
<window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32944608" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
|
<window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32944608" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
|
||||||
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
|
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
|
||||||
<window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
|
<window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
|
||||||
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
|
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
|
||||||
<window_info id="Project" active="true" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.26124197" sideWeight="0.6705539" order="0" side_tool="false" content_ui="combo" />
|
<window_info id="Project" active="true" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.2609375" sideWeight="0.6705539" order="0" side_tool="false" content_ui="combo" />
|
||||||
<window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.39941692" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
|
<window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.39889196" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
|
||||||
<window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
|
<window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
|
||||||
<window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="true" content_ui="tabs" />
|
<window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="true" content_ui="tabs" />
|
||||||
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32889733" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
|
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.32825485" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
|
||||||
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
|
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
|
||||||
<window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
|
<window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
|
||||||
<window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
|
<window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
|
||||||
<window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
|
|
||||||
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
|
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
|
||||||
<window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
|
<window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
|
||||||
<window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="SLIDING" type="SLIDING" visible="false" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
|
<window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="SLIDING" type="SLIDING" visible="false" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
|
||||||
<window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
|
|
||||||
<window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
|
<window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
|
||||||
|
<window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
|
||||||
</layout>
|
</layout>
|
||||||
</component>
|
</component>
|
||||||
<component name="Vcs.Log.UiProperties">
|
<component name="Vcs.Log.UiProperties">
|
||||||
@@ -713,58 +694,103 @@
|
|||||||
<TodoPanelSettings />
|
<TodoPanelSettings />
|
||||||
</option>
|
</option>
|
||||||
<MESSAGE value="Changes to the mineral practice page" />
|
<MESSAGE value="Changes to the mineral practice page" />
|
||||||
<option name="LAST_COMMIT_MESSAGE" value="Changes to the mineral practice page" />
|
<MESSAGE value="Set mineral properties to use the correct font" />
|
||||||
|
<MESSAGE value="Added Rock and Fossil pages" />
|
||||||
|
<option name="LAST_COMMIT_MESSAGE" value="Added Rock and Fossil pages" />
|
||||||
</component>
|
</component>
|
||||||
<component name="XDebuggerManager">
|
<component name="XDebuggerManager">
|
||||||
<breakpoint-manager>
|
<breakpoint-manager>
|
||||||
<option name="time" value="8" />
|
<option name="time" value="15" />
|
||||||
</breakpoint-manager>
|
</breakpoint-manager>
|
||||||
</component>
|
</component>
|
||||||
<component name="editorHistoryManager">
|
<component name="editorHistoryManager">
|
||||||
|
<entry file="file://$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/Old/base.html">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state line="33" column="16" selection-start="1288" selection-end="1288" vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="1241">
|
||||||
|
<folding />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/Old/mineral_detail.html">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state line="62" column="23" selection-start="1779" selection-end="1779" vertical-scroll-proportion="0.0" vertical-offset="1054" max-vertical-offset="1496">
|
||||||
|
<folding />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/minerals_practice.html">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state line="19" column="0" selection-start="485" selection-end="485" vertical-scroll-proportion="0.0" vertical-offset="323" max-vertical-offset="2040">
|
||||||
|
<folding />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/Old/detail.html">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state line="389" column="50" selection-start="10513" selection-end="10523" vertical-scroll-proportion="0.0" vertical-offset="6613" max-vertical-offset="7395">
|
||||||
|
<folding />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/docs/prototype/3dvol/revised/minerals_practice.html">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state line="96" column="63" selection-start="4901" selection-end="4916" vertical-scroll-proportion="0.0" vertical-offset="1632" max-vertical-offset="2040">
|
||||||
|
<folding />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/base.html">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state line="10" column="7" selection-start="430" selection-end="430" vertical-scroll-proportion="0.0" vertical-offset="170" max-vertical-offset="1156">
|
||||||
|
<folding />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/mineral_detail.html">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state line="418" column="56" selection-start="11469" selection-end="11469" vertical-scroll-proportion="0.0" vertical-offset="7106" max-vertical-offset="7956">
|
||||||
|
<folding />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/three_d_viewer/views.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state line="60" column="19" selection-start="2044" selection-end="2044" vertical-scroll-proportion="0.0" vertical-offset="1020" max-vertical-offset="1122">
|
||||||
|
<folding />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/three_d_viewer/models.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state line="67" column="0" selection-start="1993" selection-end="1993" vertical-scroll-proportion="0.0" vertical-offset="1139" max-vertical-offset="2193">
|
||||||
|
<folding>
|
||||||
|
<element signature="e#62#90#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/three_d_viewer/urls.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state line="12" column="0" selection-start="476" selection-end="476" vertical-scroll-proportion="0.0" vertical-offset="204" max-vertical-offset="306">
|
||||||
|
<folding />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/Old/sampletree.html">
|
<entry file="file://$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/Old/sampletree.html">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="980" />
|
<state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="980" />
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$USER_HOME$/.virtualenvs/rockviewer/local/lib/python2.7/site-packages/django/views/generic/base.py">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state line="114" column="4" selection-start="4071" selection-end="4071" vertical-scroll-proportion="0.3321617" vertical-offset="1371" max-vertical-offset="3225" />
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/Old/treenode.html">
|
<entry file="file://$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/Old/treenode.html">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state line="10" column="76" selection-start="438" selection-end="498" vertical-scroll-proportion="-6.25" vertical-offset="0" max-vertical-offset="285" />
|
<state line="10" column="76" selection-start="438" selection-end="498" vertical-scroll-proportion="-6.25" vertical-offset="0" max-vertical-offset="285" />
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/home.html">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state line="6" column="58" selection-start="231" selection-end="231" vertical-scroll-proportion="-3.75" vertical-offset="0" max-vertical-offset="495" />
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/three_d_viewer/urls.py">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state line="12" column="4" selection-start="769" selection-end="769" vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="330">
|
|
||||||
<folding />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/three_d_viewer/models.py">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state line="67" column="9" selection-start="2009" selection-end="2009" vertical-scroll-proportion="0.0" vertical-offset="540" max-vertical-offset="1935">
|
|
||||||
<folding />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/Old/home.html">
|
<entry file="file://$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/Old/home.html">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="643" />
|
<state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="643" />
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/three_d_viewer/css/custom.css">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="643" />
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/docs/prototype/3dvol/revised/minerals_practice.html">
|
<entry file="file://$PROJECT_DIR$/docs/prototype/3dvol/revised/minerals_practice.html">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state line="96" column="63" selection-start="4901" selection-end="4916" vertical-scroll-proportion="0.0" vertical-offset="1001" max-vertical-offset="1800">
|
<state line="96" column="63" selection-start="4901" selection-end="4916" vertical-scroll-proportion="0.0" vertical-offset="1001" max-vertical-offset="1800">
|
||||||
@@ -772,26 +798,6 @@
|
|||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/base.html">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state line="10" column="19" selection-start="272" selection-end="272" vertical-scroll-proportion="0.0" vertical-offset="150" max-vertical-offset="990">
|
|
||||||
<folding />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/minerals_practice.html">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state line="19" column="18" selection-start="546" selection-end="546" vertical-scroll-proportion="0.0" vertical-offset="285" max-vertical-offset="420">
|
|
||||||
<folding>
|
|
||||||
<marker date="1393026264539" expanded="true" signature="79:525" placeholder="..." />
|
|
||||||
<marker date="1393026264539" expanded="true" signature="106:441" placeholder="..." />
|
|
||||||
<marker date="1393026264539" expanded="true" signature="119:430" placeholder="..." />
|
|
||||||
<marker date="1393026264539" expanded="true" signature="161:416" placeholder="..." />
|
|
||||||
<marker date="1393026264539" expanded="true" signature="210:398" placeholder="..." />
|
|
||||||
</folding>
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/Old/base.html">
|
<entry file="file://$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/Old/base.html">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state line="33" column="16" selection-start="1288" selection-end="1288" vertical-scroll-proportion="0.0" vertical-offset="440" max-vertical-offset="1095">
|
<state line="33" column="16" selection-start="1288" selection-end="1288" vertical-scroll-proportion="0.0" vertical-offset="440" max-vertical-offset="1095">
|
||||||
@@ -813,20 +819,110 @@
|
|||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/three_d_viewer/views.py">
|
<entry file="file://$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/minerals_practice.html">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state line="65" column="19" selection-start="2102" selection-end="2102" vertical-scroll-proportion="0.0" vertical-offset="662" max-vertical-offset="1305">
|
<state line="2" column="46" selection-start="99" selection-end="99" vertical-scroll-proportion="-1.3076923" vertical-offset="0" max-vertical-offset="136">
|
||||||
<folding />
|
<folding />
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/minerals_selftest.html">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="944">
|
||||||
|
<folding>
|
||||||
|
<marker date="1393199109031" expanded="true" signature="117:456" placeholder="..." />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/home.html">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state line="6" column="58" selection-start="231" selection-end="231" vertical-scroll-proportion="0.13043478" vertical-offset="0" max-vertical-offset="782">
|
||||||
|
<folding />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/sample_practice.html">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state line="6" column="107" selection-start="174" selection-end="228" vertical-scroll-proportion="-3.9230769" vertical-offset="0" max-vertical-offset="476">
|
||||||
|
<folding />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/sample_detail.html">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state line="74" column="0" selection-start="1859" selection-end="1859" vertical-scroll-proportion="-48.384617" vertical-offset="0" max-vertical-offset="6987">
|
||||||
|
<folding>
|
||||||
|
<element signature="e#10953#10971#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/mineral_detail.html">
|
<entry file="file://$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/mineral_detail.html">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state line="418" column="56" selection-start="11478" selection-end="11478" vertical-scroll-proportion="0.3713389" vertical-offset="5915" max-vertical-offset="7020">
|
<state line="32" column="40" selection-start="1034" selection-end="1034" vertical-scroll-proportion="-20.923077" vertical-offset="0" max-vertical-offset="1445">
|
||||||
<folding />
|
<folding />
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/base.html">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state line="40" column="80" selection-start="2035" selection-end="2035" vertical-scroll-proportion="-18.0" vertical-offset="212" max-vertical-offset="1122">
|
||||||
|
<folding />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/fossil_detail.html">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state line="32" column="39" selection-start="1032" selection-end="1032" vertical-scroll-proportion="-20.923077" vertical-offset="0" max-vertical-offset="697">
|
||||||
|
<folding />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/fossil_practice.html">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state line="2" column="39" selection-start="92" selection-end="92" vertical-scroll-proportion="-1.3076923" vertical-offset="0" max-vertical-offset="136">
|
||||||
|
<folding />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/rock_detail.html">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state line="3" column="16" selection-start="84" selection-end="84" vertical-scroll-proportion="-1.9615384" vertical-offset="0" max-vertical-offset="697">
|
||||||
|
<folding />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/three_d_viewer/templates/three_d_viewer/rock_practice.html">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state line="2" column="51" selection-start="104" selection-end="104" vertical-scroll-proportion="-1.3076923" vertical-offset="0" max-vertical-offset="136">
|
||||||
|
<folding />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/three_d_viewer/urls.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state line="15" column="79" selection-start="1112" selection-end="1112" vertical-scroll-proportion="0.21911922" vertical-offset="0" max-vertical-offset="931">
|
||||||
|
<folding />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/three_d_viewer/views.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state line="132" column="48" selection-start="4307" selection-end="4307" vertical-scroll-proportion="0.0" vertical-offset="1457" max-vertical-offset="2380">
|
||||||
|
<folding />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/three_d_viewer/models.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state line="76" column="48" selection-start="2316" selection-end="2316" vertical-scroll-proportion="1.0130011" vertical-offset="357" max-vertical-offset="2431">
|
||||||
|
<folding>
|
||||||
|
<element signature="e#62#90#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
||||||
|
|
||||||
|
|||||||
BIN
db.sqlite3
BIN
db.sqlite3
Binary file not shown.
@@ -59,13 +59,22 @@ class Sample(CommonInfo):
|
|||||||
#Use the inheritance manager for handling subclasses
|
#Use the inheritance manager for handling subclasses
|
||||||
objects = InheritanceManager()
|
objects = InheritanceManager()
|
||||||
|
|
||||||
|
def GetTopParent(self, current_parent):
|
||||||
|
if current_parent.parent is None:
|
||||||
|
return current_parent
|
||||||
|
else:
|
||||||
|
return self.GetTopParent(current_parent.parent)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def url(self):
|
def url(self):
|
||||||
return 'three_d_viewer:mineral_detail'
|
cat = self.GetTopParent(self.parent)
|
||||||
#if isinstance(self, Mineral):
|
|
||||||
# return 'three_d_viewer:mineral_detail'
|
if cat.name == 'Fossils':
|
||||||
#else:
|
return 'three_d_viewer:fossil_detail'
|
||||||
# return 'three_d_viewer:detail'
|
elif cat.name == 'Rocks':
|
||||||
|
return 'three_d_viewer:rock_detail'
|
||||||
|
else:
|
||||||
|
return 'three_d_viewer:sample_detail'
|
||||||
|
|
||||||
|
|
||||||
class Mineral(Sample):
|
class Mineral(Sample):
|
||||||
@@ -84,6 +93,10 @@ class Mineral(Sample):
|
|||||||
identifying_features = models.CharField(max_length=1000, blank=True)
|
identifying_features = models.CharField(max_length=1000, blank=True)
|
||||||
occurance = models.CharField(max_length=1000, blank=True)
|
occurance = models.CharField(max_length=1000, blank=True)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def url(self):
|
||||||
|
return 'three_d_viewer:mineral_detail'
|
||||||
|
|
||||||
|
|
||||||
class Question(models.Model):
|
class Question(models.Model):
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -37,8 +37,8 @@
|
|||||||
<li class='last'><a href="{% url 'three_d_viewer:minerals_selftest' %}"><span>Self Test</span></a></li>
|
<li class='last'><a href="{% url 'three_d_viewer:minerals_selftest' %}"><span>Self Test</span></a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li class="mainitem"><a href='#'><span>Rocks</span></a></li>
|
<li class="mainitem"><a href="{% url 'three_d_viewer:rocks_practice' %}"><span>Rocks</span></a></li>
|
||||||
<li class='last mainitem'><a href='#'><span>Fossils</span></a></li>
|
<li class='last mainitem'><a href="{% url 'three_d_viewer:fossil_practice' %}"><span>Fossils</span></a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div><!-- CLOSE CSSMENU !-->
|
</div><!-- CLOSE CSSMENU !-->
|
||||||
</div><!-- CLOSE MENUCONTAINER !-->
|
</div><!-- CLOSE MENUCONTAINER !-->
|
||||||
|
|||||||
35
three_d_viewer/templates/three_d_viewer/fossil_detail.html
Normal file
35
three_d_viewer/templates/three_d_viewer/fossil_detail.html
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
{% extends "three_d_viewer/sample_detail.html" %}
|
||||||
|
|
||||||
|
{% block load %}
|
||||||
|
function load(){
|
||||||
|
window.addEventListener('resize', resizeCanvas, false);
|
||||||
|
resizeCanvas();
|
||||||
|
|
||||||
|
var sampleFilename = '{{ sample.model_filename|escapejs }}';
|
||||||
|
|
||||||
|
if (sampleFilename.trim() == "")
|
||||||
|
{
|
||||||
|
document.getElementById("progress").innerHTML = "No model defined!";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
request = new XMLHttpRequest();
|
||||||
|
request.open("GET", '{{ MEDIA_URL }}' + sampleFilename, true);
|
||||||
|
request.overrideMimeType("text/plain; charset=x-user-defined");
|
||||||
|
request.onreadystatechange = function(){
|
||||||
|
if (this.readyState == 3 || this.readyState == 4){
|
||||||
|
document.getElementById("progress").innerHTML = "Downloading... "
|
||||||
|
+ formatNumber(this.responseText.length / 1048576, 2) + " MB";
|
||||||
|
}
|
||||||
|
if (this.readyState == 4 && (this.status == 200 || this.status == 0) ){
|
||||||
|
document.getElementById("progress").innerHTML = "Unpacking...";
|
||||||
|
setTimeout(loaded, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
request.send();
|
||||||
|
}
|
||||||
|
{% endblock load %}
|
||||||
|
|
||||||
|
{% block menu_header %}Select a Fossil{% endblock %}
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
{% extends "three_d_viewer/sample_practice.html" %}
|
||||||
|
|
||||||
|
{% block menu_header %}Select a Fossil{% endblock %}
|
||||||
@@ -1,72 +1,4 @@
|
|||||||
{% extends "three_d_viewer/minerals_practice.html" %}
|
{% extends "three_d_viewer/sample_detail.html" %}
|
||||||
{% load static %}
|
|
||||||
|
|
||||||
{% block includes %}
|
|
||||||
{{ block.super }}
|
|
||||||
<script type="text/javascript" src="{% static "three_d_viewer/js/lzma.js" %}"></script>
|
|
||||||
<script type="text/javascript" src="{% static "three_d_viewer/js/ctm.js" %}"></script>
|
|
||||||
<script type="text/javascript" src="{% static "three_d_viewer/js/glMatrix-0.9.5.min.js" %}"></script>
|
|
||||||
|
|
||||||
<script id="shader-vs" type="x-shader/x-vertex">
|
|
||||||
attribute vec3 aVertexPosition;
|
|
||||||
attribute vec4 aVertexColor;
|
|
||||||
|
|
||||||
uniform mat4 uMVMatrix;
|
|
||||||
uniform mat4 uPMatrix;
|
|
||||||
|
|
||||||
varying vec4 vColor;
|
|
||||||
|
|
||||||
void main(void){
|
|
||||||
gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1);
|
|
||||||
|
|
||||||
vColor = aVertexColor;
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<script id="shader-fs" type="x-shader/x-fragment">
|
|
||||||
#ifdef GL_ES
|
|
||||||
precision highp float;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
varying vec4 vColor;
|
|
||||||
|
|
||||||
void main(void){
|
|
||||||
gl_FragColor = vec4(vColor.rgb, 1);;
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<script type="text/javascript">
|
|
||||||
var request;
|
|
||||||
var file;
|
|
||||||
var gl;
|
|
||||||
var shaderProgram;
|
|
||||||
var mvMatrix = mat4.create();
|
|
||||||
var pMatrix = mat4.create();
|
|
||||||
var vertexIndexBuffer;
|
|
||||||
var vertexPositionBuffer;
|
|
||||||
var vertexColorBuffer;
|
|
||||||
var offsets = [];
|
|
||||||
var mouseDown = false;
|
|
||||||
var lastMouseX;
|
|
||||||
var lastMouseY;
|
|
||||||
var translationMatrix = vec3.create();
|
|
||||||
var rotationMatrix = mat4.create();
|
|
||||||
|
|
||||||
window.requestAnimFrame = (function(){
|
|
||||||
return window.requestAnimationFrame ||
|
|
||||||
window.webkitRequestAnimationFrame ||
|
|
||||||
window.mozRequestAnimationFrame ||
|
|
||||||
window.oRequestAnimationFrame ||
|
|
||||||
window.msRequestAnimationFrame ||
|
|
||||||
function(callback, element){
|
|
||||||
window.setTimeout(callback, 1000/60);
|
|
||||||
};
|
|
||||||
})();
|
|
||||||
|
|
||||||
function formatNumber(numero, decimales){
|
|
||||||
var pot = Math.pow(10, decimales);
|
|
||||||
return parseInt(numero * pot) / pot;
|
|
||||||
}
|
|
||||||
|
|
||||||
{% block load %}
|
{% block load %}
|
||||||
function load(){
|
function load(){
|
||||||
@@ -98,317 +30,9 @@ function load(){
|
|||||||
}
|
}
|
||||||
{% endblock load %}
|
{% endblock load %}
|
||||||
|
|
||||||
function loaded(){
|
{% block menu_header %}Select a Mineral{% endblock %}
|
||||||
/*if ( navigator.userAgent.indexOf("WebKit") == -1){
|
|
||||||
var worker = new Worker("loader.js");
|
|
||||||
|
|
||||||
worker.onmessage = function(event){
|
{% block sample_detail %}
|
||||||
file = event.data;
|
|
||||||
webGLStart();
|
|
||||||
document.getElementById("progress").innerHTML = "";
|
|
||||||
};
|
|
||||||
|
|
||||||
worker.postMessage(request.responseText);
|
|
||||||
|
|
||||||
}else{*/
|
|
||||||
file = new CTM.File( new CTM.Stream(request.responseText) );
|
|
||||||
webGLStart();
|
|
||||||
document.getElementById("progress").innerHTML = "";
|
|
||||||
//}
|
|
||||||
}
|
|
||||||
|
|
||||||
function webGLStart(){
|
|
||||||
var canvas = document.getElementById("canvas");
|
|
||||||
canvas.oncontextmenu = function() { return false; } // supress the context menu in the canvas
|
|
||||||
|
|
||||||
|
|
||||||
initGL(canvas);
|
|
||||||
initBoundingBox();
|
|
||||||
initOffsets();
|
|
||||||
initShaders();
|
|
||||||
initBuffers();
|
|
||||||
|
|
||||||
gl.clearColor(0, 0, 0, 0);
|
|
||||||
gl.enable(gl.DEPTH_TEST);
|
|
||||||
gl.viewport(0, 0, gl.viewportWidth, gl.viewportHeight);
|
|
||||||
|
|
||||||
vec3.set(translationMatrix, [0, 0, -100]);
|
|
||||||
mat4.identity(rotationMatrix);
|
|
||||||
|
|
||||||
canvas.onmousedown = handleMouseDown;
|
|
||||||
canvas.onmouseup = handleMouseUp;
|
|
||||||
canvas.onmousemove = handleMouseMove;
|
|
||||||
canvas.onmousewheel = handleMouseWheel;
|
|
||||||
|
|
||||||
canvas.addEventListener("DOMMouseScroll", handleMouseWheel, false);
|
|
||||||
|
|
||||||
tick();
|
|
||||||
}
|
|
||||||
|
|
||||||
function initGL(canvas){
|
|
||||||
try{
|
|
||||||
gl = canvas.getContext("experimental-webgl");
|
|
||||||
gl.viewportWidth = canvas.width;
|
|
||||||
gl.viewportHeight = canvas.height;
|
|
||||||
}catch(e){
|
|
||||||
}
|
|
||||||
if (!gl){
|
|
||||||
alert("Could not initialise WebGL, sorry :-(");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function initBoundingBox(){
|
|
||||||
var v = file.body.vertices;
|
|
||||||
var x = Infinity, y = Infinity, z = Infinity;
|
|
||||||
var X = -Infinity, Y = -Infinity, Z = -Infinity;
|
|
||||||
|
|
||||||
for (var i = 0; i < v.length; i += 3){
|
|
||||||
if (v[i] < x) x = v[i];
|
|
||||||
if (v[i+1] < y) y = v[i+1];
|
|
||||||
if (v[i+2] < z) z = v[i+2];
|
|
||||||
|
|
||||||
if (v[i] > X) X = v[i];
|
|
||||||
if (v[i+1] > Y) Y = v[i+1];
|
|
||||||
if (v[i+2] > Z) Z = v[i+2];
|
|
||||||
}
|
|
||||||
|
|
||||||
for (var i = 0; i < v.length; i += 3){
|
|
||||||
v[i] = -( (X-x)/2 ) + ( v[i] - x);
|
|
||||||
v[i+1] = -( (Y-y)/2 ) + ( v[i+1] - y);
|
|
||||||
v[i+2] = -( (Z-z)/2 ) + ( v[i+2] - z);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function initOffsets(){
|
|
||||||
var indices = file.body.indices;
|
|
||||||
var start = 0;
|
|
||||||
var min = file.body.vertices.length;
|
|
||||||
var max = 0;
|
|
||||||
var minPrev = min;
|
|
||||||
|
|
||||||
for (var i = 0; i < indices.length;){
|
|
||||||
|
|
||||||
for (var j = 0; j < 3; ++ j){
|
|
||||||
var idx = indices[i ++];
|
|
||||||
|
|
||||||
if (idx < min) min = idx;
|
|
||||||
if (idx > max) max = idx;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (max - min > 65535){
|
|
||||||
i -= 3;
|
|
||||||
|
|
||||||
for (var k = start; k < i; ++ k){
|
|
||||||
indices[k] -= minPrev;
|
|
||||||
}
|
|
||||||
offsets.push( {start: start, count: i - start, index: minPrev} );
|
|
||||||
|
|
||||||
start = i;
|
|
||||||
min = file.body.vertices.length;
|
|
||||||
max = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
minPrev = min;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (var k = start; k < i; ++ k){
|
|
||||||
indices[k] -= minPrev;
|
|
||||||
}
|
|
||||||
offsets.push( {start: start, count: i - start, index: minPrev} );
|
|
||||||
}
|
|
||||||
|
|
||||||
function initShaders(){
|
|
||||||
var fragmentShader = getShader(gl, "shader-fs");
|
|
||||||
var vertexShader = getShader(gl, "shader-vs");
|
|
||||||
|
|
||||||
shaderProgram = gl.createProgram();
|
|
||||||
gl.attachShader(shaderProgram, vertexShader);
|
|
||||||
gl.attachShader(shaderProgram, fragmentShader);
|
|
||||||
gl.linkProgram(shaderProgram);
|
|
||||||
gl.useProgram(shaderProgram);
|
|
||||||
|
|
||||||
shaderProgram.vertexPositionAttribute = gl.getAttribLocation(shaderProgram, "aVertexPosition");
|
|
||||||
gl.enableVertexAttribArray(shaderProgram.vertexPositionAttribute);
|
|
||||||
|
|
||||||
shaderProgram.vertexColorAttribute = gl.getAttribLocation(shaderProgram, "aVertexColor");
|
|
||||||
gl.enableVertexAttribArray(shaderProgram.vertexColorAttribute);
|
|
||||||
|
|
||||||
shaderProgram.pMatrixUniform = gl.getUniformLocation(shaderProgram, "uPMatrix");
|
|
||||||
shaderProgram.mvMatrixUniform = gl.getUniformLocation(shaderProgram, "uMVMatrix");
|
|
||||||
}
|
|
||||||
|
|
||||||
function getShader(gl, id){
|
|
||||||
var shaderScript = document.getElementById(id);
|
|
||||||
|
|
||||||
var str = "";
|
|
||||||
var node = shaderScript.firstChild;
|
|
||||||
while(node){
|
|
||||||
if (node.nodeType == 3){
|
|
||||||
str += node.textContent;
|
|
||||||
}
|
|
||||||
node = node.nextSibling;
|
|
||||||
}
|
|
||||||
|
|
||||||
var shader;
|
|
||||||
if (shaderScript.type == "x-shader/x-fragment"){
|
|
||||||
shader = gl.createShader(gl.FRAGMENT_SHADER);
|
|
||||||
}else if (shaderScript.type == "x-shader/x-vertex"){
|
|
||||||
shader = gl.createShader(gl.VERTEX_SHADER);
|
|
||||||
}
|
|
||||||
|
|
||||||
gl.shaderSource(shader, str);
|
|
||||||
gl.compileShader(shader);
|
|
||||||
|
|
||||||
return shader;
|
|
||||||
}
|
|
||||||
|
|
||||||
function initBuffers(){
|
|
||||||
vertexIndexBuffer = gl.createBuffer();
|
|
||||||
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, vertexIndexBuffer);
|
|
||||||
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER,
|
|
||||||
new Uint16Array(file.body.indices), gl.STATIC_DRAW);
|
|
||||||
vertexIndexBuffer.itemSize = 1;
|
|
||||||
vertexIndexBuffer.numItems = file.body.indices.length;
|
|
||||||
|
|
||||||
vertexPositionBuffer = gl.createBuffer();
|
|
||||||
gl.bindBuffer(gl.ARRAY_BUFFER, vertexPositionBuffer);
|
|
||||||
gl.bufferData(gl.ARRAY_BUFFER,
|
|
||||||
file.body.vertices, gl.STATIC_DRAW);
|
|
||||||
vertexPositionBuffer.itemSize = 3;
|
|
||||||
vertexPositionBuffer.numItems = file.body.vertices.length;
|
|
||||||
|
|
||||||
vertexColorBuffer = gl.createBuffer();
|
|
||||||
gl.bindBuffer(gl.ARRAY_BUFFER, vertexColorBuffer);
|
|
||||||
gl.bufferData(gl.ARRAY_BUFFER,
|
|
||||||
file.body.attrMaps[0].attr, gl.STATIC_DRAW);
|
|
||||||
vertexColorBuffer.itemSize = 4;
|
|
||||||
vertexColorBuffer.numItems = file.body.attrMaps[0].attr.length;
|
|
||||||
}
|
|
||||||
|
|
||||||
function tick(){
|
|
||||||
drawScene();
|
|
||||||
requestAnimFrame(tick);
|
|
||||||
}
|
|
||||||
|
|
||||||
function drawScene(){
|
|
||||||
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
|
|
||||||
|
|
||||||
mat4.perspective(45, gl.viewportWidth / gl.viewportHeight, 0.01, 1200.0, pMatrix);
|
|
||||||
mat4.translate(pMatrix, [0.0, 0,-.6]);
|
|
||||||
|
|
||||||
mat4.identity(mvMatrix);
|
|
||||||
mat4.translate(mvMatrix, translationMatrix);
|
|
||||||
mat4.multiply(mvMatrix, rotationMatrix);
|
|
||||||
|
|
||||||
gl.uniformMatrix4fv(shaderProgram.pMatrixUniform, false, pMatrix);
|
|
||||||
gl.uniformMatrix4fv(shaderProgram.mvMatrixUniform, false, mvMatrix);
|
|
||||||
|
|
||||||
var normalMatrix = mat3.create();
|
|
||||||
mat4.toInverseMat3(mvMatrix, normalMatrix);
|
|
||||||
mat3.transpose(normalMatrix);
|
|
||||||
gl.uniformMatrix3fv(shaderProgram.nMatrixUniform, false, normalMatrix);
|
|
||||||
|
|
||||||
for (var i = 0; i < offsets.length; ++ i){
|
|
||||||
gl.bindBuffer(gl.ARRAY_BUFFER, vertexPositionBuffer);
|
|
||||||
gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute,
|
|
||||||
vertexPositionBuffer.itemSize, gl.FLOAT, false, 0, offsets[i].index * 4 * 3);
|
|
||||||
|
|
||||||
gl.bindBuffer(gl.ARRAY_BUFFER, vertexColorBuffer);
|
|
||||||
gl.vertexAttribPointer(shaderProgram.vertexColorAttribute,
|
|
||||||
vertexColorBuffer.itemSize, gl.FLOAT, false, 0, offsets[i].index * 4 * 4);
|
|
||||||
|
|
||||||
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, vertexIndexBuffer);
|
|
||||||
gl.drawElements(gl.TRIANGLES, offsets[i].count, gl.UNSIGNED_SHORT, offsets[i].start * 2); // 2 = uint16
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function degToRad(degrees){
|
|
||||||
return degrees * Math.PI / 180;
|
|
||||||
}
|
|
||||||
|
|
||||||
function handleMouseWheel(event){
|
|
||||||
event.preventDefault();
|
|
||||||
|
|
||||||
var delta = event.wheelDelta | -event.detail;
|
|
||||||
if (delta < 0){
|
|
||||||
translationMatrix[2] -= .05;
|
|
||||||
}else{
|
|
||||||
translationMatrix[2] += .05;
|
|
||||||
}
|
|
||||||
|
|
||||||
event.returnValue=false;
|
|
||||||
}
|
|
||||||
|
|
||||||
function handleMouseDown(event){
|
|
||||||
mouseDown = true;
|
|
||||||
lastMouseX = event.clientX;
|
|
||||||
lastMouseY = event.clientY;
|
|
||||||
}
|
|
||||||
|
|
||||||
function handleMouseUp(event){
|
|
||||||
mouseDown = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
function handleMouseMove(event){
|
|
||||||
if (mouseDown){
|
|
||||||
var newX = event.clientX;
|
|
||||||
var newY = event.clientY;
|
|
||||||
var deltaX = newX - lastMouseX;
|
|
||||||
var deltaY = newY - lastMouseY;
|
|
||||||
|
|
||||||
switch (event.which) {
|
|
||||||
case 1: // left mouse
|
|
||||||
|
|
||||||
|
|
||||||
var newRotationMatrix = mat4.create();
|
|
||||||
mat4.identity(newRotationMatrix);
|
|
||||||
mat4.rotate(newRotationMatrix, degToRad(deltaX / 5), [0, 1, 0]);
|
|
||||||
|
|
||||||
mat4.rotate(newRotationMatrix, degToRad(deltaY / 5), [1, 0, 0]);
|
|
||||||
mat4.multiply(newRotationMatrix, rotationMatrix, rotationMatrix);
|
|
||||||
|
|
||||||
break;
|
|
||||||
case 3: // right mouse
|
|
||||||
//translationMatrix[0] += deltaX;
|
|
||||||
//translationMatrix[1] += deltaY;
|
|
||||||
var newTranslateMatrix = mat4.create();
|
|
||||||
mat4.identity(newTranslateMatrix);
|
|
||||||
mat4.translate(newTranslateMatrix, [deltaX, deltaY, 0], [deltaX, deltaY, 0])
|
|
||||||
console.log('moving ' + deltaX + ', ' + deltaY)
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
lastMouseX = newX
|
|
||||||
lastMouseY = newY;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function resizeCanvas() {
|
|
||||||
var canvas = document.getElementById("canvas");
|
|
||||||
var parent = document.getElementById("virtualObject");
|
|
||||||
|
|
||||||
var canvasWidth1 = canvas.width;
|
|
||||||
var canvasHeight1 = canvas.height;
|
|
||||||
|
|
||||||
canvas.width = parent.offsetWidth;
|
|
||||||
canvas.height = parent.offsetHeight;
|
|
||||||
|
|
||||||
if (gl){
|
|
||||||
/*hmove = canvas.width / 2 - canvasWidth1 / 2
|
|
||||||
vmove = canvas.height / 2 - canvasHeight1 / 2
|
|
||||||
mat4.translate(mvMatrix, [hmove, vmove, 0.0])
|
|
||||||
console.log('Resizing from ' + canvasWidth1 + ' x ' + canvasHeight1 + ' to ' + canvas.width + ' x ' + canvas.height);
|
|
||||||
console.log('moving centre ' + hmove + ' x ' + vmove)*/
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
</script>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block loadscript %}"load()"{% endblock %}
|
|
||||||
|
|
||||||
{% block mineral_detail %}
|
|
||||||
<div id="mineralContainer">
|
<div id="mineralContainer">
|
||||||
<div id="mineralOne">
|
<div id="mineralOne">
|
||||||
<h1 class="subHeadings">{{ mineral.name }}</h1>
|
<h1 class="subHeadings">{{ mineral.name }}</h1>
|
||||||
@@ -454,10 +78,3 @@ function resizeCanvas() {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block 3dcontent %}
|
|
||||||
<div id="virtualObject">
|
|
||||||
<canvas id="canvas" class="example"></canvas>
|
|
||||||
<div><br><span id="progress" style="color: red"></span></div>
|
|
||||||
</div>
|
|
||||||
{% endblock %}
|
|
||||||
@@ -1,23 +1,3 @@
|
|||||||
{% extends "three_d_viewer/base.html" %}
|
{% extends "three_d_viewer/sample_practice.html" %}
|
||||||
|
|
||||||
{% block content %}
|
{% block menu_header %}Select a Mineral{% endblock %}
|
||||||
<div id="sidebar">
|
|
||||||
<div id='mineralMenu'>
|
|
||||||
<ul>
|
|
||||||
<li class="has-sub mainitem"><a href="#">Select a mineral</a>
|
|
||||||
<ul>
|
|
||||||
{% for sample in active_samples %}
|
|
||||||
<li><a href={% url sample.url sample.id %}>{{ sample.name }}</a></li>
|
|
||||||
{% endfor %}
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div><!-- close MINERALMENU !-->
|
|
||||||
{% block mineral_detail %}
|
|
||||||
{% endblock %}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{% block 3dcontent %}
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% endblock %}
|
|
||||||
35
three_d_viewer/templates/three_d_viewer/rock_detail.html
Normal file
35
three_d_viewer/templates/three_d_viewer/rock_detail.html
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
{% extends "three_d_viewer/sample_detail.html" %}
|
||||||
|
|
||||||
|
{% block load %}
|
||||||
|
function load(){
|
||||||
|
window.addEventListener('resize', resizeCanvas, false);
|
||||||
|
resizeCanvas();
|
||||||
|
|
||||||
|
var sampleFilename = '{{ sample.model_filename|escapejs }}';
|
||||||
|
|
||||||
|
if (sampleFilename.trim() == "")
|
||||||
|
{
|
||||||
|
document.getElementById("progress").innerHTML = "No model defined!";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
request = new XMLHttpRequest();
|
||||||
|
request.open("GET", '{{ MEDIA_URL }}' + sampleFilename, true);
|
||||||
|
request.overrideMimeType("text/plain; charset=x-user-defined");
|
||||||
|
request.onreadystatechange = function(){
|
||||||
|
if (this.readyState == 3 || this.readyState == 4){
|
||||||
|
document.getElementById("progress").innerHTML = "Downloading... "
|
||||||
|
+ formatNumber(this.responseText.length / 1048576, 2) + " MB";
|
||||||
|
}
|
||||||
|
if (this.readyState == 4 && (this.status == 200 || this.status == 0) ){
|
||||||
|
document.getElementById("progress").innerHTML = "Unpacking...";
|
||||||
|
setTimeout(loaded, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
request.send();
|
||||||
|
}
|
||||||
|
{% endblock load %}
|
||||||
|
|
||||||
|
{% block menu_header %}Select a rock{% endblock %}
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
{% extends "three_d_viewer/sample_practice.html" %}
|
||||||
|
|
||||||
|
{% block menu_header %}Select a Rock{% endblock %}
|
||||||
406
three_d_viewer/templates/three_d_viewer/sample_detail.html
Normal file
406
three_d_viewer/templates/three_d_viewer/sample_detail.html
Normal file
@@ -0,0 +1,406 @@
|
|||||||
|
{% extends "three_d_viewer/sample_practice.html" %}
|
||||||
|
{% load static %}
|
||||||
|
|
||||||
|
{% block includes %}
|
||||||
|
{{ block.super }}
|
||||||
|
<script type="text/javascript" src="{% static "three_d_viewer/js/lzma.js" %}"></script>
|
||||||
|
<script type="text/javascript" src="{% static "three_d_viewer/js/ctm.js" %}"></script>
|
||||||
|
<script type="text/javascript" src="{% static "three_d_viewer/js/glMatrix-0.9.5.min.js" %}"></script>
|
||||||
|
|
||||||
|
<script id="shader-vs" type="x-shader/x-vertex">
|
||||||
|
attribute vec3 aVertexPosition;
|
||||||
|
attribute vec4 aVertexColor;
|
||||||
|
|
||||||
|
uniform mat4 uMVMatrix;
|
||||||
|
uniform mat4 uPMatrix;
|
||||||
|
|
||||||
|
varying vec4 vColor;
|
||||||
|
|
||||||
|
void main(void){
|
||||||
|
gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1);
|
||||||
|
|
||||||
|
vColor = aVertexColor;
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script id="shader-fs" type="x-shader/x-fragment">
|
||||||
|
#ifdef GL_ES
|
||||||
|
precision highp float;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
varying vec4 vColor;
|
||||||
|
|
||||||
|
void main(void){
|
||||||
|
gl_FragColor = vec4(vColor.rgb, 1);;
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
var request;
|
||||||
|
var file;
|
||||||
|
var gl;
|
||||||
|
var shaderProgram;
|
||||||
|
var mvMatrix = mat4.create();
|
||||||
|
var pMatrix = mat4.create();
|
||||||
|
var vertexIndexBuffer;
|
||||||
|
var vertexPositionBuffer;
|
||||||
|
var vertexColorBuffer;
|
||||||
|
var offsets = [];
|
||||||
|
var mouseDown = false;
|
||||||
|
var lastMouseX;
|
||||||
|
var lastMouseY;
|
||||||
|
var translationMatrix = vec3.create();
|
||||||
|
var rotationMatrix = mat4.create();
|
||||||
|
|
||||||
|
window.requestAnimFrame = (function(){
|
||||||
|
return window.requestAnimationFrame ||
|
||||||
|
window.webkitRequestAnimationFrame ||
|
||||||
|
window.mozRequestAnimationFrame ||
|
||||||
|
window.oRequestAnimationFrame ||
|
||||||
|
window.msRequestAnimationFrame ||
|
||||||
|
function(callback, element){
|
||||||
|
window.setTimeout(callback, 1000/60);
|
||||||
|
};
|
||||||
|
})();
|
||||||
|
|
||||||
|
function formatNumber(numero, decimales){
|
||||||
|
var pot = Math.pow(10, decimales);
|
||||||
|
return parseInt(numero * pot) / pot;
|
||||||
|
}
|
||||||
|
|
||||||
|
{% block load %}
|
||||||
|
function load(){
|
||||||
|
window.addEventListener('resize', resizeCanvas, false);
|
||||||
|
resizeCanvas();
|
||||||
|
|
||||||
|
var sampleFilename = '{{ sample.model_filename|escapejs }}';
|
||||||
|
|
||||||
|
if (sampleFilename.trim() == "")
|
||||||
|
{
|
||||||
|
document.getElementById("progress").innerHTML = "No model defined!";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
request = new XMLHttpRequest();
|
||||||
|
request.open("GET", '{{ MEDIA_URL }}' + sampleFilename, true);
|
||||||
|
request.overrideMimeType("text/plain; charset=x-user-defined");
|
||||||
|
request.onreadystatechange = function(){
|
||||||
|
if (this.readyState == 3 || this.readyState == 4){
|
||||||
|
document.getElementById("progress").innerHTML = "Downloading... "
|
||||||
|
+ formatNumber(this.responseText.length / 1048576, 2) + " MB";
|
||||||
|
}
|
||||||
|
if (this.readyState == 4 && (this.status == 200 || this.status == 0) ){
|
||||||
|
document.getElementById("progress").innerHTML = "Unpacking...";
|
||||||
|
setTimeout(loaded, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
request.send();
|
||||||
|
}
|
||||||
|
{% endblock load %}
|
||||||
|
|
||||||
|
function loaded(){
|
||||||
|
file = new CTM.File( new CTM.Stream(request.responseText) );
|
||||||
|
webGLStart();
|
||||||
|
document.getElementById("progress").innerHTML = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
function webGLStart(){
|
||||||
|
var canvas = document.getElementById("canvas");
|
||||||
|
canvas.oncontextmenu = function() { return false; } // supress the context menu in the canvas
|
||||||
|
|
||||||
|
|
||||||
|
initGL(canvas);
|
||||||
|
initBoundingBox();
|
||||||
|
initOffsets();
|
||||||
|
initShaders();
|
||||||
|
initBuffers();
|
||||||
|
|
||||||
|
gl.clearColor(0, 0, 0, 0);
|
||||||
|
gl.enable(gl.DEPTH_TEST);
|
||||||
|
gl.viewport(0, 0, gl.viewportWidth, gl.viewportHeight);
|
||||||
|
|
||||||
|
vec3.set(translationMatrix, [0, 0, -100]);
|
||||||
|
mat4.identity(rotationMatrix);
|
||||||
|
|
||||||
|
canvas.onmousedown = handleMouseDown;
|
||||||
|
canvas.onmouseup = handleMouseUp;
|
||||||
|
canvas.onmousemove = handleMouseMove;
|
||||||
|
canvas.onmousewheel = handleMouseWheel;
|
||||||
|
|
||||||
|
canvas.addEventListener("DOMMouseScroll", handleMouseWheel, false);
|
||||||
|
|
||||||
|
tick();
|
||||||
|
}
|
||||||
|
|
||||||
|
function initGL(canvas){
|
||||||
|
try{
|
||||||
|
gl = canvas.getContext("experimental-webgl");
|
||||||
|
gl.viewportWidth = canvas.width;
|
||||||
|
gl.viewportHeight = canvas.height;
|
||||||
|
}catch(e){
|
||||||
|
}
|
||||||
|
if (!gl){
|
||||||
|
alert("Could not initialise WebGL, sorry :-(");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function initBoundingBox(){
|
||||||
|
var v = file.body.vertices;
|
||||||
|
var x = Infinity, y = Infinity, z = Infinity;
|
||||||
|
var X = -Infinity, Y = -Infinity, Z = -Infinity;
|
||||||
|
|
||||||
|
for (var i = 0; i < v.length; i += 3){
|
||||||
|
if (v[i] < x) x = v[i];
|
||||||
|
if (v[i+1] < y) y = v[i+1];
|
||||||
|
if (v[i+2] < z) z = v[i+2];
|
||||||
|
|
||||||
|
if (v[i] > X) X = v[i];
|
||||||
|
if (v[i+1] > Y) Y = v[i+1];
|
||||||
|
if (v[i+2] > Z) Z = v[i+2];
|
||||||
|
}
|
||||||
|
|
||||||
|
for (var i = 0; i < v.length; i += 3){
|
||||||
|
v[i] = -( (X-x)/2 ) + ( v[i] - x);
|
||||||
|
v[i+1] = -( (Y-y)/2 ) + ( v[i+1] - y);
|
||||||
|
v[i+2] = -( (Z-z)/2 ) + ( v[i+2] - z);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function initOffsets(){
|
||||||
|
var indices = file.body.indices;
|
||||||
|
var start = 0;
|
||||||
|
var min = file.body.vertices.length;
|
||||||
|
var max = 0;
|
||||||
|
var minPrev = min;
|
||||||
|
|
||||||
|
for (var i = 0; i < indices.length;){
|
||||||
|
|
||||||
|
for (var j = 0; j < 3; ++ j){
|
||||||
|
var idx = indices[i ++];
|
||||||
|
|
||||||
|
if (idx < min) min = idx;
|
||||||
|
if (idx > max) max = idx;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (max - min > 65535){
|
||||||
|
i -= 3;
|
||||||
|
|
||||||
|
for (var k = start; k < i; ++ k){
|
||||||
|
indices[k] -= minPrev;
|
||||||
|
}
|
||||||
|
offsets.push( {start: start, count: i - start, index: minPrev} );
|
||||||
|
|
||||||
|
start = i;
|
||||||
|
min = file.body.vertices.length;
|
||||||
|
max = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
minPrev = min;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (var k = start; k < i; ++ k){
|
||||||
|
indices[k] -= minPrev;
|
||||||
|
}
|
||||||
|
offsets.push( {start: start, count: i - start, index: minPrev} );
|
||||||
|
}
|
||||||
|
|
||||||
|
function initShaders(){
|
||||||
|
var fragmentShader = getShader(gl, "shader-fs");
|
||||||
|
var vertexShader = getShader(gl, "shader-vs");
|
||||||
|
|
||||||
|
shaderProgram = gl.createProgram();
|
||||||
|
gl.attachShader(shaderProgram, vertexShader);
|
||||||
|
gl.attachShader(shaderProgram, fragmentShader);
|
||||||
|
gl.linkProgram(shaderProgram);
|
||||||
|
gl.useProgram(shaderProgram);
|
||||||
|
|
||||||
|
shaderProgram.vertexPositionAttribute = gl.getAttribLocation(shaderProgram, "aVertexPosition");
|
||||||
|
gl.enableVertexAttribArray(shaderProgram.vertexPositionAttribute);
|
||||||
|
|
||||||
|
shaderProgram.vertexColorAttribute = gl.getAttribLocation(shaderProgram, "aVertexColor");
|
||||||
|
gl.enableVertexAttribArray(shaderProgram.vertexColorAttribute);
|
||||||
|
|
||||||
|
shaderProgram.pMatrixUniform = gl.getUniformLocation(shaderProgram, "uPMatrix");
|
||||||
|
shaderProgram.mvMatrixUniform = gl.getUniformLocation(shaderProgram, "uMVMatrix");
|
||||||
|
}
|
||||||
|
|
||||||
|
function getShader(gl, id){
|
||||||
|
var shaderScript = document.getElementById(id);
|
||||||
|
|
||||||
|
var str = "";
|
||||||
|
var node = shaderScript.firstChild;
|
||||||
|
while(node){
|
||||||
|
if (node.nodeType == 3){
|
||||||
|
str += node.textContent;
|
||||||
|
}
|
||||||
|
node = node.nextSibling;
|
||||||
|
}
|
||||||
|
|
||||||
|
var shader;
|
||||||
|
if (shaderScript.type == "x-shader/x-fragment"){
|
||||||
|
shader = gl.createShader(gl.FRAGMENT_SHADER);
|
||||||
|
}else if (shaderScript.type == "x-shader/x-vertex"){
|
||||||
|
shader = gl.createShader(gl.VERTEX_SHADER);
|
||||||
|
}
|
||||||
|
|
||||||
|
gl.shaderSource(shader, str);
|
||||||
|
gl.compileShader(shader);
|
||||||
|
|
||||||
|
return shader;
|
||||||
|
}
|
||||||
|
|
||||||
|
function initBuffers(){
|
||||||
|
vertexIndexBuffer = gl.createBuffer();
|
||||||
|
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, vertexIndexBuffer);
|
||||||
|
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER,
|
||||||
|
new Uint16Array(file.body.indices), gl.STATIC_DRAW);
|
||||||
|
vertexIndexBuffer.itemSize = 1;
|
||||||
|
vertexIndexBuffer.numItems = file.body.indices.length;
|
||||||
|
|
||||||
|
vertexPositionBuffer = gl.createBuffer();
|
||||||
|
gl.bindBuffer(gl.ARRAY_BUFFER, vertexPositionBuffer);
|
||||||
|
gl.bufferData(gl.ARRAY_BUFFER,
|
||||||
|
file.body.vertices, gl.STATIC_DRAW);
|
||||||
|
vertexPositionBuffer.itemSize = 3;
|
||||||
|
vertexPositionBuffer.numItems = file.body.vertices.length;
|
||||||
|
|
||||||
|
vertexColorBuffer = gl.createBuffer();
|
||||||
|
gl.bindBuffer(gl.ARRAY_BUFFER, vertexColorBuffer);
|
||||||
|
gl.bufferData(gl.ARRAY_BUFFER,
|
||||||
|
file.body.attrMaps[0].attr, gl.STATIC_DRAW);
|
||||||
|
vertexColorBuffer.itemSize = 4;
|
||||||
|
vertexColorBuffer.numItems = file.body.attrMaps[0].attr.length;
|
||||||
|
}
|
||||||
|
|
||||||
|
function tick(){
|
||||||
|
drawScene();
|
||||||
|
requestAnimFrame(tick);
|
||||||
|
}
|
||||||
|
|
||||||
|
function drawScene(){
|
||||||
|
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
|
||||||
|
|
||||||
|
mat4.perspective(45, gl.viewportWidth / gl.viewportHeight, 0.01, 1200.0, pMatrix);
|
||||||
|
mat4.translate(pMatrix, [0.0, 0,-.6]);
|
||||||
|
|
||||||
|
mat4.identity(mvMatrix);
|
||||||
|
mat4.translate(mvMatrix, translationMatrix);
|
||||||
|
mat4.multiply(mvMatrix, rotationMatrix);
|
||||||
|
|
||||||
|
gl.uniformMatrix4fv(shaderProgram.pMatrixUniform, false, pMatrix);
|
||||||
|
gl.uniformMatrix4fv(shaderProgram.mvMatrixUniform, false, mvMatrix);
|
||||||
|
|
||||||
|
var normalMatrix = mat3.create();
|
||||||
|
mat4.toInverseMat3(mvMatrix, normalMatrix);
|
||||||
|
mat3.transpose(normalMatrix);
|
||||||
|
gl.uniformMatrix3fv(shaderProgram.nMatrixUniform, false, normalMatrix);
|
||||||
|
|
||||||
|
for (var i = 0; i < offsets.length; ++ i){
|
||||||
|
gl.bindBuffer(gl.ARRAY_BUFFER, vertexPositionBuffer);
|
||||||
|
gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute,
|
||||||
|
vertexPositionBuffer.itemSize, gl.FLOAT, false, 0, offsets[i].index * 4 * 3);
|
||||||
|
|
||||||
|
gl.bindBuffer(gl.ARRAY_BUFFER, vertexColorBuffer);
|
||||||
|
gl.vertexAttribPointer(shaderProgram.vertexColorAttribute,
|
||||||
|
vertexColorBuffer.itemSize, gl.FLOAT, false, 0, offsets[i].index * 4 * 4);
|
||||||
|
|
||||||
|
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, vertexIndexBuffer);
|
||||||
|
gl.drawElements(gl.TRIANGLES, offsets[i].count, gl.UNSIGNED_SHORT, offsets[i].start * 2); // 2 = uint16
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function degToRad(degrees){
|
||||||
|
return degrees * Math.PI / 180;
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleMouseWheel(event){
|
||||||
|
event.preventDefault();
|
||||||
|
|
||||||
|
var delta = event.wheelDelta | -event.detail;
|
||||||
|
if (delta < 0){
|
||||||
|
translationMatrix[2] -= .05;
|
||||||
|
}else{
|
||||||
|
translationMatrix[2] += .05;
|
||||||
|
}
|
||||||
|
|
||||||
|
event.returnValue=false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleMouseDown(event){
|
||||||
|
mouseDown = true;
|
||||||
|
lastMouseX = event.clientX;
|
||||||
|
lastMouseY = event.clientY;
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleMouseUp(event){
|
||||||
|
mouseDown = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleMouseMove(event){
|
||||||
|
if (mouseDown){
|
||||||
|
var newX = event.clientX;
|
||||||
|
var newY = event.clientY;
|
||||||
|
var deltaX = newX - lastMouseX;
|
||||||
|
var deltaY = newY - lastMouseY;
|
||||||
|
|
||||||
|
switch (event.which) {
|
||||||
|
case 1: // left mouse
|
||||||
|
|
||||||
|
|
||||||
|
var newRotationMatrix = mat4.create();
|
||||||
|
mat4.identity(newRotationMatrix);
|
||||||
|
mat4.rotate(newRotationMatrix, degToRad(deltaX / 5), [0, 1, 0]);
|
||||||
|
|
||||||
|
mat4.rotate(newRotationMatrix, degToRad(deltaY / 5), [1, 0, 0]);
|
||||||
|
mat4.multiply(newRotationMatrix, rotationMatrix, rotationMatrix);
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 3: // right mouse
|
||||||
|
//translationMatrix[0] += deltaX;
|
||||||
|
//translationMatrix[1] += deltaY;
|
||||||
|
var newTranslateMatrix = mat4.create();
|
||||||
|
mat4.identity(newTranslateMatrix);
|
||||||
|
mat4.translate(newTranslateMatrix, [deltaX, deltaY, 0], [deltaX, deltaY, 0])
|
||||||
|
console.log('moving ' + deltaX + ', ' + deltaY)
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
lastMouseX = newX
|
||||||
|
lastMouseY = newY;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function resizeCanvas() {
|
||||||
|
var canvas = document.getElementById("canvas");
|
||||||
|
var parent = document.getElementById("virtualObject");
|
||||||
|
|
||||||
|
var canvasWidth1 = canvas.width;
|
||||||
|
var canvasHeight1 = canvas.height;
|
||||||
|
|
||||||
|
canvas.width = parent.offsetWidth;
|
||||||
|
canvas.height = parent.offsetHeight;
|
||||||
|
|
||||||
|
if (gl){
|
||||||
|
/*hmove = canvas.width / 2 - canvasWidth1 / 2
|
||||||
|
vmove = canvas.height / 2 - canvasHeight1 / 2
|
||||||
|
mat4.translate(mvMatrix, [hmove, vmove, 0.0])
|
||||||
|
console.log('Resizing from ' + canvasWidth1 + ' x ' + canvasHeight1 + ' to ' + canvas.width + ' x ' + canvas.height);
|
||||||
|
console.log('moving centre ' + hmove + ' x ' + vmove)*/
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block loadscript %}"load()"{% endblock %}
|
||||||
|
|
||||||
|
{% block sample_detail %}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block 3dcontent %}
|
||||||
|
<div id="virtualObject">
|
||||||
|
<canvas id="canvas" class="example"></canvas>
|
||||||
|
<div><br><span id="progress" style="color: red"></span></div>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
23
three_d_viewer/templates/three_d_viewer/sample_practice.html
Normal file
23
three_d_viewer/templates/three_d_viewer/sample_practice.html
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
{% extends "three_d_viewer/base.html" %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div id="sidebar">
|
||||||
|
<div id='mineralMenu'>
|
||||||
|
<ul>
|
||||||
|
<li class="has-sub mainitem"><a href="#">{% block menu_header %}Select a sample{% endblock %}</a>
|
||||||
|
<ul>
|
||||||
|
{% for sample in active_samples %}
|
||||||
|
<li><a href={% url sample.url sample.id %}>{{ sample.name }}</a></li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div><!-- close MINERALMENU !-->
|
||||||
|
{% block sample_detail %}
|
||||||
|
{% endblock %}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% block 3dcontent %}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
@@ -9,11 +9,12 @@ urlpatterns = patterns(
|
|||||||
url(r'^$', generic.TemplateView.as_view(template_name="three_d_viewer/home.html"), name='home'),
|
url(r'^$', generic.TemplateView.as_view(template_name="three_d_viewer/home.html"), name='home'),
|
||||||
url(r'^minerals_theory/$', generic.TemplateView.as_view(template_name="three_d_viewer/minerals_theory.html"), name='minerals_theory'),
|
url(r'^minerals_theory/$', generic.TemplateView.as_view(template_name="three_d_viewer/minerals_theory.html"), name='minerals_theory'),
|
||||||
url(r'^minerals_practice/$', views.MineralPracticeView.as_view(template_name="three_d_viewer/minerals_practice.html"), name='minerals_practice'),
|
url(r'^minerals_practice/$', views.MineralPracticeView.as_view(template_name="three_d_viewer/minerals_practice.html"), name='minerals_practice'),
|
||||||
url(r'^minerals_selftest/$', generic.TemplateView.as_view(template_name="three_d_viewer/minerals_selftest.html"), name='minerals_selftest'),
|
|
||||||
url(r'^minerals/(?P<pk>\d+)/$', views.MineralDetailView.as_view(), name='mineral_detail'),
|
url(r'^minerals/(?P<pk>\d+)/$', views.MineralDetailView.as_view(), name='mineral_detail'),
|
||||||
#url(r'^minerals/(?P<pk>\d+)/$', views.MineralPracticeView.as_view(), name='mineral_practice'),
|
url(r'^minerals_selftest/$', generic.TemplateView.as_view(template_name="three_d_viewer/minerals_selftest.html"), name='minerals_selftest'),
|
||||||
#url(r'^(?P<pk>\d+)/$', views.DetailView.as_view(), name='detail'),
|
url(r'^rock_practice/$', views.RockPracticeView.as_view(), name='rocks_practice'),
|
||||||
#url(r'^minerals/(?P<pk>\d+)/$', views.MineralDetailView.as_view(), name='mineral_detail'),
|
url(r'^rocks/(?P<pk>\d+)/$', views.RockDetailView.as_view(), name='rock_detail'),
|
||||||
|
url(r'^fossil_practice/$', views.FossilPracticeView.as_view(), name='fossil_practice'),
|
||||||
|
url(r'^fossils/(?P<pk>\d+)/$', views.FossilDetailView.as_view(), name='fossil_detail'),
|
||||||
url(r'^media/(?P<path>.*)$', 'django.views.static.serve',
|
url(r'^media/(?P<path>.*)$', 'django.views.static.serve',
|
||||||
{'document_root': settings.MEDIA_ROOT}),
|
{'document_root': settings.MEDIA_ROOT}),
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ class HomeView(generic.ListView):
|
|||||||
return context
|
return context
|
||||||
|
|
||||||
class MineralPracticeView(generic.ListView):
|
class MineralPracticeView(generic.ListView):
|
||||||
model = Sample
|
model = Mineral
|
||||||
template_name = 'three_d_viewer/minerals_practice.html'
|
template_name = 'three_d_viewer/minerals_practice.html'
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
@@ -41,23 +41,6 @@ class MineralPracticeView(generic.ListView):
|
|||||||
context['active_samples'] = sorted(result, key=attrgetter('name'))
|
context['active_samples'] = sorted(result, key=attrgetter('name'))
|
||||||
return context
|
return context
|
||||||
|
|
||||||
class DetailView(generic.DetailView):
|
|
||||||
"""
|
|
||||||
Define the view to view the 3D model of a sample
|
|
||||||
"""
|
|
||||||
|
|
||||||
model = Sample
|
|
||||||
template_name = 'three_d_viewer/detail.html'
|
|
||||||
parent_categories = Category.objects.filter(parent=None). \
|
|
||||||
filter(active=True).order_by("name")
|
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
|
||||||
context = super(DetailView, self).get_context_data(**kwargs)
|
|
||||||
context['active_samples'] = Sample.objects.select_subclasses(Mineral).filter(active=True).order_by('name')
|
|
||||||
context['parent_categories'] = Category.objects.filter(parent=None). \
|
|
||||||
filter(active=True).order_by('name')
|
|
||||||
return context
|
|
||||||
|
|
||||||
class MineralDetailView(generic.DetailView):
|
class MineralDetailView(generic.DetailView):
|
||||||
"""
|
"""
|
||||||
Add extra functionality for mineral details
|
Add extra functionality for mineral details
|
||||||
@@ -69,12 +52,6 @@ class MineralDetailView(generic.DetailView):
|
|||||||
parent_categories = Category.objects.filter(parent=None). \
|
parent_categories = Category.objects.filter(parent=None). \
|
||||||
filter(active=True).order_by("name")
|
filter(active=True).order_by("name")
|
||||||
|
|
||||||
#def get_context_data(self, **kwargs):
|
|
||||||
# context = super(MineralDetailView, self).get_context_data(**kwargs)
|
|
||||||
# context['active_samples'] = Sample.objects.select_subclasses(Mineral).filter(active=True).order_by('name')
|
|
||||||
# context['parent_categories'] = Category.objects.filter(parent=None). \
|
|
||||||
# filter(active=True).order_by('name')
|
|
||||||
# return context
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(MineralDetailView, self).get_context_data(**kwargs)
|
context = super(MineralDetailView, self).get_context_data(**kwargs)
|
||||||
cat = Category.objects.get(name='Minerals')
|
cat = Category.objects.get(name='Minerals')
|
||||||
@@ -85,3 +62,79 @@ class MineralDetailView(generic.DetailView):
|
|||||||
|
|
||||||
context['active_samples'] = sorted(result, key=attrgetter('name'))
|
context['active_samples'] = sorted(result, key=attrgetter('name'))
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
class RockPracticeView(generic.ListView):
|
||||||
|
model = Sample
|
||||||
|
template_name = 'three_d_viewer/rock_practice.html'
|
||||||
|
|
||||||
|
parent_categories = Category.objects.filter(parent=None). \
|
||||||
|
filter(active=True).order_by("name")
|
||||||
|
|
||||||
|
|
||||||
|
def get_context_data(self, **kwargs):
|
||||||
|
context = super(RockPracticeView, self).get_context_data(**kwargs)
|
||||||
|
cat = Category.objects.get(name='Rocks')
|
||||||
|
result = cat.active_samples
|
||||||
|
|
||||||
|
for child in cat.active_children:
|
||||||
|
result = chain(result, child.active_samples)
|
||||||
|
|
||||||
|
context['active_samples'] = sorted(result, key=attrgetter('name'))
|
||||||
|
return context
|
||||||
|
|
||||||
|
class RockDetailView(generic.DetailView):
|
||||||
|
model = Sample
|
||||||
|
template_name = 'three_d_viewer/rock_detail.html'
|
||||||
|
|
||||||
|
parent_categories = Category.objects.filter(parent=None). \
|
||||||
|
filter(active=True).order_by("name")
|
||||||
|
|
||||||
|
|
||||||
|
def get_context_data(self, **kwargs):
|
||||||
|
context = super(RockDetailView, self).get_context_data(**kwargs)
|
||||||
|
cat = Category.objects.get(name='Rocks')
|
||||||
|
result = cat.active_samples
|
||||||
|
|
||||||
|
for child in cat.active_children:
|
||||||
|
result = chain(result, child.active_samples)
|
||||||
|
|
||||||
|
context['active_samples'] = sorted(result, key=attrgetter('name'))
|
||||||
|
return context
|
||||||
|
|
||||||
|
class FossilPracticeView(generic.ListView):
|
||||||
|
model = Sample
|
||||||
|
template_name = 'three_d_viewer/fossil_practice.html'
|
||||||
|
|
||||||
|
parent_categories = Category.objects.filter(parent=None). \
|
||||||
|
filter(active=True).order_by("name")
|
||||||
|
|
||||||
|
|
||||||
|
def get_context_data(self, **kwargs):
|
||||||
|
context = super(FossilPracticeView, self).get_context_data(**kwargs)
|
||||||
|
cat = Category.objects.get(name='Fossils')
|
||||||
|
result = cat.active_samples
|
||||||
|
|
||||||
|
for child in cat.active_children:
|
||||||
|
result = chain(result, child.active_samples)
|
||||||
|
|
||||||
|
context['active_samples'] = sorted(result, key=attrgetter('name'))
|
||||||
|
return context
|
||||||
|
|
||||||
|
class FossilDetailView(generic.DetailView):
|
||||||
|
model = Sample
|
||||||
|
template_name = 'three_d_viewer/fossil_detail.html'
|
||||||
|
|
||||||
|
parent_categories = Category.objects.filter(parent=None). \
|
||||||
|
filter(active=True).order_by("name")
|
||||||
|
|
||||||
|
|
||||||
|
def get_context_data(self, **kwargs):
|
||||||
|
context = super(FossilDetailView, self).get_context_data(**kwargs)
|
||||||
|
cat = Category.objects.get(name='Fossils')
|
||||||
|
result = cat.active_samples
|
||||||
|
|
||||||
|
for child in cat.active_children:
|
||||||
|
result = chain(result, child.active_samples)
|
||||||
|
|
||||||
|
context['active_samples'] = sorted(result, key=attrgetter('name'))
|
||||||
|
return context
|
||||||
Reference in New Issue
Block a user