cowtech-js-rails 1.0.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,77 @@
1
+ ###
2
+ #
3
+ # This file is part of the cowtech-js-rails gem. Copyright (C) 2012 and above Shogun <shogun_panda@me.com>.
4
+ # Licensed under the MIT license, which can be found at http://www.opensource.org/licenses/mit-license.php.
5
+ #
6
+ ###
7
+
8
+ (($) ->
9
+ $.cowtech = $.cowtech || {}
10
+
11
+ $.cowtech.numeric =
12
+ precision: 3
13
+ autoload: (->
14
+ $("[type=numeric], [validate=numeric]").cowtech_numeric()
15
+ )
16
+
17
+ handle: ((input) ->
18
+ regex =
19
+ float: /^(-?)(\d+)([,.]\d+)?$/
20
+ integer: /^(-?)\d+$/
21
+
22
+ is_float = (input.attr("data-numeric-float") == "true")
23
+ positive = (input.attr("data-numeric-positive") == "true")
24
+ not_zero = (input.attr("data-numeric-not-zero") == "true")
25
+ precision = parseInt(input.attr("data-numeric-precision"))
26
+ val = input.val().trim().replace(",", ".")
27
+
28
+ # Set precision
29
+ precision = $.cowtech.numeric.precision if isNaN(precision) || precision < 1
30
+
31
+ # Check if valid
32
+ val = "0" if val.length == 0 || !regex["float"].test(val)
33
+
34
+ # Round to n decimal digit
35
+ val = $.cowtech.utils.parse_float(val)
36
+ input.data("numeric-value", val)
37
+
38
+ # Set value
39
+ input.val(val.toFixed((if (is_float) then precision else 0)).replace(".", ","))
40
+
41
+ # Set classes
42
+ input.removeClass("numeric-positive numeric-negative numeric-zero numeric-unset")
43
+ if val == 0
44
+ input.addClass("numeric-zero")
45
+ input.addClass("numeric-unset") if not_zero == true
46
+ else
47
+ input.addClass((if (val > 0) then "numeric-positive" else "numeric-negative")) if input.attr("data-numeric-add-classes") == "true"
48
+
49
+ !(positive && val < 0) || input.is("[required].numeric-unset") || input.is(".required.numeric-unset")
50
+ )
51
+
52
+ $.fn.cowtech_numeric = (->
53
+ @each ->
54
+ el = $(this)
55
+ el.on("change", ->
56
+ $.cowtech.numeric.handle(el)
57
+ ).on("focus", ->
58
+ val = el.val().trim().replace(",", ".")
59
+ el.val("") if parseFloat(val) == 0
60
+ el.css(
61
+ color: "black"
62
+ fontStyle: "normal"
63
+ ).removeClass("positive negative zero unset")
64
+ ).on("blur", ->
65
+ $(el).css(
66
+ color: null
67
+ fontStyle: null
68
+ )
69
+
70
+ $.cowtech.numeric.handle(el)
71
+ ).addClass("numeric").change()
72
+ )
73
+
74
+ $.fn.numberize = (->
75
+ $.cowtech.numeric.handle(this) if @is(".numeric")
76
+ )
77
+ )(jQuery)
@@ -0,0 +1,34 @@
1
+ ###
2
+ #
3
+ # This file is part of the cowtech-js-rails gem. Copyright (C) 2012 and above Shogun <shogun_panda@me.com>.
4
+ # Licensed under the MIT license, which can be found at http://www.opensource.org/licenses/mit-license.php.
5
+ #
6
+ ###
7
+
8
+ (($) ->
9
+ $.cowtech = $.cowtech || {}
10
+
11
+ $.cowtech.scroll =
12
+ trigger: null
13
+
14
+ autoload: (->
15
+ $.cowtech.scroll.trigger = $("[data-scroll-role=trigger]")
16
+
17
+ $.cowtech.scroll.trigger.hide().on("click", (ev) ->
18
+ $("body").animate({
19
+ scrollTop: 0
20
+ },
21
+ "fast"
22
+ )
23
+
24
+ false
25
+ )
26
+
27
+ $(window).on("scroll", ->
28
+ if $(window).scrollTop() > 0
29
+ $.cowtech.scroll.trigger.fadeIn()
30
+ else
31
+ $.cowtech.scroll.trigger.fadeOut()
32
+ )
33
+ )
34
+ )(jQuery)
@@ -0,0 +1,43 @@
1
+ ###
2
+ #
3
+ # This file is part of the cowtech-js-rails gem. Copyright (C) 2012 and above Shogun <shogun_panda@me.com>.
4
+ # Licensed under the MIT license, which can be found at http://www.opensource.org/licenses/mit-license.php.
5
+ #
6
+ ###
7
+
8
+ (($) ->
9
+ $.cowtech = $.cowtech || {}
10
+ $.cowtech.search =
11
+ execute: (->
12
+ nv = $.extend($.cowtech.data.params.params, {
13
+ page: 1
14
+ })
15
+ fnv = {}
16
+
17
+ $("[data-search-field]").each(->
18
+ key = $(this).attr("data-search-field")
19
+
20
+ if !key.match(/^period-(month|year)$/)
21
+ if $(this).is("[type=checkbox]")
22
+ nv[key] = $(this).is(":checked")
23
+ else
24
+ nv[key] = $(this).val()
25
+ )
26
+
27
+ nv["period"] = "#{$("[data-search-field=period-year]").val()}-#{$("[data-search-field=period-month]").val()}" if $("[data-search-field|=\"period\"]").size() == 2
28
+
29
+ for key of nv
30
+ fnv[key] = nv[key] if !$.cowtech.utils.is_blank(nv[key])
31
+ location.href = "#{$.cowtech.data.params.current_location.replace(/#$/, "")}?#{$.param(fnv)}"
32
+ )
33
+
34
+ autoload: (->
35
+ $("[data-search-field]:not([data-search-disabled=true])").on("change", $.cowtech.search.execute)
36
+ $("[data-search-role=search]").on("click", $.cowtech.search.execute)
37
+ $("[data-search-role=clear]").on("click", (ev) ->
38
+ $("[data-search-field=search]").val("")
39
+ $.cowtech.search.execute()
40
+ false
41
+ )
42
+ )
43
+ )(jQuery)
@@ -0,0 +1,59 @@
1
+ ###
2
+ #
3
+ # This file is part of the cowtech-js-rails gem. Copyright (C) 2012 and above Shogun <shogun_panda@me.com>.
4
+ # Licensed under the MIT license, which can be found at http://www.opensource.org/licenses/mit-license.php.
5
+ #
6
+ ###
7
+
8
+ (($) ->
9
+ $.cowtech = $.cowtech || {}
10
+ $.cowtech.share =
11
+ autoload: ((config) ->
12
+ $("div.share").cowtech_share(config)
13
+ hide_tips = ->
14
+ $(".qtip").qtip("hide")
15
+
16
+ $(window).on("scroll", hide_tips)
17
+
18
+ $("div, section").each(->
19
+ $(this).on("scroll", hide_tips) if $(this).css("overflow-y") == "scroll"
20
+ )
21
+ )
22
+
23
+ $.fn.cowtech_share = ((config) ->
24
+ @each(->
25
+ body = $(this).hide()
26
+ config = $.cowtech.utils.initialize(config, {
27
+ yadjust: yadjust_def
28
+ })
29
+
30
+ yadjust_def = -2
31
+ yadjust = $.cowtech.utils.initialize(config.yadjust, yadjust_def)
32
+
33
+ body.parent().find("h2").qtip(
34
+ content:
35
+ text: body
36
+ position:
37
+ my: "top left"
38
+ at: "bottom left"
39
+ viewport: $(window)
40
+ adjust:
41
+ x: 10
42
+ y: yadjust
43
+ style:
44
+ classes: "ui-tooltip-share ui-tooltip-shadow"
45
+ tip:
46
+ corner: "top left"
47
+ mimic: "center"
48
+ border: 1
49
+ width: 22
50
+ height: 11
51
+ offset: 10
52
+ show:
53
+ delay: 500
54
+ hide:
55
+ event: "unfocus"
56
+ )
57
+ )
58
+ )
59
+ )(jQuery)
@@ -0,0 +1,110 @@
1
+ ###
2
+ #
3
+ # This file is part of the cowtech-js-rails gem. Copyright (C) 2012 and above Shogun <shogun_panda@me.com>.
4
+ # Licensed under the MIT license, which can be found at http://www.opensource.org/licenses/mit-license.php.
5
+ #
6
+ ###
7
+
8
+ if !String::trim?
9
+ String::trim = (->
10
+ @replace /(^\s+)|(\s+$)/g, ""
11
+ )
12
+
13
+ Date.labels =
14
+ months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
15
+ monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
16
+ days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
17
+ daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]
18
+ daysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"]
19
+ Date.localized_labels = Date.labels
20
+
21
+ String::toDateTime = (->
22
+ rv = new Date()
23
+ mo = @match(/([a-z]{3}) ([a-z]{3}) (\d{2}) (\d{2}):(\d{2}):(\d{2}) (\+[0-9]{4}) ([0-9]{4})$/i)
24
+ rv.setUTCFullYear(parseInt(mo[8]), Date.labels.shortMonths.indexOf(mo[2]), parseInt(mo[3]))
25
+ rv.setUTCHours(parseInt(mo[4]), parseInt(mo[5]), parseInt(mo[6]))
26
+ rv
27
+ )
28
+
29
+ Date::toShortString = (->
30
+ days = @getDate()
31
+ hours = @getHours()
32
+ minutes = @getMinutes()
33
+ day = "0#{days}" if days < 10
34
+ hours = "0#{hours}" if hours < 10
35
+ minutes = "0#{minutes}" if minutes < 10
36
+ "{day} {Date.localized_labels.months[@getMonth()]} {@getFullYear()}, {hours}:{minutes}"
37
+ )
38
+
39
+ (($) ->
40
+ $.cowtech = $.cowtech || {}
41
+ $.cowtech.data = {}
42
+
43
+ $.cowtech.utils =
44
+ initialize: ((obj, def) ->
45
+ if $.cowtech.utils.is_blank(obj) then def else obj
46
+ )
47
+
48
+ module_active: ((module) ->
49
+ eval("!$.cowtech.utils.is_null($.fn.cowtech_" + module + ") || !$.cowtech.utils.is_null($.cowtech." + module + ");")
50
+ )
51
+
52
+ is_null: ((obj) ->
53
+ !obj? || $.cowtech.utils.is_of_type(obj, "undefined")
54
+ )
55
+
56
+ is_blank: ((obj) ->
57
+ $.cowtech.utils.is_null(obj) || obj.toString().match(/^\s*$/)?
58
+ )
59
+
60
+ is_of_type: ((obj, type) ->
61
+ typeof(obj) == type
62
+ )
63
+
64
+ is_object: ((obj) ->
65
+ $.cowtech.utils.is_of_type(obj, "object")
66
+ )
67
+
68
+ length: ((obj) ->
69
+ rv = 0
70
+ (rv++) for i of obj
71
+ rv
72
+ )
73
+
74
+ format_currency: ((number, currency, precision) ->
75
+ precision = $.cowtech.utils.initialize(precision, $.cowtech.numeric.precision)
76
+ rv = number.toFixed(precision).toString().replace(".", ",")
77
+ rv += " #{currency}" if !$.cowtech.utils.is_blank(currency)
78
+ rv
79
+ )
80
+
81
+ parse_float: ((number, precision) ->
82
+ rv = $.cowtech.utils.round_number(parseFloat(number.replace(",", ".")), precision)
83
+ if isNaN(rv) then 0 else rv
84
+ )
85
+
86
+ round_number: ((number, precision) ->
87
+ prec = Math.pow(10, $.cowtech.utils.initialize(precision, $.cowtech.numeric.precision))
88
+ Math.round(parseFloat(number) * prec) / prec
89
+ )
90
+
91
+ detect_browser: ((not_add) ->
92
+ rv = null
93
+
94
+ $.ajax(
95
+ async: false
96
+ url: "http://#{document.domain.replace(/^forum\./, "")}/detect-browser"
97
+ dataType: "jsonp"
98
+ success: (data, textStatus, xhr) ->
99
+ if data.success
100
+ rv = data.data
101
+ $("body").addClass rv.classes if !not_add == true
102
+ )
103
+
104
+ rv
105
+ )
106
+
107
+ is_mobile: (->
108
+ !$.cowtech.utils.is_null($.mobile)
109
+ )
110
+ )(jQuery)
@@ -0,0 +1,155 @@
1
+ ###
2
+ #
3
+ # This file is part of the cowtech-js-rails gem. Copyright (C) 2012 and above Shogun <shogun_panda@me.com>.
4
+ # Licensed under the MIT license, which can be found at http://www.opensource.org/licenses/mit-license.php.
5
+ #
6
+ ###
7
+
8
+ (($) ->
9
+ $.cowtech = $.cowtech || {}
10
+ $.cowtech.wysiwyg =
11
+ cols: 5
12
+ colors: ["FCE94F", "EDD400", "C4A000", "FCAF3E", "F57900", "CE5C00", "E9B96E", "C17D11", "8F5902", "8AE234", "73D216", "4E9A06", "729FCF", "3465A4", "204A87", "AD7FA8", "75507B", "5C3566", "EF2929", "CC0000", "A40000", "FFFFFF", "D3D7CF", "BABDB6", "888A85", "555753", "000000"]
13
+ emotes: ["angel", "angry", "aww", "aww_2", "blushing", "childish", "confused", "creepy", "crying", "cthulhu", "cute", "cute_winking", "devil", "gah", "gah_2", "gasping", "greedy", "grinning", "grinning_winking", "happy", "happy_2", "happy_3", "heart", "huh", "huh_2", "kissing", "laughing", "lips_sealed", "madness", "malicious", "sick", "smiling", "speechless", "spiteful", "stupid", "sunglasses", "terrified", "thumb_down", "thumb_up", "tired", "tongue_out", "tongue_out_laughing", "tongue_out_left", "tongue_out_up", "tongue_out_up_left", "tongue_out_winking", "uncertain", "uncertain_2", "unhappy", "winking"]
14
+ labels:
15
+ preview: "Preview"
16
+ remove: "Remove"
17
+ url: "URL (Address)"
18
+ alt: "Alternative text"
19
+ title: "Title"
20
+ placeholder: "Placeholder"
21
+ bold: "Bold"
22
+ italic: "Italic"
23
+ underline: "Underline"
24
+ strike_through: "Strikethrough"
25
+ image: "Image"
26
+ link: "Link"
27
+ size: "Size"
28
+ color: "Color"
29
+ emote: "Emoticon"
30
+ header_1: "Header 1"
31
+ header_2: "Header 2"
32
+ header_3: "Header 3"
33
+ header_4: "Header 4"
34
+ header_5: "Header 5"
35
+ header_6: "Header 6"
36
+ center: "Center"
37
+ list: "List"
38
+ ordered_list: "Ordered list"
39
+ quote: "Quote"
40
+ loader:
41
+ message: "Loading ..."
42
+ image: "/images/loading.gif"
43
+
44
+ autoload: (->
45
+ $("[data-wysiwyg-role=editor]").each(->
46
+ $(this).closest("tr").removeClass("mandatory")
47
+ $.cowtech.wysiwyg.setup $(this)
48
+ )
49
+ )
50
+
51
+ show_preview: (->
52
+ $("[data-wysiwyg-role=preview]").removeClass("loading")
53
+ $("[data-wysiwyg-role=body]").slideDown("fast")
54
+ $("[data-wysiwyg-role=loader]").remove()
55
+ )
56
+
57
+ preview: ((obj) ->
58
+ area = $(obj.textarea)
59
+ content = area.val()
60
+
61
+ $("[data-wysiwyg-role=remove]").click()
62
+ $("[data-wysiwyg-role=preview]").remove()
63
+
64
+ prev = $("<div data-wysiwyg-role=\"preview\" class=\"loading\"><h2>#{$.cowtech.wysiwyg.labels.preview}<a href=\"#\" data-wysiwyg-role=\"remove\" class=\"btn btn-secondary\">#{$.cowtech.wysiwyg.labels.remove}</a></h2></div>")
65
+ area.after(prev)
66
+ $("<img data-wysiwyg-role=\"loader\" src=\"#{$.cowtech.wysiwyg.image}\" alt=\"#{$.cowtech.wysiwyg.loader.message}\"/>").appendTo(prev)
67
+ $("[data-wysiwyg-role=remove]").on("click", ->
68
+ $("[data-wysiwyg-role=preview]").remove()
69
+ false
70
+ )
71
+
72
+ body = $("<iframe src=\"#\" data-wysiwyg-role=\"body\" id=\"wysiwyg-preview-body\"></iframe>").appendTo(prev).hide()
73
+ form = $("<form action=\"#{$.cowtech.data.urls.preview}\" method=\"POST\" target=\"wysiwyg-preview-body\"><input type=\"hidden\" name=\"content\" value=\"\"/></form>")
74
+ form.find("input").val(content)
75
+ form.submit()
76
+ )
77
+
78
+ get_cell_info: ((cell, count, cols) ->
79
+ cols = $.cowtech.utils.initialize(cols, $.cowtech.wysiwyg.cols)
80
+ row_index = Math.floor(cell / cols) + 1
81
+ col_index = Math.floor(cell % cols) + 1
82
+
83
+ rv = ["row-#{row_index}", "col-#{col_index}"]
84
+ rv.push("row-first") if row_index == 1
85
+ rv.push("row-last") if row_index == Math.ceil(count / cols)
86
+ rv.push("col-first") if col_index == 1
87
+ rv.push("col-last") if col_index == cols
88
+ rv
89
+ )
90
+
91
+ setup: ((el) ->
92
+ wysiwyg_fonts = []
93
+ i = 10
94
+
95
+ # Add sizes
96
+ while i < 40
97
+ wysiwyg_fonts.push(name: "#{i}pt", openWith: "$", closeWith: "${: style=\"font-size: #{i}pt\"}", className: "font-cell wysiwyg-icon dimension")
98
+ i += 2
99
+
100
+ # Add colors
101
+ wysiwyg_colors_buttons = []
102
+ count = $.cowtech.wysiwyg.colors.length
103
+ i = 0
104
+ while i < count
105
+ color = $.cowtech.wysiwyg.colors[i]
106
+ wysiwyg_colors_buttons.push(openWith: "$", closeWith: "${: style=\"color: ##{color}\"}", className: "#{$.cowtech.wysiwyg.get_cell_info(i, count).join(" ")} color-cell color-#{color}")
107
+ i++
108
+
109
+ # Add buttons
110
+ wysiwyg_emotes_buttons = []
111
+ count = $.cowtech.wysiwyg.emotes.length
112
+ i = 0
113
+ while i < count
114
+ emote = $.cowtech.wysiwyg.emotes[i]
115
+ wysiwyg_emotes_buttons.push(replaceWith: "@#{emote}@", className: "#{$.cowtech.wysiwyg.get_cell_info(i, count).join(" ")} emotes-cell color-#{emote}")
116
+ i++
117
+
118
+ # Settings
119
+ wysiwyg_settings =
120
+ resizeHandle: false
121
+ previewParserPath: ""
122
+ onShiftEnter:
123
+ keepDefault: false
124
+ openWith: "\n\n"
125
+ markupSet: [
126
+ {name: $.cowtech.wysiwyg.labels.bold, key: "B", openWith: "**", closeWith: "**", className: "wysiwyg-icon bold"},
127
+ {name: $.cowtech.wysiwyg.labels.italic, key: "I", openWith: "_", closeWith: "_", className: "wysiwyg-icon italic"},
128
+ {name: $.cowtech.wysiwyg.labels.underline, key: "U", openWith: "=", closeWith: "=", className: "wysiwyg-icon u"},
129
+ {name: $.cowtech.wysiwyg.labels.strike_through, key: "S", openWith: "~", closeWith: "~", className: "wysiwyg-icon s"},
130
+ {separator: "---------------"},
131
+ {name: $.cowtech.wysiwyg.labels.image, key: "P", replaceWith: "![[![#{$.cowtech.wysiwyg.labels.alt}]!]]([![#{$.cowtech.wysiwyg.labels.url}: !: http: //]!] \"[![#{$.cowtech.wysiwyg.labels.title}]!]\")", className: "wysiwyg-icon img"},
132
+ {name: $.cowtech.wysiwyg.labels.link, key: "L", openWith: "[", closeWith: "]([![#{$.cowtech.wysiwyg.labels.url}: !: http: //]!] \"[![#{$.cowtech.wysiwyg.labels.title}]!]\")", placeHolder: $.cowtech.wysiwyg.labels.placeholder, className: "wysiwyg-icon link"},
133
+ {separator: "---------------"},
134
+ {name: $.cowtech.wysiwyg.labels.size, key: "D", className: "wysiwyg-icon dimension", dropMenu: wysiwyg_fonts},
135
+ {name: $.cowtech.wysiwyg.labels.color, key: "T", className: "wysiwyg-icon color", dropMenu: wysiwyg_colors_buttons},
136
+ {name: $.cowtech.wysiwyg.labels.emote, key: "E", className: "wysiwyg-icon emotes", dropMenu: wysiwyg_emotes_buttons},
137
+ {separator: "---------------"},
138
+ {name: $.cowtech.wysiwyg.labels.header_1, key: "1", openWith: "# ", className: "wysiwyg-icon h1"},
139
+ {name: $.cowtech.wysiwyg.labels.header_2, key: "2", openWith: "## ", className: "wysiwyg-icon h2"},
140
+ {name: $.cowtech.wysiwyg.labels.header_3, key: "3", openWith: "### ", className: "wysiwyg-icon h3"},
141
+ {name: $.cowtech.wysiwyg.labels.header_4, key: "4", openWith: "#### ", className: "wysiwyg-icon h4"},
142
+ {name: $.cowtech.wysiwyg.labels.header_5, key: "5", openWith: "##### ", className: "wysiwyg-icon h5"},
143
+ {name: $.cowtech.wysiwyg.labels.header_6, key: "6", openWith: "###### ", className: "wysiwyg-icon h6"},
144
+ {separator: "---------------"},
145
+ {name: $.cowtech.wysiwyg.labels.center, key: "H", openWith: "%%%\n", closeWith: "\n%%%", className: "wysiwyg-icon center"},
146
+ {name: $.cowtech.wysiwyg.labels.list, openWith: "- ", className: "wysiwyg-icon ul"},
147
+ {name: $.cowtech.wysiwyg.labels.ordered_list, openWith: ((markItUp) -> "#{markItUp.line}. "), className: "wysiwyg-icon ol"},
148
+ {name: $.cowtech.wysiwyg.labels.quote, openWith: "> ", className: "wysiwyg-icon quote"},
149
+ {separator: "---------------"},
150
+ {name: $.cowtech.wysiwyg.labels.preview, beforeInsert: $.cowtech.wysiwyg.preview, className: "wysiwyg-icon preview"}
151
+ ]
152
+
153
+ el.markItUp(wysiwyg_settings)
154
+ )
155
+ )(jQuery)