Merge branch 'master' into currency

Conflicts:
	app/helpers/injection_helper.rb
	db/suburb_seeds.rb
This commit is contained in:
Rafael Schouten
2014-09-16 10:25:22 +10:00
119 changed files with 18858 additions and 693 deletions

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

@@ -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

@@ -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

@@ -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

@@ -1,2 +1,2 @@
%button.graph-button{"ng-class" => "{open: tt_isOpen}"}
%i.ofn-i-058-graph
%i.ofn-i_058-graph

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

@@ -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,13 +84,16 @@ 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)
i.ofn-i-058-graph
i.ofn-i_058-graph
color: $clr-brick-bright
i.ofn-i-058-graph
i.ofn-i_058-graph
color: #999
margin: 0
padding: 0
@@ -98,7 +101,7 @@ button.graph-button
@media all and (max-width: 640px)
padding: 3px
i.ofn-i-058-graph
i.ofn-i_058-graph
font-size: 0.75rem
button.graph-button.open
@@ -107,10 +110,10 @@ button.graph-button.open
&:hover, &:active, &:focus
background-color: rgba(255,255,255,1)
i.ofn-i-058-graph
i.ofn-i_058-graph
color: $clr-brick-bright
i.ofn-i-058-graph
i.ofn-i_058-graph
color: $clr-brick

View File

@@ -44,6 +44,7 @@
.active_table_row // Inherits from active_table
border: 1px solid transparent
@include border-radius(0.5em)
// Foundation overrides
margin-left: 0
@@ -63,19 +64,25 @@
border-right: 1px solid $disabled-bright
border-top: 0
border-bottom: 0
@include border-radius(0)
.active_table_row:first-child
border-top: 1px solid $disabled-bright
color: $dark-grey
@include border-radius-mixed(0.5em, 0.5em, 0, 0)
&:hover, &:active, &:focus
// color: $dark-grey
.active_table_row:last-child
border-bottom: 1px solid $disabled-bright
@include border-radius-mixed(0, 0, 0.5em, 0.5em)
//Open row sections
.fat > div
border-top: 1px solid #aaa
@media all and (max-width: 640px)
margin-top: 1em
ul, ol
font-size: 0.875rem
@@ -104,7 +111,6 @@
color: $dark-grey
&.open
.active_table_row:first-child
&, & *
color: $dark-grey

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

@@ -1,17 +1,6 @@
// ORIGINAL
// $clr-brick: #8f301d
// $clr-brick-light: #f5e4e1
// $clr-brick-ultra-light: #f7f4ef
// $clr-brick-bright: #db583d
// $clr-brick-light-bright: #f4bbb0
// $clr-turquoise: #097563
// $clr-turquoise-light: #cef2ec
// $clr-turquoise-ultra-light: #e6faf7
// $clr-turquoise-bright: #1d8f7c
$clr-brick: #c1122b
$clr-brick-light: #f5e6e7
$clr-brick-light-trans: rgba(245, 230, 231, 0.9)
$clr-brick-ultra-light: #faf5f6
$clr-brick-bright: #eb4c46
$clr-brick-med-bright: #e5a2a0
@@ -22,6 +11,13 @@ $clr-turquoise-light: #ceefe4
$clr-turquoise-ultra-light: #e8f9f4
$clr-turquoise-bright: #23a877
$disabled-dark: #999
$clr-blue: #0096ad
$clr-blue-light: #85d9e5
$clr-blue-bright: #14b6cc
$disabled-light: #e5e5e5
$disabled-bright: #ccc
$dark-grey: #333
$disabled-dark: #999
$med-grey: #666
$dark-grey: #333

View File

