Merge branch 'master' into ent_types_frontend2

This commit is contained in:
Rafael Schouten
2014-09-17 17:45:55 +10:00
138 changed files with 2145 additions and 738 deletions

2
.gitignore vendored
View File

@@ -36,3 +36,5 @@ config/initializers/feature_toggle.rb
NERD_tree*
coverage
libpeerconnection.log
tags
app/assets/javascripts/tags

View File

@@ -11,53 +11,57 @@
<!ENTITY ns_adobe_xpath "http://ns.adobe.com/XPath/1.0/">
]>
<svg version="1.1" id="Layer_1" xmlns:x="&ns_extend;" xmlns:i="&ns_ai;" xmlns:graph="&ns_graphs;"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="35px" height="40px"
viewBox="0 0 35 40" enable-background="new 0 0 35 40" xml:space="preserve">
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="28px" height="33px"
viewBox="0 0 28 33" enable-background="new 0 0 28 33" xml:space="preserve">
<metadata>
<sfw xmlns="&ns_sfw;">
<slices></slices>
<sliceSourceBounds width="16383" height="103" y="-88.5" x="-8112" bottomLeftOrigin="true"></sliceSourceBounds>
<sliceSourceBounds height="96" width="16383" y="-85.5" x="-8112" bottomLeftOrigin="true"></sliceSourceBounds>
</sfw>
</metadata>
<g>
<path fill="#FFFFFF" d="M17.5,0C7.85,0,0,8.396,0,16.666C0,29.092,16.415,39.377,17.114,39.88C17.225,39.96,17.363,40,17.5,40
c0.134,0,0.271-0.039,0.381-0.117C18.58,39.389,35,29.313,35,16.666C35,8.396,27.15,0,17.5,0z"/>
<path opacity="0.25" fill="#282828" d="M14,25c-6.059,0-10.988,1.679-10.988,3.333c0,2.485,10.307,4.542,10.746,4.643
C13.828,32.992,13.914,33,14,33c0.084,0,0.17-0.008,0.239-0.023c0.439-0.099,10.749-2.114,10.749-4.643
C24.988,26.679,20.059,25,14,25z"/>
<g>
<path fill="#0B8C61" d="M11.824,11.058l-0.002,0.59l-0.003,2.996c1.373-0.042,2.874-0.065,4.297-0.065
c0.251,0,0.502,0.001,0.75,0.002l-1.169-3.53L11.824,11.058z"/>
<circle fill="#0B8C61" cx="10.91" cy="21.818" r="1.962"/>
<path fill="#0B8C61" d="M15.494,21.413c-0.018-0.133-0.034-0.249-0.046-0.353c-0.058-0.477-0.206-0.926-0.406-1.344
c-0.061-0.121-0.122-0.242-0.193-0.356c-0.047-0.079-0.098-0.155-0.149-0.23c-0.643-0.904-1.597-1.564-2.707-1.83
c-0.252-0.05-0.511-0.076-0.774-0.076c-0.369,0-0.739,0.051-1.101,0.153c-0.345,0.097-0.609,0.14-0.856,0.14
c-0.034,0-0.059-0.01-0.092-0.012c-1.708,0.692-2.919,2.361-2.919,4.314c0,2.569,2.09,4.658,4.66,4.658
c2.544,0,4.611-2.053,4.649-4.589l-0.051-0.37L15.494,21.413z M10.91,24.404c-1.427,0-2.587-1.16-2.587-2.586
s1.16-2.587,2.587-2.587c1.426,0,2.587,1.161,2.587,2.587S12.336,24.404,10.91,24.404z"/>
<circle fill="#0B8C61" cx="26.032" cy="23.767" r="1.258"/>
<path fill="#0B8C61" d="M28.399,19.248c0.163-0.87,0.265-1.754,0.338-2.635c0.069-0.824-0.14-1.017-0.947-1.049
c-1.201-0.043-2.309-0.088-3.511-0.136c-0.037-0.001-0.096-0.027-0.096-0.075c0-0.905,0.046-3.106,0.046-3.106
s-0.235-0.172-0.566-0.172c-0.145,0-0.309,0.033-0.479,0.128c0,1.026,0,2.067,0,3.158c0,0-1.465-0.039-3.555-0.082
c-0.093-0.002-0.351-0.16-0.472-0.49c-0.314-0.867-1-2.557-1.901-5.157c0,0-0.466-1.11-1.645-1.11c-0.976,0-5.849,0-5.849,0v6.499
c0,0-0.441,0.185-0.811,0.222c-0.097,0.59-0.083,0.889,0.143,0.98c0.575-0.187,1.177-0.314,1.814-0.314
c0.486,0,0.951,0.076,1.403,0.187c1.399,0.297,2.627,1.154,3.435,2.349c0.042,0.06,0.08,0.122,0.12,0.184
c0.117,0.189,0.224,0.383,0.319,0.587c0.103,0.209,0.192,0.422,0.271,0.644c0.005,0.015,0.009,0.03,0.014,0.046
c0.159,0.46,0.258,0.942,0.298,1.444c0.126,0.017,0.245,0.045,0.361,0.045c0.008,0,0.016,0,0.025,0
c2.72-0.07,5.444-0.075,8.161-0.211c-1.133,0.314-1.969,1.352-1.969,2.583c0,1.481,1.203,2.684,2.685,2.684
c1.48,0,2.684-1.203,2.684-2.684c0-1.338-0.988-2.448-2.27-2.648C28.451,20.992,28.063,21.053,28.399,19.248z M16.116,15.204
c-1.679,0-3.412,0.031-4.923,0.086l0.004-3.644l0.005-1.212l4.946-0.008l1.579,4.767l0.056,0.023
C17.241,15.208,16.682,15.204,16.116,15.204z M27.602,23.767c0,0.867-0.705,1.572-1.57,1.572c-0.865,0-1.57-0.705-1.57-1.572
c0-0.865,0.705-1.569,1.57-1.569C26.897,22.197,27.602,22.902,27.602,23.767z"/>
<path fill="#0B8C61" d="M17.5,0C7.85,0,0,8.396,0,16.666C0,29.092,16.415,39.377,17.114,39.88C17.225,39.96,17.363,40,17.5,40
c0.134,0,0.271-0.039,0.381-0.117C18.58,39.389,35,29.313,35,16.666C35,8.396,27.15,0,17.5,0z M29.966,23.767
c0,2.169-1.765,3.934-3.934,3.934c-2.17,0-3.935-1.765-3.935-3.934c0-0.424,0.069-0.837,0.198-1.226
c-0.816,0.02-1.626,0.034-2.425,0.048c-0.895,0.016-1.789,0.032-2.671,0.054l-0.046,0.001h-0.022
c-0.128,0-0.259-0.018-0.393-0.038c-0.39,2.883-2.84,5.12-5.827,5.12c-3.259,0-5.91-2.651-5.91-5.908
c0-2.156,1.174-4.027,2.904-5.059c-0.347-0.579-0.262-1.252-0.185-1.718l0.156-0.946l0.638-0.064V8.523v-1.25h1.25h5.849
c1.586,0,2.504,1.179,2.797,1.876l0.016,0.037l0.013,0.038c0.621,1.794,1.131,3.129,1.504,4.103
c0.104,0.271,0.195,0.51,0.272,0.715c0.664,0.014,1.248,0.028,1.721,0.039v-1.877v-0.733l0.64-0.358
c0.341-0.191,0.708-0.288,1.09-0.288c0.687,0,1.173,0.317,1.306,0.415l0.524,0.384l-0.014,0.65c0,0.001-0.021,1.019-0.035,1.95
c0.793,0.032,1.571,0.062,2.394,0.092c0.346,0.013,1.156,0.045,1.697,0.656c0.48,0.542,0.491,1.217,0.447,1.745
c-0.088,1.06-0.201,1.937-0.355,2.76c-0.05,0.27-0.083,0.496-0.111,0.684c-0.078,0.531-0.197,0.928-0.365,1.226
C29.664,22.055,29.966,22.885,29.966,23.767z"/>
<path fill="#FFFFFF" d="M14,0C6.28,0,0,6.717,0,13.332c0,9.941,13.132,18.169,13.691,18.572C13.78,31.968,13.891,32,14,32
c0.107,0,0.217-0.031,0.305-0.094C14.864,31.511,28,23.45,28,13.332C28,6.717,21.72,0,14,0z"/>
<g>
<path fill="#0B8C61" d="M9.46,8.846L9.458,9.319l-0.003,2.397c1.098-0.034,2.3-0.052,3.438-0.052c0.201,0,0.401,0.001,0.6,0.002
l-0.935-2.824L9.46,8.846z"/>
<circle fill="#0B8C61" cx="8.728" cy="17.454" r="1.569"/>
<path fill="#0B8C61" d="M12.395,17.13c-0.015-0.107-0.027-0.199-0.037-0.282c-0.047-0.382-0.165-0.741-0.325-1.075
c-0.049-0.096-0.097-0.193-0.155-0.285c-0.038-0.063-0.078-0.124-0.119-0.184c-0.514-0.723-1.278-1.251-2.166-1.464
c-0.202-0.04-0.409-0.061-0.619-0.061c-0.295,0-0.592,0.041-0.881,0.122c-0.276,0.077-0.487,0.112-0.685,0.112
c-0.027,0-0.048-0.008-0.074-0.009C5.969,14.557,5,15.892,5,17.455c0,2.055,1.672,3.727,3.728,3.727
c2.035,0,3.689-1.642,3.719-3.671l-0.041-0.296L12.395,17.13z M8.728,19.523c-1.142,0-2.07-0.928-2.07-2.069
s0.928-2.07,2.07-2.07c1.141,0,2.069,0.929,2.069,2.07S9.869,19.523,8.728,19.523z"/>
<circle fill="#0B8C61" cx="20.826" cy="19.013" r="1.006"/>
<path fill="#0B8C61" d="M22.72,15.398c0.13-0.696,0.212-1.403,0.271-2.108c0.055-0.659-0.112-0.814-0.758-0.839
c-0.961-0.034-1.848-0.071-2.808-0.109c-0.029-0.001-0.077-0.022-0.077-0.06c0-0.724,0.037-2.484,0.037-2.484
S19.196,9.66,18.931,9.66c-0.116,0-0.247,0.026-0.383,0.103c0,0.821,0,1.654,0,2.527c0,0-1.172-0.031-2.844-0.065
c-0.074-0.002-0.281-0.128-0.378-0.392c-0.251-0.694-0.8-2.045-1.52-4.126c0,0-0.373-0.888-1.316-0.888c-0.781,0-4.679,0-4.679,0
v5.199c0,0-0.353,0.148-0.649,0.178c-0.078,0.472-0.067,0.711,0.115,0.784c0.46-0.15,0.942-0.252,1.451-0.252
c0.389,0,0.761,0.061,1.122,0.149c1.119,0.237,2.101,0.923,2.748,1.879c0.034,0.048,0.064,0.097,0.096,0.147
c0.094,0.151,0.179,0.306,0.255,0.47c0.083,0.167,0.154,0.338,0.217,0.515c0.004,0.012,0.008,0.024,0.011,0.037
c0.127,0.368,0.206,0.754,0.238,1.156c0.101,0.014,0.196,0.036,0.289,0.036c0.007,0,0.013,0,0.02,0
c2.176-0.056,4.355-0.06,6.529-0.169c-0.906,0.251-1.575,1.082-1.575,2.067c0,1.184,0.962,2.147,2.148,2.147
c1.184,0,2.147-0.963,2.147-2.147c0-1.071-0.79-1.958-1.816-2.119C22.761,16.794,22.451,16.842,22.72,15.398z M12.893,12.163
c-1.343,0-2.729,0.025-3.938,0.069l0.003-2.916l0.004-0.97l3.957-0.006l1.263,3.813l0.045,0.018
C13.793,12.166,13.345,12.163,12.893,12.163z M22.082,19.013c0,0.693-0.564,1.257-1.256,1.257c-0.692,0-1.256-0.564-1.256-1.257
c0-0.692,0.564-1.255,1.256-1.255C21.518,17.758,22.082,18.321,22.082,19.013z"/>
<path fill="#0B8C61" d="M14,0C6.28,0,0,6.717,0,13.332c0,9.941,13.132,18.169,13.691,18.572C13.78,31.968,13.891,32,14,32
c0.107,0,0.217-0.031,0.305-0.094C14.864,31.511,28,23.45,28,13.332C28,6.717,21.72,0,14,0z M23.973,19.013
c0,1.735-1.412,3.147-3.147,3.147c-1.736,0-3.148-1.412-3.148-3.147c0-0.34,0.055-0.67,0.158-0.98
c-0.652,0.016-1.301,0.027-1.94,0.039c-0.716,0.013-1.431,0.025-2.137,0.043l-0.037,0.001h-0.018
c-0.102,0-0.208-0.014-0.315-0.03c-0.312,2.306-2.272,4.096-4.661,4.096C6.121,22.181,4,20.061,4,17.455
c0-1.725,0.939-3.222,2.323-4.047c-0.278-0.463-0.209-1.002-0.148-1.375L6.3,11.276l0.511-0.051V6.819v-1h1h4.679
c1.269,0,2.003,0.943,2.238,1.5l0.012,0.03l0.011,0.03c0.497,1.435,0.905,2.503,1.203,3.283c0.083,0.217,0.156,0.408,0.217,0.572
c0.531,0.011,0.998,0.022,1.376,0.031V9.763V9.177l0.512-0.286c0.273-0.153,0.566-0.23,0.872-0.23
c0.55,0,0.938,0.254,1.044,0.332l0.419,0.307l-0.011,0.52c0,0.001-0.017,0.815-0.028,1.56c0.635,0.025,1.257,0.05,1.916,0.073
c0.277,0.011,0.925,0.036,1.358,0.525c0.384,0.434,0.393,0.974,0.358,1.396c-0.07,0.848-0.161,1.55-0.284,2.208
c-0.04,0.216-0.066,0.397-0.089,0.547c-0.062,0.425-0.158,0.742-0.292,0.981C23.731,17.644,23.973,18.308,23.973,19.013z"/>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

View File

