Merge remote-tracking branch 'origin/master' into HEAD

This commit is contained in:
Continuous Integration
2017-02-01 10:35:53 +11:00
333 changed files with 9333 additions and 5396 deletions

View File

@@ -9,7 +9,7 @@ gem 'i18n', '~> 0.6.11'
gem 'nokogiri', '>= 1.6.7.1'
gem 'pg'
gem 'spree', github: 'openfoodfoundation/spree', branch: '1-3-stable'
gem 'spree', github: 'openfoodfoundation/spree', branch: 'spree-upgrade-step1c'
gem 'spree_i18n', github: 'spree/spree_i18n', branch: '1-3-stable'
gem 'spree_auth_devise', github: 'spree/spree_auth_devise', branch: '1-3-stable'
@@ -50,7 +50,7 @@ gem 'gmaps4rails'
gem 'spinjs-rails'
gem 'rack-ssl', :require => 'rack/ssl'
gem 'custom_error_message', :github => 'jeremydurham/custom-err-msg'
gem 'angularjs-file-upload-rails', '~> 1.1.0'
gem 'angularjs-file-upload-rails', '~> 1.1.6'
gem 'roadie-rails', '~> 1.0.3'
gem 'figaro'
gem 'blockenspiel'
@@ -87,6 +87,7 @@ gem "foundation-rails"
gem 'foundation_rails_helper', github: 'willrjmarshall/foundation_rails_helper', branch: "rails3"
gem 'jquery-rails'
gem 'jquery-migrate-rails'
gem 'css_splitter'

View File

@@ -23,45 +23,48 @@ GIT
GIT
remote: git://github.com/openfoodfoundation/spree.git
revision: 6e3edfe40a5de8eba0095b2c5f3db9ea54c3afda
branch: 1-3-stable
revision: a4c439570b77afa50f9e36299811f293232bd281
branch: spree-upgrade-step1c
specs:
spree (1.3.6.beta)
spree_api (= 1.3.6.beta)
spree_cmd (= 1.3.6.beta)
spree_core (= 1.3.6.beta)
spree_promo (= 1.3.6.beta)
spree_sample (= 1.3.6.beta)
spree_api (1.3.6.beta)
spree_core (= 1.3.6.beta)
spree (1.3.99)
spree_api (= 1.3.99)
spree_cmd (= 1.3.99)
spree_core (= 1.3.99)
spree_dash (= 1.3.99)
spree_promo (= 1.3.99)
spree_sample (= 1.3.99)
spree_api (1.3.99)
spree_core (= 1.3.99)
versioncake (= 0.4.0)
spree_cmd (1.3.6.beta)
spree_cmd (1.3.99)
thor (>= 0.14.6)
spree_core (1.3.6.beta)
activemerchant (~> 1.34)
spree_core (1.3.99)
activemerchant (~> 1.50.0)
acts_as_list (= 0.1.4)
awesome_nested_set (= 2.1.5)
aws-sdk (~> 1.11.1)
cancan (= 1.6.8)
deface (>= 0.9.0)
ffaker (~> 1.15.0)
highline (= 1.6.18)
jquery-rails (~> 2.2.0)
highline (= 1.6.11)
jquery-rails (~> 2.0)
json (>= 1.5.5)
kaminari (= 0.14.1)
money (= 5.1.1)
kaminari (= 0.13.0)
money (= 5.0.0)
paperclip (~> 3.0)
rabl (= 0.7.2)
rails (~> 3.2.16)
rails (~> 3.2.13)
ransack (= 0.7.2)
select2-rails (= 3.5.9.3)
state_machine (= 1.1.2)
select2-rails (~> 3.2)
state_machine (= 1.2.0)
stringex (~> 1.3.2)
truncate_html (~> 0.5.5)
spree_promo (1.3.6.beta)
spree_core (= 1.3.6.beta)
spree_sample (1.3.6.beta)
spree_core (= 1.3.6.beta)
spree_dash (1.3.99)
httparty (~> 0.8.1)
spree_core (= 1.3.99)
spree_promo (1.3.99)
spree_core (= 1.3.99)
spree_sample (1.3.99)
spree_core (= 1.3.99)
GIT
remote: git://github.com/spree/deface.git
@@ -123,8 +126,8 @@ GEM
sprockets (~> 2.2.1)
active_model_serializers (0.8.3)
activemodel (>= 3.0)
activemerchant (1.57.0)
activesupport (>= 3.2.14, < 5.1)
activemerchant (1.50.0)
activesupport (>= 3.2.14, < 5.0.0)
builder (>= 2.1.2, < 4.0.0)
i18n (>= 0.6.9)
nokogiri (~> 1.4)
@@ -151,7 +154,7 @@ GEM
railties (>= 3.1)
sprockets (~> 2)
tilt
angularjs-file-upload-rails (1.1.0)
angularjs-file-upload-rails (1.1.6)
angularjs-rails (1.5.5)
ansi (1.4.2)
arel (3.0.3)
@@ -167,9 +170,7 @@ GEM
bcrypt-ruby (3.1.5)
bcrypt (>= 3.1.3)
blockenspiel (0.4.5)
bugsnag (1.5.2)
httparty (>= 0.6, < 1.0)
multi_json (~> 1.0)
bugsnag (4.1.0)
builder (3.0.4)
byebug (2.7.0)
columnize (~> 0.3)
@@ -189,7 +190,7 @@ GEM
climate_control (0.0.3)
activesupport (>= 3.0)
cliver (0.3.2)
cocaine (0.5.7)
cocaine (0.5.8)
climate_control (>= 0.0.3, < 1.0)
coderay (1.0.9)
coffee-rails (3.2.2)
@@ -404,12 +405,12 @@ GEM
zeus
haml (4.0.4)
tilt
highline (1.6.18)
highline (1.6.11)
hike (1.2.3)
http_parser.rb (0.5.3)
httparty (0.13.1)
json (~> 1.8)
multi_xml (>= 0.5.2)
httparty (0.8.3)
multi_json (~> 1.0)
multi_xml
i18n (0.6.11)
immigrant (0.1.6)
activerecord (>= 3.0)
@@ -417,16 +418,18 @@ GEM
inflecto (0.0.2)
ipaddress (0.8.0)
journey (1.0.4)
jquery-rails (2.2.2)
jquery-migrate-rails (1.2.1)
jquery-rails (2.3.0)
railties (>= 3.0, < 5.0)
thor (>= 0.14, < 2.0)
json (1.8.3)
json_spec (1.1.1)
multi_json (~> 1.0)
rspec (~> 2.0)
kaminari (0.14.1)
kaminari (0.13.0)
actionpack (>= 3.0.0)
activesupport (>= 3.0.0)
railties (>= 3.0.0)
kgio (2.9.3)
knapsack (1.5.1)
rake
@@ -449,8 +452,9 @@ GEM
mini_portile2 (2.0.0)
momentjs-rails (2.5.1)
railties (>= 3.1)
money (5.1.1)
i18n (~> 0.6.0)
money (5.0.0)
i18n (~> 0.4)
json
multi_json (1.12.1)
multi_xml (0.5.5)
newrelic_rpm (3.12.0.288)
@@ -494,7 +498,7 @@ GEM
activesupport (>= 2.3.14)
multi_json (~> 1.0)
rack (1.4.7)
rack-cache (1.2)
rack-cache (1.6.1)
rack (>= 0.4)
rack-livereload (0.3.15)
rack
@@ -521,7 +525,7 @@ GEM
rdoc (~> 3.4)
thor (>= 0.14.6, < 2.0)
raindrops (0.13.0)
rake (10.4.2)
rake (11.1.2)
ransack (0.7.2)
actionpack (~> 3.0)
activerecord (~> 3.0)
@@ -571,7 +575,7 @@ GEM
railties (~> 3.2.0)
sass (>= 3.1.10)
tilt (~> 1.3)
select2-rails (3.5.9.3)
select2-rails (3.5.10)
thor (~> 0.14)
shoulda-matchers (1.1.0)
activesupport (>= 3.0.0)
@@ -583,14 +587,14 @@ GEM
multi_json (~> 1.0)
rack (~> 1.0)
tilt (~> 1.1, != 1.3.0)
state_machine (1.1.2)
state_machine (1.2.0)
stringex (1.3.3)
therubyracer (0.12.0)
libv8 (~> 3.16.14.0)
ref
thor (0.19.1)
tilt (1.4.1)
timecop (0.6.2.2)
timecop (0.8.1)
timers (1.1.0)
treetop (1.4.15)
polyglot
@@ -601,7 +605,7 @@ GEM
sprockets (>= 2.0.0)
turn (0.8.3)
ansi
tzinfo (0.3.44)
tzinfo (0.3.49)
uglifier (2.7.1)
execjs (>= 0.3.0)
json (>= 1.8.0)
@@ -645,7 +649,7 @@ DEPENDENCIES
acts-as-taggable-on (~> 3.4)
andand
angular-rails-templates (~> 0.2.0)
angularjs-file-upload-rails (~> 1.1.0)
angularjs-file-upload-rails (~> 1.1.6)
angularjs-rails (= 1.5.5)
atomic
awesome_print
@@ -682,6 +686,7 @@ DEPENDENCIES
haml
i18n (~> 0.6.11)
immigrant
jquery-migrate-rails
jquery-rails
json_spec
knapsack
@@ -728,5 +733,8 @@ DEPENDENCIES
wicked_pdf
wkhtmltopdf-binary
RUBY VERSION
ruby 2.1.5p273
BUNDLED WITH
1.12.5
1.13.6

View File

@@ -6,6 +6,7 @@
//
//= require jquery
//= require jquery-migrate-min
//= require jquery_ujs
//= require jquery-ui
//= require shared/jquery-ui-timepicker-addon
@@ -36,6 +37,7 @@
//= require ./order_cycles/order_cycles
//= require ./payment_methods/payment_methods
//= require ./products/products
//= require ./resources/resources
//= require ./shipping_methods/shipping_methods
//= require ./side_menu/side_menu
//= require ./tag_rules/tag_rules

View File