@@ -11,11 +11,12 @@
overflow-y: visible
//Generic text link style
a:hover, a:active, a:focus
color: $clr-brick-bright
a, a *
color: $clr-brick
&:hover, &:active, &:focus
color: $clr-brick-bright
//Hub and Producer icons
// i.ofn-i_040-hub
i.ofn-i_063-hub, i.ofn-i_064-hub-reversed, i.ofn-i_059-producer, i.ofn-i_060-producer-reversed
font-size: 2rem
display: inline-block
@@ -33,80 +34,95 @@
span.hub-name-listing
font-weight: 700
@media all and (max-width: 640px)
&.closed, &.open
//CLOSED row
&.closed
.active_table_row
border: 1px solid transparent
@media all and (max-width: 640px)
border-color: $clr-brick-light
&:hover, &:active, &:focus
border-color: $clr-brick-light-bright
//OPEN row
&.open
.active_table_row, .active_table_row:first-child, .active_table_row:last-child
border-color: $clr-brick-light-bright
&.open, &.closed
@media all and (max-width: 640px)
.active_table_row:first-child .skinny-head
background-color: $clr-brick-light
@include border-radius-mixed(0.5em, 0.5em, 0, 0)
margin-top: -1rem
margin-bottom: 1rem
padding-top: 1rem
padding-bottom: 1rem
&.inactive
&.closed, &.open
.active_table_row:first-child .skinny-head
background-color: white
&.current
&.closed, &.open
.active_table_row:first-child .skinny-head
background-color: $clr-brick-bright
&.current
&.inactive
&.closed, &.open
.active_table_row:first-child .skinny-head
background-color: #555
//Inactive row
&.inactive, &.inactive strong
color: $disabled-dark
&, & *
color: $disabled-dark
a i.ofn-i_040-hub
color: $disabled-dark
&.current
&.inactive
&.closed, &.open
.active_table_row:first-child
background-color: $disabled-dark
&, & *
color: white
&.closed
&:hover, &:active, &:focus
border: none
color: $disabled-dark
&.open
.active_table_row:first-child
color: $disabled-dark
strong
color: $disabled-dark
&:hover, &:active, &:focus
color: $disabled-dark
strong
color: $disabled-dark
.active_table_row:nth-child(2)
background-color: rgba(255, 255, 255, 0)
label
margin-top: 1rem
//Padding second row
&.open
.active_table_row:nth-child(2)
padding-bottom: 0.75rem
//Current selected row
//CURRENT hub (shows selected hub)
&.current
//overwrites active_table
&.closed, &.open
.active_table_row:first-child
background-color: $clr-brick
a, a *
color: $clr-brick
.active_table_row
border-color: $clr-brick
.active_table_row:first-child, .active_table_row:last-child
background-color: $clr-brick-light-trans
opacity: 1
&:hover, &:focus, &:active
opacity: 0.9
&, & *
color: white
&.open, &.closed
.active_table_row
border-color: $clr-brick
&.inactive
&.open, &.closed
.active_table_row
border-color: $disabled-dark
border-color: $clr-brick-bright
@media all and (max-width: 640px)
.active_table_row:first-child .skinny-head
background-color: rgba(255,255,255,0.85)
//INACTIVE - closed hub
&.inactive
&.closed, &.open
&, & *
color: $disabled-dark
&.closed
.active_table_row, .active_table_row:first-child, .active_table_row:last-child
&:hover, &:active, &:focus
border-color: $disabled-bright
&.open
.active_table_row, .active_table_row:first-child, .active_table_row:last-child
// border-color: $disabled-bright
&, &:hover, &:active, &:focus
border-color: $disabled-bright
&.closed, &.open
// & Current hub
&.current
.active_table_row, .active_table_row:first-child, .active_table_row:last-child
a, a *
color: $med-grey
border-color: $disabled-dark
background-color: rgba(220,220,220,0.5)
&:hover, &:focus, &:active
border-color: $disabled-dark
// Small devices
@media all and (max-width: 640px)
.active_table_row:first-child .skinny-head
background-color: $disabled-bright
// Small devices
@media all and (max-width: 640px)
.active_table_row, .active_table_row:first-child, .active_table_row:last-child
border-color: $disabled-bright
background-color: transparent
&:hover, &:focus, &:active
border-color: $disabled-bright
opacity: 0.85
.active_table_row:first-child .skinny-head
background-color: $disabled-light

View File