@@ -11,55 +11,59 @@
<!ENTITY ns_adobe_xpath "http://ns.adobe.com/XPath/1.0/">
]>
<svg version="1.1" id="Layer_1" xmlns:x="&ns_extend;" xmlns:i="&ns_ai;" xmlns:graph="&ns_graphs;"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="35px" height="40px"
viewBox="0 0 35 40" enable-background="new 0 0 35 40" xml:space="preserve">
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="28px" height="33px"
viewBox="0 0 28 33" enable-background="new 0 0 28 33" xml:space="preserve">
<metadata>
<sfw xmlns="&ns_sfw;">
<slices></slices>
<sliceSourceBounds width="16383" height="103" y="-88.5" x="-8112" bottomLeftOrigin="true"></sliceSourceBounds>
<sliceSourceBounds height="96" width="16383" y="-85.5" x="-8112" bottomLeftOrigin="true"></sliceSourceBounds>
</sfw>
</metadata>
<g>
<path fill="#FFFFFF" d="M17.5,0C7.85,0,0,8.396,0,16.666C0,29.092,16.415,39.377,17.114,39.88C17.225,39.96,17.363,40,17.5,40
c0.134,0,0.271-0.039,0.381-0.117C18.58,39.389,35,29.313,35,16.666C35,8.396,27.15,0,17.5,0z"/>
<path opacity="0.25" fill="#282828" d="M14,25c-6.059,0-10.988,1.679-10.988,3.333c0,2.485,10.307,4.542,10.746,4.643
C13.828,32.992,13.914,33,14,33c0.084,0,0.17-0.008,0.239-0.023c0.439-0.099,10.749-2.114,10.749-4.643
C24.988,26.679,20.059,25,14,25z"/>
<g>
<path fill="#0B8C61" d="M17.5,0C7.85,0,0,8.396,0,16.666C0,29.092,16.415,39.377,17.114,39.88C17.225,39.96,17.363,40,17.5,40
c0.134,0,0.271-0.039,0.381-0.117C18.58,39.389,35,29.313,35,16.666C35,8.396,27.15,0,17.5,0z M17.503,38.635
C13.582,36.007,1.25,26.916,1.25,16.666C1.25,9.389,8.199,1.25,17.5,1.25c9.301,0,16.25,8.139,16.25,15.416
C33.75,27.102,21.425,36.054,17.503,38.635z"/>
<path fill="#0B8C61" d="M29.628,19.477c0.154-0.823,0.267-1.7,0.355-2.76c0.044-0.528,0.033-1.203-0.447-1.745
c-0.541-0.611-1.351-0.643-1.697-0.656c-0.824-0.029-1.601-0.06-2.394-0.092c0.014-0.931,0.035-1.95,0.035-1.95l0.014-0.65
l-0.524-0.384c-0.133-0.097-0.619-0.415-1.306-0.415c-0.382,0-0.749,0.097-1.09,0.288l-0.64,0.358v0.733v1.877
c-0.472-0.011-1.057-0.024-1.721-0.039c-0.077-0.205-0.168-0.444-0.272-0.715c-0.372-0.974-0.882-2.309-1.504-4.103l-0.013-0.038
l-0.016-0.037c-0.293-0.697-1.211-1.876-2.797-1.876H9.763h-1.25v1.25v5.508l-0.638,0.064l-0.156,0.946
c-0.077,0.466-0.162,1.139,0.185,1.718C6.174,17.791,5,19.662,5,21.818c0,3.258,2.651,5.908,5.91,5.908
c2.987,0,5.437-2.237,5.827-5.12c0.134,0.02,0.265,0.038,0.393,0.038h0.022l0.047-0.001c0.882-0.023,1.777-0.038,2.671-0.054
c0.799-0.014,1.61-0.029,2.425-0.048c-0.129,0.388-0.198,0.801-0.198,1.226c0,2.169,1.765,3.934,3.935,3.934
c2.169,0,3.934-1.765,3.934-3.934c0-0.882-0.303-1.712-0.814-2.379c0.168-0.298,0.288-0.695,0.365-1.226
C29.545,19.973,29.578,19.747,29.628,19.477z M10.91,26.477c-2.57,0-4.66-2.09-4.66-4.658c0-1.953,1.211-3.622,2.919-4.314
c0.033,0.002,0.058,0.012,0.092,0.012c0.247,0,0.511-0.043,0.856-0.14c0.362-0.101,0.732-0.153,1.101-0.153
c0.263,0,0.521,0.026,0.774,0.076c1.11,0.267,2.065,0.926,2.708,1.83c0.052,0.076,0.102,0.152,0.149,0.23
c0.071,0.114,0.132,0.235,0.193,0.356c0.201,0.418,0.348,0.867,0.406,1.344c0.012,0.104,0.028,0.22,0.046,0.354l0.014,0.103
l0.051,0.37C15.521,24.424,13.453,26.477,10.91,26.477z M28.717,23.767c0,1.481-1.204,2.684-2.684,2.684
c-1.483,0-2.685-1.203-2.685-2.684c0-1.231,0.836-2.269,1.969-2.583c-2.718,0.136-5.442,0.141-8.161,0.211
c-0.008,0-0.016,0-0.024,0c-0.115,0-0.235-0.027-0.361-0.045c-0.04-0.502-0.139-0.985-0.298-1.444
c-0.005-0.015-0.009-0.03-0.014-0.046c-0.079-0.222-0.168-0.435-0.271-0.644c-0.095-0.204-0.201-0.397-0.319-0.586
c-0.04-0.062-0.078-0.124-0.12-0.184c-0.808-1.195-2.035-2.052-3.435-2.349c-0.452-0.111-0.917-0.187-1.403-0.187
c-0.637,0-1.239,0.127-1.814,0.314c-0.226-0.091-0.24-0.39-0.143-0.98c0.37-0.037,0.811-0.222,0.811-0.222V8.523
c0,0,4.873,0,5.849,0c1.178,0,1.645,1.11,1.645,1.11c0.901,2.601,1.587,4.29,1.901,5.157c0.122,0.33,0.379,0.488,0.472,0.49
c2.09,0.043,3.555,0.082,3.555,0.082c0-1.091,0-2.132,0-3.158c0.17-0.095,0.334-0.128,0.479-0.128
c0.331,0,0.566,0.172,0.566,0.172s-0.046,2.201-0.046,3.106c0,0.048,0.06,0.074,0.096,0.075c1.201,0.048,2.309,0.094,3.511,0.136
c0.807,0.031,1.016,0.224,0.947,1.049c-0.073,0.881-0.175,1.765-0.338,2.635c-0.336,1.804,0.052,1.744-1.953,1.87
C27.728,21.319,28.717,22.428,28.717,23.767z"/>
<path fill="#0B8C61" d="M24.462,23.767c0,0.867,0.705,1.572,1.57,1.572c0.865,0,1.57-0.705,1.57-1.572
c0-0.865-0.705-1.569-1.57-1.569C25.168,22.197,24.462,22.902,24.462,23.767z M27.29,23.767c0,0.694-0.564,1.259-1.258,1.259
c-0.693,0-1.257-0.565-1.257-1.259c0-0.693,0.564-1.257,1.257-1.257C26.726,22.51,27.29,23.074,27.29,23.767z"/>
<path fill="#0B8C61" d="M16.148,10.426l-4.946,0.008l-0.005,1.212l-0.004,3.644c1.512-0.055,3.244-0.086,4.923-0.086
c0.565,0,1.124,0.004,1.667,0.011l-0.056-0.023L16.148,10.426z M16.117,14.579c-1.423,0-2.924,0.023-4.297,0.065l0.003-2.996
l0.002-0.59l3.873-0.006l1.169,3.53C16.618,14.58,16.368,14.579,16.117,14.579z"/>
<path fill="#0B8C61" d="M10.91,19.231c-1.427,0-2.587,1.161-2.587,2.587s1.16,2.586,2.587,2.586c1.426,0,2.587-1.16,2.587-2.586
S12.336,19.231,10.91,19.231z M10.91,23.779c-1.082,0-1.962-0.88-1.962-1.961c0-1.082,0.88-1.962,1.962-1.962
c1.082,0,1.962,0.88,1.962,1.962C12.871,22.9,11.991,23.779,10.91,23.779z"/>
<path fill="#FFFFFF" d="M14,0C6.28,0,0,6.717,0,13.332c0,9.941,13.132,18.169,13.691,18.572C13.78,31.968,13.891,32,14,32
c0.107,0,0.217-0.031,0.305-0.094C14.864,31.511,28,23.45,28,13.332C28,6.717,21.72,0,14,0z"/>
<g>
<path fill="#0B8C61" d="M14,0C6.28,0,0,6.717,0,13.333c0,9.941,13.132,18.169,13.691,18.571C13.78,31.968,13.891,32,14,32
c0.107,0,0.217-0.031,0.305-0.094C14.864,31.511,28,23.45,28,13.333C28,6.717,21.72,0,14,0z M14.002,30.908
C10.865,28.805,1,21.533,1,13.333C1,7.511,6.56,1,14,1c7.44,0,13,6.511,13,12.333C27,21.682,17.14,28.843,14.002,30.908z"/>
<path fill="#0B8C61" d="M23.703,15.582c0.123-0.658,0.214-1.36,0.284-2.208c0.035-0.422,0.026-0.962-0.358-1.396
c-0.433-0.489-1.081-0.514-1.358-0.525c-0.659-0.024-1.281-0.048-1.916-0.073c0.011-0.745,0.028-1.56,0.028-1.56l0.011-0.52
l-0.419-0.307c-0.106-0.078-0.495-0.332-1.044-0.332c-0.306,0-0.599,0.077-0.872,0.23l-0.512,0.286v0.586v1.502
c-0.378-0.009-0.845-0.02-1.376-0.031c-0.062-0.164-0.135-0.355-0.217-0.572c-0.298-0.78-0.706-1.847-1.203-3.283l-0.011-0.03
l-0.013-0.03c-0.234-0.557-0.969-1.5-2.238-1.5H7.811h-1v1v4.407L6.3,11.276l-0.125,0.757c-0.061,0.373-0.13,0.911,0.148,1.375
C4.939,14.233,4,15.729,4,17.455c0,2.606,2.121,4.727,4.728,4.727c2.39,0,4.349-1.79,4.661-4.096
c0.107,0.016,0.212,0.03,0.315,0.03h0.018l0.037-0.001c0.706-0.018,1.421-0.031,2.137-0.043c0.639-0.011,1.288-0.023,1.94-0.039
c-0.103,0.311-0.158,0.641-0.158,0.98c0,1.735,1.412,3.147,3.148,3.147c1.736,0,3.147-1.412,3.147-3.147
c0-0.706-0.242-1.369-0.651-1.903c0.135-0.239,0.23-0.556,0.292-0.981C23.636,15.978,23.662,15.798,23.703,15.582z M8.728,21.181
C6.672,21.181,5,19.51,5,17.455c0-1.562,0.969-2.898,2.335-3.451c0.026,0.001,0.046,0.009,0.074,0.009
c0.197,0,0.409-0.034,0.685-0.112c0.289-0.081,0.586-0.122,0.881-0.122c0.21,0,0.417,0.021,0.619,0.061
c0.888,0.213,1.652,0.741,2.166,1.464c0.041,0.06,0.082,0.121,0.119,0.184c0.057,0.091,0.105,0.188,0.155,0.285
c0.16,0.334,0.279,0.693,0.325,1.075c0.009,0.083,0.022,0.176,0.037,0.283l0.011,0.082l0.041,0.296
C12.417,19.539,10.763,21.181,8.728,21.181z M22.973,19.013c0,1.184-0.964,2.147-2.147,2.147c-1.186,0-2.148-0.963-2.148-2.147
c0-0.985,0.669-1.815,1.575-2.067c-2.174,0.109-4.353,0.113-6.529,0.169c-0.007,0-0.013,0-0.02,0
c-0.092,0-0.188-0.022-0.289-0.036c-0.032-0.402-0.111-0.788-0.238-1.156c-0.004-0.012-0.007-0.024-0.011-0.037
c-0.063-0.177-0.134-0.348-0.217-0.515c-0.076-0.163-0.161-0.318-0.255-0.469c-0.032-0.05-0.062-0.099-0.096-0.147
c-0.646-0.956-1.628-1.642-2.748-1.879c-0.362-0.089-0.734-0.149-1.122-0.149c-0.509,0-0.991,0.102-1.451,0.252
c-0.181-0.073-0.192-0.312-0.115-0.784c0.296-0.029,0.649-0.178,0.649-0.178V6.819c0,0,3.899,0,4.679,0
c0.943,0,1.316,0.888,1.316,0.888c0.72,2.081,1.269,3.432,1.52,4.126c0.097,0.264,0.303,0.39,0.378,0.392
c1.672,0.035,2.844,0.065,2.844,0.065c0-0.873,0-1.706,0-2.527c0.136-0.076,0.267-0.103,0.383-0.103
c0.265,0,0.453,0.138,0.453,0.138s-0.037,1.76-0.037,2.484c0,0.038,0.048,0.059,0.077,0.06c0.961,0.038,1.848,0.075,2.808,0.109
c0.646,0.025,0.813,0.18,0.758,0.839c-0.059,0.705-0.14,1.412-0.271,2.108c-0.269,1.444,0.042,1.395-1.562,1.496
C22.183,17.055,22.973,17.943,22.973,19.013z"/>
<path fill="#0B8C61" d="M19.57,19.013c0,0.693,0.564,1.257,1.256,1.257c0.692,0,1.256-0.564,1.256-1.257
c0-0.692-0.564-1.255-1.256-1.255C20.134,17.758,19.57,18.321,19.57,19.013z M21.832,19.013c0,0.555-0.451,1.007-1.006,1.007
c-0.555,0-1.006-0.452-1.006-1.007c0-0.554,0.451-1.005,1.006-1.005C21.381,18.008,21.832,18.459,21.832,19.013z"/>
<path fill="#0B8C61" d="M12.919,8.341L8.961,8.347l-0.004,0.97l-0.003,2.916c1.209-0.044,2.595-0.069,3.939-0.069
c0.452,0,0.9,0.003,1.334,0.009l-0.045-0.018L12.919,8.341z M12.893,11.663c-1.138,0-2.34,0.018-3.438,0.052l0.003-2.397
L9.46,8.846l3.098-0.005l0.935,2.824C13.294,11.664,13.094,11.663,12.893,11.663z"/>
<path fill="#0B8C61" d="M8.728,15.385c-1.142,0-2.07,0.929-2.07,2.07s0.928,2.069,2.07,2.069c1.141,0,2.069-0.928,2.069-2.069
S9.869,15.385,8.728,15.385z M8.728,19.023c-0.865,0-1.57-0.704-1.57-1.569c0-0.866,0.704-1.57,1.57-1.57
c0.865,0,1.569,0.704,1.569,1.57C10.297,18.32,9.593,19.023,8.728,19.023z"/>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 5.4 KiB

After

Width:  |  Height:  |  Size: 5.6 KiB

View File

@@ -11,53 +11,57 @@
<!ENTITY ns_adobe_xpath "http://ns.adobe.com/XPath/1.0/">
]>
<svg version="1.1" id="Layer_1" xmlns:x="&ns_extend;" xmlns:i="&ns_ai;" xmlns:graph="&ns_graphs;"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="35px" height="40px"
viewBox="0 0 35 40" enable-background="new 0 0 35 40" xml:space="preserve">
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="28px" height="33px"
viewBox="0 0 28 33" enable-background="new 0 0 28 33" xml:space="preserve">
<metadata>
<sfw xmlns="&ns_sfw;">
<slices></slices>
<sliceSourceBounds width="16383" height="103" y="-88.5" x="-8112" bottomLeftOrigin="true"></sliceSourceBounds>
<sliceSourceBounds height="96" width="16383" y="-85.5" x="-8112" bottomLeftOrigin="true"></sliceSourceBounds>
</sfw>
</metadata>
<g>
<path fill="#FFFFFF" d="M17.5,0C7.85,0,0,8.396,0,16.666C0,29.092,16.415,39.377,17.114,39.88C17.225,39.96,17.363,40,17.5,40
c0.134,0,0.271-0.039,0.381-0.117C18.58,39.389,35,29.313,35,16.666C35,8.396,27.15,0,17.5,0z"/>
<path opacity="0.25" fill="#282828" d="M14,25c-6.059,0-10.988,1.679-10.988,3.333c0,2.485,10.307,4.542,10.746,4.643
C13.828,32.992,13.914,33,14,33c0.084,0,0.17-0.008,0.239-0.023c0.439-0.099,10.749-2.114,10.749-4.643
C24.988,26.679,20.059,25,14,25z"/>
<g>
<path fill="#C1122B" d="M11.824,11.058l-0.002,0.59l-0.003,2.996c1.373-0.042,2.874-0.065,4.297-0.065
c0.251,0,0.502,0.001,0.75,0.002l-1.169-3.53L11.824,11.058z"/>
<circle fill="#C1122B" cx="10.91" cy="21.818" r="1.962"/>
<path fill="#C1122B" d="M15.494,21.413c-0.018-0.133-0.034-0.249-0.046-0.353c-0.058-0.477-0.206-0.926-0.406-1.344
c-0.061-0.121-0.122-0.242-0.193-0.356c-0.047-0.079-0.098-0.155-0.149-0.23c-0.643-0.904-1.597-1.564-2.707-1.83
c-0.252-0.05-0.511-0.076-0.774-0.076c-0.369,0-0.739,0.051-1.101,0.153c-0.345,0.097-0.609,0.14-0.856,0.14
c-0.034,0-0.059-0.01-0.092-0.012c-1.708,0.692-2.919,2.361-2.919,4.314c0,2.569,2.09,4.658,4.66,4.658
c2.544,0,4.611-2.053,4.649-4.589l-0.051-0.37L15.494,21.413z M10.91,24.404c-1.427,0-2.587-1.16-2.587-2.586
s1.16-2.587,2.587-2.587c1.426,0,2.587,1.161,2.587,2.587S12.336,24.404,10.91,24.404z"/>
<circle fill="#C1122B" cx="26.032" cy="23.767" r="1.258"/>
<path fill="#C1122B" d="M28.399,19.248c0.163-0.87,0.265-1.754,0.338-2.635c0.069-0.824-0.14-1.017-0.947-1.049
c-1.201-0.043-2.309-0.088-3.511-0.136c-0.037-0.001-0.096-0.027-0.096-0.075c0-0.905,0.046-3.106,0.046-3.106
s-0.235-0.172-0.566-0.172c-0.145,0-0.309,0.033-0.479,0.128c0,1.026,0,2.067,0,3.158c0,0-1.465-0.039-3.555-0.082
c-0.093-0.002-0.351-0.16-0.472-0.49c-0.314-0.867-1-2.557-1.901-5.157c0,0-0.466-1.11-1.645-1.11c-0.976,0-5.849,0-5.849,0v6.499
c0,0-0.441,0.185-0.811,0.222c-0.097,0.59-0.083,0.889,0.143,0.98c0.575-0.187,1.177-0.314,1.814-0.314
c0.486,0,0.951,0.076,1.403,0.187c1.399,0.297,2.627,1.154,3.435,2.349c0.042,0.06,0.08,0.122,0.12,0.184
c0.117,0.189,0.224,0.383,0.319,0.587c0.103,0.209,0.192,0.422,0.271,0.644c0.005,0.015,0.009,0.03,0.014,0.046
c0.159,0.46,0.258,0.942,0.298,1.444c0.126,0.017,0.245,0.045,0.361,0.045c0.008,0,0.016,0,0.025,0
c2.72-0.07,5.444-0.075,8.161-0.211c-1.133,0.314-1.969,1.352-1.969,2.583c0,1.481,1.203,2.684,2.685,2.684
c1.48,0,2.684-1.203,2.684-2.684c0-1.338-0.988-2.448-2.27-2.648C28.451,20.992,28.063,21.053,28.399,19.248z M16.116,15.204
c-1.679,0-3.412,0.031-4.923,0.086l0.004-3.644l0.005-1.212l4.946-0.008l1.579,4.767l0.056,0.023
C17.241,15.208,16.682,15.204,16.116,15.204z M27.602,23.767c0,0.867-0.705,1.572-1.57,1.572c-0.865,0-1.57-0.705-1.57-1.572
c0-0.865,0.705-1.569,1.57-1.569C26.897,22.197,27.602,22.902,27.602,23.767z"/>
<path fill="#C1122B" d="M17.5,0C7.85,0,0,8.396,0,16.666C0,29.092,16.415,39.377,17.114,39.88C17.225,39.96,17.363,40,17.5,40
c0.134,0,0.271-0.039,0.381-0.117C18.58,39.389,35,29.313,35,16.666C35,8.396,27.15,0,17.5,0z M29.966,23.767
c0,2.169-1.765,3.934-3.934,3.934c-2.17,0-3.935-1.765-3.935-3.934c0-0.424,0.069-0.837,0.198-1.226
c-0.816,0.02-1.626,0.034-2.425,0.048c-0.895,0.016-1.789,0.032-2.671,0.054l-0.046,0.001h-0.022
c-0.128,0-0.259-0.018-0.393-0.038c-0.39,2.883-2.84,5.12-5.827,5.12c-3.259,0-5.91-2.651-5.91-5.908
c0-2.156,1.174-4.027,2.904-5.059c-0.347-0.579-0.262-1.252-0.185-1.718l0.156-0.946l0.638-0.064V8.523v-1.25h1.25h5.849
c1.586,0,2.504,1.179,2.797,1.876l0.016,0.037l0.013,0.038c0.621,1.794,1.131,3.129,1.504,4.103
c0.104,0.271,0.195,0.51,0.272,0.715c0.664,0.014,1.248,0.028,1.721,0.039v-1.877v-0.733l0.64-0.358
c0.341-0.191,0.708-0.288,1.09-0.288c0.687,0,1.173,0.317,1.306,0.415l0.524,0.384l-0.014,0.65c0,0.001-0.021,1.019-0.035,1.95
c0.793,0.032,1.571,0.062,2.394,0.092c0.346,0.013,1.156,0.045,1.697,0.656c0.48,0.542,0.491,1.217,0.447,1.745
c-0.088,1.06-0.201,1.937-0.355,2.76c-0.05,0.27-0.083,0.496-0.111,0.684c-0.078,0.531-0.197,0.928-0.365,1.226
C29.664,22.055,29.966,22.885,29.966,23.767z"/>
<path fill="#FFFFFF" d="M14,0C6.28,0,0,6.717,0,13.332c0,9.941,13.132,18.169,13.691,18.572C13.78,31.968,13.891,32,14,32
c0.107,0,0.217-0.031,0.305-0.094C14.864,31.511,28,23.45,28,13.332C28,6.717,21.72,0,14,0z"/>
<g>
<path fill="#C1122B" d="M9.46,8.846L9.458,9.319l-0.003,2.397c1.098-0.034,2.3-0.052,3.438-0.052c0.201,0,0.401,0.001,0.6,0.002
l-0.935-2.824L9.46,8.846z"/>
<circle fill="#C1122B" cx="8.728" cy="17.454" r="1.569"/>
<path fill="#C1122B" d="M12.395,17.13c-0.015-0.107-0.027-0.199-0.037-0.282c-0.047-0.382-0.165-0.741-0.325-1.075
c-0.049-0.096-0.097-0.193-0.155-0.285c-0.038-0.063-0.078-0.124-0.119-0.184c-0.514-0.723-1.278-1.251-2.166-1.464
c-0.202-0.04-0.409-0.061-0.619-0.061c-0.295,0-0.592,0.041-0.881,0.122c-0.276,0.077-0.487,0.112-0.685,0.112
c-0.027,0-0.048-0.008-0.074-0.009C5.969,14.557,5,15.892,5,17.455c0,2.055,1.672,3.727,3.728,3.727
c2.035,0,3.689-1.642,3.719-3.671l-0.041-0.296L12.395,17.13z M8.728,19.523c-1.142,0-2.07-0.928-2.07-2.069
s0.928-2.07,2.07-2.07c1.141,0,2.069,0.929,2.069,2.07S9.869,19.523,8.728,19.523z"/>
<circle fill="#C1122B" cx="20.826" cy="19.013" r="1.006"/>
<path fill="#C1122B" d="M22.72,15.398c0.13-0.696,0.212-1.403,0.271-2.108c0.055-0.659-0.112-0.814-0.758-0.839
c-0.961-0.034-1.848-0.071-2.808-0.109c-0.029-0.001-0.077-0.022-0.077-0.06c0-0.724,0.037-2.484,0.037-2.484
S19.196,9.66,18.931,9.66c-0.116,0-0.247,0.026-0.383,0.103c0,0.821,0,1.654,0,2.527c0,0-1.172-0.031-2.844-0.065
c-0.074-0.002-0.281-0.128-0.378-0.392c-0.251-0.694-0.8-2.045-1.52-4.126c0,0-0.373-0.888-1.316-0.888c-0.781,0-4.679,0-4.679,0
v5.199c0,0-0.353,0.148-0.649,0.178c-0.078,0.472-0.067,0.711,0.115,0.784c0.46-0.15,0.942-0.252,1.451-0.252
c0.389,0,0.761,0.061,1.122,0.149c1.119,0.237,2.101,0.923,2.748,1.879c0.034,0.048,0.064,0.097,0.096,0.147
c0.094,0.151,0.179,0.306,0.255,0.47c0.083,0.167,0.154,0.338,0.217,0.515c0.004,0.012,0.008,0.024,0.011,0.037
c0.127,0.368,0.206,0.754,0.238,1.156c0.101,0.014,0.196,0.036,0.289,0.036c0.007,0,0.013,0,0.02,0
c2.176-0.056,4.355-0.06,6.529-0.169c-0.906,0.251-1.575,1.082-1.575,2.067c0,1.184,0.962,2.147,2.148,2.147
c1.184,0,2.147-0.963,2.147-2.147c0-1.071-0.79-1.958-1.816-2.119C22.761,16.794,22.451,16.842,22.72,15.398z M12.893,12.163
c-1.343,0-2.729,0.025-3.938,0.069l0.003-2.916l0.004-0.97l3.957-0.006l1.263,3.813l0.045,0.018
C13.793,12.166,13.345,12.163,12.893,12.163z M22.082,19.013c0,0.693-0.564,1.257-1.256,1.257c-0.692,0-1.256-0.564-1.256-1.257
c0-0.692,0.564-1.255,1.256-1.255C21.518,17.758,22.082,18.321,22.082,19.013z"/>
<path fill="#C1122B" d="M14,0C6.28,0,0,6.717,0,13.332c0,9.941,13.132,18.169,13.691,18.572C13.78,31.968,13.891,32,14,32
c0.107,0,0.217-0.031,0.305-0.094C14.864,31.511,28,23.45,28,13.332C28,6.717,21.72,0,14,0z M23.973,19.013
c0,1.735-1.412,3.147-3.147,3.147c-1.736,0-3.148-1.412-3.148-3.147c0-0.34,0.055-0.67,0.158-0.98
c-0.652,0.016-1.301,0.027-1.94,0.039c-0.716,0.013-1.431,0.025-2.137,0.043l-0.037,0.001h-0.018
c-0.102,0-0.208-0.014-0.315-0.03c-0.312,2.306-2.272,4.096-4.661,4.096C6.121,22.181,4,20.061,4,17.455
c0-1.725,0.939-3.222,2.323-4.047c-0.278-0.463-0.209-1.002-0.148-1.375L6.3,11.276l0.511-0.051V6.819v-1h1h4.679
c1.269,0,2.003,0.943,2.238,1.5l0.012,0.03l0.011,0.03c0.497,1.435,0.905,2.503,1.203,3.283c0.083,0.217,0.156,0.408,0.217,0.572
c0.531,0.011,0.998,0.022,1.376,0.031V9.763V9.177l0.512-0.286c0.273-0.153,0.566-0.23,0.872-0.23
c0.55,0,0.938,0.254,1.044,0.332l0.419,0.307l-0.011,0.52c0,0.001-0.017,0.815-0.028,1.56c0.635,0.025,1.257,0.05,1.916,0.073
c0.277,0.011,0.925,0.036,1.358,0.525c0.384,0.434,0.393,0.974,0.358,1.396c-0.07,0.848-0.161,1.55-0.284,2.208
c-0.04,0.216-0.066,0.397-0.089,0.547c-0.062,0.425-0.158,0.742-0.292,0.981C23.731,17.644,23.973,18.308,23.973,19.013z"/>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