@@ -22,7 +22,7 @@ angular.module("ofn.admin").controller "AdminProductEditCtrl", ($scope, $timeout
$scope.producers = producers
$scope.taxons = Taxons.taxons
$scope.taxons = Taxons.all
$scope.tax_categories = tax_categories
$scope.filterProducers = [{id: "0", name: ""}].concat $scope.producers
$scope.filterTaxons = [{id: "0", name: ""}].concat $scope.taxons

View File

@@ -3,8 +3,8 @@ angular.module("admin.customers").controller "customersCtrl", ($scope, $q, $filt
$scope.availableCountries = availableCountries
$scope.RequestMonitor = RequestMonitor
$scope.submitAll = pendingChanges.submitAll
$scope.add = Customers.add
$scope.customerLimit = 20
$scope.customers = Customers.all
$scope.columns = Columns.columns
$scope.confirmRefresh = (event) ->
@@ -16,7 +16,6 @@ angular.module("admin.customers").controller "customersCtrl", ($scope, $q, $filt
Customers.index({enterprise_id: $scope.shop_id}).then (data) ->
pendingChanges.removeAll()
$scope.customers_form.$setPristine()
$scope.customers = data
$scope.shop_id = shops[0].id if shops.length == 1

View File

@@ -27,7 +27,7 @@ angular.module("admin.enterprises")
# Provide a callback for generating warning messages displayed before leaving the page. This is passed in
# from a directive "nav-check" in the page - if we pass it here it will be called in the test suite,
# and on all new uses of this contoller, and we might not want that .
# and on all new uses of this contoller, and we might not want that.
enterpriseNavCallback = ->
if $scope.Enterprise.$dirty
"Your changes to the enterprise are not saved yet."

View File

@@ -6,7 +6,6 @@ angular.module("admin.enterprises")
$scope.menu.setItems [
{ name: 'primary_details', label: t('primary_details'), icon_class: "icon-home" }
{ name: 'users', label: t('users'), icon_class: "icon-user" }
{ name: 'address', label: t('address'), icon_class: "icon-map-marker" }
{ name: 'contact', label: t('contact'), icon_class: "icon-phone" }
{ name: 'social', label: t('social'), icon_class: "icon-twitter" }
@@ -20,11 +19,11 @@ angular.module("admin.enterprises")
{ name: 'inventory_settings', label: t('inventory_settings'), icon_class: "icon-list-ol", show: "enterpriseIsShop()" }
{ name: 'tag_rules', label: t('tag_rules'), icon_class: "icon-random", show: "enterpriseIsShop()" }
{ name: 'shop_preferences', label: t('shop_preferences'), icon_class: "icon-shopping-cart", show: "enterpriseIsShop()" }
{ name: 'users', label: t('users'), icon_class: "icon-user" }
]
$scope.select(0)
$scope.showItem = (item) ->
if item.show?
$parse(item.show)($scope)

View File

@@ -3,19 +3,42 @@ angular.module("admin.indexUtils").directive "ofnSelect2", ($sanitize, $timeout,
restrict: 'C'
scope:
data: "="
minSearch: "@?"
text: "@?"
minSearch: "@"
text: "@"
blank: "=?"
filter: "=?"
onSelecting: "=?"
multiple: '@'
link: (scope, element, attrs, ngModel) ->
$timeout ->
scope.text ||= 'name'
scope.filter ||= -> true
scope.text ?= 'name'
scope.multiple ?= false
scope.filter ?= -> true
if scope.data.$promise
scope.data.$promise.then -> init()
else
init()
element.on "select2-opening", scope.onSelecting || angular.noop
attrs.$observe 'disabled', (value) ->
element.select2('enable', !value)
ngModel.$formatters.push (value) ->
element.select2('val', value)
value
ngModel.$parsers.push (value) ->
return value.split(",") if scope.multiple
value
init = ->
scope.data.unshift(scope.blank) if scope.blank? && typeof scope.blank is "object"
item.name = $sanitize(item.name) for item in scope.data
element.select2
multiple: scope.multiple
minimumResultsForSearch: scope.minSearch || 0
data: ->
filtered = $filter('filter')(scope.data,scope.filter)
@@ -24,12 +47,3 @@ angular.module("admin.indexUtils").directive "ofnSelect2", ($sanitize, $timeout,
item[scope.text]
formatResult: (item) ->
item[scope.text]
element.on "select2-opening", scope.onSelecting || angular.noop
attrs.$observe 'disabled', (value) ->
element.select2('enable', !value)
ngModel.$formatters.push (value) ->
element.select2('val', value)
value

View File

@@ -1 +1 @@
angular.module("admin.indexUtils", ['ngResource', 'ngSanitize', 'templates', 'admin.utils']).config ($httpProvider) ->
angular.module("admin.indexUtils", ['admin.resources', 'ngSanitize', 'templates', 'admin.utils']).config ($httpProvider) ->

View File

@@ -3,7 +3,8 @@ angular.module("admin.indexUtils").factory 'Dereferencer', ->
dereference: (array, data)->
if array
for object, i in array
array[i] = data[object.id]
match = data[object.id]
array[i] = match if match?
dereferenceAttr: (array, attr, data)->
if array

View File

@@ -1,4 +1,4 @@
angular.module("admin.lineItems").controller 'LineItemsCtrl', ($scope, $timeout, $http, $q, StatusMessage, Columns, Dereferencer, Orders, LineItems, Enterprises, OrderCycles, blankOption, VariantUnitManager, RequestMonitor) ->
angular.module("admin.lineItems").controller 'LineItemsCtrl', ($scope, $timeout, $http, $q, StatusMessage, Columns, Dereferencer, Orders, LineItems, Enterprises, OrderCycles, VariantUnitManager, RequestMonitor) ->
$scope.initialized = false
$scope.RequestMonitor = RequestMonitor
$scope.filteredLineItems = []
@@ -15,31 +15,31 @@ angular.module("admin.lineItems").controller 'LineItemsCtrl', ($scope, $timeout,
LineItems.allSaved() || confirm(t("unsaved_changes_warning"))
$scope.resetSelectFilters = ->
$scope.distributorFilter = blankOption().id
$scope.supplierFilter = blankOption().id
$scope.orderCycleFilter = blankOption().id
$scope.distributorFilter = 0
$scope.supplierFilter = 0
$scope.orderCycleFilter = 0
$scope.quickSearch = ""
$scope.refreshData = ->
unless !$scope.orderCycleFilter? || $scope.orderCycleFilter == "0"
$scope.startDate = OrderCycles.orderCyclesByID[$scope.orderCycleFilter].first_order
$scope.endDate = OrderCycles.orderCyclesByID[$scope.orderCycleFilter].last_order
unless !$scope.orderCycleFilter? || $scope.orderCycleFilter == 0
$scope.startDate = OrderCycles.byID[$scope.orderCycleFilter].first_order
$scope.endDate = OrderCycles.byID[$scope.orderCycleFilter].last_order
RequestMonitor.load $scope.orders = Orders.index("q[state_not_eq]": "canceled", "q[completed_at_not_null]": "true", "q[completed_at_gt]": "#{parseDate($scope.startDate)}", "q[completed_at_lt]": "#{parseDate($scope.endDate)}")
RequestMonitor.load $scope.lineItems = LineItems.index("q[order][state_not_eq]": "canceled", "q[order][completed_at_not_null]": "true", "q[order][completed_at_gt]": "#{parseDate($scope.startDate)}", "q[order][completed_at_lt]": "#{parseDate($scope.endDate)}")
unless $scope.initialized
RequestMonitor.load $scope.distributors = Enterprises.index(includeBlank: true, action: "for_line_items", ams_prefix: "basic", "q[sells_in][]": ["own", "any"])
RequestMonitor.load $scope.orderCycles = OrderCycles.index(includeBlank: true, ams_prefix: "basic", as: "distributor", "q[orders_close_at_gt]": "#{daysFromToday(-90)}")
RequestMonitor.load $scope.suppliers = Enterprises.index(includeBlank: true, action: "for_line_items", ams_prefix: "basic", "q[is_primary_producer_eq]": "true")
RequestMonitor.load $scope.distributors = Enterprises.index(action: "for_line_items", ams_prefix: "basic", "q[sells_in][]": ["own", "any"])
RequestMonitor.load $scope.orderCycles = OrderCycles.index(ams_prefix: "basic", as: "distributor", "q[orders_close_at_gt]": "#{daysFromToday(-90)}")
RequestMonitor.load $scope.suppliers = Enterprises.index(action: "for_line_items", ams_prefix: "basic", "q[is_primary_producer_eq]": "true")
RequestMonitor.load $q.all([$scope.orders.$promise, $scope.distributors.$promise, $scope.orderCycles.$promise]).then ->
Dereferencer.dereferenceAttr $scope.orders, "distributor", Enterprises.enterprisesByID
Dereferencer.dereferenceAttr $scope.orders, "order_cycle", OrderCycles.orderCyclesByID
Dereferencer.dereferenceAttr $scope.orders, "distributor", Enterprises.byID
Dereferencer.dereferenceAttr $scope.orders, "order_cycle", OrderCycles.byID
RequestMonitor.load $q.all([$scope.orders.$promise, $scope.suppliers.$promise, $scope.lineItems.$promise]).then ->
Dereferencer.dereferenceAttr $scope.lineItems, "supplier", Enterprises.enterprisesByID
Dereferencer.dereferenceAttr $scope.lineItems, "order", Orders.ordersByID
Dereferencer.dereferenceAttr $scope.lineItems, "supplier", Enterprises.byID
Dereferencer.dereferenceAttr $scope.lineItems, "order", Orders.byID
$scope.bulk_order_form.$setPristine()
StatusMessage.clear()
unless $scope.initialized

View File

@@ -1,8 +1,8 @@
angular.module("admin.lineItems").filter "selectFilter", (blankOption, RequestMonitor) ->
angular.module("admin.lineItems").filter "selectFilter", (RequestMonitor) ->
return (lineItems,selectedSupplier,selectedDistributor,selectedOrderCycle) ->
filtered = []
unless RequestMonitor.loading
filtered.push lineItem for lineItem in lineItems when (angular.equals(selectedSupplier,"0") || lineItem.supplier.id == selectedSupplier) &&
(angular.equals(selectedDistributor,"0") || lineItem.order.distributor.id == selectedDistributor) &&
(angular.equals(selectedOrderCycle,"0") || lineItem.order.order_cycle.id == selectedOrderCycle)
filtered.push lineItem for lineItem in lineItems when (angular.equals(selectedSupplier,0) || lineItem.supplier.id == selectedSupplier) &&
(angular.equals(selectedDistributor,0) || lineItem.order.distributor.id == selectedDistributor) &&
(angular.equals(selectedOrderCycle,0) || lineItem.order.order_cycle.id == selectedOrderCycle)
filtered

View File

@@ -68,6 +68,7 @@ angular.module('admin.orderCycles')
$scope.removeCoordinatorFee = ($event, index) ->
$event.preventDefault()
OrderCycle.removeCoordinatorFee(index)
$scope.order_cycle_form.$dirty = true
$scope.addExchangeFee = ($event, exchange) ->
$event.preventDefault()
@@ -76,6 +77,7 @@ angular.module('admin.orderCycles')
$scope.removeExchangeFee = ($event, exchange, index) ->
$event.preventDefault()
OrderCycle.removeExchangeFee(exchange, index)
$scope.order_cycle_form.$dirty = true
$scope.removeDistributionOfVariant = (variant_id) ->
OrderCycle.removeDistributionOfVariant(variant_id)

View File

@@ -1,4 +1,4 @@
angular.module('admin.orderCycles', ['ngResource', 'admin.utils', 'admin.indexUtils', 'ngTagsInput'])
angular.module('admin.orderCycles', ['admin.utils', 'admin.indexUtils', 'ngTagsInput'])
.config ($httpProvider) ->
$httpProvider.defaults.headers.common['X-CSRF-Token'] = $('meta[name=csrf-token]').attr('content')

View File

@@ -1,3 +1,3 @@
angular.module("admin.paymentMethods").controller "paymentMethodsCtrl", ($scope, PaymentMethods) ->
$scope.findPaymentMethodByID = (id) ->
$scope.PaymentMethod = PaymentMethods.findByID(id)
$scope.PaymentMethod = PaymentMethods.byID[id]

View File

@@ -1,8 +0,0 @@
angular.module("admin.paymentMethods")
.factory "PaymentMethods", (paymentMethods) ->
new class PaymentMethods
paymentMethods: paymentMethods
findByID: (id) ->
for paymentMethod in @paymentMethods
return paymentMethod if paymentMethod.id is id

View File

@@ -0,0 +1 @@
angular.module("admin.resources", ['ngResource'])

View File

@@ -1,4 +1,4 @@
angular.module("admin.customers").factory 'CustomerResource', ($resource) ->
angular.module("admin.resources").factory 'CustomerResource', ($resource) ->
$resource('/admin/customers/:id.json', {}, {
'index':
method: 'GET'

View File

@@ -1,4 +1,4 @@
angular.module("admin.enterprises").factory 'EnterpriseResource', ($resource) ->
angular.module("admin.resources").factory 'EnterpriseResource', ($resource) ->
ignoredAttrs = ->
["$$hashKey", "producer", "package", "producerError", "packageError", "status"]

View File

@@ -1,4 +1,4 @@
angular.module("admin.lineItems").factory 'LineItemResource', ($resource) ->
angular.module("admin.resources").factory 'LineItemResource', ($resource) ->
$resource('/admin/:orders/:order_number/line_items/:id.json', {}, {
'index':
method: 'GET'

View File

@@ -1,4 +1,4 @@
angular.module("admin.orderCycles").factory 'OrderCycleResource', ($resource) ->
angular.module("admin.resources").factory 'OrderCycleResource', ($resource) ->
$resource('/admin/order_cycles/:id/:action.json', {}, {
'index':
method: 'GET'

View File

@@ -1,4 +1,4 @@
angular.module("admin.orders").factory 'OrderResource', ($resource) ->
angular.module("admin.resources").factory 'OrderResource', ($resource) ->
$resource('/admin/orders/:id/:action.json', {}, {
'index':
method: 'GET'

View File

@@ -1,19 +1,24 @@
angular.module("admin.customers").factory "Customers", ($q, InfoDialog, RequestMonitor, CustomerResource, CurrentShop) ->
angular.module("admin.resources").factory "Customers", ($q, InfoDialog, RequestMonitor, CustomerResource, CurrentShop) ->
new class Customers
customers: []
all: []
byID: {}
pristineByID: {}
add: (email) ->
params =
enterprise_id: CurrentShop.shop.id
email: email
CustomerResource.create params, (customer) =>
@customers.unshift customer if customer.id
if customer.id
@all.unshift customer
@byID[customer.id] = customer
@pristineByID[customer.id] = angular.copy(customer)
remove: (customer) ->
params = id: customer.id
CustomerResource.destroy params, =>
i = @customers.indexOf customer
@customers.splice i, 1 unless i < 0
i = @all.indexOf customer
@all.splice i, 1 unless i < 0
, (response) =>
errors = response.data.errors
if errors?
@@ -22,10 +27,17 @@ angular.module("admin.customers").factory "Customers", ($q, InfoDialog, RequestM
InfoDialog.open 'error', "Could not delete customer: #{customer.email}"
index: (params) ->
request = CustomerResource.index(params, (data) => @customers = data)
@clear()
request = CustomerResource.index(params, (data) => @load(data))
RequestMonitor.load(request.$promise)
request.$promise
load: (customers) ->
for customer in customers
@all.push customer
@byID[customer.id] = customer
@pristineByID[customer.id] = angular.copy(customer)
update: (address, customer, addressType) ->
params =
id: customer.id
@@ -33,3 +45,5 @@ angular.module("admin.customers").factory "Customers", ($q, InfoDialog, RequestM
"#{addressType}_attributes": address
CustomerResource.update params
clear: ->
@all.length = 0

View File

@@ -1,21 +1,18 @@
angular.module("admin.enterprises").factory 'Enterprises', ($q, EnterpriseResource, blankOption) ->
angular.module("admin.resources").factory 'Enterprises', ($q, EnterpriseResource) ->
new class Enterprises
enterprisesByID: {}
byID: {}
pristineByID: {}
index: (params={}, callback=null) ->
includeBlank = !!params['includeBlank']
delete params['includeBlank']
EnterpriseResource.index(params, (data) =>
for enterprise in data
@enterprisesByID[enterprise.id] = enterprise
@pristineByID[enterprise.id] = angular.copy(enterprise)
EnterpriseResource.index params, (data) =>
@load(data)
(callback || angular.noop)(data)
data.unshift(blankOption()) if includeBlank
data
)
load: (enterprises) ->
for enterprise in enterprises
@byID[enterprise.id] = enterprise
@pristineByID[enterprise.id] = angular.copy(enterprise)
save: (enterprise) ->
deferred = $q.defer()

View File

@@ -1,23 +1,25 @@
angular.module("admin.lineItems").factory 'LineItems', ($q, LineItemResource) ->
angular.module("admin.resources").factory 'LineItems', ($q, LineItemResource) ->
new class LineItems
lineItemsByID: {}
byID: {}
pristineByID: {}
index: (params={}, callback=null) ->
LineItemResource.index params, (data) =>
@resetData()
for lineItem in data
@lineItemsByID[lineItem.id] = lineItem
@pristineByID[lineItem.id] = angular.copy(lineItem)
@load(data)
(callback || angular.noop)(data)
resetData: ->
@lineItemsByID = {}
@byID = {}
@pristineByID = {}
load: (lineItems) ->
@resetData()
for lineItem in lineItems
@byID[lineItem.id] = lineItem
@pristineByID[lineItem.id] = angular.copy(lineItem)
saveAll: ->
for id, lineItem of @lineItemsByID
for id, lineItem of @byID
lineItem.errors = {} # removes errors when line_item has been returned to original state
@save(lineItem) if !@isSaved(lineItem)
@@ -34,7 +36,7 @@ angular.module("admin.lineItems").factory 'LineItems', ($q, LineItemResource) ->
deferred.promise
allSaved: ->
for id, lineItem of @lineItemsByID
for id, lineItem of @byID
return false unless @isSaved(lineItem)
true
@@ -54,7 +56,7 @@ angular.module("admin.lineItems").factory 'LineItems', ($q, LineItemResource) ->
deferred = $q.defer()
lineItem.$delete({id: lineItem.id, orders: "orders", order_number: lineItem.order.number})
.then( (data) =>
delete @lineItemsByID[lineItem.id]
delete @byID[lineItem.id]
delete @pristineByID[lineItem.id]
(callback || angular.noop)(data)
deferred.resolve(data)

View File

@@ -1,21 +1,24 @@
angular.module("admin.orderCycles").factory 'OrderCycles', ($q, OrderCycleResource, blankOption) ->
angular.module("admin.resources").factory 'OrderCycles', ($q, $injector, OrderCycleResource) ->
new class OrderCycles
orderCyclesByID: {}
all: []
byID: {}
pristineByID: {}
constructor: ->
if $injector.has('orderCycles')
@load($injector.get('orderCycles'))
index: (params={}, callback=null) ->
includeBlank = !!params['includeBlank']
delete params['includeBlank']
OrderCycleResource.index(params, (data) =>
for orderCycle in data
@orderCyclesByID[orderCycle.id] = orderCycle
@pristineByID[orderCycle.id] = angular.copy(orderCycle)
OrderCycleResource.index params, (data) =>
@load(data)
(callback || angular.noop)(data)
data.unshift(blankOption()) if includeBlank
data
)
load: (orderCycles) ->
for orderCycle in orderCycles
@all.push orderCycle
@byID[orderCycle.id] = orderCycle
@pristineByID[orderCycle.id] = angular.copy(orderCycle)
save: (order_cycle) ->
deferred = $q.defer()

View File

@@ -1,16 +1,18 @@
angular.module("admin.orders").factory 'Orders', ($q, OrderResource) ->
angular.module("admin.resources").factory 'Orders', ($q, OrderResource) ->
new class Orders
ordersByID: {}
byID: {}
pristineByID: {}
index: (params={}, callback=null) ->
OrderResource.index params, (data) =>
for order in data
@ordersByID[order.id] = order
@pristineByID[order.id] = angular.copy(order)
@load(data)
(callback || angular.noop)(data)
load: (orders) ->
for order in orders
@byID[order.id] = order
@pristineByID[order.id] = angular.copy(order)
save: (order) ->
deferred = $q.defer()
order.$update({id: order.number})

View File

@@ -0,0 +1,16 @@
angular.module("admin.resources")
.factory "PaymentMethods", ($injector) ->
new class PaymentMethods
paymentMethods: []
byID: {}
pristineByID: {}
constructor: ->
if $injector.has('paymentMethods')
@load($injector.get('paymentMethods'))
load: (paymentMethods) ->
for paymentMethod in paymentMethods
@paymentMethods.push paymentMethod
@byID[paymentMethod.id] = paymentMethod
@pristineByID[paymentMethod.id] = angular.copy(paymentMethod)

View File

@@ -0,0 +1,16 @@
angular.module("admin.resources")
.factory "ShippingMethods", ($injector) ->
new class ShippingMethods
shippingMethods: []
byID: {}
pristineByID: {}
constructor: ->
if $injector.has('shippingMethods')
@load($injector.get('shippingMethods'))
load: (shippingMethods) ->
for shippingMethod in shippingMethods
@shippingMethods.push shippingMethod
@byID[shippingMethod.id] = shippingMethod
@pristineByID[shippingMethod.id] = angular.copy(shippingMethod)

View File

@@ -1,3 +1,3 @@
angular.module("admin.shippingMethods").controller "shippingMethodsCtrl", ($scope, ShippingMethods) ->
$scope.findShippingMethodByID = (id) ->
$scope.ShippingMethod = ShippingMethods.findByID(id)
$scope.ShippingMethod = ShippingMethods.byID[id]

View File

@@ -1,8 +0,0 @@
angular.module("admin.shippingMethods")
.factory "ShippingMethods", (shippingMethods) ->
new class ShippingMethods
shippingMethods: shippingMethods
findByID: (id) ->
for shippingMethod in @shippingMethods
return shippingMethod if shippingMethod.id is id

View File

@@ -1,19 +1,20 @@
angular.module("admin.taxons").factory "Taxons", (taxons, $filter) ->
new class Taxons
taxons: taxons
taxonsByID: {}
all: []
byID: {}
constructor: ->
for taxon in @taxons
@taxonsByID[taxon.id] = taxon
for taxon in taxons
@all.push taxon
@byID[taxon.id] = taxon
# For finding a single Taxon
findByID: (id) ->
@taxonsByID[id]
@byID[id]
# For finding multiple Taxons represented by comma delimited string
findByIDs: (ids) ->
@taxonsByID[taxon_id] for taxon_id in ids.split(",") when @taxonsByID[taxon_id]
@byID[taxon_id] for taxon_id in ids.split(",") when @byID[taxon_id]
findByTerm: (term) ->
$filter('filter')(@taxons, term)
$filter('filter')(@all, term)

View File

@@ -30,8 +30,16 @@ show_flash_error = function(message) {
}
$(document).ready(function(){
$('a.close').click(function(event){
event.preventDefault();
$(this).parent().slideUp(250);
});
$('a.close').click(function(event){
event.preventDefault();
$(this).parent().slideUp(250);
});
// Spree locates hidden with prev(), which with our current version of jQuery
// does not locate the hidden field, resulting in the delete failing. This
// handler updates the hidden field, fixing the problem.
$('body').on('click', 'a.remove_fields', function() {
$(this).next("input[type=hidden]").val("1");
return false;
});
});

View File

@@ -1,2 +0,0 @@
angular.module("admin.utils").value "blankOption", ->
{ id: "0", name: "All" }

View File

@@ -1,4 +1,4 @@
Darkswarm.controller "ShoppingTabsCtrl", ($scope, $controller, Navigation) ->
Darkswarm.controller "ShoppingTabsCtrl", ($scope, $controller, Navigation, $location) ->
angular.extend this, $controller('TabsCtrl', {$scope: $scope})
$scope.tabs =
@@ -6,3 +6,7 @@ Darkswarm.controller "ShoppingTabsCtrl", ($scope, $controller, Navigation) ->
producers: { active: Navigation.isActive('/producers') }
contact: { active: Navigation.isActive('/contact') }
groups: { active: Navigation.isActive('/groups') }
$scope.$on '$locationChangeStart', (event, url) ->
tab = $location.path().replace(/^\//, '')
$scope.tabs[tab]?.active = true

View File

@@ -15,7 +15,7 @@ Darkswarm.directive 'mapOsmTiles', ($timeout) ->
if x < 0
x = tilesPerGlobe + x
# Wrap y (latitude) in a like manner if you want to enable vertical infinite scroll
'http://tile.openstreetmap.org/' + zoom + '/' + x + '/' + coord.y + '.png'
'https://a.tile.openstreetmap.org/' + zoom + '/' + x + '/' + coord.y + '.png'
tileSize: new google.maps.Size(256, 256)
name: 'OpenStreetMap'
maxZoom: 18

View File

@@ -4,5 +4,5 @@ Darkswarm.filter 'products', (Matcher) ->
text ?= ""
return products if text == ""
products.filter (product) =>
propertiesToMatch = [product.name, product.supplier.name, product.primary_taxon.name]
propertiesToMatch = [product.name, product.variant_names, product.supplier.name, product.primary_taxon.name]
Matcher.match propertiesToMatch, text

View File

@@ -1,13 +1,17 @@
Darkswarm.filter 'properties', ->
# Filter anything that responds to object.supplied_properties
(objects, ids) ->
(objects, ids, source) ->
objects ||= []
ids ?= []
source ||= 'properties'
return [] unless source in ['properties', 'supplied_properties', 'distributed_properties']
if ids.length == 0
# No properties selected, pass all objects through.
objects
else
objects.filter (obj) ->
properties = obj.supplied_properties || obj.properties
properties = obj[source]
properties.some (property) ->
property.id in ids

View File

@@ -1,12 +1,12 @@
Darkswarm.filter 'propertiesOf', ->
(objects) ->
(objects, source) ->
source ||= 'properties'
return {} unless source in ['properties', 'supplied_properties', 'distributed_properties']
properties = {}
for object in objects
if object.supplied_properties?
for property in object.supplied_properties
properties[property.id] = property
else
for property in object.properties
if object[source]?
for property in object[source]
properties[property.id] = property
properties

View File

@@ -25,7 +25,6 @@ Darkswarm.factory 'Products', ($resource, Enterprises, Dereferencer, Taxons, Pro
prices = (v.price for v in product.variants)
product.price = Math.min.apply(null, prices)
product.hasVariants = product.variants?.length > 0
product.primaryImage = product.images[0]?.small_url if product.images
product.primaryImageOrMissing = product.primaryImage || "/assets/noimage/small.png"
product.largeImage = product.images[0]?.large_url if product.images
@@ -45,5 +44,7 @@ Darkswarm.factory 'Products', ($resource, Enterprises, Dereferencer, Taxons, Pro
if product.variants
product.variants = for variant in product.variants
variant = Variants.register variant
if product.name != variant.name_to_display
product.variant_names += variant.name_to_display
variant.product = product
variant

View File

@@ -14,9 +14,6 @@
.exchange-product{'ng-repeat' => 'product in supplied_products | filter:productSuppliedToOrderCycle | visibleProducts:exchange:order_cycle.visible_variants_for_outgoing_exchanges | orderBy:"name"' }
.exchange-product-details
%label
-# MASTER_VARIANTS: No longer required
-# = check_box_tag 'order_cycle_outgoing_exchange_{{ $parent.$index }}_variants_{{ product.master_id }}', 1, 1, 'ng-hide' => 'product.variants.length > 0', 'ng-model' => 'exchange.variants[product.master_id]', 'id' => 'order_cycle_outgoing_exchange_{{ $parent.$index }}_variants_{{ product.master_id }}',
-# 'ng-disabled' => 'product.variants.length > 0 || !order_cycle.editable_variants_for_outgoing_exchanges.hasOwnProperty(exchange.enterprise_id) || order_cycle.editable_variants_for_outgoing_exchanges[exchange.enterprise_id].indexOf(product.master_id) < 0'
%img{'ng-src' => '{{ product.image_url }}'}
.name {{ product.name }}
.supplier {{ product.supplier_name }}

View File

@@ -1,15 +0,0 @@
.alert
border: 3px solid #919191
border-radius: 6px
margin-bottom: 20px
color: #919191
padding: 5px 10px
h6
color: #919191
.message
font-weight: bold
&:hover
border-color: #DA5354
color: #DA5354
h6
color: #DA5354

View File

@@ -0,0 +1,24 @@
.alert {
border: 3px solid #919191;
border-radius: 6px;
margin-bottom: 20px;
color: #919191;
padding: 5px 10px;
h6 {
color: #919191;
}
.message {
font-weight: bold;
}
&:hover {
border-color: #DA5354;
color: #DA5354;
h6 {
color: #DA5354;
}
}
}

View File

@@ -1,10 +1,14 @@
@-webkit-keyframes slideInUp
0%
-webkit-transform: translateY(20px)
transform: translateY(20px)
100%
-webkit-transform: translateY(0)
transform: translateY(0)
@-webkit-keyframes slideInUp {
0% {
-webkit-transform: translateY(20px);
transform: translateY(20px);
}
100% {
-webkit-transform: translateY(0);
transform: translateY(0);
}
}
// @-webkit-keyframes slideOutDown
// 0%
@@ -14,13 +18,14 @@
// -webkit-transform: translateY(20px)
// transform: translateY(20px)
.animate-show
-webkit-animation-name: slideInUp
animation-name: slideInUp
-webkit-animation-duration: 0.3s
animation-duration: 0.3s
-webkit-animation-fill-mode: both
animation-fill-mode: both
.animate-show {
-webkit-animation-name: slideInUp;
animation-name: slideInUp;
-webkit-animation-duration: 0.3s;
animation-duration: 0.3s;
-webkit-animation-fill-mode: both;
animation-fill-mode: both;
// line-height: 20px
// opacity: 1
@@ -33,3 +38,4 @@
// animation-fill-mode: both
// // line-height: 20px
// // opacity: 1
}

View File

@@ -1,72 +0,0 @@
@import ../darkswarm/branding
@import ../darkswarm/mixins
#change_type
section
margin: 2em 0 0 0
&, & *
color: #5498da
.description
background-color: #eff5fc
margin-top: -2em
padding: 4em 2em 2em 1em
@media all and (max-width: 786px)
margin-bottom: 2em
.admin-cta
border: 1px solid #5498da
@include border-radius(3px)
text-align: center
padding: 1em
.error
display: block
color: #f57e80
border: 1px solid #f57e80
background-color: #fde6e7
@include border-radius(3px)
margin-bottom: 1em
padding: 0.5em
a.selector
position: relative
border: 2px solid black
text-align: center
width: 100%
cursor: pointer
&, & *
color: white
&:after, &:before
top: 100%
left: 50%
border: solid transparent
content: " "
height: 0
width: 0
position: absolute
pointer-events: none
&:after
border-color: rgba(136, 183, 213, 0)
border-top-color: #5498da
border-width: 12px
margin-left: -12px
&:hover
&:after
border-top-color: #9fc820
&:before
border-color: rgba(84, 152, 218, 0)
border-top-color: black
border-width: 15px
margin-left: -15px
.bottom
background: repeating-linear-gradient(60deg, rgba(84, 152, 218, 0), rgba(84, 152, 218, 0) 5px, rgba(255, 255, 255, 0.25) 5px, rgba(255, 255, 255, 0.25) 10px)
margin-top: 1em
margin-left: -15px
margin-right: -15px
padding: 5px
text-transform: uppercase
&.selected
background-color: black
&:after, &:hover &:after
border-top-color: black

View File

@@ -0,0 +1,103 @@
@import "../darkswarm/branding";
@import "../darkswarm/mixins";
#change_type {
section {
margin: 2em 0 0 0;
&, & * {
color: #5498da;
}
}
.description {
background-color: #eff5fc;
margin-top: -2em;
padding: 4em 2em 2em 1em;
@media all and (max-width: 786px) {
margin-bottom: 2em;
}
}
.admin-cta {
border: 1px solid #5498da;
@include border-radius(3px);
text-align: center;
padding: 1em;
}
.error {
display: block;
color: #f57e80;
border: 1px solid #f57e80;
background-color: #fde6e7;
@include border-radius(3px);
margin-bottom: 1em;
padding: 0.5em;
}
a.selector {
position: relative;
border: 2px solid black;
text-align: center;
width: 100%;
cursor: pointer;
&, & * {
color: white;
}
&:after, &:before {
top: 100%;
left: 50%;
border: solid transparent;
content: " ";
height: 0;
width: 0;
position: absolute;
pointer-events: none;
}
&:after {
border-color: rgba(136, 183, 213, 0);
border-top-color: #5498da;
border-width: 12px;
margin-left: -12px;
}
&:hover {
&:after {
border-top-color: #9fc820;
}
}
&:before {
border-color: rgba(84, 152, 218, 0);
border-top-color: black;
border-width: 15px;
margin-left: -15px;
}
.bottom {
background: repeating-linear-gradient(60deg, rgba(84, 152, 218, 0), rgba(84, 152, 218, 0) 5px, rgba(255, 255, 255, 0.25) 5px, rgba(255, 255, 255, 0.25) 10px);
margin-top: 1em;
margin-left: -15px;
margin-right: -15px;
padding: 5px;
text-transform: uppercase;
}
&.selected {
background-color: black;
&:after, &:hover &:after {
border-top-color: black;
}
}
}
}

View File

@@ -1,14 +0,0 @@
#save-bar
position: fixed
width: 100%
z-index: 100
bottom: 0px
left: 0
padding: 8px 8px
font-weight: bold
background-color: #eff5fc
color: #5498da
h5
color: #5498da
input
margin-right: 5px

View File

@@ -0,0 +1,19 @@
#save-bar {
position: fixed;
width: 100%;
z-index: 100;
bottom: 0px;
left: 0;
padding: 8px 8px;
font-weight: bold;
background-color: #eff5fc;
color: #5498da;
h5 {
color: #5498da;
}
input {
margin-right: 5px;
}
}

View File

@@ -1,9 +0,0 @@
#trial_progress_bar
position: fixed
left: 0px
bottom: 0px
width: 100vw
padding: 8px 10px
font-weight: bold
background-color: #5498da
color: white

View File

@@ -0,0 +1,10 @@
#trial_progress_bar {
position: fixed;
left: 0px;
bottom: 0px;
width: 100vw;
padding: 8px 10px;
font-weight: bold;
background-color: #5498da;
color: white;
}

View File

@@ -1,33 +0,0 @@
@import ../darkswarm/mixins
.alert-box
position: relative
display: block
background-color: #eff5dc
border: 1px solid #9fc820
color: #666
margin-top: 1em
margin-bottom: 1em
@include border-radius(3px)
transition: opacity 300ms ease-out
padding: 0.77778em 1.33333em 0.77778em 0.77778em
a.close
position: absolute
right: 5px
top: 0px
font-size: 1.5em
.dashboard_item.single-ent
.header
padding: 0.77778em 1.33333em 0.77778em 0.77778em
height: auto !important
.list
.button.bottom
width: 100%
.button.big
width: 100%
font-size: 1rem
@include border-radius(25px)
padding: 15px

View File

@@ -0,0 +1,45 @@
@import "../darkswarm/mixins";
.alert-box {
position: relative;
display: block;
background-color: #eff5dc;
border: 1px solid #9fc820;
color: #666;
margin-top: 1em;
margin-bottom: 1em;
@include border-radius(3px);
transition: opacity 300ms ease-out;
padding: 0.77778em 1.33333em 0.77778em 0.77778em;
a.close {
position: absolute;
right: 5px;
top: 0px;
font-size: 1.5em;
}
}
.dashboard_item.single-ent {
.header {
padding: 0.77778em 1.33333em 0.77778em 0.77778em;
height: auto !important;
}
.list {
.button.bottom {
width: 100%;
}
}
}
.button.big {
width: 100%;
font-size: 1rem;
@include border-radius(25px);
padding: 15px;
}

View File

@@ -1,159 +0,0 @@
div.dashboard_item
margin-bottom: 30px
.centered
text-align: center
.text-icon
margin-top: 8px
display: block
font-size: 16px
font-weight: bold
color: #fff
padding: 0px 6px
border-radius: 10px
&.green
background-color: #9fc820
&.red
background-color: #DA5354
&.orange
background-color: #DA7F52
div.header
height: 50px
border-radius: 6px 6px 0px 0px
border: 1px solid #5498da
position: relative
a[ofn-with-tip]
position: absolute
right: 5px
bottom: 5px
&.red
border-color: #DA5354
border-width: 3px
h3
color: #DA5354
&.orange
border-color: #DA7F52
border-width: 3px
h3
color: #DA7F52
h3.alpha
height: 100%
padding: 10px 5px 0px 3%
a
border-radius: 0px 4px 0px 0px
margin-left: 8px
height: 100%
padding: 15px 2px 0px 2px
.tabs
height: 30px
border: solid #5498da
border-width: 0px 0px 1px 0px
margin-top: 3px
div.dashboard_tab
cursor: pointer
height: 30px
color: #fff
background-color: #5498da
padding: 5px 5px 0px 5px
text-align: center
font-weight: bold
border: solid #5498da
border-width: 1px 1px 0px 1px
&:hover
background-color: #9fc820
&.selected
color: #5498da
background-color: #fff
.list
max-height: 250px
overflow-y: auto
overflow-x: hidden
.list-title
border: solid #5498da
border-width: 0px 1px 0px 1px
span
font-size: 105%
padding: 10px 0px
font-weight: bold
span.alpha
padding: 10px 2px 10px 5%
.list-item
border: solid #5498da
border-width: 0px 1px 0px 1px
height: 38px
span.alpha
font-weight: bold
margin-left: -3px
padding: 10px 2px 0px 5%
span.omega
padding-right: 13px
margin-right: -3px
text-align: right
.icon-arrow-right
padding-top: 6px
font-size: 20px
.icon-warning-sign
color: #DA7F52
font-size: 30px
.icon-remove-sign
color: #DA5354
font-size: 30px
.icon-ok-sign
color: #9fc820
font-size: 30px
&.orange
color: #DA7F52
border: solid #DA7F52
&.red
color: #DA5354
border: solid #DA5354
&.orange, &.red
border-width: 0px 3px 0px 3px
&.even
background-color: #fff
&.odd
background-color: #eff5fc
&.even, &.odd
&:hover
color: #ffffff
background-color: #9fc820
.icon-arrow-right
color: #fff
.icon-remove-sign
color: #fff
.icon-warning-sign
color: #fff
.icon-ok-sign
color: #fff
.text-icon
&.green
color: #9fc820
background-color: #fff
a.button
color: #fff
font-size: 110%
font-weight: bold
text-align: center
&.orange
background-color: #DA7F52
&.blue
background-color: #5498da
&.red
background-color: #DA5354
&:hover
background-color: #9fc820
&.bottom
border-radius: 0px 0px 6px 6px
padding: 15px 15px

View File

@@ -0,0 +1,239 @@
div.dashboard_item {
margin-bottom: 30px;
.centered {
text-align: center;
}
.text-icon {
margin-top: 8px;
display: block;
font-size: 16px;
font-weight: bold;
color: #fff;
padding: 0px 6px;
border-radius: 10px;
&.green {
background-color: #9fc820;
}
&.red {
background-color: #DA5354;
}
&.orange {
background-color: #DA7F52;
}
}
div.header {
height: 50px;
border-radius: 6px 6px 0px 0px;
border: 1px solid #5498da;
position: relative;
a[ofn-with-tip] {
position: absolute;
right: 5px;
bottom: 5px;
}
&.red {
border-color: #DA5354;
border-width: 3px;
h3 {
color: #DA5354;
}
}
&.orange {
border-color: #DA7F52;
border-width: 3px;
h3 {
color: #DA7F52;
}
}
h3.alpha {
height: 100%;
padding: 10px 5px 0px 3%;
}
a {
border-radius: 0px 4px 0px 0px;
margin-left: 8px;
height: 100%;
padding: 15px 2px 0px 2px;
}
}
.tabs {
height: 30px;
border: solid #5498da;
border-width: 0px 0px 1px 0px;
margin-top: 3px;
div.dashboard_tab {
cursor: pointer;
height: 30px;
color: #fff;
background-color: #5498da;
padding: 5px 5px 0px 5px;
text-align: center;
font-weight: bold;
border: solid #5498da;
border-width: 1px 1px 0px 1px;
&:hover {
background-color: #9fc820;
}
&.selected {
color: #5498da;
background-color: #fff;
}
}
}
.list {
max-height: 250px;
overflow-y: auto;
overflow-x: hidden;
}
.list-title {
border: solid #5498da;
border-width: 0px 1px 0px 1px;
span {
font-size: 105%;
padding: 10px 0px;
font-weight: bold;
}
span.alpha {
padding: 10px 2px 10px 5%;
}
}
.list-item {
border: solid #5498da;
border-width: 0px 1px 0px 1px;
height: 38px;
span.alpha {
font-weight: bold;
margin-left: -3px;
padding: 10px 2px 0px 5%;
}
span.omega {
padding-right: 13px;
margin-right: -3px;
text-align: right;
}
.icon-arrow-right {
padding-top: 6px;
font-size: 20px;
}
.icon-warning-sign {
color: #DA7F52;
font-size: 30px;
}
.icon-remove-sign {
color: #DA5354;
font-size: 30px;
}
.icon-ok-sign {
color: #9fc820;
font-size: 30px;
}
&.orange {
color: #DA7F52;
border: solid #DA7F52;
}
&.red {
color: #DA5354;
border: solid #DA5354;
}
&.orange, &.red {
border-width: 0px 3px 0px 3px;
}
&.even {
background-color: #fff;
}
&.odd {
background-color: #eff5fc;
}
&.even, &.odd {
&:hover {
color: #ffffff;
background-color: #9fc820;
.icon-arrow-right {
color: #fff;
}
.icon-remove-sign {
color: #fff;
}
.icon-warning-sign {
color: #fff;
}
.icon-ok-sign {
color: #fff;
}
.text-icon {
&.green {
color: #9fc820;
background-color: #fff;
}
}
}
}
}
a.button {
color: #fff;
font-size: 110%;
font-weight: bold;
text-align: center;
&.orange {
background-color: #DA7F52;
}
&.blue {
background-color: #5498da;
}
&.red {
background-color: #DA5354;
}
&:hover {
background-color: #9fc820;
}
&.bottom {
border-radius: 0px 0px 6px 6px;
padding: 15px 15px;
}
}
}

View File

@@ -203,6 +203,10 @@ text-angular {
.ta-scroll-window > .ta-bind {
max-height: 400px;
min-height: 100px;
outline: none;
p {
margin-bottom: 1.5rem;
}
}
.ta-scroll-window.form-control {
min-height: 100px;

View File

@@ -1,23 +0,0 @@
// TODO: Provide -moz- and -o- directives
@-webkit-keyframes alert-flash
0%
background-color: #f9f1ae
100%
background-color: #fff
table#enterprise-relationships, table#enterprise-roles
ul
list-style-type: none
th.actions, td.actions
width: 16%
.errors
color: #f00
tr.ng-enter
-webkit-animation-name: alert-flash
-webkit-animation-duration: 1200ms
-webkit-animation-iteration-count: 1
-webkit-animation-timing-function: ease-in-out

View File

@@ -0,0 +1,31 @@
// TODO: Provide -moz- and -o- directives
@-webkit-keyframes alert-flash {
0% {
background-color: #f9f1ae;
}
100% {
background-color: #fff;
}
}
table#enterprise-relationships, table#enterprise-roles {
ul {
list-style-type: none;
}
th.actions, td.actions {
width: 16%;
.errors {
color: #f00;
}
}
tr.ng-enter {
-webkit-animation-name: alert-flash;
-webkit-animation-duration: 1200ms;
-webkit-animation-iteration-count: 1;
-webkit-animation-timing-function: ease-in-out;
}
}

View File

@@ -1,18 +0,0 @@
.side_menu
border-right: 2px solid #f6f6f6
border-top: 2px solid #f6f6f6
.menu_item
display: block
padding: 8px 15px
font-size: 120%
cursor: pointer
text-transform: uppercase
&:nth-child(odd)
background-color: #ebf3fb
&:nth-child(even)
background-color: #ffffff
&:hover
background-color: #eaf0f5
&.selected
background-color: #5498da
color: #ffffff

View File

@@ -0,0 +1,29 @@
.side_menu {
border-right: 2px solid #f6f6f6;
border-top: 2px solid #f6f6f6;
.menu_item {
display: block;
padding: 8px 15px;
font-size: 120%;
cursor: pointer;
text-transform: uppercase;
&:nth-child(odd) {
background-color: #ebf3fb;
}
&:nth-child(even) {
background-color: #ffffff;
}
&:hover {
background-color: #eaf0f5;
}
&.selected {
background-color: #5498da;
color: #ffffff;
}
}
}

View File

@@ -1,77 +0,0 @@
div.sidebar_item
margin-bottom: 30px
.centered
text-align: center
div.header
font-size: 105%
color: #fff
padding: 10px 0px
position: relative
&.blue
background-color: #5498da
&.red
background-color: #DA5354
.list
max-height: 400px
overflow-y: auto
overflow-x: hidden
&.red
color: #DA5354
.list-item
border: solid #DA5354
border-width: 0px 3px 0px 3px
a.alpha, span.alpha
margin-left: -3px
&.odd
background-color: #fcf6ef
&:hover
background-color: #9fc820
a
color: #DA5354
.list-item
.icon-arrow-right
padding-top: 6px
font-size: 20px
border: solid #5498da
border-width: 0px 1px 0px 1px
a.alpha, span.alpha
font-weight: bold
margin-left: -1px
padding: 10px 2px 10px 5%
overflow: hidden
text-overflow: ellipsis
span.omega
padding: 8px 18px 8px 0px
margin-right: -3px
text-align: right
.icon-remove-sign
color: #DA5354
font-size: 18px
&.even
background-color: #fff
&.odd
background-color: #eff5fc
&.even, &.odd
&:hover
color: #ffffff
background-color: #9fc820
a
color: #ffffff
a.button
color: #fff
padding: 15px 15px
font-weight: bold
text-align: center
border-radius: 0px
&.blue
background-color: #5498da
&.red
background-color: #DA5354
&:hover
background-color: #9fc820

View File

@@ -0,0 +1,121 @@
div.sidebar_item {
margin-bottom: 30px;
.centered {
text-align: center;
}
div.header {
font-size: 105%;
color: #fff;
padding: 10px 0px;
position: relative;
&.blue {
background-color: #5498da;
}
&.red {
background-color: #DA5354;
}
}
.list {
max-height: 400px;
overflow-y: auto;
overflow-x: hidden;
&.red {
color: #DA5354;
.list-item {
border: solid #DA5354;
border-width: 0px 3px 0px 3px;
a.alpha, span.alpha {
margin-left: -3px;
}
&.odd {
background-color: #fcf6ef;
&:hover {
background-color: #9fc820;
}
}
}
a {
color: #DA5354;
}
}
}
.list-item {
.icon-arrow-right {
padding-top: 6px;
font-size: 20px;
}
border: solid #5498da;
border-width: 0px 1px 0px 1px;
a.alpha, span.alpha {
font-weight: bold;
margin-left: -1px;
padding: 10px 2px 10px 5%;
overflow: hidden;
text-overflow: ellipsis;
}
span.omega {
padding: 8px 18px 8px 0px;
margin-right: -3px;
text-align: right;
}
.icon-remove-sign {
color: #DA5354;
font-size: 18px;
}
&.even {
background-color: #fff;
}
&.odd {
background-color: #eff5fc;
}
&.even, &.odd {
&:hover {
color: #ffffff;
background-color: #9fc820;
a {
color: #ffffff;
}
}
}
}
a.button {
color: #fff;
padding: 15px 15px;
font-weight: bold;
text-align: center;
border-radius: 0px;
&.blue {
background-color: #5498da;
}
&.red {
background-color: #DA5354;
}
&:hover {
background-color: #9fc820;
}
}
}

View File

@@ -1,6 +0,0 @@
.variant-override-unit
float: right
font-style: italic
button.hide:hover
background-color: #DA5354

View File

@@ -0,0 +1,8 @@
.variant-override-unit {
float: right;
font-style: italic;
}
button.hide:hover {
background-color: #DA5354;
}

View File

@@ -1,16 +0,0 @@
@import ../darkswarm/mixins
#welcome_page
header
text-align: center
padding: 4em 2em
@include fullbg
background-image: url('/assets/home/tagline-bg.jpg')
background-repeat: no-repeat
background-position: center center
margin-bottom: 2em
p
text-transform: uppercase
font-weight: 300
&, & *
color: white

View File

@@ -0,0 +1,24 @@
@import "../darkswarm/mixins";
#welcome_page {
header {
text-align: center;
padding: 4em 2em;
@include fullbg;
background-image: url("/assets/home/tagline-bg.jpg");
background-repeat: no-repeat;
background-position: center center;
margin-bottom: 2em;
p {
text-transform: uppercase;
font-weight: 300;
}
&, & * {
color: white;
}
}
}

View File

@@ -1,125 +0,0 @@
@import mixins
@import branding
@import big-input
@import animations
@mixin filter-selector($base-clr, $border-clr, $hover-clr)
&.inline-block, ul.inline-block
display: inline-block
li
display: inline-block
@include border-radius(0)
padding: 0
margin: 0 0 0.25rem 0.25rem
&:hover, &:focus
background: transparent
&.active
box-shadow: none
a, a.button
display: block
padding-top: 0.5rem
@include border-radius(0.5em)
border: 1px solid $border-clr
padding: 0.5em 0.625em
font-size: 0.875em
color: $base-clr
font-size: 0.75em
background: white
margin: 0
i
padding-left: 0.25rem
render-svg
&, & svg
width: 1rem
height: 1rem
float: left
padding-right: 0.25rem
path
@include csstrans
fill: $base-clr
&:hover, &:focus
border-color: $hover-clr
color: $hover-clr
render-svg
svg
path
fill: $hover-clr
&.disabled
opacity: 0.6
&:hover, &:focus
border-color: $border-clr
color: $base-clr
render-svg
svg
path
fill: $base-clr
&.active, &.active:hover, &.active:focus
border: 1px solid $base-clr
background: $base-clr
color: white
render-svg
svg
path
fill: white
// Alert when search, taxon, filter is triggered
.alert-box.search-alert
background-color: $clr-yellow-light
border-color: $clr-yellow-light
color: #777
font-size: 0.75rem
padding: 0.5rem 0.75rem
span.applied-properties
color: #333
span.applied-taxons
color: $clr-blue
span.applied-search
color: $clr-brick
span.filter-label
opacity: 0.75
// singleLineSelectors directive provides a drop-down that can overlap
// content. Ensure that the dropdown appears above the content.
.filter-row
position: relative
z-index: 100
.filter-shopfront
&.taxon-selectors, &.property-selectors
background: transparent
single-line-selectors
overflow-x: hidden
white-space: nowrap
.f-dropdown
overflow-x: auto
white-space: normal
ul
margin: 0
display: inline-block
ul, ul li
list-style: none
// Shopfront taxons
&.taxon-selectors
@include filter-selector($clr-blue, $clr-blue-light, $clr-blue-bright)
// Shopfront properties
&.property-selectors
@include filter-selector(#666, #ccc, #777)

View File

@@ -0,0 +1,173 @@
@import "mixins";
@import "branding";
@import "big-input";
@import "animations";
@mixin filter-selector($base-clr, $border-clr, $hover-clr) {
&.inline-block, ul.inline-block {
display: inline-block;
}
li {
display: inline-block;
@include border-radius(0);
padding: 0;
margin: 0 0 0.25rem 0.25rem;
&:hover, &:focus {
background: transparent;
}
&.active {
box-shadow: none;
}
a, a.button {
display: block;
padding-top: 0.5rem;
@include border-radius(0.5em);
border: 1px solid $border-clr;
padding: 0.5em 0.625em;
font-size: 0.875em;
color: $base-clr;
font-size: 0.75em;
background: white;
margin: 0;
i {
padding-left: 0.25rem;
}
render-svg {
&, & svg {
width: 1rem;
height: 1rem;
float: left;
padding-right: 0.25rem;
path {
@include csstrans;
fill: $base-clr;
}
}
}
&:hover, &:focus {
border-color: $hover-clr;
color: $hover-clr;
render-svg {
svg {
path {
fill: $hover-clr;
}
}
}
}
&.disabled {
opacity: 0.6;
&:hover, &:focus {
border-color: $border-clr;
color: $base-clr;
render-svg {
svg {
path {
fill: $base-clr;
}
}
}
}
}
&.active, &.active:hover, &.active:focus {
border: 1px solid $base-clr;
background: $base-clr;
color: white;
render-svg {
svg {
path {
fill: white;
}
}
}
}
}
}
}
// Alert when search, taxon, filter is triggered
.alert-box.search-alert {
background-color: $clr-yellow-light;
border-color: $clr-yellow-light;
color: #777;
font-size: 0.75rem;
padding: 0.5rem 0.75rem;
span.applied-properties {
color: #333;
}
span.applied-taxons {
color: $clr-blue;
}
span.applied-search {
color: $clr-brick;
}
span.filter-label {
opacity: 0.75;
}
}
// singleLineSelectors directive provides a drop-down that can overlap
// content. Ensure that the dropdown appears above the content.
.filter-row {
position: relative;
z-index: 90;
}
.filter-shopfront {
&.taxon-selectors, &.property-selectors {
background: transparent;
single-line-selectors {
overflow-x: hidden;
white-space: nowrap;
.f-dropdown {
overflow-x: auto;
white-space: normal;
}
}
ul {
margin: 0;
display: inline-block;
}
ul, ul li {
list-style: none;
}
}
// Shopfront taxons
&.taxon-selectors {
@include filter-selector($clr-blue, $clr-blue-light, $clr-blue-bright);
}
// Shopfront properties
&.property-selectors {
@include filter-selector(#666, #ccc, #777);
}
}

View File

@@ -1,85 +0,0 @@
@import mixins
@import variables
@import branding
@import big-input
.darkswarm
// #search
@include placeholder(rgba(0,0,0,0.4), #777)
input#search
@include medium-input(rgba(0,0,0,0.3), #777, $clr-brick)
// ordering
product
input
@include border-radius(0)
@include csstrans
margin: 0
width: 10rem
display: inline
@include box-shadow(none)
border-color: #b3b3b3
text-align: right
@media all and (max-width: 1024px)
width: 8rem
@media all and (max-width: 768px)
width: 7rem
@media all and (max-width: 640px)
float: left !important
font-size: 0.75rem
padding-left: 0.25rem
padding-right: 0.25rem
@media all and (max-width: 480px)
width: 5.8rem
&:hover
@include box-shadow(none)
border-color: #888
background-color: #fafafa
&:active, &:focus, &.active
@include box-shadow(none)
background-color: #f9f4b9
border-color: #666
// BULK
input.bulk
width: 5rem
@media all and (max-width: 1024px)
width: 4rem
@media all and (max-width: 768px)
width: 3.5rem
@media all and (max-width: 480px)
width: 2.8rem
input.bulk.first
border-right: 0
input.bulk.second
border-left: 0
.bulk-input-container
float: right
@media all and (max-width: 640px)
float: left !important
.bulk-input
float: left

View File

@@ -0,0 +1,102 @@
@import "mixins";
@import "variables";
@import "branding";
@import "big-input";
.darkswarm {
// #search
@include placeholder(rgba(0, 0, 0, 0.4), #777);
input#search {
@include medium-input(rgba(0, 0, 0, 0.3), #777, $clr-brick);
}
// ordering
product {
input {
@include border-radius(0);
@include csstrans;
margin: 0;
width: 10rem;
display: inline;
@include box-shadow(none);
border-color: #b3b3b3;
text-align: right;
@media all and (max-width: 1024px) {
width: 8rem;
}
@media all and (max-width: 768px) {
width: 7rem;
}
@media all and (max-width: 640px) {
float: left !important;
font-size: 0.75rem;
padding-left: 0.25rem;
padding-right: 0.25rem;
}
@media all and (max-width: 480px) {
width: 5.8rem;
}
&:hover {
@include box-shadow(none);
border-color: #888;
background-color: #fafafa;
}
&:active, &:focus, &.active {
@include box-shadow(none);
background-color: #f9f4b9;
border-color: #666;
}
}
// BULK
input.bulk {
width: 5rem;
@media all and (max-width: 1024px) {
width: 4rem;
}
@media all and (max-width: 768px) {
width: 3.5rem;
}
@media all and (max-width: 480px) {
width: 2.8rem;
}
}
input.bulk.first {
border-right: 0;
}
input.bulk.second {
border-left: 0;
}
.bulk-input-container {
float: right;
@media all and (max-width: 640px) {
float: left !important;
}
.bulk-input {
float: left;
}
}
}
}

View File

@@ -1,6 +0,0 @@
.product-header
h1, h2, h3, h4, h5, h6
margin: 0
hr
margin: 0.5em 0

View File

@@ -0,0 +1,9 @@
.product-header {
h1, h2, h3, h4, h5, h6 {
margin: 0;
}
hr {
margin: 0.5em 0;
}
}

View File

@@ -1,112 +0,0 @@
@import mixins
@import branding
// .darkswarm
// product
ordercycle
.joyride-tip-guide
background-color: $clr-brick
.joyride-nub.right
border-color: $clr-brick !important
border-top-color: transparent !important
border-right-color: transparent !important
border-bottom-color: transparent !important
p
margin: 0
font-weight: 700
// Pop over
// Foundation overrides
.joyride-tip-guide.price_breakdown
// JS needs to be tweaked to adjust for left alignment - this is dynamic can't rewrite in CSS
background-color: #999
color: #1f1f1f
margin-left: -8px
@include box-shadow(0 1px 2px 0 rgba(0,0,0,0.7))
.joyride-content-wrapper
padding: 1.125rem 1.25rem 1.5rem
padding: 1rem
margin: 1%
width: 98%
background-color: white
h1, h2, h3, h4, h5, h6
color: #1f1f1f
.joyride-nub.right
top: 38px
border-color: #999 !important
border-top-color: transparent !important
border-right-color: transparent !important
border-bottom-color: transparent !important
.progress
background-color: #13bf85
padding: 0
border: none
color: white
font-size: 0.75rem
font-style: oblique
line-height: 1
height: auto
.right
padding: 0.5rem 0.25rem 0 0
.meter
background-color: #0b8c61
padding: 0.5rem 0.25rem
border-right: 1px solid #539f92
.expanded
ul, li
list-style: none
margin: 0
font-size: 0.875rem
li
background-color: #13bf85
padding: 0 0.25rem
margin-bottom: 2px
color: white
li.cost
background-color: #0b8c61
li:last-child
margin-bottom: 0.75rem
button.graph-button
// z-index: 9999999
border: 1px solid transparent
padding: 0
margin: 0
display: inline
background-color: rgba(255,255,255,0.5)
padding: 4px
@include box-shadow(none)
@include border-radius(999rem)
&:before
@include icon-font
content: '\e639'
color: #999
&:focus
border: 1px solid #e0e0e0
background-color: rgba(255,255,255,1)
&:before
color: #666
&:hover, &:active
background-color: rgba(255,255,255,1)
border: 1px solid transparent
&:before
color: $clr-brick-bright
@media all and (max-width: 768px)
// Hide for small
display: none
button.graph-button.open
border: 1px solid transparent
background-color: $clr-brick-bright
&:before
content: '\e608'
color: white

View File

@@ -0,0 +1,152 @@
@import "mixins";
@import "branding";
// .darkswarm
// product
ordercycle {
.joyride-tip-guide {
background-color: $clr-brick;
.joyride-nub.right {
border-color: $clr-brick !important;
border-top-color: transparent !important;
border-right-color: transparent !important;
border-bottom-color: transparent !important;
}
p {
margin: 0;
font-weight: 700;
}
}
}
// Pop over
// Foundation overrides
.joyride-tip-guide.price_breakdown {
// JS needs to be tweaked to adjust for left alignment - this is dynamic can't rewrite in CSS
background-color: #999;
color: #1f1f1f;
margin-left: -8px;
@include box-shadow(0 1px 2px 0 rgba(0, 0, 0, 0.7));
.joyride-content-wrapper {
padding: 1.125rem 1.25rem 1.5rem;
padding: 1rem;
margin: 1%;
width: 98%;
background-color: white;
}
h1, h2, h3, h4, h5, h6 {
color: #1f1f1f;
}
.joyride-nub.right {
top: 38px;
border-color: #999 !important;
border-top-color: transparent !important;
border-right-color: transparent !important;
border-bottom-color: transparent !important;
}
.progress {
background-color: #13bf85;
padding: 0;
border: none;
color: white;
font-size: 0.75rem;
font-style: oblique;
line-height: 1;
height: auto;
.right {
padding: 0.5rem 0.25rem 0 0;
}
.meter {
background-color: #0b8c61;
padding: 0.5rem 0.25rem;
border-right: 1px solid #539f92;
}
}
.expanded {
ul, li {
list-style: none;
margin: 0;
font-size: 0.875rem;
}
li {
background-color: #13bf85;
padding: 0 0.25rem;
margin-bottom: 2px;
color: white;
}
li.cost {
background-color: #0b8c61;
}
li:last-child {
margin-bottom: 0.75rem;
}
}
}
button.graph-button {
// z-index: 9999999
border: 1px solid transparent;
padding: 0;
margin: 0;
display: inline;
background-color: rgba(255, 255, 255, 0.5);
padding: 4px;
@include box-shadow(none);
@include border-radius(999rem);
&:before {
@include icon-font;
content: "";
color: #999;
}
&:focus {
border: 1px solid #e0e0e0;
background-color: rgba(255, 255, 255, 1);
&:before {
color: #666;
}
}
&:hover, &:active {
background-color: rgba(255, 255, 255, 1);
border: 1px solid transparent;
&:before {
color: $clr-brick-bright;
}
}
@media all and (max-width: 768px) {
// Hide for small
display: none;
}
}
button.graph-button.open {
border: 1px solid transparent;
background-color: $clr-brick-bright;
&:before {
content: "";
color: white;
}
}

View File

@@ -1,123 +0,0 @@
@import branding.css.sass
@import animations.sass
.darkswarm
products
product
// GENERAL LAYOUT
.row
.columns
padding-top: 0em
padding-bottom: 0em
display: table
line-height: 1.1
// outline: 1px solid red
@media all and (max-width: 768px)
font-size: 0.875rem
@media all and (max-width: 640px)
font-size: 0.75rem
.table-cell
display: table-cell
vertical-align: middle
height: 37px
// ROW VARIANTS
.row.variants
margin-left: 0
margin-right: 0
background-color: #ECECEC
&:hover, &:focus, &:active
background-color: $clr-brick-light
&:nth-of-type(even)
background-color: #f9f9f9
&:hover, &:focus, &:active
background-color: $clr-brick-ultra-light
&.out-of-stock
opacity: 0.2
// Variant name
.variant-name
padding-left: 7.9375rem
@media all and (max-width: 768px)
padding-left: 4.9375rem
.variant-name
@media all and (max-width: 640px)
background: #333
color: white
padding-left: 0.9375rem
font-weight: bold
.table-cell
height: 27px
// Variant unit
.variant-unit
padding-left: 0rem
padding-right: 0rem
color: #888
font-size: 0.875rem
overflow: hidden
@media all and (max-width: 768px)
font-size: 0.75rem
// Variant price
.variant-price
padding-left: 0.25rem
padding-right: 0.25rem
@media all and (max-width: 640px)
text-align: right
// Total price
.total-price
padding-left: 0rem
color: $disabled-med
.filled
color: $med-drk-grey
@media all and (max-width: 640px)
background: #777
color: $disabled-med
.filled
color: white
.table-cell
height: 27px
// ROW SUMMARY
.row.summary
margin-left: 0
margin-right: 0
background: #fff
.columns
padding-top: 1em
padding-bottom: 1em
line-height: 1
@media all and (max-width: 768px)
padding-top: 0.65rem
padding-bottom: 0.65rem
.summary-header
padding-left: 7.9375rem
@media all and (max-width: 768px)
padding-left: 4.9375rem
@media all and (max-width: 640px)
padding-left: 0.9375rem
small
font-size: 80%
h3
font-size: 1.5rem
margin: 0
h3 a
color: #222
i
@include csstrans
font-size: 0.6em
&:hover, &:focus, &:active
color: $clr-brick
i
font-size: 0.8em

View File

@@ -0,0 +1,182 @@
@import "branding";
@import "animations";
.darkswarm {
products {
product {
// GENERAL LAYOUT
.row {
.columns {
padding-top: 0em;
padding-bottom: 0em;
display: table;
line-height: 1.1;
// outline: 1px solid red
@media all and (max-width: 768px) {
font-size: 0.875rem;
}
@media all and (max-width: 640px) {
font-size: 0.75rem;
}
}
.table-cell {
display: table-cell;
vertical-align: middle;
height: 37px;
}
}
// ROW VARIANTS
.row.variants {
margin-left: 0;
margin-right: 0;
background-color: #ECECEC;
&:hover, &:focus, &:active {
background-color: $clr-brick-light;
}
&:nth-of-type(even) {
background-color: #f9f9f9;
&:hover, &:focus, &:active {
background-color: $clr-brick-ultra-light;
}
}
&.out-of-stock {
opacity: 0.2;
}
// Variant name
.variant-name {
padding-left: 7.9375rem;
@media all and (max-width: 768px) {
padding-left: 4.9375rem;
}
}
.variant-name {
@media all and (max-width: 640px) {
background: #333;
color: white;
padding-left: 0.9375rem;
font-weight: bold;
.table-cell {
height: 27px;
}
}
}
// Variant unit
.variant-unit {
padding-left: 0rem;
padding-right: 0rem;
color: #888;
font-size: 0.875rem;
overflow: hidden;
@media all and (max-width: 768px) {
font-size: 0.75rem;
}
}
// Variant price
.variant-price {
padding-left: 0.25rem;
padding-right: 0.25rem;
@media all and (max-width: 640px) {
text-align: right;
}
}
// Total price
.total-price {
padding-left: 0rem;
color: $disabled-med;
.filled {
color: $med-drk-grey;
}
@media all and (max-width: 640px) {
background: #777;
color: $disabled-med;
.filled {
color: white;
}
.table-cell {
height: 27px;
}
}
}
}
// ROW SUMMARY
.row.summary {
margin-left: 0;
margin-right: 0;
background: #fff;
.columns {
padding-top: 1em;
padding-bottom: 1em;
line-height: 1;
@media all and (max-width: 768px) {
padding-top: 0.65rem;
padding-bottom: 0.65rem;
}
}
.summary-header {
padding-left: 7.9375rem;
@media all and (max-width: 768px) {
padding-left: 4.9375rem;
}
@media all and (max-width: 640px) {
padding-left: 0.9375rem;
}
small {
font-size: 80%;
}
h3 {
font-size: 1.5rem;
margin: 0;
}
h3 a {
color: #222;
i {
@include csstrans;
font-size: 0.6em;
}
&:hover, &:focus, &:active {
color: $clr-brick;
i {
font-size: 0.8em;
}
}
}
}
}
}
}
}

View File

@@ -1,59 +0,0 @@
@import branding
@import animations.sass
.darkswarm
products
product
.product-thumb
@include csstrans
position: absolute
top: 2px
left: 0px
width: 7rem
height: 7rem
float: left
display: block
z-index: 1
background-color: white
overflow: hidden
i
@include csstrans
transition-delay: 150ms
position: absolute
left: 45%
top: 45%
z-index: 99999
color: white
font-size: 1rem
opacity: 0
img
@include csstrans
opacity: 1
@include transform-scale(scale(1))
&:hover, &:focus, &:active
background-color: $clr-brick
i
left: 32%
top: 30%
font-size: 3rem
opacity: 1
img
opacity: 0.5
@include transform-scale(scale(1.1))
@media all and (max-width: 768px)
top: 2px
width: 4rem
height: 4rem
&:hover, &:focus, &:active
i
left: 30%
top: 30%
font-size: 2rem
@media all and (max-width: 640px)
display: none
width: 0rem
height: 0rem

View File

@@ -0,0 +1,81 @@
@import "branding";
@import "animations";
.darkswarm {
products {
product {
.product-thumb {
@include csstrans;
position: absolute;
top: 2px;
left: 0px;
width: 7rem;
height: 7rem;
float: left;
display: block;
z-index: 1;
background-color: white;
overflow: hidden;
i {
@include csstrans;
transition-delay: 150ms;
position: absolute;
left: 45%;
top: 45%;
z-index: 99999;
color: white;
font-size: 1rem;
opacity: 0;
}
img {
@include csstrans;
opacity: 1;
@include transform-scale(scale(1));
}
&:hover, &:focus, &:active {
background-color: $clr-brick;
i {
left: 32%;
top: 30%;
font-size: 3rem;
opacity: 1;
}
img {
opacity: 0.5;
@include transform-scale(scale(1.1));
}
}
@media all and (max-width: 768px) {
top: 2px;
width: 4rem;
height: 4rem;
&:hover, &:focus, &:active {
i {
left: 30%;
top: 30%;
font-size: 2rem;
}
}
}
@media all and (max-width: 640px) {
display: none;
width: 0rem;
height: 0rem;
}
}
}
}
}

View File

@@ -1,31 +0,0 @@
.darkswarm
products
product
.taxon-flag
background: transparent url("/assets/flag.svg") top center no-repeat
background-size: 34px 39px
min-height: 40px
width: 34px
margin-top: -1.1rem
padding-top: 0.25rem
z-index: 999999
@media all and (max-width: 480px)
background-size: 28px 32px
min-height: 32px
width: 28px
render-svg
svg
width: 24px
height: 24px
path
fill: #999
@media all and (max-width: 768px)
margin-top: -0.85rem
@media all and (max-width: 480px)
render-svg
svg
width: 18px
height: 18px

View File

@@ -0,0 +1,45 @@
.darkswarm {
products {
product {
.taxon-flag {
background: transparent url("/assets/flag.svg") top center no-repeat;
background-size: 34px 39px;
min-height: 40px;
width: 34px;
margin-top: -1.1rem;
padding-top: 0.25rem;
z-index: 999999;
@media all and (max-width: 480px) {
background-size: 28px 32px;
min-height: 32px;
width: 28px;
}
render-svg {
svg {
width: 24px;
height: 24px;
path {
fill: #999;
}
}
}
@media all and (max-width: 768px) {
margin-top: -0.85rem;
}
@media all and (max-width: 480px) {
render-svg {
svg {
width: 18px;
height: 18px;
}
}
}
}
}
}
}

View File

@@ -1,70 +0,0 @@
@import branding
@import mixins
.orders
@include sidepaddingSm
@include panepadding
padding-top: 10px
h3
padding-top: 2em
a
color: $clr-brick
&:hover, &:active, &:focus
color: $clr-brick-med-bright
img
display: block
width: 80px
height: auto
i.ofn-i_059-producer, i.ofn-i_060-producer-reversed
font-size: 3rem
display: inline-block
margin-right: 0.25rem
float: left
color: $clr-turquoise
.credit
color: green
.debit
color: $clr-brick
.invalid
color: $ofn-grey
.credit
color: $ofn-grey
.debit
color: $ofn-grey
.distributor-balance.paid
visibility: hidden
.transaction-group
table
border-radius: 0.5em 0.5em 0 0
tr:nth-of-type(even)
background: transparent // clear previous
tbody.odd
tr
background-color: #f9f9f9
border: none
// Column widths for order table
.order1
width: 20%
.order2
width: 20%
.order3
width: 20%
.order4
width: 10%
.order5
width: 10%
.order6
width: 10%
.order7
width: 10%

View File

@@ -0,0 +1,106 @@
@import "branding";
@import "mixins";
.orders {
@include sidepaddingSm;
@include panepadding;
padding-top: 10px;
h3 {
padding-top: 2em;
}
a {
color: $clr-brick;
&:hover, &:active, &:focus {
color: $clr-brick-med-bright;
}
}
img {
display: block;
width: 80px;
height: auto;
}
i.ofn-i_059-producer, i.ofn-i_060-producer-reversed {
font-size: 3rem;
display: inline-block;
margin-right: 0.25rem;
float: left;
color: $clr-turquoise;
}
.credit {
color: green;
}
.debit {
color: $clr-brick;
}
.invalid {
color: $ofn-grey;
.credit {
color: $ofn-grey;
}
.debit {
color: $ofn-grey;
}
}
.distributor-balance.paid {
visibility: hidden;
}
.transaction-group {}
table {
border-radius: 0.5em 0.5em 0 0;
tr:nth-of-type(even) {
background: transparent;
}
tbody.odd {
tr {
background-color: #f9f9f9;
border: none;
}
}
}
// Column widths for order table
.order1 {
width: 20%;
}
.order2 {
width: 20%;
}
.order3 {
width: 20%;
}
.order4 {
width: 10%;
}
.order5 {
width: 10%;
}
.order6 {
width: 10%;
}
.order7 {
width: 10%;
}
}

View File

@@ -1,114 +0,0 @@
@import branding
@import mixins
@import "compass/css3/user-interface"
.no-results
font-size: 1.875rem
.active_table
margin: 2em 0em
@include user-select(none)
.active_table_row
display: block
cursor: pointer
&:first-child
padding: 1rem 0
.active_table .active_table_node
margin-top: 0.25rem
display: block
border: 0
@media all and (max-width: 640px)
margin-bottom: 1rem
//Generic text link style
a:hover, a:active, a:focus
color: $dark-grey
span
text-decoration: underline
span.margin-top
margin-top: 0.5rem
display: inline-block
// Generic text resize
@media all and (max-width: 640px)
&, & *
font-size: 0.875rem
fat > div label
&, & *
font-size: 0.75rem
// Inherits from active_table
.active_table_row
border: 1px solid transparent
@include border-radius(0.5em)
// Foundation overrides
margin-left: 0
margin-right: 0
&, & > a.row
display: block
.active_table_row.link
border: 0
&.open
// .active_table_row:nth-child(2)
.active_table_row
border-left: 1px solid $disabled-bright
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
[class*="block-grid-"] > li
padding-bottom: 0.25rem !important
label
text-transform: uppercase
font-size: 0.75rem
margin-top: 0.25rem
margin-bottom: 0.25rem
color: #777
p.trans-sentence
text-transform: capitalize
&.closed
&:hover, &:active, &:focus
.active_table_row.closed
border: 1px solid $disabled-bright
&.current
&.closed
&, & *
color: $dark-grey
&.open
.active_table_row:first-child
color: $dark-grey

View File

@@ -0,0 +1,160 @@
@import "branding";
@import "mixins";
@import "compass/css3/user-interface";
.no-results {
font-size: 1.875rem;
}
.active_table {
margin: 2em 0em;
@include user-select(none);
.active_table_row {
display: block;
cursor: pointer;
&:first-child {
padding: 1rem 0;
}
}
}
.active_table .active_table_node {
margin-top: 0.25rem;
display: block;
border: 0;
@media all and (max-width: 640px) {
margin-bottom: 1rem;
}
//Generic text link style
a:hover, a:active, a:focus {
color: $dark-grey;
span {
text-decoration: underline;
}
}
span.margin-top {
margin-top: 0.5rem;
display: inline-block;
}
// Generic text resize
@media all and (max-width: 640px) {
&, & * {
font-size: 0.875rem;
}
fat > div label {
&, & * {
font-size: 0.75rem;
}
}
}
// Inherits from active_table
.active_table_row {
border: 1px solid transparent;
@include border-radius(0.5em);
// Foundation overrides
margin-left: 0;
margin-right: 0;
&, & > a.row {
display: block;
}
}
.active_table_row.link {
border: 0;
}
&.open {
// .active_table_row:nth-child(2)
.active_table_row {
border-left: 1px solid $disabled-bright;
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;
}
[class*="block-grid-"] > li {
padding-bottom: 0.25rem !important;
}
label {
text-transform: uppercase;
font-size: 0.75rem;
margin-top: 0.25rem;
margin-bottom: 0.25rem;
color: #777;
}
}
p.trans-sentence {
text-transform: capitalize;
}
}
&.closed {
&:hover, &:active, &:focus {
.active_table_row.closed {
border: 1px solid $disabled-bright;
}
}
}
&.current {
&.closed {
&, & * {
color: $dark-grey;
}
}
&.open {
.active_table_row:first-child {
color: $dark-grey;
}
}
}
}

View File

@@ -1,117 +0,0 @@
@import mixins
@import branding
@import big-input
@import animations
// Filter-box
.row .row.filter-box
margin-left: 0
margin-right: 0
.row.filter-box:first-child
border: 1px solid $clr-blue-light
@include border-radius(0.25em)
margin-top: 2px
@media all and (max-width: 640px)
margin-bottom: 1em
.row.filter-box.clear-filters
background: transparent
margin-top: 1em
products .filter-box
background: #f7f7f7
.filter-box
background: rgba(245,245,245,0.6)
.tdhead
padding: 0.25rem 0.5rem
margin-top: 0.9rem
color: $clr-blue
border-bottom: 1px solid $clr-blue-light
// OVERRIDES
[class*="block-grid-"]
margin: 0 0 0.5rem 0
[class*="block-grid-"] > li
padding-bottom: 0.5rem !important
li
@include border-radius(12px)
padding-top: 0.5rem
margin-bottom: 0.25rem
&:hover, &:focus
background: rgba(255,255,255,0.25)
li.active
background: white
@include box-shadow(inset 0 1px 3px 0 rgba(143,48,29,0.5))
li.active a
color: $clr-brick
render-svg
svg
path
fill: $clr-brick
&:hover, &:focus
border-color: $clr-brick-bright
li a
@include csstrans
display: table
table-layout: fixed
text-transform: capitalize
overflow: visible
line-height: 1
color: $med-drk-grey
font-size: 0.875rem
span
display: table-cell
vertical-align: middle
text-align: left
i
display: block
font-size: 1.5rem
margin: 0 0.2rem 0 0
&:hover, &:focus
color: $clr-brick-bright
render-svg
svg
path
fill: $clr-brick-bright
&:active, &.active
color: $clr-brick
render-svg
svg
path
fill: $clr-brick
render-svg
display: block
width: 1.5rem
height: 1.5rem
margin: 0 0.2rem 0 0
padding: 0
svg
width: 1.5rem
height: 1.5rem
path
fill: #666
.button.filterbtn
margin-bottom: 0 !important
min-width: 160px
#active-table-search
position: relative
@include placeholder(rgba(0,0,0,0.4), #777)
input[type="text"]
@include big-input(rgba(0,0,0,0.3), #777, $clr-brick)

View File

@@ -0,0 +1,164 @@
@import "mixins";
@import "branding";
@import "big-input";
@import "animations";
// Filter-box
.row .row.filter-box {
margin-left: 0;
margin-right: 0;
}
.row.filter-box:first-child {
border: 1px solid $clr-blue-light;
@include border-radius(0.25em);
margin-top: 2px;
@media all and (max-width: 640px) {
margin-bottom: 1em;
}
}
.row.filter-box.clear-filters {
background: transparent;
margin-top: 1em;
}
products .filter-box {
background: #f7f7f7;
}
.filter-box {
background: rgba(245, 245, 245, 0.6);
.tdhead {
padding: 0.25rem 0.5rem;
margin-top: 0.9rem;
color: $clr-blue;
border-bottom: 1px solid $clr-blue-light;
}
// OVERRIDES
[class*="block-grid-"] {
margin: 0 0 0.5rem 0;
}
[class*="block-grid-"] > li {
padding-bottom: 0.5rem !important;
}
li {
@include border-radius(12px);
padding-top: 0.5rem;
margin-bottom: 0.25rem;
&:hover, &:focus {
background: rgba(255, 255, 255, 0.25);
}
}
li.active {
background: white;
@include box-shadow(inset 0 1px 3px 0 rgba(143, 48, 29, 0.5));
}
li.active a {
color: $clr-brick;
render-svg {
svg {
path {
fill: $clr-brick;
}
}
}
&:hover, &:focus {
border-color: $clr-brick-bright;
}
}
li a {
@include csstrans;
display: table;
table-layout: fixed;
text-transform: capitalize;
overflow: visible;
line-height: 1;
color: $med-drk-grey;
font-size: 0.875rem;
span {
display: table-cell;
vertical-align: middle;
text-align: left;
}
i {
display: block;
font-size: 1.5rem;
margin: 0 0.2rem 0 0;
}
&:hover, &:focus {
color: $clr-brick-bright;
render-svg {
svg {
path {
fill: $clr-brick-bright;
}
}
}
}
&:active, &.active {
color: $clr-brick;
render-svg {
svg {
path {
fill: $clr-brick;
}
}
}
}
render-svg {
display: block;
width: 1.5rem;
height: 1.5rem;
margin: 0 0.2rem 0 0;
padding: 0;
svg {
width: 1.5rem;
height: 1.5rem;
path {
fill: #666;
}
}
}
}
}
.button.filterbtn {
margin-bottom: 0 !important;
min-width: 160px;
}
#active-table-search {
position: relative;
@include placeholder(rgba(0, 0, 0, 0.4), #777);
input[type="text"] {
@include big-input(rgba(0, 0, 0, 0.3), #777, $clr-brick);
}
}

View File

@@ -1,3 +1,4 @@
// https://docs.angularjs.org/api/ng/directive/ngCloak
[ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak
display: none !important
[ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak {
display: none !important;
}

View File

@@ -1,217 +0,0 @@
@import mixins
// ANIMATION FUNCTIONS
//
@-webkit-keyframes slideInDown
0%
opacity: 0
-webkit-transform: translateY(-20px)
transform: translateY(-20px)
100%
-webkit-transform: translateY(0)
transform: translateY(0)
@keyframes slideInDown
0%
opacity: 0
-webkit-transform: translateY(-20px)
-ms-transform: translateY(-20px)
transform: translateY(-20px)
100%
-webkit-transform: translateY(0)
-ms-transform: translateY(0)
transform: translateY(0)
@-webkit-keyframes slideOutUp
0%
-webkit-transform: translateY(0)
transform: translateY(0)
100%
opacity: 0
-webkit-transform: translateY(-20px)
transform: translateY(-20px)
@keyframes slideOutUp
0%
-webkit-transform: translateY(0)
-ms-transform: translateY(0)
transform: translateY(0)
@-webkit-keyframes fadeIn
0%
opacity: 0
100%
opacity: 1
@keyframes fadeIn
0%
opacity: 0
100%
opacity: 1
@-webkit-keyframes spin
0%
-webkit-transform: rotate(0deg)
transform: rotate(0deg)
100%
-webkit-transform: rotate(359deg)
transform: rotate(359deg)
@keyframes spin
0%
-webkit-transform: rotate(0deg)
transform: rotate(0deg)
100%
-webkit-transform: rotate(359deg)
transform: rotate(359deg)
// ANIMATION CLASSES
.fade
opacity: 0
-webkit-transition: opacity .15s linear
transition: opacity .15s linear
.fade.in
opacity: 1
.reveal-modal.fade
-webkit-transition: -webkit-transform .2s ease-out
-moz-transition: -moz-transform .2s ease-out
-o-transition: -o-transform .2s ease-out
transition: transform .2s ease-out
-webkit-transform: translate(0, -25%)
-ms-transform: translate(0, -25%)
transform: translate(0, -25%)
.reveal-modal.in
-webkit-transform: translate(0, 0)
-ms-transform: translate(0, 0)
transform: translate(0, 0)
.reveal-modal-bg.fade
filter: alpha(opacity = 0)
opacity: 0
.reveal-modal-bg.in
filter: alpha(opacity = 50)
opacity: .5
.animate-repeat
&.ng-move, &.ng-enter, &.ng-leave
-webkit-transition: all 300ms linear
transition: all 300ms linear
&.ng-leave
opacity: 1
&.ng-leave-active
opacity: 0
&.ng-enter
opacity: 0
&.ng-enter-active
opacity: 1
product.animate-repeat
&.ng-leave
border-color: rgba(153, 153, 153, 1)
&.ng-leave-active
border-color: rgba(153, 153, 153, 0)
&.ng-enter
border-color: rgba(153, 153, 153, 0)
&.ng-enter-active
border-color: rgba(153, 153, 153, 1)
.animate-show
-webkit-animation-name: slideInDown
animation-name: slideInDown
-webkit-animation-duration: 0.5s
animation-duration: 0.5s
-webkit-animation-fill-mode: both
animation-fill-mode: both
// line-height: 20px
// opacity: 1
.animate-show.ng-hide-add,
.animate-show.ng-hide-remove
// display: block !important
.animate-show.ng-hide
-webkit-animation-name: slideOutUp
animation-name: slideOutUp
-webkit-animation-duration: 0.15s
animation-duration: 0.15s
-webkit-animation-fill-mode: both
animation-fill-mode: both
// line-height: 0
// opacity: 0
// padding: 0 10px
.row.animate-show ~ .row
-webkit-animation-name: fadeIn
animation-name: fadeIn
-webkit-animation-duration: 0.5s
animation-duration: 0.5s
-webkit-animation-fill-mode: both
animation-fill-mode: both
//
.animate-slide
max-height: 500px
opacity: 1 !important
-webkit-transition: all 300ms ease-in-out
-moz-transition: all 300ms ease-in-out
-o-transition: all 300ms ease-in-out
transition: all 300ms ease-in-out
&.ng-hide
overflow: hidden
max-height: 0
opacity: 0 !important
// &.ng-hide-add-active, &.ng-hide-remove-active
&.ng-hide-add, &.ng-hide-remove
/* IMPORTANT: this needs to be here to make it visible during the animation
since the .ng-hide class is already on the element rendering
it as hidden. */
display: block !important
.animate-show
opacity: 1 !important
-webkit-transition: all 300ms ease-in-out
-moz-transition: all 300ms ease-in-out
-o-transition: all 300ms ease-in-out
transition: all 300ms ease-in-out
&.ng-hide
opacity: 0 !important
// &.ng-hide-add-active, &.ng-hide-remove-active
&.ng-hide-add, &.ng-hide-remove
/* IMPORTANT: this needs to be here to make it visible during the animation
since the .ng-hide class is already on the element rendering
it as hidden. */
display: block !important
@mixin csstrans
-webkit-transition: all 300ms ease
-moz-transition: all 300ms ease
-ms-transition: all 300ms ease
-o-transition: all 300ms ease
transition: all 300ms ease
-webkit-transform-style: preserve-3d

View File

@@ -0,0 +1,271 @@
@import "mixins";
// ANIMATION FUNCTIONS
//
@-webkit-keyframes slideInDown {
0% {
opacity: 0;
-webkit-transform: translateY(-20px);
transform: translateY(-20px);
}
100% {
-webkit-transform: translateY(0);
transform: translateY(0);
}
}
@keyframes slideInDown {
0% {
opacity: 0;
-webkit-transform: translateY(-20px);
-ms-transform: translateY(-20px);
transform: translateY(-20px);
}
100% {
-webkit-transform: translateY(0);
-ms-transform: translateY(0);
transform: translateY(0);
}
}
@-webkit-keyframes slideOutUp {
0% {
-webkit-transform: translateY(0);
transform: translateY(0);
}
100% {
opacity: 0;
-webkit-transform: translateY(-20px);
transform: translateY(-20px);
}
}
@keyframes slideOutUp {
0% {
-webkit-transform: translateY(0);
-ms-transform: translateY(0);
transform: translateY(0);
}
}
@-webkit-keyframes fadeIn {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
@keyframes fadeIn {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
@-webkit-keyframes spin {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(359deg);
transform: rotate(359deg);
}
}
@keyframes spin {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(359deg);
transform: rotate(359deg);
}
}
// ANIMATION CLASSES
.fade {
opacity: 0;
-webkit-transition: opacity 0.15s linear;
transition: opacity 0.15s linear;
}
.fade.in {
opacity: 1;
}
.reveal-modal.fade {
-webkit-transition: -webkit-transform 0.2s ease-out;
-moz-transition: -moz-transform 0.2s ease-out;
-o-transition: -o-transform 0.2s ease-out;
transition: transform 0.2s ease-out;
-webkit-transform: translate(0, -25%);
-ms-transform: translate(0, -25%);
transform: translate(0, -25%);
}
.reveal-modal.in {
-webkit-transform: translate(0, 0);
-ms-transform: translate(0, 0);
transform: translate(0, 0);
}
.reveal-modal-bg.fade {
filter: alpha(opacity = 0);
opacity: 0;
}
.reveal-modal-bg.in {
filter: alpha(opacity = 50);
opacity: 0.5;
}
.animate-repeat {
&.ng-move, &.ng-enter, &.ng-leave {
-webkit-transition: all 300ms linear;
transition: all 300ms linear;
}
&.ng-leave {
opacity: 1;
&.ng-leave-active {
opacity: 0;
}
}
&.ng-enter {
opacity: 0;
&.ng-enter-active {
opacity: 1;
}
}
}
product.animate-repeat {
&.ng-leave {
border-color: rgba(153, 153, 153, 1);
&.ng-leave-active {
border-color: rgba(153, 153, 153, 0);
}
}
&.ng-enter {
border-color: rgba(153, 153, 153, 0);
&.ng-enter-active {
border-color: rgba(153, 153, 153, 1);
}
}
}
.animate-show {
-webkit-animation-name: slideInDown;
animation-name: slideInDown;
-webkit-animation-duration: 0.5s;
animation-duration: 0.5s;
-webkit-animation-fill-mode: both;
animation-fill-mode: both;
// line-height: 20px
// opacity: 1
}
.animate-show.ng-hide-add,
.animate-show.ng-hide-remove {
// display: block !important
}
.animate-show.ng-hide {
-webkit-animation-name: slideOutUp;
animation-name: slideOutUp;
-webkit-animation-duration: 0.15s;
animation-duration: 0.15s;
-webkit-animation-fill-mode: both;
animation-fill-mode: both;
// line-height: 0
// opacity: 0
// padding: 0 10px
}
.row.animate-show ~ .row {
-webkit-animation-name: fadeIn;
animation-name: fadeIn;
-webkit-animation-duration: 0.5s;
animation-duration: 0.5s;
-webkit-animation-fill-mode: both;
animation-fill-mode: both;
}
//
.animate-slide {
max-height: 500px;
opacity: 1 !important;
-webkit-transition: all 300ms ease-in-out;
-moz-transition: all 300ms ease-in-out;
-o-transition: all 300ms ease-in-out;
transition: all 300ms ease-in-out;
&.ng-hide {
overflow: hidden;
max-height: 0;
opacity: 0 !important;
}
// &.ng-hide-add-active, &.ng-hide-remove-active
&.ng-hide-add, &.ng-hide-remove {
/* IMPORTANT: this needs to be here to make it visible during the animation
* since the .ng-hide class is already on the element rendering
* it as hidden. */
display: block !important;
}
}
.animate-show {
opacity: 1 !important;
-webkit-transition: all 300ms ease-in-out;
-moz-transition: all 300ms ease-in-out;
-o-transition: all 300ms ease-in-out;
transition: all 300ms ease-in-out;
&.ng-hide {
opacity: 0 !important;
}
// &.ng-hide-add-active, &.ng-hide-remove-active
&.ng-hide-add, &.ng-hide-remove {
/* IMPORTANT: this needs to be here to make it visible during the animation
* since the .ng-hide class is already on the element rendering
* it as hidden. */
display: block !important;
}
}
@mixin csstrans {
-webkit-transition: all 300ms ease;
-moz-transition: all 300ms ease;
-ms-transition: all 300ms ease;
-o-transition: all 300ms ease;
transition: all 300ms ease;
-webkit-transform-style: preserve-3d;
}

View File

@@ -1,93 +0,0 @@
@import typography
@import branding
@import animations
@import mixins
//Big search used in active table search \\
@mixin big-input($input, $inputhvr, $inputactv)
@include headingFont
@include csstrans
@include border-radius(0.5rem)
background: rgba(255,255,255,0.1)
border: 2px solid $input
font-size: 2rem
box-shadow: 0
padding: 0.5rem 1rem
height: auto
width: 100%
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))
border: 2px solid $inputhvr
color: $inputactv
&:active, &:focus, &.active
border: 2px solid $inputactv
color: $inputactv
background: white
background: rgba(255,255,255,0.5)
text-shadow: 0 0 10px #ffffff
padding: 1rem
letter-spacing: 0.02rem
outline: none
@mixin big-input-static
outline: 0
&:active, &:focus, &.active
padding: 0.75rem 1rem 0.35rem 1rem
letter-spacing: 0
@mixin medium-input($input, $inputhvr, $inputactv)
@include headingFont
@include csstrans
@include border-radius(0.5rem)
background: rgba(255,255,255,0.1)
border: 2px solid $input
font-size: 0.875rem
box-shadow: 0
padding: 0.5rem 0.625rem 0.375rem
height: auto
width: 100%
margin-bottom: 0.5rem
box-shadow: none
color: $inputactv
&:hover
@include box-shadow(0 1px 1px 0 rgba(255,255,255,0.25))
border: 2px solid $inputhvr
color: $inputactv
&:active, &:focus, &.active
border: 2px solid $inputactv
color: $inputactv
background: white
background: rgba(255,255,255,0.5)
text-shadow: 0 0 10px #ffffff
outline: none
@mixin placeholder($placeholder, $placeholderhvr)
::-webkit-input-placeholder
color: $placeholder
:-moz-placeholder
color: $placeholder
::-moz-placeholder
color: $placeholder
:-ms-input-placeholder
color: $placeholder
&:hover
::-webkit-input-placeholder
color: $placeholderhvr
:-moz-placeholder
color: $placeholderhvr
::-moz-placeholder
color: $placeholderhvr
:-ms-input-placeholder
color: $placeholderhvr

View File

@@ -0,0 +1,127 @@
@import "typography";
@import "branding";
@import "animations";
@import "mixins";
//Big search used in active table search \\
@mixin big-input($input, $inputhvr, $inputactv) {
@include headingFont;
@include csstrans;
@include border-radius(0.5rem);
background: rgba(255, 255, 255, 0.1);
border: 2px solid $input;
font-size: 2rem;
box-shadow: 0;
padding: 0.5rem 1rem;
height: auto;
width: 100%;
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));
border: 2px solid $inputhvr;
color: $inputactv;
}
&:active, &:focus, &.active {
border: 2px solid $inputactv;
color: $inputactv;
background: white;
background: rgba(255, 255, 255, 0.5);
text-shadow: 0 0 10px #ffffff;
padding: 1rem;
letter-spacing: 0.02rem;
outline: none;
}
}
@mixin big-input-static {
outline: 0;
&:active, &:focus, &.active {
padding: 0.75rem 1rem 0.35rem 1rem;
letter-spacing: 0;
}
}
@mixin medium-input($input, $inputhvr, $inputactv) {
@include headingFont;
@include csstrans;
@include border-radius(0.5rem);
background: rgba(255, 255, 255, 0.1);
border: 2px solid $input;
font-size: 0.875rem;
box-shadow: 0;
padding: 0.5rem 0.625rem 0.375rem;
height: auto;
width: 100%;
margin-bottom: 0.5rem;
box-shadow: none;
color: $inputactv;
&:hover {
@include box-shadow(0 1px 1px 0 rgba(255, 255, 255, 0.25));
border: 2px solid $inputhvr;
color: $inputactv;
}
&:active, &:focus, &.active {
border: 2px solid $inputactv;
color: $inputactv;
background: white;
background: rgba(255, 255, 255, 0.5);
text-shadow: 0 0 10px #ffffff;
outline: none;
}
}
@mixin placeholder($placeholder, $placeholderhvr) {
::-webkit-input-placeholder {
color: $placeholder;
}
-moz-placeholder: {
color: $placeholder;
};
::-moz-placeholder {
color: $placeholder;
}
-ms-input-placeholder: {
color: $placeholder;
};
&:hover {
::-webkit-input-placeholder {
color: $placeholderhvr;
}
-moz-placeholder: {
color: $placeholderhvr;
};
::-moz-placeholder {
color: $placeholderhvr;
}
-ms-input-placeholder: {
color: $placeholderhvr;
};
}
}

View File

@@ -1,38 +0,0 @@
$ofn-brand: #f27052
// e.g. australia, uk, norway specific color
$ofn-grey: #808184
// old colors:
$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
$clr-brick-light-bright: #f5c4c9
$clr-turquoise: #0b8c61
$clr-turquoise-light: #ceefe4
$clr-turquoise-ultra-light: #e8f9f4
$clr-turquoise-bright: #23a877
$clr-blue: #0096ad
$clr-blue-light: #85d9e5
$clr-blue-bright: #14b6cc
$clr-yellow-light: #faf6c7
$disabled-light: #e5e5e5
$disabled-bright: #ccc
$disabled-med: #b3b3b3
$disabled-dark: #999
$disabled-v-dark: #808080
$med-grey: #666
$med-drk-grey: #444
$dark-grey: #333
$light-grey: #ddd
$black: #000

View File

@@ -0,0 +1,37 @@
$ofn-brand: #f27052;
// e.g. australia, uk, norway specific color
$ofn-grey: #808184;
// old colors:
$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;
$clr-brick-light-bright: #f5c4c9;
$clr-turquoise: #0b8c61;
$clr-turquoise-light: #ceefe4;
$clr-turquoise-ultra-light: #e8f9f4;
$clr-turquoise-bright: #23a877;
$clr-blue: #0096ad;
$clr-blue-light: #85d9e5;
$clr-blue-bright: #14b6cc;
$clr-yellow-light: #faf6c7;
$disabled-light: #e5e5e5;
$disabled-bright: #ccc;
$disabled-med: #b3b3b3;
$disabled-dark: #999;
$disabled-v-dark: #808080;
$med-grey: #666;
$med-drk-grey: #444;
$dark-grey: #333;
$light-grey: #ddd;
$black: #000;

View File

@@ -1,78 +0,0 @@
@import branding
@import mixins
@import animations
footer
.row
p a
font-size: 0.875rem
a, a *
@include csstrans
color: white
&:hover, &:active, &:focus
color: rgba(white, 1)
text-decoration: underline
.footer-global
background-color: $ofn-grey
padding-top: 60px
padding-bottom: 40px
.logo
width: 200px
height: 200px
background: $ofn-grey
@include border-radius(120px)
margin: -140px auto 0 auto
img
margin-top: 36px
.alert-box
background-color: transparent
border: none
padding: 0
.alert-cta
@include csstrans
width: 100%
border: 1px solid rgba($dark-grey, 0.35)
background-image: url("/assets/tile-wide.png")
background-position: center center
background-color: #bbb
padding: 12px 0 8px 0
display: block
&, & *
@include csstrans
color: #333
strong
letter-spacing: 0.5px
a:hover, a:active, a:focus
text-decoration: none
border-color: white
&, & *
color: rgba(white, 1)
.row
&, p, h1, h2, h3, h4, h5, h6
color: $disabled-bright
.footer-local
background: lighten($dark-grey, 3%)
@include panepadding
.row
&, p, h1, h2, h3, h4, h5, h6
color: $disabled-med
p.secure-icon i
font-size: 10rem
color: rgba(white, 0.1)
p.secure-text
color: rgba($disabled-med, 0.35)
.social-icons
margin-bottom: 0.25rem
margin-top: 0.75rem
a
i
font-size: 1.5rem
color: white
&:hover, &:active, &:focus
text-decoration: none
i
color: lighten($dark-grey, 60%)
text-shadow: 2px 2px 0 black

View File

@@ -0,0 +1,127 @@
@import "branding";
@import "mixins";
@import "animations";
footer {
.row {
p a {
font-size: 0.875rem;
}
a, a * {
@include csstrans;
color: white;
&:hover, &:active, &:focus {
color: rgba(white, 1);
text-decoration: underline;
}
}
}
.footer-global {
background-color: $ofn-grey;
padding-top: 60px;
padding-bottom: 40px;
.logo {
width: 200px;
height: 200px;
background: $ofn-grey;
@include border-radius(120px);
margin: (-140px) auto 0 auto;
img {
margin-top: 36px;
}
}
.alert-box {
background-color: transparent;
border: none;
padding: 0;
.alert-cta {
@include csstrans;
width: 100%;
border: 1px solid rgba($dark-grey, 0.35);
background-image: url("/assets/tile-wide.png");
background-position: center center;
background-color: #bbb;
padding: 12px 0 8px 0;
display: block;
&, & * {
@include csstrans;
color: #333;
}
strong {
letter-spacing: 0.5px;
}
a:hover, a:active, a:focus {
text-decoration: none;
border-color: white;
&, & * {
color: rgba(white, 1);
}
}
}
}
.row {
&, p, h1, h2, h3, h4, h5, h6 {
color: $disabled-bright;
}
}
}
.footer-local {
background: lighten($dark-grey, 3%);
@include panepadding;
.row {
&, p, h1, h2, h3, h4, h5, h6 {
color: $disabled-med;
}
p.secure-icon i {
font-size: 10rem;
color: rgba(white, 0.1);
}
p.secure-text {
color: rgba($disabled-med, 0.35);
}
.social-icons {
margin-bottom: 0.25rem;
margin-top: 0.75rem;
a {
i {
font-size: 1.5rem;
color: white;
}
&:hover, &:active, &:focus {
text-decoration: none;
i {
color: lighten($dark-grey, 60%);
text-shadow: 2px 2px 0 black;
}
}
}
}
}
}
}

View File

@@ -1,5 +0,0 @@
@import mixins
@import branding
fieldset
border: 0

View File

@@ -0,0 +1,6 @@
@import "mixins";
@import "branding";
fieldset {
border: 0;
}

View File

@@ -1,108 +0,0 @@
@import branding
@import mixins
@import typography
// Search page
#groups
@include groupsbg
@include sidepaddingSm
@include panepadding
h1, p.text
font-weight: 300
h1
font-size: 350%
a > .group-name
&:hover, &:focus, &:active
text-decoration: underline
.groups-icons
text-align: right
a
font-size: 1.5em
.groups-header
border: 2px solid $clr-brick-light-bright
@include border-radius-mixed(0.5em, 0.5em, 0, 0)
margin: -1rem 0 1rem
padding: 1rem 0.9375rem
@media screen and (min-width: 640px)
border: 0 none
@include border-radius(0)
margin: 0
padding: 0
.group
padding-bottom: 0.5em
.row div
font-size: 110%
.row a
vertical-align: middle
.ofn-i_035-groups
font-size: 120%
vertical-align: middle
// Individual Page
#group-page
.group-logo, .group-header
text-align: center
.group-logo
padding-bottom: 1em
max-height: 200px
.group-name
border-bottom: 1px solid #ccc
@media screen and (min-width: 768px)
.group-logo, .group-header
text-align: left
.group-logo
max-height: 120px
float: left
padding-right: 1em
background-color: white
// Tabs
.tabs dd a // Mobile first
padding: 0.25rem 0.45rem 0rem
font-size: 0.75rem
border: none
margin-bottom: -2px
margin-right: 2px
text-transform: capitalize
@include headingFont
@include border-radius(1em 0.25em 0 0)
@include gradient($disabled-light, $disabled-bright)
@media screen and (min-width: 768px)
.tabs dd a
padding: 0.5rem 1rem 0.25em
font-size: 0.875rem
@include border-radius(1.5em 0.25em 0 0)
@media screen and (min-width: 1024px)
.tabs dd a
padding: 0.75rem 1.5rem 0.5em
font-size: 1rem
@include border-radius(2em 0.25em 0 0)
.tabs dd.active a
@include gradient(white, white)
margin-bottom: -1px
border-top: 1px solid $light-grey
border-left: 1px solid $light-grey
border-right: 1px solid $light-grey
border-bottom: 0
.tabs-content
border-top: 1px solid $light-grey
border-left: 1px solid $light-grey
border-right: 1px solid $light-grey
border-bottom: 1px solid $light-grey
padding: 1.5em
// Producers tab
.producers
background-image: none
background-color: initial
.active_table .active_table_node a.is_distributor, .active_table .active_table_node a.is_distributor i.ofn-i_059-producer
color: $clr-turquoise
padding: 0
// Hubs tab
.hubs
background-image: none
padding-top: 0
padding-bottom: 0

View File

@@ -0,0 +1,169 @@
@import "branding";
@import "mixins";
@import "typography";
// Search page
#groups {
@include groupsbg;
@include sidepaddingSm;
@include panepadding;
h1, p.text {
font-weight: 300;
}
h1 {
font-size: 350%;
}
a > .group-name {
&:hover, &:focus, &:active {
text-decoration: underline;
}
}
.groups-icons {
text-align: right;
a {
font-size: 1.5em;
}
}
.groups-header {
border: 2px solid $clr-brick-light-bright;
@include border-radius-mixed(0.5em, 0.5em, 0, 0);
margin: (-1rem) 0 1rem;
padding: 1rem 0.9375rem;
@media screen and (min-width: 640px) {
border: 0 none;
@include border-radius(0);
margin: 0;
padding: 0;
}
}
}
.group {
padding-bottom: 0.5em;
.row div {
font-size: 110%;
}
.row a {
vertical-align: middle;
}
.ofn-i_035-groups {
font-size: 120%;
vertical-align: middle;
}
}
// Individual Page
#group-page {
.group-logo, .group-header {
text-align: center;
}
.group-logo {
padding-bottom: 1em;
max-height: 200px;
}
.group-name {
border-bottom: 1px solid #ccc;
}
@media screen and (min-width: 768px) {
.group-logo, .group-header {
text-align: left;
}
.group-logo {
max-height: 120px;
float: left;
padding-right: 1em;
background-color: white;
}
}
// Tabs
.tabs dd a {
padding: 0.25rem 0.45rem 0rem;
font-size: 0.75rem;
border: none;
margin-bottom: -2px;
margin-right: 2px;
text-transform: capitalize;
@include headingFont;
@include border-radius(1em 0.25em 0 0);
@include gradient($disabled-light, $disabled-bright);
}
@media screen and (min-width: 768px) {
.tabs dd a {
padding: 0.5rem 1rem 0.25em;
font-size: 0.875rem;
@include border-radius(1.5em 0.25em 0 0);
}
}
@media screen and (min-width: 1024px) {
.tabs dd a {
padding: 0.75rem 1.5rem 0.5em;
font-size: 1rem;
@include border-radius(2em 0.25em 0 0);
}
}
.tabs dd.active a {
@include gradient(white, white);
margin-bottom: -1px;
border-top: 1px solid $light-grey;
border-left: 1px solid $light-grey;
border-right: 1px solid $light-grey;
border-bottom: 0;
}
.tabs-content {
border-top: 1px solid $light-grey;
border-left: 1px solid $light-grey;
border-right: 1px solid $light-grey;
border-bottom: 1px solid $light-grey;
padding: 1.5em;
}
// Producers tab
.producers {
background-image: none;
background-color: initial;
.active_table .active_table_node a.is_distributor, .active_table .active_table_node a.is_distributor i.ofn-i_059-producer {
color: $clr-turquoise;
}
padding: 0;
}
// Hubs tab
.hubs {
background-image: none;
padding-top: 0;
padding-bottom: 0;
}
}

View File

@@ -1,21 +0,0 @@
@import variables
nav.top-bar
margin-bottom: 0px
a.icon
&:hover
text-decoration: none
height: $topbar-height
color: white
i
font-size: 29px
line-height: $topbar-height
span
font-size: 13px
display: inline-block
line-height: $topbar-height
height: $topbar-height
vertical-align: top
body > section[role='main']
padding: 0px

View File

@@ -0,0 +1,31 @@
@import "variables";
nav.top-bar {
margin-bottom: 0px;
a.icon {
&:hover {
text-decoration: none;
}
height: $topbar-height;
color: white;
i {
font-size: 29px;
line-height: $topbar-height;
}
span {
font-size: 13px;
display: inline-block;
line-height: $topbar-height;
height: $topbar-height;
vertical-align: top;
}
}
}
body > section[role='main'] {
padding: 0px;
}

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