@@ -20,6 +20,10 @@
-webkit-border-radius: $border-radius
border-radius: $border-radius
@mixin border-radius-mixed($border-radius-TL, $border-radius-TR, $border-radius-BR, $border-radius-BL)
-webkit-border-radius: $border-radius-TL $border-radius-TR $border-radius-BR $border-radius-BL
border-radius: $border-radius-TL $border-radius-TR $border-radius-BR $border-radius-BL
@mixin transform-translate($translate)
-ms-transform: $translate
-webkit-transform: $translate

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

@@ -1,4 +1,5 @@
@import branding
@import mixins
.producers
.active_table .active_table_node
@@ -7,6 +8,7 @@
@media all and (max-width: 640px)
.skinny-head
background-color: $clr-turquoise-light
@include border-radius-mixed(0.5em, 0.5em, 0, 0)
margin-top: -1rem
margin-bottom: 1rem
padding-top: 1rem
@@ -14,6 +16,7 @@
.follow-icons
&, & *
font-size: 1.5rem
// Producer icons
i.ofn-i_059-producer, i.ofn-i_060-producer-reversed
@@ -75,9 +78,12 @@
//Closed row
&.closed
&:hover, &:active, &:focus
.active_table_row.closed
border: 1px solid $clr-turquoise
.active_table_row.closed
border: 1px solid transparent
@media all and (max-width: 640px)
border-color: $clr-turquoise-light
&:hover, &:active, &:focus
border-color: $clr-turquoise

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
@@ -25,6 +25,17 @@ module InjectionHelper
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)

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

@@ -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
@@ -223,6 +229,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
@@ -234,4 +244,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,3 @@
class Api::StateSerializer < ActiveModel::Serializer
attributes :id, :name, :abbr
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

@@ -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 Shop or Suburb...",
placeholder: "Search by name or suburb...",
"ng-debounce" => "150",
"ofn-disable-enter" => true}

View File

@@ -15,12 +15,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

@@ -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

@@ -11,9 +11,9 @@
.small-12.medium-6.columns.text-right
.profile-checkbox
/ Hide until we're ready to work on this:
/ Hide until we're ready to work on this:
/ %input{type: "checkbox", name: "profile"}><
/ %label Show profiles
/ %button.button.secondary.tiny.help-btn.ng-scope{:popover => "Profiles do not have a shopfront on the Open Food Network, but they may have their own physical or online shop elsewhere", "popover-placement" => "left"}><
/ %i.ofn-i_013-help
/ %input{type: "checkbox", name: "profile"}><
/ %label Show profiles
/ %button.button.secondary.tiny.help-btn.ng-scope{:popover => "Profiles do not have a shopfront on the Open Food Network, but they may have their own physical or online shop elsewhere", "popover-placement" => "left"}><
/ %i.ofn-i_013-help

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

View File

@@ -1,2 +1,3 @@
= admin_inject_producers
= admin_inject_taxons
= admin_inject_spree_api_key

View File

@@ -1,13 +0,0 @@
%fieldset
%legend 'Manage Enterprises'
= f.field_container :enterprise_roles do
- f.object.build_enterprise_roles
%table
= f.fields_for :enterprise_roles do |enterprise_form|
%tr
%td
= hidden_field_tag "#{enterprise_form.object_name}[_destroy]", 1, :id => nil
= check_box_tag "#{enterprise_form.object_name}[_destroy]", 0, !enterprise_form.object.new_record?
%td
= label_tag "#{enterprise_form.object_name}[_destroy]", enterprise_form.object.enterprise.name
= enterprise_form.hidden_field :enterprise_id

View File

@@ -5,6 +5,10 @@ Openfoodnetwork::Application.routes.draw do
get "/map", to: "map#index", as: :map
get "/register", to: "registration#index", as: :registration
get "/register/store", to: "registration#store", as: :store_registration
get "/register/auth", to: "registration#authenticate", as: :registration_auth
resource :shop, controller: "shop" do
get :products
post :order_cycle

View File