View File

@@ -11,55 +11,59 @@
<!ENTITY ns_adobe_xpath "http://ns.adobe.com/XPath/1.0/">
]>
<svg version="1.1" id="Layer_1" xmlns:x="&ns_extend;" xmlns:i="&ns_ai;" xmlns:graph="&ns_graphs;"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="35px" height="40px"
viewBox="0 0 35 40" enable-background="new 0 0 35 40" xml:space="preserve">
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="28px" height="33px"
viewBox="0 0 28 33" enable-background="new 0 0 28 33" xml:space="preserve">
<metadata>
<sfw xmlns="&ns_sfw;">
<slices></slices>
<sliceSourceBounds width="16383" height="103" y="-88.5" x="-8112" bottomLeftOrigin="true"></sliceSourceBounds>
<sliceSourceBounds height="96" width="16383" y="-85.5" x="-8112" bottomLeftOrigin="true"></sliceSourceBounds>
</sfw>
</metadata>
<g>
<path fill="#FFFFFF" d="M17.5,0C7.85,0,0,8.396,0,16.666C0,29.092,16.415,39.377,17.114,39.88C17.225,39.96,17.363,40,17.5,40
c0.134,0,0.271-0.039,0.381-0.117C18.58,39.389,35,29.313,35,16.666C35,8.396,27.15,0,17.5,0z"/>
<path opacity="0.25" fill="#282828" d="M14,25c-6.059,0-10.988,1.679-10.988,3.333c0,2.485,10.307,4.542,10.746,4.643
C13.828,32.992,13.914,33,14,33c0.084,0,0.17-0.008,0.239-0.023c0.439-0.099,10.749-2.114,10.749-4.643
C24.988,26.679,20.059,25,14,25z"/>
<g>
<path fill="#C1122B" d="M17.5,0C7.85,0,0,8.396,0,16.666C0,29.092,16.415,39.377,17.114,39.88C17.225,39.96,17.363,40,17.5,40
c0.134,0,0.271-0.039,0.381-0.117C18.58,39.389,35,29.313,35,16.666C35,8.396,27.15,0,17.5,0z M17.503,38.635
C13.582,36.007,1.25,26.916,1.25,16.666C1.25,9.389,8.199,1.25,17.5,1.25c9.301,0,16.25,8.139,16.25,15.416
C33.75,27.102,21.425,36.054,17.503,38.635z"/>
<path fill="#C1122B" d="M29.628,19.477c0.154-0.823,0.267-1.7,0.355-2.76c0.044-0.528,0.033-1.203-0.447-1.745
c-0.541-0.611-1.351-0.643-1.697-0.656c-0.824-0.029-1.601-0.06-2.394-0.092c0.014-0.931,0.035-1.95,0.035-1.95l0.014-0.65
l-0.524-0.384c-0.133-0.097-0.619-0.415-1.306-0.415c-0.382,0-0.749,0.097-1.09,0.288l-0.64,0.358v0.733v1.877
c-0.472-0.011-1.057-0.024-1.721-0.039c-0.077-0.205-0.168-0.444-0.272-0.715c-0.372-0.974-0.882-2.309-1.504-4.103l-0.013-0.038
l-0.016-0.037c-0.293-0.697-1.211-1.876-2.797-1.876H9.763h-1.25v1.25v5.508l-0.638,0.064l-0.156,0.946
c-0.077,0.466-0.162,1.139,0.185,1.718C6.174,17.791,5,19.662,5,21.818c0,3.258,2.651,5.908,5.91,5.908
c2.987,0,5.437-2.237,5.827-5.12c0.134,0.02,0.265,0.038,0.393,0.038h0.022l0.047-0.001c0.882-0.023,1.777-0.038,2.671-0.054
c0.799-0.014,1.61-0.029,2.425-0.048c-0.129,0.388-0.198,0.801-0.198,1.226c0,2.169,1.765,3.934,3.935,3.934
c2.169,0,3.934-1.765,3.934-3.934c0-0.882-0.303-1.712-0.814-2.379c0.168-0.298,0.288-0.695,0.365-1.226
C29.545,19.973,29.578,19.747,29.628,19.477z M10.91,26.477c-2.57,0-4.66-2.09-4.66-4.658c0-1.953,1.211-3.622,2.919-4.314
c0.033,0.002,0.058,0.012,0.092,0.012c0.247,0,0.511-0.043,0.856-0.14c0.362-0.101,0.732-0.153,1.101-0.153
c0.263,0,0.521,0.026,0.774,0.076c1.11,0.267,2.065,0.926,2.708,1.83c0.052,0.076,0.102,0.152,0.149,0.23
c0.071,0.114,0.132,0.235,0.193,0.356c0.201,0.418,0.348,0.867,0.406,1.344c0.012,0.104,0.028,0.22,0.046,0.354l0.014,0.103
l0.051,0.37C15.521,24.424,13.453,26.477,10.91,26.477z M28.717,23.767c0,1.481-1.204,2.684-2.684,2.684
c-1.483,0-2.685-1.203-2.685-2.684c0-1.231,0.836-2.269,1.969-2.583c-2.718,0.136-5.442,0.141-8.161,0.211
c-0.008,0-0.016,0-0.024,0c-0.115,0-0.235-0.027-0.361-0.045c-0.04-0.502-0.139-0.985-0.298-1.444
c-0.005-0.015-0.009-0.03-0.014-0.046c-0.079-0.222-0.168-0.435-0.271-0.644c-0.095-0.204-0.201-0.397-0.319-0.586
c-0.04-0.062-0.078-0.124-0.12-0.184c-0.808-1.195-2.035-2.052-3.435-2.349c-0.452-0.111-0.917-0.187-1.403-0.187
c-0.637,0-1.239,0.127-1.814,0.314c-0.226-0.091-0.24-0.39-0.143-0.98c0.37-0.037,0.811-0.222,0.811-0.222V8.523
c0,0,4.873,0,5.849,0c1.178,0,1.645,1.11,1.645,1.11c0.901,2.601,1.587,4.29,1.901,5.157c0.122,0.33,0.379,0.488,0.472,0.49
c2.09,0.043,3.555,0.082,3.555,0.082c0-1.091,0-2.132,0-3.158c0.17-0.095,0.334-0.128,0.479-0.128
c0.331,0,0.566,0.172,0.566,0.172s-0.046,2.201-0.046,3.106c0,0.048,0.06,0.074,0.096,0.075c1.201,0.048,2.309,0.094,3.511,0.136
c0.807,0.031,1.016,0.224,0.947,1.049c-0.073,0.881-0.175,1.765-0.338,2.635c-0.336,1.804,0.052,1.744-1.953,1.87
C27.728,21.319,28.717,22.428,28.717,23.767z"/>
<path fill="#C1122B" d="M24.462,23.767c0,0.867,0.705,1.572,1.57,1.572c0.865,0,1.57-0.705,1.57-1.572
c0-0.865-0.705-1.569-1.57-1.569C25.168,22.197,24.462,22.902,24.462,23.767z M27.29,23.767c0,0.694-0.564,1.259-1.258,1.259
c-0.693,0-1.257-0.565-1.257-1.259c0-0.693,0.564-1.257,1.257-1.257C26.726,22.51,27.29,23.074,27.29,23.767z"/>
<path fill="#C1122B" d="M16.148,10.426l-4.946,0.008l-0.005,1.212l-0.004,3.644c1.512-0.055,3.244-0.086,4.923-0.086
c0.565,0,1.124,0.004,1.667,0.011l-0.056-0.023L16.148,10.426z M16.117,14.579c-1.423,0-2.924,0.023-4.297,0.065l0.003-2.996
l0.002-0.59l3.873-0.006l1.169,3.53C16.618,14.58,16.368,14.579,16.117,14.579z"/>
<path fill="#C1122B" d="M10.91,19.231c-1.427,0-2.587,1.161-2.587,2.587s1.16,2.586,2.587,2.586c1.426,0,2.587-1.16,2.587-2.586
S12.336,19.231,10.91,19.231z M10.91,23.779c-1.082,0-1.962-0.88-1.962-1.961c0-1.082,0.88-1.962,1.962-1.962
c1.082,0,1.962,0.88,1.962,1.962C12.871,22.9,11.991,23.779,10.91,23.779z"/>
<path fill="#FFFFFF" d="M14,0C6.28,0,0,6.717,0,13.332c0,9.941,13.132,18.169,13.691,18.572C13.78,31.968,13.891,32,14,32
c0.107,0,0.217-0.031,0.305-0.094C14.864,31.511,28,23.45,28,13.332C28,6.717,21.72,0,14,0z"/>
<g>
<path fill="#C1122B" d="M14,0C6.28,0,0,6.717,0,13.333c0,9.941,13.132,18.169,13.691,18.571C13.78,31.968,13.891,32,14,32
c0.107,0,0.217-0.031,0.305-0.094C14.864,31.511,28,23.45,28,13.333C28,6.717,21.72,0,14,0z M14.002,30.908
C10.865,28.805,1,21.533,1,13.333C1,7.511,6.56,1,14,1c7.44,0,13,6.511,13,12.333C27,21.682,17.14,28.843,14.002,30.908z"/>
<path fill="#C1122B" d="M23.703,15.582c0.123-0.658,0.214-1.36,0.284-2.208c0.035-0.422,0.026-0.962-0.358-1.396
c-0.433-0.489-1.081-0.514-1.358-0.525c-0.659-0.024-1.281-0.048-1.916-0.073c0.011-0.745,0.028-1.56,0.028-1.56l0.011-0.52
l-0.419-0.307c-0.106-0.078-0.495-0.332-1.044-0.332c-0.306,0-0.599,0.077-0.872,0.23l-0.512,0.286v0.586v1.502
c-0.378-0.009-0.845-0.02-1.376-0.031c-0.062-0.164-0.135-0.355-0.217-0.572c-0.298-0.78-0.706-1.847-1.203-3.283l-0.011-0.03
l-0.013-0.03c-0.234-0.557-0.969-1.5-2.238-1.5H7.811h-1v1v4.407L6.3,11.276l-0.125,0.757c-0.061,0.373-0.13,0.911,0.148,1.375
C4.939,14.233,4,15.729,4,17.455c0,2.606,2.121,4.727,4.728,4.727c2.39,0,4.349-1.79,4.661-4.096
c0.107,0.016,0.212,0.03,0.315,0.03h0.018l0.037-0.001c0.706-0.018,1.421-0.031,2.137-0.043c0.639-0.011,1.288-0.023,1.94-0.039
c-0.103,0.311-0.158,0.641-0.158,0.98c0,1.735,1.412,3.147,3.148,3.147c1.736,0,3.147-1.412,3.147-3.147
c0-0.706-0.242-1.369-0.651-1.903c0.135-0.239,0.23-0.556,0.292-0.981C23.636,15.978,23.662,15.798,23.703,15.582z M8.728,21.181
C6.672,21.181,5,19.51,5,17.455c0-1.562,0.969-2.898,2.335-3.451c0.026,0.001,0.046,0.009,0.074,0.009
c0.197,0,0.409-0.034,0.685-0.112c0.289-0.081,0.586-0.122,0.881-0.122c0.21,0,0.417,0.021,0.619,0.061
c0.888,0.213,1.652,0.741,2.166,1.464c0.041,0.06,0.082,0.121,0.119,0.184c0.057,0.091,0.105,0.188,0.155,0.285
c0.16,0.334,0.279,0.693,0.325,1.075c0.009,0.083,0.022,0.176,0.037,0.283l0.011,0.082l0.041,0.296
C12.417,19.539,10.763,21.181,8.728,21.181z M22.973,19.013c0,1.184-0.964,2.147-2.147,2.147c-1.186,0-2.148-0.963-2.148-2.147
c0-0.985,0.669-1.815,1.575-2.067c-2.174,0.109-4.353,0.113-6.529,0.169c-0.007,0-0.013,0-0.02,0
c-0.092,0-0.188-0.022-0.289-0.036c-0.032-0.402-0.111-0.788-0.238-1.156c-0.004-0.012-0.007-0.024-0.011-0.037
c-0.063-0.177-0.134-0.348-0.217-0.515c-0.076-0.163-0.161-0.318-0.255-0.469c-0.032-0.05-0.062-0.099-0.096-0.147
c-0.646-0.956-1.628-1.642-2.748-1.879c-0.362-0.089-0.734-0.149-1.122-0.149c-0.509,0-0.991,0.102-1.451,0.252
c-0.181-0.073-0.192-0.312-0.115-0.784c0.296-0.029,0.649-0.178,0.649-0.178V6.819c0,0,3.899,0,4.679,0
c0.943,0,1.316,0.888,1.316,0.888c0.72,2.081,1.269,3.432,1.52,4.126c0.097,0.264,0.303,0.39,0.378,0.392
c1.672,0.035,2.844,0.065,2.844,0.065c0-0.873,0-1.706,0-2.527c0.136-0.076,0.267-0.103,0.383-0.103
c0.265,0,0.453,0.138,0.453,0.138s-0.037,1.76-0.037,2.484c0,0.038,0.048,0.059,0.077,0.06c0.961,0.038,1.848,0.075,2.808,0.109
c0.646,0.025,0.813,0.18,0.758,0.839c-0.059,0.705-0.14,1.412-0.271,2.108c-0.269,1.444,0.042,1.395-1.562,1.496
C22.183,17.055,22.973,17.943,22.973,19.013z"/>
<path fill="#C1122B" d="M19.57,19.013c0,0.693,0.564,1.257,1.256,1.257c0.692,0,1.256-0.564,1.256-1.257
c0-0.692-0.564-1.255-1.256-1.255C20.134,17.758,19.57,18.321,19.57,19.013z M21.832,19.013c0,0.555-0.451,1.007-1.006,1.007
c-0.555,0-1.006-0.452-1.006-1.007c0-0.554,0.451-1.005,1.006-1.005C21.381,18.008,21.832,18.459,21.832,19.013z"/>
<path fill="#C1122B" d="M12.919,8.341L8.961,8.347l-0.004,0.97l-0.003,2.916c1.209-0.044,2.595-0.069,3.939-0.069
c0.452,0,0.9,0.003,1.334,0.009l-0.045-0.018L12.919,8.341z M12.893,11.663c-1.138,0-2.34,0.018-3.438,0.052l0.003-2.397
L9.46,8.846l3.098-0.005l0.935,2.824C13.294,11.664,13.094,11.663,12.893,11.663z"/>
<path fill="#C1122B" d="M8.728,15.385c-1.142,0-2.07,0.929-2.07,2.07s0.928,2.069,2.07,2.069c1.141,0,2.069-0.928,2.069-2.069
S9.869,15.385,8.728,15.385z M8.728,19.023c-0.865,0-1.57-0.704-1.57-1.569c0-0.866,0.704-1.57,1.57-1.57
c0.865,0,1.569,0.704,1.569,1.57C10.297,18.32,9.593,19.023,8.728,19.023z"/>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 5.4 KiB

After

Width:  |  Height:  |  Size: 5.6 KiB

View File

@@ -11,36 +11,41 @@
<!ENTITY ns_adobe_xpath "http://ns.adobe.com/XPath/1.0/">
]>
<svg version="1.1" id="Layer_1" xmlns:x="&ns_extend;" xmlns:i="&ns_ai;" xmlns:graph="&ns_graphs;"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="35px" height="40px"
viewBox="0 0 35 40" enable-background="new 0 0 35 40" xml:space="preserve">
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="28px" height="33px"
viewBox="0 0 28 33" enable-background="new 0 0 28 33" xml:space="preserve">
<metadata>
<sfw xmlns="&ns_sfw;">
<slices></slices>
<sliceSourceBounds width="16383" height="103" y="-88.5" x="-8112" bottomLeftOrigin="true"></sliceSourceBounds>
<sliceSourceBounds height="96" width="16383" y="-85.5" x="-8112" bottomLeftOrigin="true"></sliceSourceBounds>
</sfw>
</metadata>
<g>
<path fill="#FFFFFF" d="M17.5,0C7.85,0,0,8.396,0,16.666C0,29.092,16.415,39.377,17.114,39.88C17.225,39.96,17.363,40,17.5,40
c0.134,0,0.271-0.039,0.381-0.117C18.58,39.389,35,29.313,35,16.666C35,8.396,27.15,0,17.5,0z"/>
<path opacity="0.25" fill="#282828" d="M14,25c-6.059,0-10.988,1.679-10.988,3.333c0,2.485,10.307,4.542,10.746,4.643
C13.828,32.992,13.914,33,14,33c0.084,0,0.17-0.008,0.239-0.023c0.439-0.099,10.749-2.114,10.749-4.643
C24.988,26.679,20.059,25,14,25z"/>
<g>
<path fill="#C1122B" d="M17.499,10.683c-1.55,0-2.812,1.261-2.812,2.811c0,1.553,1.261,2.816,2.812,2.816
c1.551,0,2.813-1.263,2.813-2.816C20.312,11.944,19.051,10.683,17.499,10.683z"/>
<path fill="#C1122B" d="M17.499,7.935c-3.066,0-5.56,2.494-5.56,5.56c0,1.074,0.585,3.889,4.502,10.677l0.484,0.839l0.167,0.282
l0.112,0.188l0.054,0.09l0.107,0.18l0.135,0.222l0.13-0.215l0.046-0.077l0.11-0.187l0.04-0.067l0.238-0.399l0.494-0.857
c3.917-6.8,4.502-9.608,4.502-10.677C23.06,10.429,20.565,7.935,17.499,7.935z M17.499,17.247c-2.067,0-3.749-1.684-3.749-3.753
c0-2.068,1.682-3.748,3.749-3.748c2.068,0,3.751,1.681,3.751,3.748C21.25,15.563,19.568,17.247,17.499,17.247z"/>
<path fill="#C1122B" d="M17.5,0C7.85,0,0,8.396,0,16.666C0,29.092,16.415,39.377,17.114,39.88C17.225,39.96,17.363,40,17.5,40
c0.134,0,0.271-0.039,0.381-0.117C18.58,39.389,35,29.313,35,16.666C35,8.396,27.15,0,17.5,0z M24.17,27.526
c-0.003,2.16-3.358,3.29-6.671,3.29c-3.315,0-6.671-1.131-6.671-3.293c0-1.448,1.69-2.623,4.331-3.078
c-2.151-3.762-4.471-8.402-4.471-10.95c0-3.755,3.055-6.81,6.81-6.81s6.81,3.055,6.812,6.809c0,2.546-2.323,7.187-4.472,10.952
C22.48,24.9,24.17,26.076,24.17,27.526z"/>
<path fill="#C1122B" d="M18.968,25.953c-0.036,0.06-0.074,0.125-0.11,0.185c-0.05,0.086-0.105,0.177-0.151,0.255
c-0.139,0.23-0.258,0.424-0.366,0.603c-0.026,0.038-0.052,0.083-0.076,0.12c-0.101,0.166-0.177,0.289-0.242,0.391
c-0.019,0.031-0.04,0.068-0.056,0.091c-0.065,0.102-0.1,0.157-0.1,0.157l-0.369,0.578l-0.366-0.578c0,0-0.039-0.061-0.106-0.167
c-0.007-0.011-0.017-0.028-0.024-0.037c-0.067-0.108-0.153-0.247-0.265-0.431c-0.031-0.048-0.065-0.107-0.099-0.159
c-0.103-0.17-0.213-0.348-0.342-0.561c-0.052-0.09-0.112-0.188-0.167-0.281c-0.032-0.055-0.066-0.112-0.098-0.165l-0.476,0.076
c-2.161,0.347-3.096,1.157-3.096,1.494c0,0.215,0.336,0.601,1.074,0.943c1,0.463,2.408,0.718,3.965,0.718
c3.26,0,5.039-1.098,5.039-1.662c0-0.337-0.935-1.147-3.095-1.493L18.968,25.953z"/>
<path fill="#FFFFFF" d="M14,0C6.28,0,0,6.717,0,13.332c0,9.941,13.132,18.169,13.691,18.572C13.78,31.968,13.891,32,14,32
c0.107,0,0.217-0.031,0.305-0.094C14.864,31.511,28,23.45,28,13.332C28,6.717,21.72,0,14,0z"/>
<g>
<path fill="#C1122B" d="M13.999,8.546c-1.24,0-2.249,1.009-2.249,2.248c0,1.242,1.009,2.253,2.249,2.253
c1.241,0,2.251-1.01,2.251-2.253C16.25,9.555,15.24,8.546,13.999,8.546z"/>
<path fill="#C1122B" d="M14,6.348c-2.453,0-4.448,1.995-4.448,4.448c0,0.859,0.468,3.112,3.602,8.541l0.387,0.671l0.134,0.225
l0.09,0.15l0.043,0.072l0.085,0.144l0.108,0.178l0.104-0.172l0.036-0.061l0.088-0.149l0.032-0.054l0.19-0.319l0.395-0.685
c3.134-5.44,3.602-7.687,3.602-8.542C18.448,8.343,16.452,6.348,14,6.348z M13.999,13.797c-1.654,0-2.999-1.347-2.999-3.003
c0-1.655,1.346-2.998,2.999-2.998c1.655,0,3.001,1.345,3.001,2.998C17,12.451,15.654,13.797,13.999,13.797z"/>
<path fill="#C1122B" d="M14,0C6.28,0,0,6.717,0,13.333c0,9.941,13.132,18.169,13.691,18.571C13.78,31.968,13.891,32,14,32
c0.107,0,0.217-0.031,0.305-0.094C14.864,31.511,28,23.45,28,13.333C28,6.717,21.72,0,14,0z M19.336,22.021
c-0.002,1.728-2.686,2.632-5.337,2.632c-2.652,0-5.337-0.905-5.337-2.634c0-1.158,1.352-2.099,3.465-2.462
c-1.721-3.01-3.577-6.721-3.577-8.76c0-3.004,2.444-5.448,5.448-5.448s5.448,2.444,5.449,5.447c0,2.036-1.858,5.75-3.578,8.762
C17.984,19.92,19.336,20.86,19.336,22.021z"/>
<path fill="#C1122B" d="M15.175,20.763c-0.029,0.048-0.059,0.1-0.088,0.148c-0.04,0.068-0.084,0.142-0.121,0.204
c-0.111,0.184-0.206,0.339-0.293,0.483c-0.021,0.03-0.042,0.066-0.061,0.096c-0.081,0.133-0.142,0.231-0.194,0.313
c-0.015,0.025-0.032,0.054-0.045,0.073c-0.052,0.082-0.08,0.125-0.08,0.125l-0.295,0.463l-0.293-0.463
c0,0-0.031-0.048-0.085-0.134c-0.006-0.009-0.013-0.023-0.019-0.029c-0.053-0.086-0.123-0.198-0.212-0.345
c-0.025-0.038-0.052-0.086-0.079-0.127c-0.083-0.136-0.17-0.278-0.274-0.448c-0.042-0.072-0.089-0.15-0.134-0.225
c-0.026-0.044-0.053-0.09-0.078-0.132l-0.381,0.061c-1.729,0.277-2.477,0.925-2.477,1.195c0,0.172,0.269,0.481,0.859,0.754
c0.8,0.37,1.926,0.574,3.172,0.574c2.608,0,4.031-0.878,4.031-1.329c0-0.269-0.748-0.917-2.476-1.195L15.175,20.763z"/>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

