Basic elm functionality
This commit is contained in:
commit
eb0e736a2f
25
elm.json
Normal file
25
elm.json
Normal file
|
@ -0,0 +1,25 @@
|
|||
{
|
||||
"type": "application",
|
||||
"source-directories": [
|
||||
"src"
|
||||
],
|
||||
"elm-version": "0.19.1",
|
||||
"dependencies": {
|
||||
"direct": {
|
||||
"elm/browser": "1.0.2",
|
||||
"elm/core": "1.0.5",
|
||||
"elm/html": "1.0.0",
|
||||
"rtfeldman/elm-sorter-experiment": "2.1.1"
|
||||
},
|
||||
"indirect": {
|
||||
"elm/json": "1.1.3",
|
||||
"elm/time": "1.0.0",
|
||||
"elm/url": "1.0.0",
|
||||
"elm/virtual-dom": "1.0.2"
|
||||
}
|
||||
},
|
||||
"test-dependencies": {
|
||||
"direct": {},
|
||||
"indirect": {}
|
||||
}
|
||||
}
|
69
src/Main.elm
Normal file
69
src/Main.elm
Normal file
|
@ -0,0 +1,69 @@
|
|||
module Main exposing (main)
|
||||
|
||||
import Browser
|
||||
import Sort.Set exposing (Set)
|
||||
import Html exposing (Html, div, input, label, p, text, h3)
|
||||
import Html.Events exposing (onCheck)
|
||||
import Html.Attributes exposing (class, type_)
|
||||
import Modules exposing
|
||||
( Module
|
||||
, all_modules
|
||||
, module_property
|
||||
, module_desc
|
||||
, module_sorter
|
||||
)
|
||||
|
||||
main: Program () Model Msg
|
||||
main =
|
||||
Browser.sandbox { init = init, update = update, view = view }
|
||||
|
||||
-- INIT + Model
|
||||
|
||||
|
||||
type alias Model =
|
||||
{ enabled_modules : Set Module
|
||||
}
|
||||
|
||||
init : Model
|
||||
init =
|
||||
{ enabled_modules = Sort.Set.empty module_sorter
|
||||
}
|
||||
|
||||
-- UPDATE
|
||||
|
||||
type Msg
|
||||
= ToggleModule Module Bool
|
||||
|
||||
add_or_remove : Bool -> (a -> Set a -> Set a)
|
||||
add_or_remove active =
|
||||
if active then
|
||||
Sort.Set.insert
|
||||
else
|
||||
Sort.Set.remove
|
||||
|
||||
update : Msg -> Model -> Model
|
||||
update msg model =
|
||||
case msg of
|
||||
ToggleModule mod enabled ->
|
||||
{ model | enabled_modules = add_or_remove enabled mod model.enabled_modules }
|
||||
|
||||
-- VIEW
|
||||
|
||||
view_module_button : Set Module -> Module -> Html Msg
|
||||
view_module_button enabled mod =
|
||||
label
|
||||
(if Sort.Set.memberOf enabled mod then [class "active"] else [])
|
||||
[ input
|
||||
[ type_ "checkbox"
|
||||
, onCheck (ToggleModule mod)
|
||||
] []
|
||||
, h3 [] [ text (module_property .name mod) ]
|
||||
, p [] (module_desc mod)
|
||||
]
|
||||
|
||||
view : Model -> Html Msg
|
||||
view model =
|
||||
div [] (
|
||||
all_modules
|
||||
|> List.map (view_module_button model.enabled_modules)
|
||||
)
|
247
src/Modules.elm
Normal file
247
src/Modules.elm
Normal file
|
@ -0,0 +1,247 @@
|
|||
module Modules exposing
|
||||
( Module
|
||||
, all_modules
|
||||
, ModuleInfo
|
||||
, module_info
|
||||
, module_property
|
||||
, module_desc
|
||||
, module_sorter
|
||||
)
|
||||
|
||||
import Html exposing (Html, text, a)
|
||||
import Html.Attributes exposing (href)
|
||||
import Sort exposing (Sorter)
|
||||
|
||||
type Module
|
||||
= CarbonUnderground
|
||||
| Ecocide
|
||||
| Extractive
|
||||
| BDS
|
||||
| Taliban
|
||||
| Myanmar
|
||||
| XinjiangUygar
|
||||
| UsTariff
|
||||
| Surveillance
|
||||
| Military
|
||||
| LawEnforcement
|
||||
| Media
|
||||
| SocialAuditing
|
||||
| BoardOfDirectors
|
||||
| SupplyChain
|
||||
| Copyleft
|
||||
|
||||
all_modules : List Module
|
||||
all_modules =
|
||||
[ CarbonUnderground
|
||||
, Ecocide
|
||||
, Extractive
|
||||
, BDS
|
||||
, Taliban
|
||||
, Myanmar
|
||||
, XinjiangUygar
|
||||
, UsTariff
|
||||
, Surveillance
|
||||
, Military
|
||||
, LawEnforcement
|
||||
, Media
|
||||
, SocialAuditing
|
||||
, BoardOfDirectors
|
||||
, SupplyChain
|
||||
, Copyleft
|
||||
]
|
||||
|
||||
type alias ModuleInfo =
|
||||
{ name: String
|
||||
, desc: List (Html Never)
|
||||
, index: Int
|
||||
}
|
||||
|
||||
module_info : Module -> ModuleInfo
|
||||
module_info mod = case mod of
|
||||
CarbonUnderground ->
|
||||
{ name = "Carbon Underground 200"
|
||||
, desc =
|
||||
[ text
|
||||
"""
|
||||
Disallow use by the top global publicly-owned coal, oil, and gas reserve (judged
|
||||
by
|
||||
"""
|
||||
, a
|
||||
[ href "https://www.ffisolutions.com/research-analytics-index-solutions/research-screening/the-carbon-underground-200/"
|
||||
]
|
||||
[ text "the FFI Carbon Underground 200)" ]
|
||||
]
|
||||
, index = 0
|
||||
}
|
||||
Ecocide ->
|
||||
{ name = "Ecocide"
|
||||
, desc = [text "Disallow anyone who knowingly commits widespread or long term ecocide"]
|
||||
, index = 1
|
||||
}
|
||||
Extractive ->
|
||||
{ name = "Extractive Industries"
|
||||
, desc =
|
||||
[text
|
||||
"""
|
||||
Disallow use by anyone involved in fossil fuel / mineral exploitation,
|
||||
extraction, development, and sale
|
||||
"""
|
||||
]
|
||||
, index = 2
|
||||
}
|
||||
BDS ->
|
||||
{ name = "BDS (Boycott, Divestment, Sanctions)"
|
||||
, desc =
|
||||
[ text "Disallow use by anyone on the "
|
||||
, a
|
||||
[ href "https://bdsmovement.net/" ]
|
||||
[ text "Boycott, Divestment, Sanctions'" ]
|
||||
, text "list"
|
||||
]
|
||||
, index = 3
|
||||
}
|
||||
Taliban ->
|
||||
{ name = "Taliban"
|
||||
, desc = [text "Disallow use by anyone who trades with, works with, or is the Taliban"]
|
||||
, index = 4
|
||||
}
|
||||
Myanmar ->
|
||||
{ name = "Myanmar"
|
||||
, desc =
|
||||
[ text
|
||||
"""
|
||||
Disallow use by anyone who trades with, works with, or is the Myanmar/Burmese
|
||||
military
|
||||
"""
|
||||
]
|
||||
, index = 5
|
||||
}
|
||||
XinjiangUygar ->
|
||||
{ name = "Xinjiang Uygur Autonomous Region"
|
||||
, desc =
|
||||
[ text
|
||||
"""
|
||||
Disallow use by anyone who works with or is someone who benefits from goods
|
||||
produced in the Xinjiang Uygur Autonomous Region of China
|
||||
"""
|
||||
]
|
||||
, index = 6
|
||||
}
|
||||
UsTariff ->
|
||||
{ name = "U.S. Tariff Act"
|
||||
, desc =
|
||||
[ text
|
||||
"""
|
||||
Disallow use by anyone who works with or is someone who the U.S. Customs and
|
||||
Border Protection believes uses forced labor
|
||||
"""
|
||||
]
|
||||
, index = 7
|
||||
}
|
||||
Surveillance ->
|
||||
{ name = "Mass Surveillance"
|
||||
, desc =
|
||||
[ text
|
||||
"""
|
||||
Disallow use by anyone who works with or is a goverment/multinational corporation
|
||||
who participates in a mass-surveilence program
|
||||
"""
|
||||
]
|
||||
, index = 8
|
||||
}
|
||||
Military ->
|
||||
{ name = "Military Activities"
|
||||
, desc =
|
||||
[ text
|
||||
"""
|
||||
Disallow use by anyone who works with or is a goverment/multinational corporation
|
||||
who conducts military activities
|
||||
"""
|
||||
]
|
||||
, index = 9
|
||||
}
|
||||
LawEnforcement ->
|
||||
{ name = "Law Enforcement"
|
||||
, desc =
|
||||
[ text
|
||||
"""
|
||||
Disallow use by anyone who works with or anyone who trades with or offers support
|
||||
to local, state, or federal law enforcement
|
||||
"""
|
||||
]
|
||||
, index = 10
|
||||
}
|
||||
Media ->
|
||||
{ name = "Media"
|
||||
, desc =
|
||||
[ text
|
||||
"""
|
||||
Disallow use by anyone who is or works with someone who broadcasts messages
|
||||
promoting violence
|
||||
"""
|
||||
]
|
||||
, index = 11
|
||||
}
|
||||
SocialAuditing ->
|
||||
{ name = "Social Auditing"
|
||||
, desc =
|
||||
[ text
|
||||
"""
|
||||
Require that organizations that use your software only use social auditing methods
|
||||
that adhere to the principles of the
|
||||
"""
|
||||
, a
|
||||
[ href "https://wsr-network.org/what-is-wsr/statement-of-principles/" ]
|
||||
[ text "Worker-Driven Social Responsibility Network," ]
|
||||
, text
|
||||
"""
|
||||
or not use social auditing methods at all
|
||||
"""
|
||||
]
|
||||
, index = 12
|
||||
}
|
||||
BoardOfDirectors ->
|
||||
{ name = "Workers on Board of Directors"
|
||||
, desc =
|
||||
[ text
|
||||
"""
|
||||
If the organization using your software has a board of directors, require that
|
||||
they have at least 30% of the seats on the board be paid less than twice the
|
||||
amount of the the lowest paid worker in the organization
|
||||
"""
|
||||
]
|
||||
, index = 13
|
||||
}
|
||||
SupplyChain ->
|
||||
{ name = "Supply Chain Transparency"
|
||||
, desc =
|
||||
[ text
|
||||
"""
|
||||
Require that whoever uses your software must publish information about their
|
||||
supply chain on a public website
|
||||
"""
|
||||
]
|
||||
, index = 14
|
||||
}
|
||||
Copyleft ->
|
||||
{ name = "Copyleft"
|
||||
, desc =
|
||||
[ text
|
||||
"""
|
||||
Require that any modifications or derivitive works based on your software or
|
||||
source code be licensed under the exact same license
|
||||
"""
|
||||
]
|
||||
, index = 15
|
||||
}
|
||||
|
||||
module_property : (ModuleInfo -> a) -> Module -> a
|
||||
module_property adapter mod = adapter (module_info mod)
|
||||
|
||||
module_desc : Module -> List (Html a)
|
||||
module_desc mod =
|
||||
module_property .desc mod
|
||||
|> List.map (Html.map never)
|
||||
|
||||
module_sorter : Sorter Module
|
||||
module_sorter = Sort.by (module_property .index) Sort.increasing
|
Loading…
Reference in a new issue