@@ -0,0 +1,21 @@
class AddOwnerToEnterprise < ActiveRecord::Migration
def up
add_column :enterprises, :owner_id, :integer
add_index :enterprises, :owner_id
Enterprise.all.each do |e|
owner = e.users.find{ |u| !u.admin? }
admin_owner = e.users.find &:admin?
any_admin = Spree::User.admin.first
any_user = Spree::User.first
e.update_column :owner_id, (owner || admin_owner || any_admin || any_user )
end
add_foreign_key :enterprises, :spree_users, column: :owner_id
change_column :enterprises, :owner_id, :integer, null: false
end
def down
remove_column :enterprises, :owner_id
end
end

View File

@@ -0,0 +1,18 @@
class AddEnterpriseLimitToSpreeUsers < ActiveRecord::Migration
def up
add_column :spree_users, :enterprise_limit, :integer, default: 1, null: false
Spree::User.all.each do |u|
e_count = u.owned_enterprises.length
if u.admin? || e_count > 1
e_limit = 100
e_limit = 1000 if u.admin?
u.update_column :enterprise_limit, e_limit
end
end
end
def down
remove_column :spree_users, :enterprise_limit
end
end

View File

@@ -11,7 +11,7 @@
#
# It's strongly recommended to check this file into your version control system.
ActiveRecord::Schema.define(:version => 20140826043521) do
ActiveRecord::Schema.define(:version => 20140904003026) do
create_table "adjustment_metadata", :force => true do |t|
t.integer "adjustment_id"
@@ -265,9 +265,11 @@ ActiveRecord::Schema.define(:version => 20140826043521) do
t.string "instagram"
t.string "linkedin"
t.string "type", :default => "profile", :null => false
t.integer "owner_id", :null => false
end
add_index "enterprises", ["address_id"], :name => "index_enterprises_on_address_id"
add_index "enterprises", ["owner_id"], :name => "index_enterprises_on_owner_id"
create_table "exchange_fees", :force => true do |t|
t.integer "exchange_id"
@@ -969,6 +971,7 @@ ActiveRecord::Schema.define(:version => 20140826043521) do
t.string "spree_api_key", :limit => 48
t.datetime "reset_password_sent_at"
t.string "api_key", :limit => 40
t.integer "enterprise_limit", :default => 1, :null => false
end
add_index "spree_users", ["email"], :name => "email_idx_unique", :unique => true
@@ -1069,6 +1072,7 @@ ActiveRecord::Schema.define(:version => 20140826043521) do
add_foreign_key "enterprise_roles", "spree_users", name: "enterprise_roles_user_id_fk", column: "user_id"
add_foreign_key "enterprises", "spree_addresses", name: "enterprises_address_id_fk", column: "address_id"
add_foreign_key "enterprises", "spree_users", name: "enterprises_owner_id_fk", column: "owner_id"
add_foreign_key "exchange_fees", "enterprise_fees", name: "exchange_fees_enterprise_fee_id_fk"
add_foreign_key "exchange_fees", "exchanges", name: "exchange_fees_exchange_id_fk"

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,12 @@
module OpenFoodNetwork
module SpreeApiKeyLoader
def load_spree_api_key
if spree_current_user
spree_current_user.generate_spree_api_key! unless spree_current_user.spree_api_key
@spree_api_key = spree_current_user.spree_api_key
else
@spree_api_key = nil
end
end
end
end

View File