View File

@@ -11,38 +11,41 @@
<!ENTITY ns_adobe_xpath "http://ns.adobe.com/XPath/1.0/">
]>
<svg version="1.1" id="Layer_1" xmlns:x="&ns_extend;" xmlns:i="&ns_ai;" xmlns:graph="&ns_graphs;"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="35px" height="40px"
viewBox="0 0 35 40" enable-background="new 0 0 35 40" xml:space="preserve">
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="28px" height="33px"
viewBox="0 0 28 33" enable-background="new 0 0 28 33" xml:space="preserve">
<metadata>
<sfw xmlns="&ns_sfw;">
<slices></slices>
<sliceSourceBounds width="16383" height="103" y="-88.5" x="-8112" bottomLeftOrigin="true"></sliceSourceBounds>
<sliceSourceBounds height="96" width="16383" y="-85.5" x="-8112" bottomLeftOrigin="true"></sliceSourceBounds>
</sfw>
</metadata>
<g>
<path fill="#FFFFFF" d="M17.5,0C7.85,0,0,8.396,0,16.666C0,29.092,16.415,39.377,17.114,39.88C17.225,39.96,17.363,40,17.5,40
c0.134,0,0.271-0.039,0.381-0.117C18.58,39.389,35,29.313,35,16.666C35,8.396,27.15,0,17.5,0z"/>
<path opacity="0.25" fill="#282828" d="M14,25c-6.059,0-10.988,1.679-10.988,3.333c0,2.485,10.307,4.542,10.746,4.643
C13.828,32.992,13.914,33,14,33c0.084,0,0.17-0.008,0.239-0.023c0.439-0.099,10.749-2.114,10.749-4.643
C24.988,26.679,20.059,25,14,25z"/>
<g>
<path fill="#C1122B" d="M17.5,0C7.85,0,0,8.396,0,16.666C0,29.092,16.415,39.377,17.114,39.88C17.225,39.96,17.363,40,17.5,40
c0.134,0,0.271-0.039,0.381-0.117C18.58,39.389,35,29.313,35,16.666C35,8.396,27.15,0,17.5,0z M17.503,38.635
C13.582,36.007,1.25,26.916,1.25,16.666C1.25,9.389,8.199,1.25,17.5,1.25s16.25,8.139,16.25,15.416
C33.75,27.103,21.425,36.054,17.503,38.635z"/>
<path fill="#C1122B" d="M17.499,9.745c-2.067,0-3.749,1.68-3.749,3.748c0,2.07,1.682,3.753,3.749,3.753
c2.068,0,3.751-1.684,3.751-3.753C21.25,11.426,19.568,9.745,17.499,9.745z M17.499,16.309c-1.551,0-2.812-1.263-2.812-2.816
c0-1.55,1.261-2.811,2.812-2.811c1.551,0,2.813,1.261,2.813,2.811C20.312,15.046,19.051,16.309,17.499,16.309z"/>
<path fill="#C1122B" d="M17.499,6.685c-3.755,0-6.81,3.055-6.81,6.81c0,2.549,2.32,7.188,4.471,10.95
c-2.641,0.454-4.331,1.63-4.331,3.078c0,2.162,3.356,3.293,6.671,3.293c3.313,0,6.668-1.13,6.671-3.29
c0-1.45-1.69-2.626-4.332-3.079c2.149-3.765,4.472-8.407,4.472-10.952C24.31,9.74,21.254,6.685,17.499,6.685z M22.538,27.523
c0,0.564-1.779,1.662-5.039,1.662c-1.557,0-2.965-0.255-3.965-0.718c-0.738-0.342-1.074-0.728-1.074-0.943
c0-0.337,0.935-1.147,3.096-1.494l0.476-0.076c0.032,0.053,0.066,0.11,0.098,0.165c0.056,0.094,0.115,0.191,0.167,0.281
c0.129,0.213,0.239,0.391,0.342,0.561c0.033,0.052,0.068,0.112,0.099,0.159c0.112,0.184,0.198,0.323,0.265,0.431
c0.007,0.008,0.017,0.026,0.024,0.037c0.066,0.107,0.106,0.167,0.106,0.167l0.366,0.578l0.369-0.578c0,0,0.034-0.055,0.1-0.157
c0.015-0.024,0.037-0.061,0.056-0.091c0.065-0.102,0.141-0.224,0.242-0.391c0.024-0.037,0.05-0.082,0.076-0.12
c0.108-0.179,0.227-0.373,0.366-0.603c0.046-0.078,0.101-0.17,0.151-0.255c0.036-0.06,0.075-0.126,0.11-0.185l0.475,0.076
C21.604,26.376,22.538,27.186,22.538,27.523z M18.559,24.171l-0.495,0.86l-0.236,0.396l-0.041,0.067l-0.111,0.188l-0.045,0.075
l-0.13,0.215l-0.135-0.222l-0.107-0.18l-0.054-0.09l-0.112-0.188l-0.168-0.283l-0.483-0.837
c-3.917-6.787-4.502-9.603-4.502-10.677c0-3.066,2.494-5.56,5.56-5.56c3.066,0,5.561,2.494,5.562,5.559
C23.061,14.563,22.476,17.372,18.559,24.171z"/>
<path fill="#FFFFFF" d="M14,0C6.28,0,0,6.717,0,13.332c0,9.941,13.132,18.169,13.691,18.572C13.78,31.968,13.891,32,14,32
c0.107,0,0.217-0.031,0.305-0.094C14.864,31.511,28,23.45,28,13.332C28,6.717,21.72,0,14,0z"/>
<g>
<path fill="#C1122B" d="M14,0C6.28,0,0,6.717,0,13.333c0,9.941,13.132,18.169,13.691,18.571C13.78,31.968,13.891,32,14,32
c0.107,0,0.217-0.031,0.305-0.094C14.864,31.511,28,23.45,28,13.333C28,6.717,21.72,0,14,0z M14.002,30.908
C10.865,28.805,1,21.533,1,13.333C1,7.511,6.56,1,14,1s13,6.511,13,12.333C27,21.682,17.14,28.843,14.002,30.908z"/>
<path fill="#C1122B" d="M14,7.796c-1.654,0-3,1.344-3,2.998c0,1.656,1.346,3.003,3,3.003c1.655,0,3-1.347,3-3.003
C17,9.141,15.654,7.796,14,7.796z M14,13.047c-1.24,0-2.25-1.01-2.25-2.253c0-1.24,1.009-2.248,2.25-2.248
c1.241,0,2.25,1.009,2.25,2.248C16.25,12.037,15.24,13.047,14,13.047z"/>
<path fill="#C1122B" d="M14,5.348c-3.004,0-5.448,2.444-5.448,5.448c0,2.039,1.856,5.75,3.577,8.76
c-2.113,0.363-3.465,1.304-3.465,2.462c0,1.729,2.685,2.634,5.337,2.634c2.65,0,5.335-0.904,5.337-2.632
c0-1.16-1.352-2.1-3.465-2.464c1.719-3.012,3.578-6.725,3.578-8.762C19.448,7.792,17.003,5.348,14,5.348z M18.031,22.018
c0,0.451-1.423,1.329-4.031,1.329c-1.246,0-2.372-0.204-3.172-0.574c-0.591-0.273-0.859-0.582-0.859-0.754
c0-0.269,0.748-0.917,2.477-1.195l0.381-0.061c0.025,0.042,0.053,0.088,0.078,0.132c0.045,0.075,0.092,0.153,0.134,0.225
c0.104,0.17,0.191,0.313,0.274,0.448c0.027,0.042,0.054,0.089,0.079,0.127c0.089,0.147,0.159,0.258,0.212,0.345
c0.006,0.007,0.013,0.021,0.019,0.029c0.053,0.086,0.085,0.134,0.085,0.134l0.293,0.463l0.295-0.463c0,0,0.028-0.044,0.08-0.125
c0.012-0.019,0.029-0.048,0.045-0.073c0.052-0.082,0.113-0.18,0.194-0.313c0.019-0.029,0.04-0.066,0.061-0.096
c0.086-0.143,0.181-0.298,0.293-0.483c0.037-0.063,0.081-0.136,0.121-0.204c0.029-0.048,0.06-0.1,0.088-0.148l0.38,0.061
C17.283,21.101,18.031,21.749,18.031,22.018z M14.847,19.337l-0.396,0.688l-0.189,0.316l-0.032,0.054l-0.089,0.151l-0.036,0.06
l-0.104,0.172L13.892,20.6l-0.085-0.144l-0.043-0.072l-0.09-0.15l-0.135-0.227l-0.387-0.67c-3.134-5.43-3.602-7.682-3.602-8.541
c0-2.453,1.995-4.448,4.448-4.448c2.453,0,4.448,1.995,4.449,4.447C18.449,11.65,17.981,13.897,14.847,19.337z"/>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

View File

@@ -11,37 +11,42 @@
<!ENTITY ns_adobe_xpath "http://ns.adobe.com/XPath/1.0/">
]>
<svg version="1.1" id="Layer_1" xmlns:x="&ns_extend;" xmlns:i="&ns_ai;" xmlns:graph="&ns_graphs;"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="35px" height="40px"
viewBox="0 0 35 40" enable-background="new 0 0 35 40" xml:space="preserve">
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="28px" height="33px"
viewBox="0 0 28 33" enable-background="new 0 0 28 33" xml:space="preserve">
<metadata>
<sfw xmlns="&ns_sfw;">
<slices></slices>
<sliceSourceBounds width="16383" height="103" y="-88.5" x="-8112" bottomLeftOrigin="true"></sliceSourceBounds>
<sliceSourceBounds height="96" width="16383" y="-85.5" x="-8112" bottomLeftOrigin="true"></sliceSourceBounds>
</sfw>
</metadata>
<g>
<path fill="#FFFFFF" d="M17.5,0C7.85,0,0,8.396,0,16.666C0,29.092,16.415,39.377,17.114,39.88C17.225,39.96,17.363,40,17.5,40
c0.134,0,0.271-0.039,0.381-0.117C18.58,39.389,35,29.313,35,16.666C35,8.396,27.15,0,17.5,0z"/>
<path opacity="0.25" fill="#282828" d="M14,25c-6.059,0-10.988,1.679-10.988,3.333c0,2.485,10.307,4.542,10.746,4.643
C13.828,32.992,13.914,33,14,33c0.084,0,0.17-0.008,0.239-0.023c0.439-0.099,10.749-2.114,10.749-4.643
C24.988,26.679,20.059,25,14,25z"/>
<g>
<path fill="#C1122B" d="M26.94,12.852h-4.093l-2.103-3.386c-0.206-0.359-0.667-0.48-1-0.284c-0.168,0.098-0.287,0.251-0.337,0.437
c-0.051,0.192-0.023,0.394,0.078,0.571l1.699,2.661h-7.888l1.724-2.701c0.083-0.143,0.109-0.338,0.057-0.526
c-0.05-0.188-0.17-0.344-0.338-0.441c-0.332-0.195-0.8-0.066-0.984,0.253l-2.122,3.417H8.06c-0.653,0-1.185,0.532-1.185,1.185
v1.034c0,0.615,0.454,1.212,0.991,1.301l0.131,0.022h18.945l0.149-0.02c0.551-0.072,1.034-0.681,1.034-1.304v-1.034
C28.125,13.385,27.593,12.852,26.94,12.852z"/>
<path fill="#C1122B" d="M10.071,25.025c0.009,0.277,0.153,0.421,0.328,0.421h14.207c0.177,0,0.321-0.144,0.321-0.32l0.009-0.125
l1.213-7.357H8.853L10.071,25.025z M21.395,20.092c0-0.372,0.275-0.674,0.647-0.674c0.371,0,0.645,0.302,0.645,0.674v2.521
c0,0.372-0.274,0.674-0.645,0.674c-0.372,0-0.647-0.301-0.647-0.674V20.092z M18.367,20.092c0-0.372,0.274-0.674,0.646-0.674
s0.646,0.302,0.646,0.674v2.521c0,0.372-0.274,0.674-0.646,0.674s-0.646-0.301-0.646-0.674V20.092z M15.34,20.092
c0-0.372,0.274-0.674,0.646-0.674c0.371,0,0.646,0.302,0.646,0.674v2.521c0,0.372-0.275,0.674-0.646,0.674
c-0.373,0-0.646-0.301-0.646-0.674V20.092z M12.313,20.092c0-0.372,0.274-0.674,0.646-0.674c0.371,0,0.645,0.302,0.645,0.674
v2.521c0,0.372-0.274,0.674-0.645,0.674c-0.372,0-0.646-0.301-0.646-0.674V20.092z"/>
<path fill="#C1122B" d="M17.5,0C7.85,0,0,8.396,0,16.666C0,29.092,16.415,39.377,17.114,39.88C17.225,39.96,17.363,40,17.5,40
c0.134,0,0.271-0.039,0.381-0.117C18.58,39.389,35,29.313,35,16.666C35,8.396,27.15,0,17.5,0z M29.375,15.072
c0,1.079-0.709,2.076-1.656,2.428l-1.282,7.361c-0.018,1.219-1.111,2.289-2.426,2.289H10.93c-1.315,0-2.406-1.069-2.434-2.383
l-1.281-7.285c-0.92-0.367-1.591-1.344-1.591-2.41v-1.034c0-1.343,1.093-2.435,2.435-2.435h2.877l1.746-2.809
c0.5-0.873,1.771-1.222,2.681-0.693c0.944,0.543,1.268,1.754,0.725,2.699l-0.513,0.802h3.328l-0.487-0.763
c-0.283-0.488-0.355-1.029-0.217-1.544c0.137-0.508,0.463-0.931,0.918-1.194c0.895-0.521,2.174-0.186,2.699,0.724l1.726,2.778
h3.397c1.343,0,2.435,1.093,2.435,2.435V15.072z"/>
<path fill="#FFFFFF" d="M14,0C6.28,0,0,6.717,0,13.332c0,9.941,13.132,18.169,13.691,18.572C13.78,31.968,13.891,32,14,32
c0.107,0,0.217-0.031,0.305-0.094C14.864,31.511,28,23.45,28,13.332C28,6.717,21.72,0,14,0z"/>
<g>
<path fill="#C1122B" d="M21.552,10.282h-3.274l-1.683-2.709c-0.165-0.287-0.533-0.384-0.8-0.228
c-0.135,0.078-0.229,0.201-0.27,0.35c-0.041,0.153-0.019,0.315,0.062,0.457l1.359,2.129h-6.311l1.379-2.161
c0.066-0.114,0.087-0.271,0.046-0.421c-0.04-0.15-0.136-0.275-0.271-0.353c-0.266-0.156-0.64-0.053-0.787,0.202l-1.697,2.733
H6.448c-0.522,0-0.948,0.426-0.948,0.948v0.827c0,0.492,0.363,0.97,0.793,1.041l0.105,0.018h15.156l0.119-0.016
c0.44-0.058,0.827-0.545,0.827-1.043V11.23C22.5,10.708,22.074,10.282,21.552,10.282z"/>
<path fill="#C1122B" d="M8.057,20.02c0.007,0.222,0.122,0.337,0.263,0.337h11.365c0.142,0,0.257-0.115,0.257-0.256l0.007-0.1
l0.971-5.886H7.082L8.057,20.02z M17.116,16.074c0-0.298,0.22-0.539,0.518-0.539c0.297,0,0.516,0.241,0.516,0.539v2.017
c0,0.298-0.219,0.539-0.516,0.539c-0.298,0-0.518-0.241-0.518-0.539V16.074z M14.694,16.074c0-0.298,0.219-0.539,0.517-0.539
s0.517,0.241,0.517,0.539v2.017c0,0.298-0.219,0.539-0.517,0.539s-0.517-0.241-0.517-0.539V16.074z M12.272,16.074
c0-0.298,0.219-0.539,0.517-0.539c0.297,0,0.517,0.241,0.517,0.539v2.017c0,0.298-0.22,0.539-0.517,0.539
c-0.298,0-0.517-0.241-0.517-0.539V16.074z M9.85,16.074c0-0.298,0.219-0.539,0.517-0.539c0.297,0,0.516,0.241,0.516,0.539v2.017
c0,0.298-0.219,0.539-0.516,0.539c-0.298,0-0.517-0.241-0.517-0.539V16.074z"/>
<path fill="#C1122B" d="M14,0C6.28,0,0,6.717,0,13.333c0,9.941,13.132,18.169,13.691,18.571C13.78,31.968,13.891,32,14,32
c0.107,0,0.217-0.031,0.305-0.094C14.864,31.511,28,23.45,28,13.333C28,6.717,21.72,0,14,0z M23.5,12.057
c0,0.863-0.567,1.661-1.325,1.942l-1.025,5.889c-0.015,0.976-0.889,1.831-1.94,1.831H8.744c-1.052,0-1.925-0.855-1.947-1.906
l-1.024-5.828C5.036,13.691,4.5,12.91,4.5,12.057V11.23c0-1.074,0.874-1.948,1.948-1.948H8.75l1.396-2.247
c0.4-0.698,1.417-0.978,2.145-0.555c0.755,0.435,1.015,1.403,0.58,2.159l-0.41,0.642h2.662l-0.39-0.61
c-0.227-0.391-0.284-0.823-0.174-1.235c0.109-0.406,0.37-0.745,0.734-0.955c0.716-0.417,1.739-0.148,2.159,0.579l1.381,2.223
h2.718c1.074,0,1.948,0.874,1.948,1.948V12.057z"/>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

View File

@@ -11,56 +11,61 @@
<!ENTITY ns_adobe_xpath "http://ns.adobe.com/XPath/1.0/">
]>
<svg version="1.1" id="Layer_1" xmlns:x="&ns_extend;" xmlns:i="&ns_ai;" xmlns:graph="&ns_graphs;"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="35px" height="40px"
viewBox="0 0 35 40" enable-background="new 0 0 35 40" xml:space="preserve">
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="28px" height="33px"
viewBox="0 0 28 33" enable-background="new 0 0 28 33" xml:space="preserve">
<metadata>
<sfw xmlns="&ns_sfw;">
<slices></slices>
<sliceSourceBounds width="16383" height="103" y="-88.5" x="-8112" bottomLeftOrigin="true"></sliceSourceBounds>
<sliceSourceBounds height="96" width="16383" y="-85.5" x="-8112" bottomLeftOrigin="true"></sliceSourceBounds>
</sfw>
</metadata>
<g>
<path fill="#FFFFFF" d="M17.5,0C7.85,0,0,8.396,0,16.666C0,29.092,16.415,39.377,17.114,39.88C17.225,39.96,17.363,40,17.5,40
c0.134,0,0.271-0.039,0.381-0.117C18.58,39.389,35,29.313,35,16.666C35,8.396,27.15,0,17.5,0z"/>
<path fill="#C1122B" d="M17.5,0C7.85,0,0,8.396,0,16.666C0,29.092,16.415,39.377,17.114,39.88C17.225,39.96,17.363,40,17.5,40
c0.134,0,0.271-0.039,0.381-0.117C18.58,39.389,35,29.313,35,16.666C35,8.396,27.15,0,17.5,0z M17.503,38.635
C13.582,36.007,1.25,26.916,1.25,16.666C1.25,9.389,8.199,1.25,17.5,1.25s16.25,8.139,16.25,15.416
C33.75,27.103,21.425,36.054,17.503,38.635z"/>
<path opacity="0.25" fill="#282828" d="M14,25c-6.059,0-10.988,1.679-10.988,3.333c0,2.485,10.307,4.542,10.746,4.643
C13.828,32.992,13.914,33,14,33c0.084,0,0.17-0.008,0.239-0.023c0.439-0.099,10.749-2.114,10.749-4.643
C24.988,26.679,20.059,25,14,25z"/>
<g>
<g>
<path fill="#C1122B" d="M24.322,27.957H10.617c-1.342,0-2.456-1.091-2.485-2.432l-1.349-7.679
c-0.958-0.364-1.659-1.374-1.659-2.477v-1.083c0-1.371,1.115-2.486,2.485-2.486h3.051l1.848-2.974
c0.51-0.886,1.798-1.237,2.721-0.703c0.463,0.267,0.794,0.699,0.933,1.217c0.138,0.517,0.068,1.058-0.2,1.52l-0.599,0.939h3.725
L18.516,10.9c-0.287-0.494-0.36-1.042-0.221-1.564c0.138-0.516,0.468-0.947,0.931-1.213c0.914-0.535,2.208-0.189,2.738,0.735
l1.829,2.942h3.597c1.37,0,2.485,1.115,2.485,2.486v1.083c0,1.118-0.742,2.149-1.728,2.495l-1.35,7.748
C26.779,26.865,25.665,27.957,24.322,27.957z M7.61,12.978c-0.721,0-1.306,0.587-1.306,1.308v1.083
c0,0.676,0.501,1.329,1.092,1.428l0.412,0.069l1.494,8.545c0.024,0.794,0.61,1.367,1.316,1.367h13.705
c0.707,0,1.293-0.574,1.306-1.279l1.499-8.644l0.43-0.056c0.618-0.079,1.139-0.735,1.139-1.431v-1.083
c0-0.721-0.586-1.308-1.306-1.308h-4.253l-2.185-3.516c-0.232-0.405-0.756-0.541-1.136-0.32c-0.191,0.11-0.327,0.287-0.383,0.497
c-0.058,0.219-0.026,0.448,0.09,0.648l1.716,2.69h-8.025l1.741-2.729c0.097-0.168,0.125-0.391,0.069-0.604
c-0.058-0.213-0.195-0.391-0.386-0.501c-0.38-0.223-0.912-0.076-1.119,0.288l-2.204,3.547H7.61z"/>
</g>
<g>
<path fill="#C1122B" d="M24.944,27.482H10.061c-0.871,0-1.58-0.708-1.58-1.579L6.972,16.82h21.056l-1.505,9.103
C26.525,26.774,25.816,27.482,24.944,27.482z M8.362,17.999l1.289,7.808c0.008,0.317,0.189,0.496,0.41,0.496h14.883
c0.221,0,0.402-0.18,0.402-0.401l0.007-0.121l1.286-7.783H8.362z"/>
</g>
<path fill="#FFFFFF" d="M14,0C6.28,0,0,6.717,0,13.332c0,9.941,13.132,18.169,13.691,18.572C13.78,31.968,13.891,32,14,32
c0.107,0,0.217-0.031,0.305-0.094C14.864,31.511,28,23.45,28,13.332C28,6.717,21.72,0,14,0z"/>
<path fill="#C1122B" d="M14,0C6.28,0,0,6.717,0,13.333c0,9.941,13.132,18.169,13.691,18.572C13.78,31.968,13.891,32,14,32
c0.107,0,0.217-0.031,0.305-0.094C14.864,31.511,28,23.45,28,13.333C28,6.717,21.72,0,14,0z M14.002,30.908
C10.865,28.805,1,21.533,1,13.333C1,7.511,6.56,1,14,1s13,6.511,13,12.333C27,21.682,17.14,28.843,14.002,30.908z"/>
<g>
<g>
<path fill="#C1122B" d="M22.258,23.976c0.389,0,0.676-0.316,0.676-0.706v-2.642c0-0.39-0.287-0.706-0.676-0.706
c-0.39,0-0.678,0.316-0.678,0.706v2.642C21.58,23.661,21.868,23.976,22.258,23.976z"/>
<path fill="#C1122B" d="M19.457,22.366H8.494c-1.074,0-1.965-0.873-1.988-1.946l-1.079-6.143
C4.661,13.986,4.1,13.177,4.1,12.295v-0.866c0-1.097,0.892-1.989,1.988-1.989h2.441l1.479-2.379
c0.408-0.709,1.438-0.99,2.177-0.563c0.37,0.214,0.635,0.559,0.747,0.973c0.11,0.413,0.054,0.846-0.16,1.216l-0.479,0.751h2.98
L14.813,8.72c-0.229-0.395-0.288-0.833-0.177-1.251c0.11-0.413,0.375-0.758,0.745-0.971c0.731-0.428,1.766-0.151,2.191,0.588
l1.463,2.354h2.877c1.096,0,1.988,0.892,1.988,1.989v0.866c0,0.894-0.594,1.719-1.382,1.996l-1.08,6.199
C21.423,21.492,20.532,22.366,19.457,22.366z M6.088,10.383c-0.576,0-1.045,0.47-1.045,1.046v0.866
c0,0.54,0.401,1.064,0.874,1.143l0.33,0.055l1.195,6.836c0.019,0.635,0.488,1.094,1.052,1.094h10.964
c0.565,0,1.034-0.459,1.045-1.023l1.199-6.915l0.344-0.045c0.494-0.064,0.912-0.588,0.912-1.145v-0.866
c0-0.576-0.469-1.046-1.045-1.046H18.51L16.762,7.57c-0.186-0.324-0.605-0.433-0.909-0.256
c-0.153,0.088-0.262,0.229-0.307,0.398c-0.046,0.175-0.021,0.358,0.072,0.518l1.373,2.152h-6.42l1.393-2.183
c0.077-0.134,0.1-0.313,0.055-0.483c-0.046-0.17-0.156-0.313-0.308-0.401c-0.304-0.179-0.729-0.061-0.895,0.23l-1.763,2.838
H6.088z"/>
</g>
<g>
<path fill="#C1122B" d="M19.086,23.976c0.39,0,0.677-0.316,0.677-0.706v-2.642c0-0.39-0.287-0.706-0.677-0.706
s-0.677,0.316-0.677,0.706v2.642C18.409,23.661,18.696,23.976,19.086,23.976z"/>
<path fill="#C1122B" d="M19.956,21.986H8.049c-0.697,0-1.264-0.566-1.264-1.263l-1.207-7.266h16.845l-1.204,7.282
C21.22,21.419,20.653,21.986,19.956,21.986z M6.69,14.399l1.031,6.247c0.006,0.253,0.151,0.397,0.328,0.397h11.907
c0.177,0,0.321-0.144,0.321-0.32l0.006-0.097l1.029-6.226H6.69z"/>
</g>
<g>
<path fill="#C1122B" d="M15.914,23.976c0.389,0,0.677-0.316,0.677-0.706v-2.642c0-0.39-0.288-0.706-0.677-0.706
c-0.39,0-0.677,0.316-0.677,0.706v2.642C15.237,23.661,15.524,23.976,15.914,23.976z"/>
</g>
<g>
<path fill="#C1122B" d="M12.742,23.976c0.389,0,0.676-0.316,0.676-0.706v-2.642c0-0.39-0.287-0.706-0.676-0.706
c-0.39,0-0.677,0.316-0.677,0.706v2.642C12.065,23.661,12.353,23.976,12.742,23.976z"/>
<g>
<path fill="#C1122B" d="M17.807,19.181c0.311,0,0.541-0.253,0.541-0.565v-2.113c0-0.312-0.23-0.565-0.541-0.565
c-0.312,0-0.542,0.253-0.542,0.565v2.113C17.264,18.929,17.495,19.181,17.807,19.181z"/>
</g>
<g>
<path fill="#C1122B" d="M15.268,19.181c0.312,0,0.542-0.253,0.542-0.565v-2.113c0-0.312-0.23-0.565-0.542-0.565
s-0.542,0.253-0.542,0.565v2.113C14.727,18.929,14.957,19.181,15.268,19.181z"/>
</g>
<g>
<path fill="#C1122B" d="M12.731,19.181c0.311,0,0.542-0.253,0.542-0.565v-2.113c0-0.312-0.23-0.565-0.542-0.565
c-0.312,0-0.542,0.253-0.542,0.565v2.113C12.19,18.929,12.419,19.181,12.731,19.181z"/>
</g>
<g>
<path fill="#C1122B" d="M10.194,19.181c0.311,0,0.541-0.253,0.541-0.565v-2.113c0-0.312-0.23-0.565-0.541-0.565
c-0.312,0-0.542,0.253-0.542,0.565v2.113C9.652,18.929,9.882,19.181,10.194,19.181z"/>
</g>
</g>
</g>
</g>

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

View File

@@ -22,5 +22,6 @@
//= require ./payment_methods/payment_methods
//= require ./products/products
//= require ./shipping_methods/shipping_methods
//= require ./users/users
//= require_tree .

View File