@@ -2,7 +2,12 @@ require 'spec_helper'
module Admin
describe EnterprisesController do
let(:distributor) { create(:distributor_enterprise) }
let(:distributor_owner) do
user = create(:user)
user.spree_roles = []
user
end
let(:distributor) { create(:distributor_enterprise, owner: distributor_owner ) }
let(:user) do
user = create(:user)
user.spree_roles = []
@@ -22,6 +27,7 @@ module Admin
it "grants management permission if the current user is an enterprise user" do
controller.stub spree_current_user: user
enterprise_params[:enterprise][:owner_id] = user
spree_put :create, enterprise_params
enterprise = Enterprise.find_by_name 'zzz'
@@ -30,11 +36,50 @@ module Admin
it "does not grant management permission to admins" do
controller.stub spree_current_user: admin_user
enterprise_params[:enterprise][:owner_id] = admin_user
spree_put :create, enterprise_params
enterprise = Enterprise.find_by_name 'zzz'
admin_user.enterprise_roles.where(enterprise_id: enterprise).should be_empty
end
it "it overrides the owner_id submitted by the user unless current_user is super admin" do
controller.stub spree_current_user: user
enterprise_params[:enterprise][:owner_id] = admin_user
spree_put :create, enterprise_params
enterprise = Enterprise.find_by_name 'zzz'
user.enterprise_roles.where(enterprise_id: enterprise).first.should be
end
end
describe "updating an enterprise" do
it "allows current owner to change ownership" do
controller.stub spree_current_user: distributor_owner
update_params = { id: distributor, enterprise: { owner_id: user } }
spree_post :update, update_params
distributor.reload
expect(distributor.owner).to eq user
end
it "allows super admin to change ownership" do
controller.stub spree_current_user: admin_user
update_params = { id: distributor, enterprise: { owner_id: user } }
spree_post :update, update_params
distributor.reload
expect(distributor.owner).to eq user
end
it "does not allow managers to change ownership" do
controller.stub spree_current_user: user
update_params = { id: distributor, enterprise: { owner_id: user } }
spree_post :update, update_params
distributor.reload
expect(distributor.owner).to eq distributor_owner
end
end
describe "updating an enterprise" do

View File

@@ -0,0 +1,15 @@
require 'spec_helper'
describe RegistrationController do
describe "redirecting when user not logged in" do
it "index" do
get :index
response.should redirect_to registration_auth_path(anchor: "signup?after_login=/register")
end
it "store" do
get :store
response.should redirect_to registration_auth_path(anchor: "signup?after_login=/register/store")
end
end
end

View File

@@ -82,6 +82,7 @@ FactoryGirl.define do
end
factory :enterprise, :class => Enterprise do
owner { FactoryGirl.create :user }
sequence(:name) { |n| "Enterprise #{n}" }
type 'full'
description 'enterprise'

View File

@@ -305,7 +305,6 @@ feature %q{
expect(page).to have_select "producer", selected: s1.name
expect(page).to have_field "available_on", with: p.available_on.strftime("%F %T")
expect(page).to have_field "price", with: "10.0"
save_screenshot '/Users/rob/Desktop/ss.png'
expect(page).to have_selector "div#s2id_p#{p.id}_category a.select2-choice"
expect(page).to have_select "variant_unit_with_scale", selected: "Volume (L)"
expect(page).to have_field "on_hand", with: "6"
@@ -745,8 +744,6 @@ feature %q{
permissions_list: [:manage_products])
end
use_short_wait
before do
@enterprise_user = create_enterprise_user
@enterprise_user.enterprise_roles.build(enterprise: supplier_managed1).save
@@ -779,6 +776,28 @@ feature %q{
expect(page).to have_field 'product_name', with: product_supplied_inactive.name
end
it "allows me to create a product" do
taxon = create(:taxon, name: 'Fruit')
visit '/admin/products/bulk_edit'
find("a", text: "NEW PRODUCT").click
expect(page).to have_content 'NEW PRODUCT'
expect(page).to have_select 'product_supplier_id', with_options: [supplier_managed1.name, supplier_managed2.name, supplier_permitted.name]
within 'fieldset#new_product' do
fill_in 'product_name', with: 'Big Bag Of Apples'
select supplier_permitted.name, from: 'product_supplier_id'
fill_in 'product_price', with: '10.00'
select taxon.name, from: 'product_primary_taxon_id'
end
click_button 'Create'
expect(URI.parse(current_url).path).to eq '/admin/products/bulk_edit'
expect(flash_message).to eq 'Product "Big Bag Of Apples" has been successfully created!'
expect(page).to have_field "product_name", with: 'Big Bag Of Apples'
end
it "allows me to update a product" do
p = product_supplied_permitted

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