@@ -1,6 +1,7 @@
angular.module("ofn.admin").controller "AdminOrderMgmtCtrl", [
"$scope", "$http", "dataFetcher", "blankOption", "pendingChanges", "VariantUnitManager", "OptionValueNamer",
($scope, $http, dataFetcher, blankOption, pendingChanges, VariantUnitManager, OptionValueNamer) ->
"$scope", "$http", "dataFetcher", "blankOption", "pendingChanges", "VariantUnitManager", "OptionValueNamer", "SpreeApiKey"
($scope, $http, dataFetcher, blankOption, pendingChanges, VariantUnitManager, OptionValueNamer, SpreeApiKey) ->
$scope.loading = true
$scope.initialiseVariables = ->
start = daysFromToday -7
@@ -32,14 +33,14 @@ angular.module("ofn.admin").controller "AdminOrderMgmtCtrl", [
quantity: { name: "Quantity", visible: true }
max: { name: "Max", visible: true }
$scope.initialise = (spree_api_key) ->
$scope.initialise = ->
$scope.initialiseVariables()
authorise_api_reponse = ""
dataFetcher("/api/users/authorise_api?token=" + spree_api_key).then (data) ->
dataFetcher("/api/users/authorise_api?token=" + SpreeApiKey).then (data) ->
authorise_api_reponse = data
$scope.spree_api_key_ok = data.hasOwnProperty("success") and data["success"] == "Use of API Authorised"
if $scope.spree_api_key_ok
$http.defaults.headers.common["X-Spree-Token"] = spree_api_key
$http.defaults.headers.common["X-Spree-Token"] = SpreeApiKey
dataFetcher("/api/enterprises/accessible?template=bulk_index&q[is_primary_producer_eq]=true").then (data) ->
$scope.suppliers = data
$scope.suppliers.unshift blankOption()

View File

@@ -1,6 +1,8 @@
angular.module("ofn.admin").controller "AdminProductEditCtrl", [
"$scope", "$timeout", "$http", "dataFetcher", "DirtyProducts", "VariantUnitManager", "producers", "Taxons",
($scope, $timeout, $http, dataFetcher, DirtyProducts, VariantUnitManager, producers, Taxons) ->
"$scope", "$timeout", "$http", "dataFetcher", "DirtyProducts", "VariantUnitManager", "producers", "Taxons", "SpreeApiKey",
($scope, $timeout, $http, dataFetcher, DirtyProducts, VariantUnitManager, producers, Taxons, SpreeApiKey) ->
$scope.loading = true
$scope.updateStatusMessage =
text: ""
style: {}
@@ -42,14 +44,13 @@ angular.module("ofn.admin").controller "AdminProductEditCtrl", [
$scope.limit = 15
$scope.productsWithUnsavedVariants = []
$scope.initialise = (spree_api_key) ->
$scope.initialise = ->
authorise_api_reponse = ""
dataFetcher("/api/users/authorise_api?token=" + spree_api_key).then (data) ->
dataFetcher("/api/users/authorise_api?token=" + SpreeApiKey).then (data) ->
authorise_api_reponse = data
$scope.spree_api_key_ok = data.hasOwnProperty("success") and data["success"] == "Use of API Authorised"
if $scope.spree_api_key_ok
$http.defaults.headers.common["X-Spree-Token"] = spree_api_key
$http.defaults.headers.common["X-Spree-Token"] = SpreeApiKey
$scope.fetchProducts()
else if authorise_api_reponse.hasOwnProperty("error")
$scope.api_error_msg = authorise_api_reponse("error")

View File

@@ -1 +1 @@
angular.module("admin.enterprises", ["admin.payment_methods", "admin.shipping_methods"])
angular.module("admin.enterprises", ["admin.payment_methods", "admin.shipping_methods", "admin.users"])

View File

@@ -197,12 +197,13 @@ angular.module('order_cycle', ['ngResource'])
this.order_cycle.outgoing_exchanges.push({enterprise_id: new_distributor_id, incoming: false, active: true, variants: {}, enterprise_fees: []})
removeExchange: (exchange) ->
incoming_index = this.order_cycle.incoming_exchanges.indexOf exchange
this.order_cycle.incoming_exchanges.splice(incoming_index, 1) if incoming_index > -1
outgoing_index = this.order_cycle.outgoing_exchanges.indexOf exchange
this.order_cycle.outgoing_exchanges.splice(outgoing_index, 1) if outgoing_index > -1
this.removeDistributionOfVariant(variant_id) for variant_id, active of exchange.variants when active
if exchange.incoming
incoming_index = this.order_cycle.incoming_exchanges.indexOf exchange
this.order_cycle.incoming_exchanges.splice(incoming_index, 1)
this.removeDistributionOfVariant(variant_id) for variant_id, active of exchange.variants when active
else
outgoing_index = this.order_cycle.outgoing_exchanges.indexOf exchange
this.order_cycle.outgoing_exchanges.splice(outgoing_index, 1) if outgoing_index > -1
addCoordinatorFee: ->
this.order_cycle.coordinator_fees.push({})

View File

@@ -0,0 +1,18 @@
angular.module("admin.users").directive "ofnUserAutocomplete", ($http) ->
link: (scope,element,attrs) ->
setTimeout ->
element.select2
multiple: false
initSelection: (element, callback) ->
callback { id: element.val(), email: attrs.email }
ajax:
url: Spree.routes.user_search
datatype: 'json'
data:(term, page) ->
{ q: term }
results: (data, page) ->
{ results: data }
formatResult: (user) ->
user.email
formatSelection: (user) ->
user.email

View File

@@ -0,0 +1 @@
angular.module("admin.users", [])

View File

@@ -1,4 +1,4 @@
Darkswarm.controller "SignupCtrl", ($scope, $http, $location, AuthenticationService) ->
Darkswarm.controller "SignupCtrl", ($scope, $http, $window, $location, Redirections, AuthenticationService) ->
$scope.path = "/signup"
$scope.errors =
email: null
@@ -6,6 +6,9 @@ Darkswarm.controller "SignupCtrl", ($scope, $http, $location, AuthenticationServ
$scope.submit = ->
$http.post("/user/spree_user", {spree_user: $scope.spree_user}).success (data)->
location.href = location.origin + location.pathname # Strips out hash fragments
if Redirections.after_login
$window.location.href = $window.location.origin + Redirections.after_login
else
$window.location.href = $window.location.origin + $window.location.pathname # Strips out hash fragments
.error (data) ->
$scope.errors = data

View File

@@ -1,7 +1,7 @@
Darkswarm.controller "AuthenticationCtrl", ($scope, AuthenticationService, SpreeUser)->
$scope.open = AuthenticationService.open
$scope.toggle = AuthenticationService.toggle
$scope.spree_user = SpreeUser.spree_user
$scope.active = AuthenticationService.active
$scope.select = AuthenticationService.select

View File

@@ -0,0 +1,11 @@
Darkswarm.controller "RegistrationCtrl", ($scope, RegistrationService, EnterpriseRegistrationService, availableCountries) ->
$scope.currentStep = RegistrationService.currentStep
$scope.enterprise = EnterpriseRegistrationService.enterprise
$scope.select = RegistrationService.select
$scope.steps = ['details','address','contact','about','images','social']
$scope.countries = availableCountries
$scope.countryHasStates = ->
$scope.enterprise.country.states.length > 0

View File

@@ -0,0 +1,15 @@
Darkswarm.controller "RegistrationFormCtrl", ($scope, RegistrationService, EnterpriseRegistrationService) ->
$scope.submitted = false
$scope.valid = (form) ->
$scope.submitted = !form.$valid
form.$valid
$scope.create = (form) ->
EnterpriseRegistrationService.create() if $scope.valid(form)
$scope.update = (nextStep, form) ->
EnterpriseRegistrationService.update(nextStep) if $scope.valid(form)
$scope.selectIfValid = (nextStep, form) ->
RegistrationService.select(nextStep) if $scope.valid(form)

View File

@@ -0,0 +1,6 @@
Darkswarm.directive "ofnInlineFlash", ->
restrict: 'E'
controller: ($scope) ->
$scope.visible = true
$scope.closeFlash = ->
$scope.visible = false

View File

@@ -0,0 +1,16 @@
# Convert number to string currency using injected currency configuration.
#
# @requires currencyConfig json - /app/serializers/api/currency_config_serializer.rb
# @return: string
Darkswarm.filter "localizeCurrency", (currencyConfig)->
(amount) ->
currency_code = if currencyConfig.display_currency then " " + currencyConfig.currency else ""
decimals = if currencyConfig.hide_cents == "true" then 0 else 2
# We need to use parseFloat before toFixed as the amount should be a passed in as a string.
amount_fixed = parseFloat(amount).toFixed(decimals)
# Build the final price string.
if currencyConfig.symbol_position == 'before'
currencyConfig.symbol + amount_fixed + currency_code
else
amount_fixed + " " + currencyConfig.symbol + currency_code

View File

@@ -4,12 +4,14 @@ Darkswarm.factory "AuthenticationService", (Navigation, $modal, $location, Redir
selectedPath: "/login"
constructor: ->
if $location.path() in ["/login", "/signup", "/forgot"]
@open()
if $location.path() in ["/login", "/signup", "/forgot"] && location.pathname isnt '/register/auth'
@open $location.path()
else if location.pathname is '/register/auth'
@open '/signup', 'registration_authentication.html'
open: (path = false)=>
open: (path = false, template = 'authentication.html') =>
@modalInstance = $modal.open
templateUrl: 'authentication.html'
templateUrl: template
windowClass: "login-modal medium"
@modalInstance.result.then @close, @close
@selectedPath = path || @selectedPath

View File

@@ -3,7 +3,7 @@ Darkswarm.factory 'Cart', (CurrentOrder, Variants, $timeout, $http)->
new class Cart
dirty: false
order: CurrentOrder.order
line_items: CurrentOrder.order?.line_items || []
line_items: CurrentOrder.order?.line_items || []
constructor: ->
for line_item in @line_items
line_item.variant.line_item = line_item
@@ -22,13 +22,13 @@ Darkswarm.factory 'Cart', (CurrentOrder, Variants, $timeout, $http)->
# TODO what shall we do here?
data: =>
variants = {}
variants = {}
for li in @line_items_present()
variants[li.variant.id] =
variants[li.variant.id] =
quantity: li.quantity
max_quantity: li.max_quantity
{variants: variants}
saved: =>
@dirty = false
@@ -48,15 +48,15 @@ Darkswarm.factory 'Cart', (CurrentOrder, Variants, $timeout, $http)->
total: =>
@line_items_present().map (li)->
li.variant.getPrice()
li.variant.totalPrice()
.reduce (t, price)->
t + price
, 0
register_variant: (variant)=>
exists = @line_items.some (li)-> li.variant == variant
@create_line_item(variant) unless exists
@create_line_item(variant) unless exists
create_line_item: (variant)->
variant.line_item =
variant: variant

View File

@@ -0,0 +1,57 @@
Darkswarm.factory "EnterpriseRegistrationService", ($http, RegistrationService, CurrentUser, spreeApiKey, Loading, availableCountries, enterpriseAttributes) ->
new class EnterpriseRegistrationService
enterprise:
user_ids: [CurrentUser.id]
email: CurrentUser.email
address: {}
country: availableCountries[0]
constructor: ->
for key, value of enterpriseAttributes
@enterprise[key] = value
create: =>
Loading.message = "Creating " + @enterprise.name
$http(
method: "POST"
url: "/api/enterprises"
data:
enterprise: @prepare()
params:
token: spreeApiKey
).success((data) =>
Loading.clear()
@enterprise.id = data
RegistrationService.select('about')
).error((data) =>
Loading.clear()
alert('Failed to create your enterprise.\nPlease ensure all fields are completely filled out.')
)
# RegistrationService.select('about')
update: (step) =>
Loading.message = "Updating " + @enterprise.name
$http(
method: "PUT"
url: "/api/enterprises/#{@enterprise.id}"
data:
enterprise: @prepare()
params:
token: spreeApiKey
).success((data) ->
Loading.clear()
RegistrationService.select(step)
).error((data) ->
Loading.clear()
alert('Failed to update your enterprise.\nPlease ensure all fields are completely filled out.')
)
# RegistrationService.select(step)
prepare: =>
enterprise = {}
excluded = [ 'address', 'country', 'id' ]
for key, value of @enterprise when key not in excluded
enterprise[key] = value
enterprise.address_attributes = @enterprise.address if @enterprise.address?
enterprise.address_attributes.country_id = @enterprise.country.id if @enterprise.country?
enterprise

View File

@@ -0,0 +1,23 @@
Darkswarm.factory "RegistrationService", (Navigation, $modal, Loading)->
new class RegistrationService
constructor: ->
@open()
open: =>
@modalInstance = $modal.open
templateUrl: 'registration.html'
windowClass: "login-modal large"
backdrop: 'static'
@modalInstance.result.then @close, @close
@select 'introduction'
select: (step)=>
@current_step = step
currentStep: =>
@current_step
close: ->
Loading.message = "Taking you back to the home page"
Navigation.go "/"

View File

@@ -5,7 +5,7 @@ Darkswarm.factory 'Variants', ->
@variants[variant.id] ||= @extend variant
extend: (variant)->
variant.getPrice = ->
variant.price * variant.line_item.quantity
variant.basePricePercentage = Math.round(variant.base_price / variant.price * 100)
variant.totalPrice = ->
variant.price_with_fees * variant.line_item.quantity
variant.basePricePercentage = Math.round(variant.price / variant.price_with_fees * 100)
variant

View File

@@ -1,2 +1,2 @@
%a.close-reveal-modal.outside{"ng-click" => "$close()"}
%a.close-reveal-modal{"ng-click" => "$close()"}
%i.ofn-i_009-close

View File

@@ -10,26 +10,26 @@
.expanded{"ng-show" => "expanded"}
%ul
%li.cost
.right {{ variant.base_price | currency }}
.right {{ variant.price | localizeCurrency }}
Item cost
%li{"bo-if" => "variant.fees.admin"}
.right {{ variant.fees.admin | currency }}
.right {{ variant.fees.admin | localizeCurrency }}
Admin fee
%li{"bo-if" => "variant.fees.sales"}
.right {{ variant.fees.sales | currency }}
.right {{ variant.fees.sales | localizeCurrency }}
Sales fee
%li{"bo-if" => "variant.fees.packing"}
.right {{ variant.fees.packing | currency }}
.right {{ variant.fees.packing | localizeCurrency }}
Packing fee
%li{"bo-if" => "variant.fees.transport"}
.right {{ variant.fees.transport | currency }}
.right {{ variant.fees.transport | localizeCurrency }}
Transport fee
%li{"bo-if" => "variant.fees.fundraising"}
.right {{ variant.fees.fundraising | currency }}
.right {{ variant.fees.fundraising | localizeCurrency }}
Fundraising fee
%li
%strong
.right = {{ variant.price | currency }}
.right = {{ variant.price_with_fees | localizeCurrency }}
&nbsp;
%a{"ng-click" => "expanded = !expanded"}

View File

@@ -0,0 +1,10 @@
%div#registration-modal{"ng-controller" => "RegistrationCtrl"}
%div{ ng: { show: "currentStep() == 'introduction'" } }
%ng-include{ src: "'registration/introduction.html'" }
%div{ ng: { repeat: 'step in steps', show: "currentStep() == step" } }
%ng-include{ src: "'registration/'+ step + '.html'" }
%div{ ng: { show: "currentStep() == 'finished'" } }
%ng-include{ src: "'registration/finished.html'" }
%a.close-reveal-modal{"ng-click" => "$close()"}
%i.ofn-i_009-close

View File

@@ -0,0 +1,44 @@
.container#registration-about
.header
%h2 Nice one!
%h5
Now let's flesh out the details about
%span.brick{"ng-show" => "enterprise.is_distributor"}
{{ enterprise.name }}
%span.turquoise{"ng-show" => "!enterprise.is_distributor" }
{{ enterprise.name }}
%ng-include{ src: "'registration/steps.html'" }
%form{ name: 'about', novalidate: true, ng: { controller: "RegistrationFormCtrl", submit: "update('social',about)" } }
.row
.small-12.columns
.alert-box.alert{"data-alert" => ""}
{{ enterprise.name }} won't be visible on the Open Food Network until you enter a long and short description.
%a.close{:href => "#"} &times;
.alert-box.info{"data-alert" => ""}
{{ enterprise.name }} has been created on the Open Food Network. If you leave at any point from here onwards, your enterprise will be saved, and you can always login to the admin section to update or continue filling out your enterprise details.
%a.close{:href => "#"} &times;
.small-12.large-8.columns
.row
.small-12.columns
%label{ for: 'enterprise_description' } Short Description:
%input.chunky.small-12.columns{ id: 'enterprise_description', placeholder: "A short sentence describing your enterprise", ng: { model: 'enterprise.description' } }
.row
.small-12.columns
%label{ for: 'enterprise_long_desc' } Long Description:
%textarea.chunky.small-12.columns{ id: 'enterprise_long_desc', placeholder: "We recommend keeping your description to under 600 characters or 150 words. Why? Cus people are lazy, and don't like to read too much text online. ;)", ng: { model: 'enterprise.long_description' } }
%small {{ enterprise.long_description.length }} characters used
.small-12.large-4.columns
.row
.small-12.columns
%label{ for: 'enterprise_abn' } ABN:
%input.chunky.small-12.columns{ id: 'enterprise_abn', placeholder: "eg. 99 123 456 789", ng: { model: 'enterprise.abn' } }
.row
.small-12.columns
%label{ for: 'enterprise_acn' } ACN:
%input.chunky.small-12.columns{ id: 'enterprise_acn', placeholder: "eg. 123 456 789", ng: { model: 'enterprise.acn' } }
.row.buttons.pad-top
.small-12.columns
%input.button.primary{ type: "submit", value: "Continue" }

View File

@@ -0,0 +1,60 @@
.container#registration-address
.header
%h2
Greetings
%span{ ng: { class: "{brick: enterprise.is_distributor, turquoise: !enterprise.is_distributor}" } }
{{ enterprise.name }}
%h5 Now we need to know where you are
%ng-include{ src: "'registration/steps.html'" }
%form{ name: 'address', novalidate: true, ng: { controller: "RegistrationFormCtrl", submit: "selectIfValid('contact',address)" } }
.row.content
.small-12.medium-12.large-7.columns
.row
.small-12.columns.field
%label{ for: 'enterprise_address' } Address:
%input.chunky.small-12.columns{ id: 'enterprise_address', name: 'address1', required: true, placeholder: "eg. 123 Cranberry Drive", required: true, ng: { model: 'enterprise.address.address1' } }
%span.error.small-12.columns{ ng: { show: "address.address1.$error.required && submitted" } }
You need to enter an address.
.row
.small-12.large-8.columns.field
%label{ for: 'enterprise_city' } Suburb:
%input.chunky.small-12.columns{ id: 'enterprise_city', name: 'city', required: true, placeholder: "eg. Northcote", ng: { model: 'enterprise.address.city' } }
%span.error.small-12.columns{ ng: { show: "address.city.$error.required && submitted" } }
You need to enter a suburb.
.small-12.large-4.columns.field
%label{ for: 'enterprise_zipcode' } Postcode:
%input.chunky.small-12.columns{ id: 'enterprise_zipcode', name: 'zipcode', required: true, placeholder: "eg. 3070", ng: { model: 'enterprise.address.zipcode' } }
%span.error.small-12.columns{ ng: { show: "address.zipcode.$error.required && submitted" } }
You need to enter a postcode.
.row
.small-12.large-8.columns.field
%label{ for: 'enterprise_country' } Country:
%select.chunky.small-12.columns{ id: 'enterprise_country', name: 'country', required: true, ng: { model: 'enterprise.country', options: 'c as c.name for c in countries' } }
%span.error.small-12.columns{ ng: { show: "address.country.$error.required && submitted" } }
You need to enter a country.
.small-12.large-4.columns.field
%label{ for: 'enterprise_state' } State:
%select.chunky.small-12.columns{ id: 'enterprise_state', name: 'state', ng: { model: 'enterprise.address.state_id', options: 's.id as s.abbr for s in enterprise.country.states', show: 'countryHasStates()', required: 'countryHasStates()' } }
%span.error.small-12.columns{ ng: { show: "address.state.$error.required && submitted" } }
You need to enter a state.
.small-12.medium-12.large-5.hide-for-small-only
// This is the location area
/ %h6
/ Location display
/ %i.ofn-i_013-help.has-tip{ 'data-tooltip' => true, title: "Choose how you want to display your enterprise's address on the Open Food Network. By default, full location is shown everywhere including street name and number."}
/ .row
/ .small-12.columns
/ %label.indent-checkbox
/ %input{ type: 'checkbox', id: 'enterpise_suburb_only', ng: { model: 'enterprise.suburb_only' } }
/ Hide my street name and street number from the public (ie. only show the suburb)
/ .small-12.columns
/ %label.indent-checkbox
/ %input{ type: 'checkbox', id: 'enterprise_on_map', ng: { model: 'enterprise.on_map' } }
/ Blur my location on the map (show an approximate, not exact pin)
.row.buttons
.small-12.columns
%input.button.secondary{ type: "button", value: "Back", ng: { click: "select('details')" } }
&nbsp;
%input.button.primary{ type: "submit", value: "Continue" }

View File

@@ -0,0 +1,46 @@
.container#registration-contact
.header
%h2 Last step to create your enterprise!
%h5
Who is responsible for managing
%span{ ng: { class: "{brick: enterprise.is_distributor, turquoise: !enterprise.is_distributor}" } }
{{ enterprise.name }}?
%ng-include{ src: "'registration/steps.html'" }
%form{ name: 'contact', novalidate: true, ng: { controller: "RegistrationFormCtrl", submit: "create(contact)" } }
.row.content
.small-12.medium-12.large-7.columns
.row
.small-12.columns.field
%label{ for: 'enterprise_contact' } Primary Contact:
%input.chunky.small-12.columns{ id: 'enterprise_contact', name: 'contact', required: true, placeholder: "Contact Name", ng: { model: 'enterprise.contact' } }
%span.error.small-12.columns{ ng: { show: "contact.contact.$error.required && submitted" } }
You need to enter a primary contact.
.row
.small-12.columns.field
%label{ for: 'enterprise_email' } Email address:
%input.chunky.small-12.columns{ id: 'enterprise_email', name: 'email', type: 'email', required: true, placeholder: "eg. charlie@thefarm.com", ng: { model: 'enterprise.email' } }
%span.error.small-12.columns{ ng: { show: "(contact.email.$error.email || contact.email.$error.required) && submitted" } }
You need to enter valid email address.
.row
.small-12.columns.field
%label{ for: 'enterprise_phone' } Phone number:
%input.chunky.small-12.columns{ id: 'enterprise_phone', name: 'phone', placeholder: "eg. (03) 1234 5678", ng: { model: 'enterprise.phone' } }
.small-12.medium-12.large-5.hide-for-small-only
/ %h6
/ Contact display
/ %i.ofn-i_013-help.has-tip{ 'data-tooltip' => true, title: "Choose how you want to display your contact details on the Open Food Network."}
/ .row
/ .small-12.columns
/ %label.indent-checkbox
/ %input{ type: 'checkbox', id: 'contact_name_profile', ng: { model: 'enterprise.name_in_profile' } } &nbsp; Display name in profile
/ .small-12.columns
/ %label.indent-checkbox
/ %input{ type: 'checkbox', id: 'contact_email_profile', ng: { model: 'enterprise.email_in_profile' } } &nbsp; Display email in profile
/ .small-12.columns
/ %label.indent-checkbox
/ %input{ type: 'checkbox', id: 'contact_phone_profile', ng: { model: 'enterprise.phone_in_profile' } } &nbsp; Display phone in profile
.row.buttons
.small-12.columns
%input.button.secondary{ type: "button", value: "Back", ng: { click: "select('address')" } }
&nbsp;
%input.button.primary{ type: "submit", value: "Continue" }

View File

@@ -0,0 +1,42 @@
.container#registration-details{bindonce: true}
.header
%h2 Let's Get Started
%h5{ bo: { if: "enterprise.type != 'single'" } } Woot! First we need to know what sort of enterprise you are:
%h5{ bo: { if: "enterprise.type == 'single'" } } Woot! First we need to know the name of your farm:
%ng-include{ src: "'registration/steps.html'" }
%form{ name: 'details', novalidate: true, ng: { controller: "RegistrationFormCtrl", submit: "selectIfValid('address',details)" } }
.row
.small-12.columns.field
%label{ for: 'enterprise_name', bo: { if: "enterprise.type != 'single'" } } Enterprise Name:
%label{ for: 'enterprise_name', bo: { if: "enterprise.type == 'single'" } } Farm Name:
%input.chunky.small-12.columns{ id: 'enterprise_name', name: 'name', placeholder: "eg. Charlie's Awesome Farm", required: true, ng: { model: 'enterprise.name' } }
%span.error.small-12.columns{ ng: { show: "details.name.$error.required && submitted" } }
You need to enter a name for your enterprise!
.row#enterprise-types{ 'data-equalizer' => true, bo: { if: "enterprise.type != 'single'" } }
.small-12.columns.field
.row
.small-12.columns
%label Choose one:
.row
.small-12.medium-4.large-4.columns{ 'data-equalizer-watch' => true }
%a.panel#producer-panel{ href: "#", ng: { click: "enterprise.is_distributor = false; enterprise.is_primary_producer = true", class: "{selected: (!enterprise.is_distributor && enterprise.is_primary_producer)}" } }
.left
/ %render-svg{ path: "/assets/map-icon-producer.svg" }
%h4 I'm A Producer
%p Producers make yummy things to eat &amp;/or drink. You're a producer if you grow it, raise it, brew it, bake it, ferment it, milk it or mould it.
.small-12.medium-4.large-4.columns{ 'data-equalizer-watch' => true }
%a.panel#hub-panel{ href: "#", ng: { click: "enterprise.is_distributor = true; enterprise.is_primary_producer = false", class: "{selected: (enterprise.is_distributor && !enterprise.is_primary_producer)}" } }
.left
/ %render-svg{ path: "/assets/map-icon-hub.svg" }
%h4 I'm A Hub
%p Hubs connect the producer to the eater. Hubs can be co-ops, independent retailers, buying groups, wholesalers, CSA box schemes, farm-gate stalls, etc.
.small-12.medium-4.large-4.columns{ 'data-equalizer-watch' => true }
%a.panel#both-panel{ href: "#", ng: { click: "enterprise.is_distributor = true; enterprise.is_primary_producer = true", class: "{selected: (enterprise.is_distributor && enterprise.is_primary_producer)}" } }
.left
/ %render-svg{path: "/assets/map-icon-both.svg"}
%h4 I'm Both
%p Hey there, Jack-of-all-trades! Not only do you produce things to eat &amp;/or drink, you also want to sell your yummies through an Open Food Network shopfront.
.row.buttons
.small-12.columns
%input.button.primary.right{ type: "submit", value: "Continue" }

View File

@@ -0,0 +1,18 @@
.container#registration-finished
.header
%h2 Well done!
%h5
You have successfully completed the profile for
%span.brick{"ng-show" => "enterprise.is_distributor"}
{{ enterprise.name }}
%span.turquoise{"ng-show" => "!enterprise.is_distributor" }
{{ enterprise.name }}
.content{ style: 'text-align: center'}
%h3 Why not check it out on the Open Food Network?
%a.button.primary{ type: "button", href: "/map" } Go to Map Page &gt;
%br
%br
%h3 Next step - add some products:
%a.button.primary{ type: "button", href: "/admin/products/new" } Add a Product &gt;

View File

@@ -0,0 +1,14 @@
.container#registration-images
.header
%h2 Thanks!
%h5 Let's upload some pretty pictures so your profile looks great! :)
%ng-include{ src: "'registration/steps.html'" }
.row.content
.row.buttons
.small-12.columns
%input.button.primary.left{ type: "button", value: "Back", ng: { click: "select('about')" } }
&nbsp;
%input.button.primary.right{ type: "button", value: "Continue", ng: { click: "select('social')" } }

View File

@@ -0,0 +1,40 @@
%div
.header
%h2 Hi there!
%h4 This wizard will step you through creating a profile
.row
.small-12.medium-3.large-2.columns.text-right.hide-for-small-only
%img{:src => "/assets/potatoes.png"}
.small-12.medium-9.large-10.columns
%p
Your profile gives you an online presence on the
%strong Open Food Network,
allowing you to easily connect with potential customers or partners. You can always choose to update your info later, as well as choose to upgrade your Profile to and Online Store, where you can sell products, track orders and receive payments. Creating a profile takes about 5-10 minutes.
.row{ 'data-equalizer' => true }
.small-12.medium-6.large-6.columns.pad-top{ 'data-equalizer-watch' => true }
%h5 You'll need the following:
%ul.check-list
%li
Your enterprise address and contact details
%li
Your logo image
%li
A pretty picture for your profile header
%li
Some 'About Us' text
.small-12.medium-6.large-6.columns{ 'data-equalizer-watch' => true}
.highlight-box
%h5 Your profile entitles you to:
%ul.small-block-grid-1
%li
%i.ofn-i_020-search
A searchable listing
%li
%i.ofn-i_040-hub
A pin on the OFN map
.row
.small-12.columns
%hr
%input.button.primary{ type: "button", value: "Let's get started!", ng: { click: "select('details')" } }

View File

@@ -0,0 +1,35 @@
.container#registration-social
.header
%h2 Last step!
%h5 How can people find {{ enterprise.name }} online?
%ng-include{ src: "'registration/steps.html'" }
%form{ name: 'social', novalidate: true, ng: { controller: "RegistrationFormCtrl", submit: "update('finished',social)" } }
.row.content
.small-12.large-7.columns
.row
.small-12.columns
%label{ for: 'enterprise_website' } Website:
%input.chunky.small-12.columns{ id: 'enterprise_website', placeholder: "eg. openfoodnetwork.org.au", ng: { model: 'enterprise.website' } }
.row
.small-12.columns
%label{ for: 'enterprise_facebook' } Facebook:
%input.chunky.small-12.columns{ id: 'enterprise_facebook', placeholder: "eg. www.facebook.com/PageNameHere", ng: { model: 'enterprise.facebook' } }
.row
.small-12.columns
%label{ for: 'enterprise_linkedin' } LinkedIn:
%input.chunky.small-12.columns{ id: 'enterprise_linkedin', placeholder: "eg. www.linkedin.com/YourNameHere", ng: { model: 'enterprise.linkedin' } }
.small-12.large-5.columns
.row
.small-12.columns
%label{ for: 'enterprise_twitter' } Twitter:
%input.chunky.small-12.columns{ id: 'enterprise_twitter', placeholder: "eg. @twitter_handle", ng: { model: 'enterprise.twitter' } }
.row
.small-12.columns
%label{ for: 'enterprise_instagram' } Instagram:
%input.chunky.small-12.columns{ id: 'enterprise_instagram', placeholder: "eg. @instagram_handle", ng: { model: 'enterprise.instagram' } }
.row.buttons
.small-12.columns
%input.button.secondary{ type: "button", value: "Back", ng: { click: "select('about')" } }
&nbsp;
%input.button.primary{ type: "submit", value: "Continue" }

View File

@@ -0,0 +1,5 @@
.row#progress-bar
.small-12.medium-2.columns.item{ ng: { repeat: 'step in steps', class: "{active: (currentStep() == step),'show-for-medium-up': (currentStep() != step)}" } }
{{ $index+1 + ". " + step }}

View File

@@ -0,0 +1,17 @@
.container
.row.modal-centered
%h2 Welcome to the Open Food Network!
%h5 Start By Signing Up (or logging in):
%div{"ng-controller" => "AuthenticationCtrl"}
%tabset
%ng-include{src: "'signup.html'"}
%ng-include{src: "'login.html'"}
%ng-include{src: "'forgot.html'"}
%div{ ng: { show: "active('/signup')"} }
%hr
Already have an account?
%a{ href: "", ng: { click: "select('/login')"}}
Log in now.
%a.close-reveal-modal{"ng-click" => "$close()"}
%i.ofn-i_009-close

View File

@@ -48,7 +48,7 @@
.small-4.medium-2.large-2.columns.variant-price
.table-cell.price
%i.ofn-i_009-close
{{ variant.price | currency }}
{{ variant.price_with_fees | localizeCurrency }}
-# Now in a template in app/assets/javascripts/templates !
%price-breakdown{"price-breakdown" => "_", variant: "variant",
@@ -59,4 +59,4 @@
.small-12.medium-2.large-2.columns.total-price.text-right
.table-cell
%strong
{{ variant.getPrice() | currency }}
{{ variant.totalPrice() | localizeCurrency }}

View File

@@ -1,12 +1,12 @@
%tab#sign-up-content{"ng-controller" => "SignupCtrl",
heading: "Sign up",
%tab#sign-up-content{"ng-controller" => "SignupCtrl",
heading: "Sign up",
active: "active(path)",
select: "select(path)"}
%form{"ng-submit" => "submit()"}
.row
.large-12.columns
%label{for: "email"} Your email
%input.title.input-text{name: "email",
%input.title.input-text{name: "email",
type: "email",
id: "email",
tabindex: 1,
@@ -16,7 +16,7 @@
.row
.large-12.columns
%label{for: "password"} Choose a password
%input.title.input-text{name: "password",
%input.title.input-text{name: "password",
type: "password",
id: "password",
autocomplete: "off",
@@ -27,7 +27,7 @@
.row
.large-12.columns
%label{for: "password_confirmation"} Confirm password
%input.title.input-text{name: "password_confirmation",
%input.title.input-text{name: "password_confirmation",
type: "password",
id: "password_confirmation",
autocomplete: "off",
@@ -35,7 +35,7 @@
"ng-model" => "spree_user.password_confirmation"}
.row
.large-12.columns
%input.button.primary{name: "commit",
tabindex: "3",
type: "submit",
%input.button.primary{name: "commit",
tabindex: "3",
type: "submit",
value: "Sign up now"}

View File

@@ -84,6 +84,9 @@ button.graph-button
display: inline
background-color: rgba(255,255,255,0.5)
padding: 5px
@media all and (max-width: 768px)
display: none
// Hide for small
&:hover, &:active, &:focus
background-color: rgba(255,255,255,1)

View File

@@ -9,7 +9,13 @@
margin-right: 0
.row.filter-box:first-child
// border-top: 1px solid $clr-brick
border: 1px solid $clr-blue-light
@include border-radius(0.25em)
margin-top: 2px
.row.filter-box:last-child
background: transparent
margin-top: 1em
products .filter-box
background: #f7f7f7
@@ -20,6 +26,8 @@ products .filter-box
.tdhead
padding: 0.25rem 0.5rem
margin-top: 0.9rem
color: $clr-blue
border-bottom: 1px solid $clr-blue-light
// OVERRIDES
[class*="block-grid-"]

View File

@@ -9,8 +9,6 @@
@include avenir
@include csstrans
@include border-radius(0.5rem)
// transition: all 0.5s ease
background: rgba(255,255,255,0.1)
border: 2px solid $input
font-size: 2rem
@@ -21,6 +19,8 @@
margin-bottom: 0.5rem
box-shadow: none
color: $inputactv
@media all and (max-width: 640px)
font-size: 1.25rem
&:hover
@include box-shadow(0 1px 1px 0 rgba(255,255,255,0.25))

View File

@@ -11,8 +11,13 @@ $clr-turquoise-light: #ceefe4
$clr-turquoise-ultra-light: #e8f9f4
$clr-turquoise-bright: #23a877
$clr-blue: #0096ad
$clr-blue-light: #85d9e5
$clr-blue-bright: #14b6cc
$disabled-light: #e5e5e5
$disabled-bright: #ccc
$disabled-dark: #999
$med-grey: #666
$dark-grey: #333
$dark-grey: #333

View File

@@ -6,27 +6,24 @@ dialog, .reveal-modal
outline: none
padding: 1rem
overflow-y: scroll
// Sets up max heights based on device height
@media all and (min-height: 1025px)
// Reveal.js break point:
// @media only screen and (max-width: 40.063em)
// Small - when modal IS full screen
@media only screen and (max-width: 640px)
max-height: initial
// This is needed to make the height not the height of whole content page
min-height: 100%
position: absolute !important
top: 0
left: 0
// Medium and up - when modal IS NOT full screen
@media only screen and (min-width: 641px)
top: 10%
max-height: 80%
@media all and (min-height: 700px) and (max-height: 1024px)
max-height: 70%
@media all and (min-height: 600px) and (max-height: 699px)
max-height: 60%
@media all and (min-height: 481px) and (max-height: 599px)
max-height: 60%
@media only screen and (max-height: 480px) and (min-width: 641px)
max-height: 60%
@media all and (max-height: 480px)
overflow-y: scroll
.reveal-modal-bg
background-color: rgba(0,0,0,0.65)
@@ -39,31 +36,3 @@ dialog .close-reveal-modal, .reveal-modal .close-reveal-modal
&:hover, &:active, &:focus
background-color: rgba(235,235,235,1)
color: #333
// dialog .close-reveal-modal.outside, .reveal-modal .close-reveal-modal.outside
// top: -2.5rem
// right: -2.5rem
// font-size: 2rem
// color: white
// text-shadow: none
// padding: 0.25rem
// @include border-radius(999999)
// border: 1px solid transparent
// &:hover, &:active, &:focus
// text-shadow: 0 1px 3px #333
// border: 1px solid white
// @media all and (max-width: 640px)
// top: 0.5rem
// right: 0.5rem
// font-size: 2rem
// color: white
// text-shadow: none
// padding: 0.25rem
// background-color: rgba(150,150,150,0.85)
// @include border-radius(999999)
// border: 1px solid transparent
// &:hover, &:active, &:focus
// text-shadow: 0 1px 3px #333
// border: 1px solid white

View File

@@ -0,0 +1,115 @@
@import branding
@import mixins
#registration-modal
.header
text-align: center
background-color: #efefef
padding-bottom: 1rem
.container
background-color: #ffffff
.content
// margin-bottom: 15px
i
font-size: 150%
.buttons
ofn-inline-flash
display: block
padding: 15px
position: relative
margin-bottom: 10px
&.brick
background-color: $clr-brick-light
border: 2px solid $clr-brick
color: $clr-brick
&.turquoise
background-color: $clr-turquoise-light
border: 2px solid $clr-turquoise
color: $clr-turquoise
.close-button
position: absolute
top: 0px
right: 0px
.field
margin-bottom: 15px
input.chunky
padding: 8px
font-size: 105%
label.indent-checkbox
display: block
padding-left: 20px
text-indent: -17px
input
margin: 0px
label
margin-bottom: 3px
ol, ul
// font-size: 80%
font-size: 0.875rem
padding: 0
margin: 0
ol
list-style-type: decimal
.highlight-box
background: white
padding: 1rem 1.2rem
@media all and (max-width: 640px)
margin-top: 1rem
#progress-bar
margin-bottom: 15px
.item
padding: 12px 0px
text-transform: uppercase
text-align: center
background-color: #333
border: 2px solid #333
color: #fff
.item.active
background-color: #cccccc
border: 2px solid #333
color: #333
@include box-shadow(inset 0 0 1px 0 #fff)
#registration-details
#enterprise-types
a.panel
display: block
background-color: #efefef
color: black
@media all and (min-width: 768px)
min-height: 200px
&:hover
background-color: #fff
&#producer-panel:hover
&, & *
color: $clr-turquoise
&#hub-panel:hover, &#both-panel:hover
&, & *
color: $clr-brick
&.selected
&, & *
color: #fff
&#hub-panel, &#both-panel
background-color: $clr-brick-bright
&:hover
&, & *
color: white
&#producer-panel
background-color: $clr-turquoise-bright
&:hover
&, & *
color: white
p
clear: both
font-size: 0.875rem

View File

@@ -48,6 +48,9 @@ small, .small
.turquoise
color: $clr-turquoise
.brick
color: $clr-brick
@mixin avenir
font-family: "AvenirBla_IE", "AvenirBla"
@@ -55,8 +58,8 @@ h1, h2, h3, h4, h5, h6, .avenir
@include avenir
padding: 0px
ul.bullet-list
margin: 0
ul.bullet-list, ul.check-list
margin: 0 0 0 1.25em !important
li
list-style: none
line-height: 1.5
@@ -64,12 +67,16 @@ ul.bullet-list
li:before
content: "\e609"
font-family: "OFN"
margin-left: -1.25em
display: inline-block
font-weight: normal
font-style: normal
font-variant: normal
text-transform: none
ul.check-list
li:before
content: "\e632"
.light-grey
color: #666666

View File

@@ -3,9 +3,10 @@ module Admin
before_filter :load_enterprise_set, :only => :index
before_filter :load_countries, :except => :index
before_filter :load_methods_and_fees, :only => [:new, :edit, :update, :create]
create.after :grant_management
before_filter :check_type, only: :update
before_filter :check_bulk_type, only: :bulk_update
before_filter :override_owner, only: :create
before_filter :check_owner, only: :update
helper 'spree/products'
include OrderCyclesHelper
@@ -39,14 +40,6 @@ module Admin
private
# When an enterprise user creates another enterprise, it is granted management
# permission for it
def grant_management
unless spree_current_user.has_spree_role? 'admin'
spree_current_user.enterprise_roles.create(enterprise: @object)
end
end
def load_enterprise_set
@enterprise_set = EnterpriseSet.new :collection => collection
end
@@ -81,6 +74,16 @@ module Admin
params[:enterprise].delete :type unless spree_current_user.admin?
end
def override_owner
params[:enterprise][:owner_id] = spree_current_user.id unless spree_current_user.admin?
end
def check_owner
unless spree_current_user == @enterprise.owner || spree_current_user.admin?
params[:enterprise].delete :owner_id
end
end
# Overriding method on Spree's resource controller
def location_after_save
if params[:enterprise].key? :producer_properties_attributes

View File

@@ -1,5 +1,8 @@
module Api
class EnterprisesController < Spree::Api::BaseController
before_filter :override_owner, only: [:create, :update]
before_filter :check_type, only: :update
respond_to :json
def managed
@@ -11,5 +14,37 @@ module Api
@enterprises = Enterprise.ransack(params[:q]).result.accessible_by(current_api_user)
render params[:template] || :bulk_index
end
def create
authorize! :create, Enterprise
@enterprise = Enterprise.new(params[:enterprise])
if @enterprise.save
render text: @enterprise.id, :status => 201
else
invalid_resource!(@enterprise)
end
end
def update
authorize! :update, Enterprise
@enterprise = Enterprise.find(params[:id])
if @enterprise.update_attributes(params[:enterprise])
render text: @enterprise.id, :status => 200
else
invalid_resource!(@enterprise)
end
end
private
def override_owner
params[:enterprise][:owner_id] = current_api_user.id
end
def check_type
params[:enterprise].delete :type unless current_api_user.admin?
end
end
end

View File

@@ -0,0 +1,25 @@
require 'open_food_network/spree_api_key_loader'
class RegistrationController < BaseController
include OpenFoodNetwork::SpreeApiKeyLoader
before_filter :load_spree_api_key, only: :index
before_filter :check_user, except: :authenticate
layout 'registration'
def index
@enterprise_attributes = { type: 'profile' }
end
def store
@enterprise_attributes = { is_distributor: true, is_primary_producer: true, type: 'single' }
render :index
end
private
def check_user
if spree_current_user.nil?
redirect_to registration_auth_path(anchor: "signup?after_login=#{request.env['PATH_INFO']}")
end
end
end

View File

@@ -1,4 +1,7 @@
require 'open_food_network/spree_api_key_loader'
Spree::Admin::OrdersController.class_eval do
include OpenFoodNetwork::SpreeApiKeyLoader
before_filter :load_spree_api_key, :only => :bulk_management
# We need to add expections for collection actions other than :index here
@@ -14,11 +17,4 @@ Spree::Admin::OrdersController.class_eval do
page(params[:page]).
per(params[:per_page] || Spree::Config[:orders_per_page])
} } }
private
def load_spree_api_key
current_user.generate_spree_api_key! unless spree_current_user.spree_api_key
@spree_api_key = spree_current_user.spree_api_key
end
end

View File

@@ -1,5 +1,9 @@
require 'open_food_network/spree_api_key_loader'
Spree::Admin::ProductsController.class_eval do
before_filter :load_bpe_data, :only => :bulk_edit
include OpenFoodNetwork::SpreeApiKeyLoader
before_filter :load_form_data, :only => [:bulk_edit, :new, :edit]
before_filter :load_spree_api_key, :only => :bulk_edit
alias_method :location_after_save_original, :location_after_save
@@ -85,9 +89,7 @@ Spree::Admin::ProductsController.class_eval do
private
def load_bpe_data
current_user.generate_spree_api_key! unless spree_current_user.spree_api_key
@spree_api_key = spree_current_user.spree_api_key
def load_form_data
@producers = OpenFoodNetwork::Permissions.new(spree_current_user).managed_product_enterprises.is_primary_producer.by_name
@taxons = Spree::Taxon.order(:name)
end

View File

@@ -37,7 +37,9 @@ module Admin
admin_inject_json_ams_array "ofn.admin", "users", @users, Api::Admin::UserSerializer
end
def admin_inject_spree_api_key
render partial: "admin/json/injection_ams", locals: {ngModule: 'ofn.admin', name: 'SpreeApiKey', json: "'#{@spree_api_key.to_s}'"}
end
def admin_inject_json_ams(ngModule, name, data, serializer, opts = {})

View File

@@ -2,18 +2,18 @@ module InjectionHelper
def inject_enterprises
inject_json_ams "enterprises", Enterprise.all, Api::EnterpriseSerializer, active_distributors: @active_distributors
end
def inject_current_order
inject_json_ams "currentOrder", current_order, Api::CurrentOrderSerializer, current_distributor: current_distributor, current_order_cycle: current_order_cycle
end
def inject_available_shipping_methods
inject_json_ams "shippingMethods", available_shipping_methods,
inject_json_ams "shippingMethods", available_shipping_methods,
Api::ShippingMethodSerializer, current_order: current_order
end
def inject_available_payment_methods
inject_json_ams "paymentMethods", current_order.available_payment_methods,
inject_json_ams "paymentMethods", current_order.available_payment_methods,
Api::PaymentMethodSerializer
end
@@ -21,6 +21,22 @@ module InjectionHelper
inject_json_ams "taxons", Spree::Taxon.all, Api::TaxonSerializer
end
def inject_currency_config
inject_json_ams "currencyConfig", {}, Api::CurrencyConfigSerializer
end
def inject_spree_api_key
render partial: "json/injection_ams", locals: {name: 'spreeApiKey', json: "'#{@spree_api_key.to_s}'"}
end
def inject_available_countries
inject_json_ams "availableCountries", available_countries, Api::CountrySerializer
end
def inject_enterprise_attributes
render partial: "json/injection_ams", locals: {name: 'enterpriseAttributes', json: "#{@enterprise_attributes.to_json}"}
end
def inject_json(name, partial, opts = {})
render partial: "json/injection", locals: {name: name, partial: partial}.merge(opts)
end

View File

@@ -8,7 +8,7 @@ module Spree
def order_distribution_subtotal(order, options={})
options.reverse_merge! :format_as_currency => true
amount = order.adjustments.enterprise_fee.sum &:amount
options.delete(:format_as_currency) ? number_to_currency(amount) : amount
options.delete(:format_as_currency) ? spree_number_to_currency(amount) : amount
end
def alternative_available_distributors(order)

View File

@@ -1,8 +1,9 @@
module Spree
ProductsHelper.class_eval do
# Return the price of the variant
# Return the price of the variant, overriding sprees price diff capability.
# This will allways return the variant price as if the show_variant_full_price is set.
def variant_price_diff(variant)
"(#{number_to_currency variant.price})"
"(#{Spree::Money.new(variant.price).to_s})"
end

View File

@@ -0,0 +1,5 @@
module SpreeCurrencyHelper
def spree_number_to_currency(amount)
Spree::Money.new(amount).to_s
end
end

View File

@@ -0,0 +1,12 @@
class EnterpriseMailer < Spree::BaseMailer
def creation_confirmation(enterprise)
find_enterprise(enterprise)
subject = "#{@enterprise.name} is now on #{Spree::Config[:site_name]}"
mail(:to => @enterprise.owner.email, :from => from_address, :subject => subject)
end
private
def find_enterprise(enterprise)
@enterprise = enterprise.is_a?(Enterprise) ? enterprise : Enterprise.find(enterprise)
end
end

View File

@@ -1,6 +1,7 @@
Spree::OrderMailer.class_eval do
helper HtmlHelper
helper CheckoutHelper
helper SpreeCurrencyHelper
def confirm_email(order, resend = false)
find_order(order)
subject = (resend ? "[#{t(:resend).upcase}] " : '')

View File

@@ -6,6 +6,8 @@ class Enterprise < ActiveRecord::Base
acts_as_gmappable :process_geocoding => false
after_create :send_creation_email
has_and_belongs_to_many :groups, class_name: 'EnterpriseGroup'
has_many :producer_properties, foreign_key: 'producer_id'
has_many :supplied_products, :class_name => 'Spree::Product', :foreign_key => 'supplier_id', :dependent => :destroy
@@ -16,6 +18,7 @@ class Enterprise < ActiveRecord::Base
has_many :enterprise_fees
has_many :enterprise_roles, :dependent => :destroy
has_many :users, through: :enterprise_roles
belongs_to :owner, class_name: 'Spree::User', foreign_key: :owner_id, inverse_of: :owned_enterprises
has_and_belongs_to_many :payment_methods, join_table: 'distributors_payment_methods', class_name: 'Spree::PaymentMethod', foreign_key: 'distributor_id'
has_many :distributor_shipping_methods, foreign_key: :distributor_id
has_many :shipping_methods, through: :distributor_shipping_methods
@@ -46,7 +49,10 @@ class Enterprise < ActiveRecord::Base
validates :name, presence: true
validates :type, presence: true, inclusion: {in: TYPES}
validates :address, presence: true, associated: true
validates_presence_of :owner
validate :enforce_ownership_limit, if: lambda { owner_id_changed? }
before_validation :ensure_owner_is_manager, if: lambda { owner_id_changed? }
before_validation :set_unused_address_fields
after_validation :geocode_address
@@ -279,6 +285,10 @@ class Enterprise < ActiveRecord::Base
private
def send_creation_email
EnterpriseMailer.creation_confirmation(self).deliver
end
def strip_url(url)
url.andand.sub /(https?:\/\/)?/, ''
end
@@ -290,4 +300,14 @@ class Enterprise < ActiveRecord::Base
def geocode_address
address.geocode if address.changed?
end
def ensure_owner_is_manager
users << owner unless users.include?(owner) || owner.admin?
end
def enforce_ownership_limit
unless owner.can_own_more_enterprises?
errors.add(:owner, "^You are not permitted to own own any more enterprises (limit is #{owner.enterprise_limit}).")
end
end
end

View File

@@ -1,13 +1,16 @@
Spree.user_class.class_eval do
has_many :enterprise_roles, :dependent => :destroy
has_many :enterprises, through: :enterprise_roles
has_many :owned_enterprises, class_name: 'Enterprise', foreign_key: :owner_id, inverse_of: :owner
has_one :cart
accepts_nested_attributes_for :enterprise_roles, :allow_destroy => true
attr_accessible :enterprise_ids, :enterprise_roles_attributes
attr_accessible :enterprise_ids, :enterprise_roles_attributes, :enterprise_limit
after_create :send_signup_confirmation
validate :limit_owned_enterprises
def build_enterprise_roles
Enterprise.all.each do |enterprise|
unless self.enterprise_roles.find_by_enterprise_id enterprise.id
@@ -19,4 +22,16 @@ Spree.user_class.class_eval do
def send_signup_confirmation
Spree::UserMailer.signup_confirmation(self).deliver
end
def can_own_more_enterprises?
owned_enterprises(:reload).size < enterprise_limit
end
private
def limit_owned_enterprises
if owned_enterprises.size > enterprise_limit
errors.add(:owned_enterprises, "^The nominated user is not permitted to own own any more enterprises (limit is #{enterprise_limit}).")
end
end
end

View File

@@ -1,5 +0,0 @@
Deface::Override.new(:virtual_path => "spree/admin/products/_form",
:insert_top => "[data-hook='admin_product_form_right']",
:partial => "spree/admin/products/supplier_form",
:name => "add_supplier_to_admin_product",
:original => '18bd94de3eb8bdf8b669932bf04fc59e2e85288b')

View File

@@ -1,4 +0,0 @@
/ insert_after "[data-hook='long_description']"
%tr{'data-hook' => 'distributor_info'}
%th Distributor Info:
%td= @enterprise.distributor_info.andand.html_safe

View File

@@ -0,0 +1,7 @@
/ insert_top "[data-hook='admin_product_form_right']"
= f.field_container :supplier do
= f.label :supplier
%br
= f.collection_select(:supplier_id, @producers, :id, :name, {:include_blank => true}, {:class => "select2"})
= f.error_message_on :supplier

View File

@@ -7,7 +7,7 @@
= f.field_container :supplier do
= f.label :supplier_id, t(:supplier)
%span.required *
= f.collection_select(:supplier_id, Enterprise.is_primary_producer.managed_by(spree_current_user).by_name, :id, :name, {:include_blank => true}, {:class => "select2 fullwidth"})
= f.collection_select(:supplier_id, @producers, :id, :name, {:include_blank => true}, {:class => "select2 fullwidth"})
= f.error_message_on :supplier
.six.columns.omega
= f.field_container :name do

View File

@@ -0,0 +1,5 @@
/ insert_bottom "div[data-hook='admin_user_form_fields'] div.alpha"
= f.field_container :enterprise_limit do
= f.label :enterprise_limit, t(:enterprise_limit)
= f.text_field :enterprise_limit, :class => 'fullwidth'

View File

@@ -0,0 +1,3 @@
/ insert_before "td[data-hook='admin_users_index_row_actions']"
%td.user_enterprise_limit= user.enterprise_limit

View File

@@ -0,0 +1,3 @@
/ insert_before "th[data-hook='admin_users_index_header_actions']"
%th= sort_link @search,:enterprise_limit, t(:enterprise_limit)

View File

@@ -0,0 +1,6 @@
/ replace "table#listing_users colgroup"
%colgroup
%col{ style: "width: 65%" }
%col{ style: "width: 20%" }
%col{ style: "width: 15%" }

View File

@@ -0,0 +1,3 @@
/ replace "code[erb-loud]:contains('link_to user.email, object_url(user)')"
= link_to user.email, edit_object_url(user)

View File

@@ -1,6 +0,0 @@
Deface::Override.new(:virtual_path => "spree/admin/users/_form",
:insert_after => "[data-hook='admin_user_form_fields']",
:partial => "spree/admin/users/enterprises_form",
:name => "add_enterprises_to_user"
)

View File

@@ -0,0 +1,5 @@
class Api::CountrySerializer < ActiveModel::Serializer
attributes :id, :name, :states
has_many :states, serializer: Api::StateSerializer
end

View File

@@ -0,0 +1,32 @@
class Api::CurrencyConfigSerializer < ActiveModel::Serializer
attributes :currency, :display_currency, :symbol, :symbol_position, :hide_cents, :decimal_mark, :thousands_separator
def currency
Spree::Config[:currency]
end
def display_currency
Spree::Config[:display_currency]
end
def symbol
::Money.new(1, Spree::Config[:currency]).symbol
end
def symbol_position
Spree::Config[:currency_symbol_position]
end
def hide_cents
Spree::Config[:hide_cents]
end
def decimal_mark
Spree::Config[:currency_decimal_mark]
end
def thousands_separator
Spree::Config[:currency_thousands_separator]
end
end

View File

@@ -1,3 +1,3 @@
class Api::PaymentMethodSerializer < ActiveModel::Serializer
attributes :name, :id, :method_type
attributes :name, :description, :id, :method_type
end

View File

@@ -0,0 +1,3 @@
class Api::StateSerializer < ActiveModel::Serializer
attributes :id, :name, :abbr
end

View File

@@ -1,12 +1,12 @@
class Api::VariantSerializer < ActiveModel::Serializer
attributes :id, :is_master, :count_on_hand, :name_to_display, :unit_to_display,
:on_demand, :price, :fees, :base_price
:on_demand, :price, :fees, :price_with_fees
def price
def price_with_fees
object.price_with_fees(options[:current_distributor], options[:current_order_cycle])
end
def base_price
def price
object.price
end

View File

@@ -7,6 +7,7 @@ class Spree::Api::VariantSerializer < ActiveModel::Serializer
end
def price
# Decimals are passed to json as strings, we need to run parseFloat.toFixed(2) on the client side.
object.price.nil? ? 0.to_f : object.price
end
end
end

View File

@@ -11,5 +11,5 @@
%table#enterprise-roles
%tbody
= render 'form'
%tr{"ng-repeat" => "enterprise_role in EnterpriseRoles.enterprise_roles | filter:query"}
%tr{"ng-repeat" => "enterprise_role in EnterpriseRoles.enterprise_roles | filter:query", id: "enterprise_role_{{enterprise_role.id}}"}
= render 'enterprise_role'

View File

@@ -1,6 +1,3 @@
- content_for :head do
= render 'shared/cms_elrte_head'
- content_for :page_actions do
%li= button_link_to "Back to enterprises list", main_app.admin_enterprises_path, icon: 'icon-arrow-left'
@@ -23,6 +20,16 @@
.eight.columns.omega
= f.collection_select :group_ids, EnterpriseGroup.all, :id, :name, {}, class: "select2 fullwidth", multiple: true, placeholder: "Start typing to search available groups..."
- if spree_current_user.admin?
.row
.three.columns.alpha
=f.label :owner_id, 'Owner'
.with-tip{'data-powertip' => "The primary user responsible for this enterprise."}
%a What's this?
.eight.columns
- owner_email = @enterprise.andand.owner.andand.email || ""
= f.hidden_field :owner_id, class: "select2 fullwidth", 'ofn-user-autocomplete' => true, email: owner_email
.row
.three.columns.alpha
%label Enterprise Type(s)
@@ -174,20 +181,8 @@
.row
.alpha.three.columns
= f.label :long_description, 'About Us'
%br
Tell us about yourself. This information appears on your public profile (under "About Us")
.omega.eight.columns
= f.text_area :long_description, class: 'rich_text', placeholder: 'Tell us about yourself. This information appears on your public profile (under "About Us")'
.row
.alpha.three.columns
= f.label :distributor_info, 'How does your hub work?'
%br
%em (Hub only)
%br
Explain your distribution offer/s - this information appears on your public profile (under "How does it work?")
.omega.eight.columns
= f.text_area :distributor_info, class: 'rich_text', placeholder: 'Hub only: Explain your distribution offer/s - this is more detailed information that the user can access by clicking on "How does it work?"'
/ TODO: editor breaks scrolling with arrow keys
= f.text_area :long_description, rows: 6, placeholder: 'Tell us about yourself. This information appears on your public profile (under "About Us")', class: 'fullwidth'
%fieldset.eleven.columns.alpha.no-border-bottom
%legend IMAGES
.row

View File

@@ -2,8 +2,9 @@
Enterprises
- content_for :page_actions do
%li#new_product_link
= button_link_to "New Enterprise", main_app.new_admin_enterprise_path, :icon => 'icon-plus', :id => 'admin_new_enterprise_link'
- if spree_current_user.can_own_more_enterprises?
%li#new_product_link
= button_link_to "New Enterprise", main_app.new_admin_enterprise_path, :icon => 'icon-plus', :id => 'admin_new_enterprise_link'
= render 'admin/shared/enterprises_sub_menu'
@@ -11,16 +12,20 @@
%table#listing_enterprises.index
%colgroup
%col{style: "width: 25%;"}/
%col{style: "width: 10%;"}/
%col{style: "width: 15%;"}/
%col{style: "width: 5%;"}/
%col{style: "width: 10%;"}/
%col{style: "width: 20%;"}/
- if spree_current_user.admin?
%col{style: "width: 12%;"}/
%col{style: "width: 18%;"}/
%col{style: "width: 25%;"}/
%thead
%tr{"data-hook" => "enterprises_header"}
%th Name
%th Role
%th Visible?
%th Type
- if spree_current_user.admin?
%th Type
%th Owner
%th
%tbody
= f.fields_for :collection do |enterprise_form|
@@ -34,7 +39,9 @@
= enterprise_form.check_box :is_distributor
Hub
%td= enterprise_form.check_box :visible
%td= enterprise_form.select :type, Enterprise::TYPES, {}, class: 'select2 fullwidth'
- if spree_current_user.admin?
%td= enterprise_form.select :type, Enterprise::TYPES, {}, class: 'select2 fullwidth'
%td= enterprise_form.select :owner_id, enterprise.users.map{ |e| [ e.email, e.id ] }, {}, class: "select2 fullwidth"
%td{"data-hook" => "admin_users_index_row_actions"}
= render 'actions', enterprise: enterprise
- if @enterprises.empty?

View File

@@ -17,6 +17,7 @@
%em
%small
{{ Checkout.paymentMethod().name }}
%small
.small-4.medium-2.columns.text-right
%span.accordion-up
%em
@@ -29,16 +30,20 @@
-# TODO render this in Angular instead of server-side
-# The problem being how to render the partials
- current_order.available_payment_methods.each do |method|
.row
.small-12.columns
%label
= radio_button_tag "order[payments_attributes][][payment_method_id]", method.id, false,
required: true,
"ng-model" => "order.payment_method_id"
= method.name
.row
.small-6.columns
- current_order.available_payment_methods.each do |method|
.row
.small-12.columns
%label
= radio_button_tag "order[payments_attributes][][payment_method_id]", method.id, false,
required: true,
"ng-model" => "order.payment_method_id"
= method.name
.row{"ng-if" => "order.payment_method_id == #{method.id}"}
.small-12.columns
= render partial: "spree/checkout/payment/#{method.method_type}", :locals => { :payment_method => method }
.row{"ng-if" => "order.payment_method_id == #{method.id}"}
.small-12.columns
= render partial: "spree/checkout/payment/#{method.method_type}", :locals => { :payment_method => method }
.small-6.columns
%small {{ Checkout.paymentMethod().description }}

View File

@@ -5,7 +5,7 @@
%table
%tr
%th Cart total
%td.cart-total.text-right= number_to_currency checkout_cart_total_with_adjustments(current_order)
%td.cart-total.text-right= spree_number_to_currency(checkout_cart_total_with_adjustments(current_order))
- checkout_adjustments_for_summary(current_order, exclude: [:shipping, :distribution]).each do |adjustment|
%tr
@@ -14,11 +14,11 @@
%tr
%th Shipping
%td.shipping.text-right {{ Checkout.shippingPrice() | currency }}
%td.shipping.text-right {{ Checkout.shippingPrice() | localizeCurrency }}
%tr
%th Total
%td.total.text-right {{ Checkout.cartTotal() | currency }}
%td.total.text-right {{ Checkout.cartTotal() | localizeCurrency }}
- if current_order.price_adjustment_totals.present?
- current_order.price_adjustment_totals.each do |label, total|
%tr

View File

@@ -0,0 +1,9 @@
%h1
= @enterprise.name + " has been created"
%h3
Why not check it out on
%a{ href: "#{map_url}" }
= Spree::Config[:site_name] + "?"
If you have any questions, please get in touch with us at: hello@openfoodnetwork.org

View File

@@ -14,7 +14,7 @@
/ %i.ofn-i_020-search
%input{type: :text,
"ng-model" => "query",
placeholder: "Search by Name or Suburb...",
placeholder: "Search by name or suburb...",
"ng-debounce" => "150",
"ofn-disable-enter" => true}

View File

@@ -12,12 +12,16 @@
.columns.small-6.medium-3.large-4.text-right{"bo-if" => "hub.active"}
%a.hub.open_closed{"bo-href" => "hub.path", "ng-class" => "{primary: hub.active, secondary: !hub.active}", "ofn-empties-cart" => "hub"}
%i.ofn-i_033-open-sign
%span.margin-top {{ hub.orders_close_at | sensible_timeframe }}
%span.margin-top{ bo: { if: "current()" } }
%em Shopping here
%span.margin-top{ bo: { if: "!current()" } } {{ hub.orders_close_at | sensible_timeframe }}
.columns.small-6.medium-3.large-4.text-right{"bo-if" => "!hub.active"}
%a.hub.open_closed{"bo-href" => "hub.path", "ng-class" => "{primary: hub.active, secondary: !hub.active}", "ofn-empties-cart" => "hub"}
%i.ofn-i_032-closed-sign
%span.margin-top Orders closed
%span.margin-top{ bo: { if: "current()" } }
%em Shopping here
%span.margin-top{ bo: { if: "!current()" } } Orders closed

View File

@@ -29,6 +29,7 @@
= inject_json "railsFlash", "flash"
= inject_taxons
= inject_current_order
= inject_currency_config
.off-canvas-wrap{offcanvas: true}
.inner-wrap

View File

@@ -0,0 +1,36 @@
%html
%head
%meta{charset: 'utf-8'}/
%meta{name: 'viewport', content: "width=device-width,initial-scale=1.0"}/
%title= content_for?(:title) ? yield(:title) : 'Welcome to Open Food Network'
- if Rails.env.production?
= favicon_link_tag
- else
= favicon_link_tag "/favicon-staging.ico"
%link{href: "https://fonts.googleapis.com/css?family=Open+Sans:400,700", rel: "stylesheet", type: "text/css"}/
= yield :scripts
%script{src: "//maps.googleapis.com/maps/api/js?libraries=places&sensor=false"}
= stylesheet_link_tag "darkswarm/all"
= javascript_include_tag "darkswarm/all"
= render "layouts/bugherd_script"
= csrf_meta_tags
%body.off-canvas{"ng-app" => "Darkswarm", style: 'background-image: url("/assets/home/ofn_bg_1.jpg")' }
/ [if lte IE 8]
= render partial: "shared/ie_warning"
= javascript_include_tag "iehack"
= inject_json "user", "current_user"
.off-canvas-wrap{offcanvas: true}
.inner-wrap
%section{ role: "main" }
= yield
#footer
%loading

View File

@@ -50,7 +50,7 @@
%a{"ng-href" => "http://instagram.com/{{enterprise.instagram}}", target: "_blank"}
%i.ofn-i_043-instagram
%a.close-reveal-modal.outside{"ng-click" => "$close()"}
%a.close-reveal-modal{"ng-click" => "$close()"}
%i.ofn-i_009-close

View File

@@ -1,13 +1,13 @@
.row.active_table_row{"ng-show" => "open()", "ng-click" => "toggle()", "ng-class" => "{'open' : !ofn-i_032-closed-sign()}"}
.columns.small-12.medium-7.large-7.fat
/ No long description available because it spits out HTML formatting producer.long_description
%div{"bo-if" => "producer.long_description"}
/ Will add in long description available once clean up HTML formatting producer.long_description
%div{"bo-if" => "producer.description"}
%label About us
%img.right.show-for-medium-up{src: "{{ producer.logo }}" }
%p.text-small
{{ producer.long_description }}
%div.show-for-medium-up{"bo-if" => "producer.long_description.length==0"}
{{ producer.description }}
%div.show-for-medium-up{"bo-if" => "producer.description.length==0"}
%label &nbsp;
.columns.small-12.medium-5.large-5.fat

View File

@@ -13,7 +13,7 @@
.small-12.columns
%input.animate-show{type: :text,
"ng-model" => "query",
placeholder: "Search by Producer or Suburb...",
placeholder: "Search by producer or suburb...",
"ng-debounce" => "150",
"ofn-disable-enter" => true}

View File

@@ -0,0 +1 @@
%div{"ng-controller" => "AuthenticationCtrl"}

View File

@@ -0,0 +1,4 @@
=inject_spree_api_key
=inject_available_countries
=inject_enterprise_attributes
%div{ "ng-controller" => "RegistrationCtrl" }

View File

@@ -22,20 +22,20 @@
%small
{{line_item.quantity}}
%i.ofn-i_009-close
{{ line_item.variant.price | currency }}
{{ line_item.variant.price_with_fees | localizeCurrency }}
.columns.small-2
%small
\=
%strong
.right {{ line_item.variant.getPrice() | currency }}
.right {{ line_item.variant.totalPrice() | localizeCurrency }}
%li.total-cart{"ng-show" => "Cart.line_items_present().length > 0"}
.row
.columns.small-6
%em Total:
.columns.small-6.text-right
%strong {{ Cart.total() | currency }}
%strong {{ Cart.total() | localizeCurrency }}
.text-right
%a.button.primary.small{href: checkout_path, "ng-disabled" => "Cart.dirty"} Quick checkout

View File

@@ -4,7 +4,9 @@
= render :partial => 'spree/admin/shared/order_sub_menu'
%div{ 'ng-app' => 'ofn.admin', 'ng-controller' => 'AdminOrderMgmtCtrl', 'ng-init' => "initialise('#{@spree_api_key}');loading=true;" }
=admin_inject_spree_api_key
%div{ ng: { app: 'ofn.admin', controller: 'AdminOrderMgmtCtrl', init: 'initialise()' } }
%div{ 'ng-show' => '!spree_api_key_ok' }
{{ api_error_msg }}
.filters{ :class => "sixteen columns alpha" }

View File

@@ -1,7 +1,8 @@
%div.header.sixteen.columns.alpha{ :class => "#{@enterprises.count > 0 ? "" : "red"}"}
%h3.thirteen.columns.alpha My Enterprises
- if @enterprises.any?
%a.three.columns.omega.icon-plus.button.blue.white-bottom{ href: "#{main_app.new_admin_enterprise_path}" }
CREATE NEW
- if spree_current_user.can_own_more_enterprises?
%a.three.columns.omega.icon-plus.button.blue.white-bottom{ href: "#{main_app.new_admin_enterprise_path}" }
CREATE NEW
- else
%a.with-tip{ title: "Enterprises are Producers and/or Hubs and are the basic unit of organisation within the Open Food Network." } What's this?

View File

@@ -1,5 +0,0 @@
= f.field_container :supplier do
= f.label :supplier
%br
= f.collection_select(:supplier_id, Enterprise.is_primary_producer.managed_by(spree_current_user).by_name, :id, :name, {:include_blank => true}, {:class => "select2"})
= f.error_message_on :supplier

View File

@@ -1,7 +1,7 @@
= render 'spree/admin/products/bulk_edit/header'
= render 'spree/admin/products/bulk_edit/data'
%div{ 'ng-app' => 'ofn.admin', 'ng-controller' => 'AdminProductEditCtrl', 'ng-init' => "initialise('#{@spree_api_key}');loading=true;" }
%div{ ng: { app: 'ofn.admin', controller: 'AdminProductEditCtrl', init: 'initialise()' } }
= render 'spree/admin/products/bulk_edit/filters'
%hr.sixteen.columns.alpha

Some files were not shown because too many files have changed in this diff Show More