From f8f3149d94c79448b86154b9bcbe19caa2bcc7b3 Mon Sep 17 00:00:00 2001 From: Morgan McMillian Date: Thu, 22 Sep 2016 16:21:20 -0700 Subject: [PATCH] Initial commit --- .cproject | 212 +++ .gitignore | 5 + .project | 45 + Goober.pro | 7 + LICENSE | 0 Makefile | 6 + assets/.assets.index | 15 + assets/NewPostSheet.qml | 77 + assets/PostItem.qml | 137 ++ assets/StreamTab.qml | 162 ++ assets/icons/globe.png | Bin 0 -> 4387 bytes assets/icons/ic_add.png | Bin 0 -> 1411 bytes assets/icons/ic_reload.png | Bin 0 -> 2461 bytes assets/icons/ic_reply.png | Bin 0 -> 1876 bytes assets/icons/ic_reply_all.png | Bin 0 -> 1968 bytes assets/icons/ic_to_bottom.png | Bin 0 -> 2154 bytes assets/icons/ic_to_top.png | Bin 0 -> 2061 bytes assets/icons/laughing_man.png | Bin 0 -> 181166 bytes assets/main.qml | 48 + assets/moment.js | 2940 +++++++++++++++++++++++++++++++++ bar-descriptor.xml | 103 ++ buildnum | 1 + config.pri | 125 ++ icon.png | Bin 0 -> 17429 bytes precompiled.h | 5 + src/Pnut.cpp | 219 +++ src/Pnut.h | 100 ++ src/Pnut_test.cpp | 21 + src/WebImageView.cpp | 71 + src/WebImageView.h | 41 + src/applicationui.cpp | 83 + src/applicationui.hpp | 55 + src/main.cpp | 38 + translations/Goober.pro | 1 + translations/Goober.ts | 66 + translations/Makefile | 12 + 36 files changed, 4595 insertions(+) create mode 100644 .cproject create mode 100644 .gitignore create mode 100644 .project create mode 100644 Goober.pro create mode 100644 LICENSE create mode 100644 Makefile create mode 100644 assets/.assets.index create mode 100644 assets/NewPostSheet.qml create mode 100644 assets/PostItem.qml create mode 100644 assets/StreamTab.qml create mode 100644 assets/icons/globe.png create mode 100644 assets/icons/ic_add.png create mode 100644 assets/icons/ic_reload.png create mode 100644 assets/icons/ic_reply.png create mode 100644 assets/icons/ic_reply_all.png create mode 100644 assets/icons/ic_to_bottom.png create mode 100644 assets/icons/ic_to_top.png create mode 100644 assets/icons/laughing_man.png create mode 100644 assets/main.qml create mode 100644 assets/moment.js create mode 100644 bar-descriptor.xml create mode 100644 buildnum create mode 100644 config.pri create mode 100644 icon.png create mode 100644 precompiled.h create mode 100644 src/Pnut.cpp create mode 100644 src/Pnut.h create mode 100644 src/Pnut_test.cpp create mode 100644 src/WebImageView.cpp create mode 100644 src/WebImageView.h create mode 100644 src/applicationui.cpp create mode 100644 src/applicationui.hpp create mode 100644 src/main.cpp create mode 100644 translations/Goober.pro create mode 100644 translations/Goober.ts create mode 100644 translations/Makefile diff --git a/.cproject b/.cproject new file mode 100644 index 0000000..43fe3e5 --- /dev/null +++ b/.cproject @@ -0,0 +1,212 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..46545ff --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +x86/ +arm/ +translations/*.qm +.settings/ +src/globals.h diff --git a/.project b/.project new file mode 100644 index 0000000..0265dda --- /dev/null +++ b/.project @@ -0,0 +1,45 @@ + + + Goober + + + + + + com.rim.tad.tools.qml.core.qmlFileBuilder + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.wst.jsdt.core.javascriptValidator + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + auto,full,incremental, + + + + + com.qnx.tools.bbt.xml.core.bbtXMLValidationBuilder + + + + + + org.eclipse.wst.jsdt.core.jsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + com.qnx.tools.ide.bbt.core.bbtnature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.qt.core.qtNature + com.rim.tad.tools.qml.core.qmlNature + + diff --git a/Goober.pro b/Goober.pro new file mode 100644 index 0000000..458c558 --- /dev/null +++ b/Goober.pro @@ -0,0 +1,7 @@ +APP_NAME = Goober + +CONFIG += qt warn_on cascades10 +LIBS += -lbbdata +QT += network + +include(config.pri) diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..e69de29 diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..8745c7d --- /dev/null +++ b/Makefile @@ -0,0 +1,6 @@ +QMAKE_TARGET = Goober +PROJECT_DIR := $(dir $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))) +I18N_DIR := $(PROJECT_DIR)/translations + +include mk/cs-base.mk + diff --git a/assets/.assets.index b/assets/.assets.index new file mode 100644 index 0000000..a81bcd8 --- /dev/null +++ b/assets/.assets.index @@ -0,0 +1,15 @@ +1 +13 +icons/globe.png +icons/ic_add.png +icons/ic_reload.png +icons/ic_reply.png +icons/ic_reply_all.png +icons/ic_to_bottom.png +icons/ic_to_top.png +icons/laughing_man.png +main.qml +moment.js +NewPostSheet.qml +PostItem.qml +StreamTab.qml diff --git a/assets/NewPostSheet.qml b/assets/NewPostSheet.qml new file mode 100644 index 0000000..1b55cfb --- /dev/null +++ b/assets/NewPostSheet.qml @@ -0,0 +1,77 @@ +/* + * Copyright (C) 2016 Morgan McMillian + * + * This file is apart of the Goober application, a client for pnut.io + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +import bb.cascades 1.4 + +Sheet { + id: postSheet + + property alias input: postText + property alias text: postText.text + property int count: 256 + + signal sendPost(string text) + + Page { + titleBar: TitleBar { + acceptAction: ActionItem { + id: sendAction + title: qsTr("Send") + enabled: false + onTriggered: { + sendPost(postText.text); + postText.text = ""; + postSheet.close(); + } + } + dismissAction: ActionItem { + title: qsTr("Cancel") + onTriggered: { + postText.text = ""; + postSheet.close(); + } + } + title: qsTr("New Post") + + } + Container { + Container { + TextArea { + id: postText + preferredHeight: 350.0 + onTextChanging: { + if (postText.text.length > 0) { + sendAction.enabled = true; + } else { + sendAction.enabled = false; + } + count = 256 - postText.text.length + if (count < 0) sendAction.enabled = false; + } + } + } + Container { + horizontalAlignment: HorizontalAlignment.Right + Label { + text: count.toString() + } + } + } + } +} \ No newline at end of file diff --git a/assets/PostItem.qml b/assets/PostItem.qml new file mode 100644 index 0000000..bb132cb --- /dev/null +++ b/assets/PostItem.qml @@ -0,0 +1,137 @@ +/* + * Copyright (C) 2016 Morgan McMillian + * + * This file is apart of the Goober application, a client for pnut.io + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +import bb.cascades 1.4 +import org.labsquare 1.0 +import "moment.js" as Moment + +Container { + id: postitem + + leftPadding: 20.0 + rightPadding: 20.0 + topPadding: 10.0 + bottomPadding: 10.0 + property string lorem: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse non enim tellus. Donec vestibulum enim urna, eget faucibus diam commodo a. Donec eget hendrerit metus. Pellentesque vehicula nisi nec vehicula ullamcorper. Aliquam a elit eget mi fringilla porta fermentum eget eros. Phasellus vestibulum nulla sed elit congue adipiscing. Cras imperdiet urna ac ipsum volutpat lobortis. Maecenas vehicula tortor at viverra convallis. Curabitur nibh massa, tristique id felis ut, venenatis faucibus dui. Donec fringilla, mi nec tincidunt dignissim, neque nunc semper mi, quis rutrum diam turpis sit amet erat. Cras a sodales nisi. Nunc sit amet diam sed lectus molestie cursus convallis et erat. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Duis vitae varius leo. Mauris eu leo a nunc bibendum rutrum euismod et ipsum. " + + Container { + layout: StackLayout { + orientation: LayoutOrientation.LeftToRight + } + Container { + WebImageView { + id: avatar + url: ListItemData.user.content.avatar_image.link + maxWidth: 100.0 + maxHeight: avatar.maxWidth + //imageSource: "asset:///laughing_man.png" + } + } + Container { + leftMargin: 20.0 + Container { + Label { + id: name + text: ListItemData.user.name + textStyle.fontWeight: FontWeight.Bold + } + } + Container { + Label { + id: username + text: ListItemData.user.username + } + } + } + } + Container { + topMargin: 20.0 + bottomMargin: 20.0 + Label { + text: ListItemData.content.text + multiline: true + } + } + Container { + layout: DockLayout {} + horizontalAlignment: HorizontalAlignment.Fill + Container { + horizontalAlignment: HorizontalAlignment.Left + Label { + text: Moment.moment(ListItemData.created_at).format("lll") + textStyle.fontSize: FontSize.XSmall + } + } + Container { + horizontalAlignment: HorizontalAlignment.Right + Label { + text: ListItemData.source.name + textStyle.fontSize: FontSize.XSmall + } + } + } + Divider {} + contextActions: [ + ActionSet { + title: ListItemData.user.username + ActionItem { + title: qsTr("Reply") + onTriggered: { + replySheet.text = "@" + ListItemData.user.username + " "; + replySheet.open(); + replySheet.input.requestFocus(); + } + imageSource: "asset:///icons/ic_reply.png" + } + ActionItem { + title: "Reply All" + onTriggered: { + replySheet.text = "@" + ListItemData.user.username + " " + parseMentions(ListItemData.content.entities.mentions); + console.log(JSON.stringify(ListItemData.content.entities.mentions)) + replySheet.open(); + replySheet.input.requestFocus(); + } + imageSource: "asset:///icons/ic_reply_all.png" + } + } + ] + attachedObjects: [ + NewPostSheet { + id: replySheet + onSendPost: { + postitem.ListItem.view.sendReply(text, ListItemData.id); + } + } + ] + function parseMentions(mentions) { + console.log("blarp") + var mtext = "" + for(var i = 0; i < mentions.length; i++) { + var mu = mentions[i].text + if (mu !== "thrrgilag") { + mtext += "@" + mu + " " + } + } + if (mtext.length > 0) { + return "\n/" + mtext + } else { + return "" + } + } +} diff --git a/assets/StreamTab.qml b/assets/StreamTab.qml new file mode 100644 index 0000000..845ba01 --- /dev/null +++ b/assets/StreamTab.qml @@ -0,0 +1,162 @@ +/* + * Copyright (C) 2016 Morgan McMillian + * + * This file is apart of the Goober application, a client for pnut.io + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +import bb.cascades 1.4 +import com.monkeystew.pnut 1.0 +import com.monkeystew.qtimer 1.0 + +NavigationPane { + id: nav + + property string stream_type + property string endpoint + + Page { + Container { + ListView { + id: streamView + dataModel: ArrayDataModel { + id: postModel + } + listItemComponents: [ + ListItemComponent { + id: root + PostItem {} + } + ] + function sendReply(text, pid) { + pnut.sendReply(text, pid); + } + } + } + actions: [ + ActionItem { + title: qsTr("New Post") + ActionBar.placement: ActionBarPlacement.Signature + onTriggered: { + newPostSheet.open(); + newPostSheet.input.requestFocus(); + } + imageSource: "asset:///icons/ic_add.png" + }, + ActionItem { + title: qsTr("Load Newer") + ActionBar.placement: ActionBarPlacement.InOverflow + onTriggered: { + pnut.getStream(endpoint, Pnut.STREAM_NEWER); + } + imageSource: "asset:///icons/ic_to_top.png" + }, + ActionItem { + title: qsTr("Reload") + ActionBar.placement: ActionBarPlacement.InOverflow + onTriggered: { + postModel.clear() + pnut.beforeId = 0 + pnut.sinceId = 0 + pnut.getStream(endpoint, Pnut.STREAM_OLDER); + } + imageSource: "asset:///icons/ic_reload.png" + }, + ActionItem { + title: qsTr("Load Older") + ActionBar.placement: ActionBarPlacement.InOverflow + onTriggered: { + pnut.getStream(endpoint, Pnut.STREAM_OLDER); + } + imageSource: "asset:///icons/ic_to_bottom.png" + }, + ActionItem { + title: qsTr("Logout") + ActionBar.placement: ActionBarPlacement.InOverflow + onTriggered: { + postModel.clear() + pnut.beforeId = 0 + pnut.sinceId = 0 + _app.setSetting("access_token", ""); + } + } + ] + actionBarAutoHideBehavior: ActionBarAutoHideBehavior.HideOnScroll + } + attachedObjects: [ + ComponentDefinition { + id: itemPageDefinition + source: "ItemPage.qml" + }, + NewPostSheet { + id: newPostSheet + onSendPost: { + console.log("send: " + text); + pnut.sendPost(text); + } + }, + QTimer { + id: timer + interval: 30000 + onTimeout: { + pnut.getStream(endpoint, Pnut.STREAM_NEWER); + } + }, + Pnut { + id: pnut + + onStreamReceived: { + // console.log("- got a result -"); + // console.log("- type: " + rtype); + // console.log(stream); + switch (rtype) { + case Pnut.STREAM_OLDER: + postModel.append(stream); + break; + case Pnut.STREAM_NEWER: + postModel.insert(0, stream); + break; + } + pnut.beforeId = postModel.value(postModel.size() - 1).id; + pnut.sinceId = postModel.value(0).id; + } + + onAuthorizationReceived: { + pnut.getStream(endpoint, Pnut.STREAM_OLDER); + timer.start(); + } + } + ] + onPopTransitionEnded: { + page.destroy(); + } + onCreationCompleted: { + switch (stream_type) { + case "Home": + endpoint = "/posts/streams/me"; + break; + case "Global": + default: + endpoint = "/posts/streams/global" + break; + } + if (_app.setting("access_token") && _app.setting("access_token").length > 0) { + pnut.getStream(endpoint, Pnut.STREAM_OLDER); + timer.start(); + } else { + pnut.authorize(); + } + } +} diff --git a/assets/icons/globe.png b/assets/icons/globe.png new file mode 100644 index 0000000000000000000000000000000000000000..a020ffeb7eb37253f928c475694bac90cb259da0 GIT binary patch literal 4387 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 C&DA6T literal 0 HcmV?d00001 diff --git a/assets/icons/ic_reload.png b/assets/icons/ic_reload.png new file mode 100644 index 0000000000000000000000000000000000000000..98efc0c201a0221e9fcf6ebd01df342f3c1c04b6 GIT binary patch literal 2461 zcmbVOX;c&E8crGsYC%-m0#eHm6uBrQ6S4zBNC<0yvdAV%mH|S@ViHWmD+Vb@+&zFO za5VzTA}CzJ1p$L#5m^F?f@m%73$Y-$i?xY@_x|woo^$8S%(p$y^Df`}%^6ilkdNuy zMRQ>=n5myHJyhSu8=l!n{rm2IIZ5AG$-JXvVWI??oF#!^RIZ2(0e%8jA`}X-xEt1W zLT)e^B8e9sC5vJPQaB=kGs}Q+RtUs;HVo$Gp%Ak;d`Jecp+uh09W{3DJPP1(-BFQv zCWa}dK}kH{Gzk=z78K4&<8#Pdl*dZIO+nEM2p|~?PzX|lQi{SI^+}ha?;EDkDBu%B z#&<`3b}EV)0?yNhAhn zVFbW|$>Q*YhKYX|Ht2J_bV$Nm4{;e1kpTFVVG8dn9$>I!7qSc81;kHBj>S^x7#suV zLcn;_a0Jvem;3)@4Xt+uZ77fbDwmlleGMAAUy5Hp_;P$8q5jNB^oQeztkRn>m{FG> zof@tf))fnKzK^i%&^9OcAKiGe0lQuO*c;sGFKxTF%>l$X^l)jc(Ev1kZwb$lG2f~% z8i;yvnAok$G6#+VJx%7T;B2L@$$SKzt+WIdBHCel4QuT%&~xCl zDam?=F{d@Z`yzlqJ{SFoe5N+l8J%kls?Fc6fwVAS@CoGYg_tP7YP%P-)#t9f!MC; zr2hyY*a^0ed$ah<_ZuN2Hq=O4Ge>Ts2H(#$2>{S+yxJxzZi(H>Z%ltU&ctuRCf57a z#D|OUO6=yiy+wx>(kPd54vg%vT^x<6BQC0STrxSB*|i`TUbCe4vAWSS%*)E={yN&C*UBAQqzT;EWU0>92YX(Vn=L#3 z@`f_fl=yN7=fK+dEZgQV!J5HUKGi>^liouhW!^GCHjG_7B z@=;{qVEgU6p$~E!NxxC?jczuc+RpR1dt-K*;L9F6@4wx8F!_=SH32qaA@$Lb#0uv^_?ns0iS)&jTm1Lj9gu!YDg1$ z@>Q>&`~q(%9HMGX-_Xphb;&N_@{+uXwX4RK*StHGP&q{@T|L`AEU@ogNxt8JvYOJ& zJ`21%*Vf-%Zky|Y=k4-en(A3v4UcB(+_naIyu4)`)O-pEg1oY<+|!QN3805&zKI?sCKTu1xsU`*!HFvXVGG>TGb~n98#FYcm-(o z&MvCnU5S0Qn9hSe>zq69>YA{pT@KWKcE-g8{~9%oc$l795leN&FW$G&t-|O;#mC(r z3YI4e(Y}p#uUhO0Z3sjXQm1m%QYSCH&;4;55cg}%;rPf8$nl-Vj1YJg_x9_^KNKHw zWu`+NHA?kE1r`UEUr2az%OCrDHoVLN2M$keY&J&f;OP9f9=Inj)*P{@uOr}ko{cWY z)sz+GA!2FUEB4ux9+_9#N2xG7)>&QQU8FvAy?vSTy?cex4Q!0d&8p6S#^Tj|Q)TVf z_=U+Fljekiyoax*8oblx$EqZEGI};$$m_>dE}qiCBF3y+SshIEqW1@|!7VB9)AT#_ zPCw6yIjXt}`z=Pi?;f(xl^=KMxo?{Gl>G8l_H}K3x>L`x5od8X%RK3ugR2+=v+mj) zn_`$hkeC9g67zbdR7V)EyuA5iM@0XbKP9n8Ja#P#>2o-K#j2-{=6L>bYHq3hfY`}l zh0j}9ph~9$g=aER)#*7nnK9m!atlTwGT{*)&soD4H8`H8bpK!cH3I8^9 z%DHqnO?8O!^~7zmXc2p7Jz6{7Jce{gx9GE+da*El<9=6H z?kp#(-#hB&Mci#V*5&^$7Yb|bs+x#CnP(Z&+n5TN<33@L1-(N@rq$K3SG7apx(Q=YX Si=Z2RnEbqh=*PX{xBLYgWAKas literal 0 HcmV?d00001 diff --git a/assets/icons/ic_reply.png b/assets/icons/ic_reply.png new file mode 100644 index 0000000000000000000000000000000000000000..6d4a172fbad0a7d2fc374dc0d481541c26e231ff GIT binary patch literal 1876 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 literal 0 HcmV?d00001 diff --git a/assets/icons/ic_to_bottom.png b/assets/icons/ic_to_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..91f99c886aaa75130afcd614a607926b84bba493 GIT binary patch literal 2154 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 a06fsrx4I~&-FVFXgO(?yNvjjpuKxjRa2!7X literal 0 HcmV?d00001 diff --git a/assets/icons/laughing_man.png b/assets/icons/laughing_man.png new file mode 100644 index 0000000000000000000000000000000000000000..4e9a3a4dd74bdef87acfc04580586ff511b30f0b GIT binary patch literal 181166 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�&PUQ0Lj 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�w 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 + * + * This file is apart of the Goober application, a client for pnut.io + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +import bb.cascades 1.4 + +TabbedPane { + id: main + showTabsOnActionBar: false + + Tab { + id: globalStream + title: qsTr("Global") + delegate: Delegate { + StreamTab { + stream_type: "Global" + } + } + imageSource: "asset:///icons/globe.png" + } + +// Tab { +// id: homeStream +// title: qsTr("Home") +// delegate: Delegate { +// StreamTab { +// stream_type: "Home" +// } +// } +// imageSource: "asset:///icons/ic_home.png" +// } + +} diff --git a/assets/moment.js b/assets/moment.js new file mode 100644 index 0000000..bb48d71 --- /dev/null +++ b/assets/moment.js @@ -0,0 +1,2940 @@ +//.pragma library + +//! moment.js +//! version : 2.8.4 +//! authors : Tim Wood, Iskren Chernev, Moment.js contributors +//! license : MIT +//! momentjs.com + +var moment = (function (undefined) { + /************************************ + Constants + ************************************/ + + var moment, + VERSION = '2.8.4', + // the global-scope this is NOT the global object in Node.js + globalScope = typeof global !== 'undefined' ? global : this, + oldGlobalMoment, + round = Math.round, + hasOwnProperty = Object.prototype.hasOwnProperty, + i, + + YEAR = 0, + MONTH = 1, + DATE = 2, + HOUR = 3, + MINUTE = 4, + SECOND = 5, + MILLISECOND = 6, + + // internal storage for locale config files + locales = {}, + + // extra moment internal properties (plugins register props here) + momentProperties = [], + + // check for nodeJS + hasModule = (typeof module !== 'undefined' && module && module.exports), + + // ASP.NET json date format regex + aspNetJsonRegex = /^\/?Date\((\-?\d+)/i, + aspNetTimeSpanJsonRegex = /(\-)?(?:(\d*)\.)?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?)?/, + + // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html + // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere + isoDurationRegex = /^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/, + + // format tokens + formattingTokens = /(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Q|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,4}|x|X|zz?|ZZ?|.)/g, + localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g, + + // parsing token regexes + parseTokenOneOrTwoDigits = /\d\d?/, // 0 - 99 + parseTokenOneToThreeDigits = /\d{1,3}/, // 0 - 999 + parseTokenOneToFourDigits = /\d{1,4}/, // 0 - 9999 + parseTokenOneToSixDigits = /[+\-]?\d{1,6}/, // -999,999 - 999,999 + parseTokenDigits = /\d+/, // nonzero number of digits + parseTokenWord = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i, // any word (or two) characters or numbers including two/three word month in arabic. + parseTokenTimezone = /Z|[\+\-]\d\d:?\d\d/gi, // +00:00 -00:00 +0000 -0000 or Z + parseTokenT = /T/i, // T (ISO separator) + parseTokenOffsetMs = /[\+\-]?\d+/, // 1234567890123 + parseTokenTimestampMs = /[\+\-]?\d+(\.\d{1,3})?/, // 123456789 123456789.123 + + //strict parsing regexes + parseTokenOneDigit = /\d/, // 0 - 9 + parseTokenTwoDigits = /\d\d/, // 00 - 99 + parseTokenThreeDigits = /\d{3}/, // 000 - 999 + parseTokenFourDigits = /\d{4}/, // 0000 - 9999 + parseTokenSixDigits = /[+-]?\d{6}/, // -999,999 - 999,999 + parseTokenSignedNumber = /[+-]?\d+/, // -inf - inf + + // iso 8601 regex + // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00) + isoRegex = /^\s*(?:[+-]\d{6}|\d{4})-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d+)?)?)?)?([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/, + + isoFormat = 'YYYY-MM-DDTHH:mm:ssZ', + + isoDates = [ + ['YYYYYY-MM-DD', /[+-]\d{6}-\d{2}-\d{2}/], + ['YYYY-MM-DD', /\d{4}-\d{2}-\d{2}/], + ['GGGG-[W]WW-E', /\d{4}-W\d{2}-\d/], + ['GGGG-[W]WW', /\d{4}-W\d{2}/], + ['YYYY-DDD', /\d{4}-\d{3}/] + ], + + // iso time formats and regexes + isoTimes = [ + ['HH:mm:ss.SSSS', /(T| )\d\d:\d\d:\d\d\.\d+/], + ['HH:mm:ss', /(T| )\d\d:\d\d:\d\d/], + ['HH:mm', /(T| )\d\d:\d\d/], + ['HH', /(T| )\d\d/] + ], + + // timezone chunker '+10:00' > ['10', '00'] or '-1530' > ['-15', '30'] + parseTimezoneChunker = /([\+\-]|\d\d)/gi, + + // getter and setter names + proxyGettersAndSetters = 'Date|Hours|Minutes|Seconds|Milliseconds'.split('|'), + unitMillisecondFactors = { + 'Milliseconds' : 1, + 'Seconds' : 1e3, + 'Minutes' : 6e4, + 'Hours' : 36e5, + 'Days' : 864e5, + 'Months' : 2592e6, + 'Years' : 31536e6 + }, + + unitAliases = { + ms : 'millisecond', + s : 'second', + m : 'minute', + h : 'hour', + d : 'day', + D : 'date', + w : 'week', + W : 'isoWeek', + M : 'month', + Q : 'quarter', + y : 'year', + DDD : 'dayOfYear', + e : 'weekday', + E : 'isoWeekday', + gg: 'weekYear', + GG: 'isoWeekYear' + }, + + camelFunctions = { + dayofyear : 'dayOfYear', + isoweekday : 'isoWeekday', + isoweek : 'isoWeek', + weekyear : 'weekYear', + isoweekyear : 'isoWeekYear' + }, + + // format function strings + formatFunctions = {}, + + // default relative time thresholds + relativeTimeThresholds = { + s: 45, // seconds to minute + m: 45, // minutes to hour + h: 22, // hours to day + d: 26, // days to month + M: 11 // months to year + }, + + // tokens to ordinalize and pad + ordinalizeTokens = 'DDD w W M D d'.split(' '), + paddedTokens = 'M D H h m s w W'.split(' '), + + formatTokenFunctions = { + M : function () { + return this.month() + 1; + }, + MMM : function (format) { + return this.localeData().monthsShort(this, format); + }, + MMMM : function (format) { + return this.localeData().months(this, format); + }, + D : function () { + return this.date(); + }, + DDD : function () { + return this.dayOfYear(); + }, + d : function () { + return this.day(); + }, + dd : function (format) { + return this.localeData().weekdaysMin(this, format); + }, + ddd : function (format) { + return this.localeData().weekdaysShort(this, format); + }, + dddd : function (format) { + return this.localeData().weekdays(this, format); + }, + w : function () { + return this.week(); + }, + W : function () { + return this.isoWeek(); + }, + YY : function () { + return leftZeroFill(this.year() % 100, 2); + }, + YYYY : function () { + return leftZeroFill(this.year(), 4); + }, + YYYYY : function () { + return leftZeroFill(this.year(), 5); + }, + YYYYYY : function () { + var y = this.year(), sign = y >= 0 ? '+' : '-'; + return sign + leftZeroFill(Math.abs(y), 6); + }, + gg : function () { + return leftZeroFill(this.weekYear() % 100, 2); + }, + gggg : function () { + return leftZeroFill(this.weekYear(), 4); + }, + ggggg : function () { + return leftZeroFill(this.weekYear(), 5); + }, + GG : function () { + return leftZeroFill(this.isoWeekYear() % 100, 2); + }, + GGGG : function () { + return leftZeroFill(this.isoWeekYear(), 4); + }, + GGGGG : function () { + return leftZeroFill(this.isoWeekYear(), 5); + }, + e : function () { + return this.weekday(); + }, + E : function () { + return this.isoWeekday(); + }, + a : function () { + return this.localeData().meridiem(this.hours(), this.minutes(), true); + }, + A : function () { + return this.localeData().meridiem(this.hours(), this.minutes(), false); + }, + H : function () { + return this.hours(); + }, + h : function () { + return this.hours() % 12 || 12; + }, + m : function () { + return this.minutes(); + }, + s : function () { + return this.seconds(); + }, + S : function () { + return toInt(this.milliseconds() / 100); + }, + SS : function () { + return leftZeroFill(toInt(this.milliseconds() / 10), 2); + }, + SSS : function () { + return leftZeroFill(this.milliseconds(), 3); + }, + SSSS : function () { + return leftZeroFill(this.milliseconds(), 3); + }, + Z : function () { + var a = -this.zone(), + b = '+'; + if (a < 0) { + a = -a; + b = '-'; + } + return b + leftZeroFill(toInt(a / 60), 2) + ':' + leftZeroFill(toInt(a) % 60, 2); + }, + ZZ : function () { + var a = -this.zone(), + b = '+'; + if (a < 0) { + a = -a; + b = '-'; + } + return b + leftZeroFill(toInt(a / 60), 2) + leftZeroFill(toInt(a) % 60, 2); + }, + z : function () { + return this.zoneAbbr(); + }, + zz : function () { + return this.zoneName(); + }, + x : function () { + return this.valueOf(); + }, + X : function () { + return this.unix(); + }, + Q : function () { + return this.quarter(); + } + }, + + deprecations = {}, + + lists = ['months', 'monthsShort', 'weekdays', 'weekdaysShort', 'weekdaysMin']; + + // Pick the first defined of two or three arguments. dfl comes from + // default. + function dfl(a, b, c) { + switch (arguments.length) { + case 2: return a != null ? a : b; + case 3: return a != null ? a : b != null ? b : c; + default: throw new Error('Implement me'); + } + } + + function hasOwnProp(a, b) { + return hasOwnProperty.call(a, b); + } + + function defaultParsingFlags() { + // We need to deep clone this object, and es5 standard is not very + // helpful. + return { + empty : false, + unusedTokens : [], + unusedInput : [], + overflow : -2, + charsLeftOver : 0, + nullInput : false, + invalidMonth : null, + invalidFormat : false, + userInvalidated : false, + iso: false + }; + } + + function printMsg(msg) { + if (moment.suppressDeprecationWarnings === false && + typeof console !== 'undefined' && console.warn) { + console.warn('Deprecation warning: ' + msg); + } + } + + function deprecate(msg, fn) { + var firstTime = true; + return extend(function () { + if (firstTime) { + printMsg(msg); + firstTime = false; + } + return fn.apply(this, arguments); + }, fn); + } + + function deprecateSimple(name, msg) { + if (!deprecations[name]) { + printMsg(msg); + deprecations[name] = true; + } + } + + function padToken(func, count) { + return function (a) { + return leftZeroFill(func.call(this, a), count); + }; + } + function ordinalizeToken(func, period) { + return function (a) { + return this.localeData().ordinal(func.call(this, a), period); + }; + } + + while (ordinalizeTokens.length) { + i = ordinalizeTokens.pop(); + formatTokenFunctions[i + 'o'] = ordinalizeToken(formatTokenFunctions[i], i); + } + while (paddedTokens.length) { + i = paddedTokens.pop(); + formatTokenFunctions[i + i] = padToken(formatTokenFunctions[i], 2); + } + formatTokenFunctions.DDDD = padToken(formatTokenFunctions.DDD, 3); + + + /************************************ + Constructors + ************************************/ + + function Locale() { + } + + // Moment prototype object + function Moment(config, skipOverflow) { + if (skipOverflow !== false) { + checkOverflow(config); + } + copyConfig(this, config); + this._d = new Date(+config._d); + } + + // Duration Constructor + function Duration(duration) { + var normalizedInput = normalizeObjectUnits(duration), + years = normalizedInput.year || 0, + quarters = normalizedInput.quarter || 0, + months = normalizedInput.month || 0, + weeks = normalizedInput.week || 0, + days = normalizedInput.day || 0, + hours = normalizedInput.hour || 0, + minutes = normalizedInput.minute || 0, + seconds = normalizedInput.second || 0, + milliseconds = normalizedInput.millisecond || 0; + + // representation for dateAddRemove + this._milliseconds = +milliseconds + + seconds * 1e3 + // 1000 + minutes * 6e4 + // 1000 * 60 + hours * 36e5; // 1000 * 60 * 60 + // Because of dateAddRemove treats 24 hours as different from a + // day when working around DST, we need to store them separately + this._days = +days + + weeks * 7; + // It is impossible translate months into days without knowing + // which months you are are talking about, so we have to store + // it separately. + this._months = +months + + quarters * 3 + + years * 12; + + this._data = {}; + + this._locale = moment.localeData(); + + this._bubble(); + } + + /************************************ + Helpers + ************************************/ + + + function extend(a, b) { + for (var i in b) { + if (hasOwnProp(b, i)) { + a[i] = b[i]; + } + } + + if (hasOwnProp(b, 'toString')) { + a.toString = b.toString; + } + + if (hasOwnProp(b, 'valueOf')) { + a.valueOf = b.valueOf; + } + + return a; + } + + function copyConfig(to, from) { + var i, prop, val; + + if (typeof from._isAMomentObject !== 'undefined') { + to._isAMomentObject = from._isAMomentObject; + } + if (typeof from._i !== 'undefined') { + to._i = from._i; + } + if (typeof from._f !== 'undefined') { + to._f = from._f; + } + if (typeof from._l !== 'undefined') { + to._l = from._l; + } + if (typeof from._strict !== 'undefined') { + to._strict = from._strict; + } + if (typeof from._tzm !== 'undefined') { + to._tzm = from._tzm; + } + if (typeof from._isUTC !== 'undefined') { + to._isUTC = from._isUTC; + } + if (typeof from._offset !== 'undefined') { + to._offset = from._offset; + } + if (typeof from._pf !== 'undefined') { + to._pf = from._pf; + } + if (typeof from._locale !== 'undefined') { + to._locale = from._locale; + } + + if (momentProperties.length > 0) { + for (i in momentProperties) { + prop = momentProperties[i]; + val = from[prop]; + if (typeof val !== 'undefined') { + to[prop] = val; + } + } + } + + return to; + } + + function absRound(number) { + if (number < 0) { + return Math.ceil(number); + } else { + return Math.floor(number); + } + } + + // left zero fill a number + // see http://jsperf.com/left-zero-filling for performance comparison + function leftZeroFill(number, targetLength, forceSign) { + var output = '' + Math.abs(number), + sign = number >= 0; + + while (output.length < targetLength) { + output = '0' + output; + } + return (sign ? (forceSign ? '+' : '') : '-') + output; + } + + function positiveMomentsDifference(base, other) { + var res = {milliseconds: 0, months: 0}; + + res.months = other.month() - base.month() + + (other.year() - base.year()) * 12; + if (base.clone().add(res.months, 'M').isAfter(other)) { + --res.months; + } + + res.milliseconds = +other - +(base.clone().add(res.months, 'M')); + + return res; + } + + function momentsDifference(base, other) { + var res; + other = makeAs(other, base); + if (base.isBefore(other)) { + res = positiveMomentsDifference(base, other); + } else { + res = positiveMomentsDifference(other, base); + res.milliseconds = -res.milliseconds; + res.months = -res.months; + } + + return res; + } + + // TODO: remove 'name' arg after deprecation is removed + function createAdder(direction, name) { + return function (val, period) { + var dur, tmp; + //invert the arguments, but complain about it + if (period !== null && !isNaN(+period)) { + deprecateSimple(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period).'); + tmp = val; val = period; period = tmp; + } + + val = typeof val === 'string' ? +val : val; + dur = moment.duration(val, period); + addOrSubtractDurationFromMoment(this, dur, direction); + return this; + }; + } + + function addOrSubtractDurationFromMoment(mom, duration, isAdding, updateOffset) { + var milliseconds = duration._milliseconds, + days = duration._days, + months = duration._months; + updateOffset = updateOffset == null ? true : updateOffset; + + if (milliseconds) { + mom._d.setTime(+mom._d + milliseconds * isAdding); + } + if (days) { + rawSetter(mom, 'Date', rawGetter(mom, 'Date') + days * isAdding); + } + if (months) { + rawMonthSetter(mom, rawGetter(mom, 'Month') + months * isAdding); + } + if (updateOffset) { + moment.updateOffset(mom, days || months); + } + } + + // check if is an array + function isArray(input) { + return Object.prototype.toString.call(input) === '[object Array]'; + } + + function isDate(input) { + return Object.prototype.toString.call(input) === '[object Date]' || + input instanceof Date; + } + + // compare two arrays, return the number of differences + function compareArrays(array1, array2, dontConvert) { + var len = Math.min(array1.length, array2.length), + lengthDiff = Math.abs(array1.length - array2.length), + diffs = 0, + i; + for (i = 0; i < len; i++) { + if ((dontConvert && array1[i] !== array2[i]) || + (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) { + diffs++; + } + } + return diffs + lengthDiff; + } + + function normalizeUnits(units) { + if (units) { + var lowered = units.toLowerCase().replace(/(.)s$/, '$1'); + units = unitAliases[units] || camelFunctions[lowered] || lowered; + } + return units; + } + + function normalizeObjectUnits(inputObject) { + var normalizedInput = {}, + normalizedProp, + prop; + + for (prop in inputObject) { + if (hasOwnProp(inputObject, prop)) { + normalizedProp = normalizeUnits(prop); + if (normalizedProp) { + normalizedInput[normalizedProp] = inputObject[prop]; + } + } + } + + return normalizedInput; + } + + function makeList(field) { + var count, setter; + + if (field.indexOf('week') === 0) { + count = 7; + setter = 'day'; + } + else if (field.indexOf('month') === 0) { + count = 12; + setter = 'month'; + } + else { + return; + } + + moment[field] = function (format, index) { + var i, getter, + method = moment._locale[field], + results = []; + + if (typeof format === 'number') { + index = format; + format = undefined; + } + + getter = function (i) { + var m = moment().utc().set(setter, i); + return method.call(moment._locale, m, format || ''); + }; + + if (index != null) { + return getter(index); + } + else { + for (i = 0; i < count; i++) { + results.push(getter(i)); + } + return results; + } + }; + } + + function toInt(argumentForCoercion) { + var coercedNumber = +argumentForCoercion, + value = 0; + + if (coercedNumber !== 0 && isFinite(coercedNumber)) { + if (coercedNumber >= 0) { + value = Math.floor(coercedNumber); + } else { + value = Math.ceil(coercedNumber); + } + } + + return value; + } + + function daysInMonth(year, month) { + return new Date(Date.UTC(year, month + 1, 0)).getUTCDate(); + } + + function weeksInYear(year, dow, doy) { + return weekOfYear(moment([year, 11, 31 + dow - doy]), dow, doy).week; + } + + function daysInYear(year) { + return isLeapYear(year) ? 366 : 365; + } + + function isLeapYear(year) { + return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; + } + + function checkOverflow(m) { + var overflow; + if (m._a && m._pf.overflow === -2) { + overflow = + m._a[MONTH] < 0 || m._a[MONTH] > 11 ? MONTH : + m._a[DATE] < 1 || m._a[DATE] > daysInMonth(m._a[YEAR], m._a[MONTH]) ? DATE : + m._a[HOUR] < 0 || m._a[HOUR] > 24 || + (m._a[HOUR] === 24 && (m._a[MINUTE] !== 0 || + m._a[SECOND] !== 0 || + m._a[MILLISECOND] !== 0)) ? HOUR : + m._a[MINUTE] < 0 || m._a[MINUTE] > 59 ? MINUTE : + m._a[SECOND] < 0 || m._a[SECOND] > 59 ? SECOND : + m._a[MILLISECOND] < 0 || m._a[MILLISECOND] > 999 ? MILLISECOND : + -1; + + if (m._pf._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) { + overflow = DATE; + } + + m._pf.overflow = overflow; + } + } + + function isValid(m) { + if (m._isValid == null) { + m._isValid = !isNaN(m._d.getTime()) && + m._pf.overflow < 0 && + !m._pf.empty && + !m._pf.invalidMonth && + !m._pf.nullInput && + !m._pf.invalidFormat && + !m._pf.userInvalidated; + + if (m._strict) { + m._isValid = m._isValid && + m._pf.charsLeftOver === 0 && + m._pf.unusedTokens.length === 0 && + m._pf.bigHour === undefined; + } + } + return m._isValid; + } + + function normalizeLocale(key) { + return key ? key.toLowerCase().replace('_', '-') : key; + } + + // pick the locale from the array + // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each + // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root + function chooseLocale(names) { + var i = 0, j, next, locale, split; + + while (i < names.length) { + split = normalizeLocale(names[i]).split('-'); + j = split.length; + next = normalizeLocale(names[i + 1]); + next = next ? next.split('-') : null; + while (j > 0) { + locale = loadLocale(split.slice(0, j).join('-')); + if (locale) { + return locale; + } + if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) { + //the next array item is better than a shallower substring of this one + break; + } + j--; + } + i++; + } + return null; + } + + function loadLocale(name) { + var oldLocale = null; + if (!locales[name] && hasModule) { + try { + oldLocale = moment.locale(); + require('./locale/' + name); + // because defineLocale currently also sets the global locale, we want to undo that for lazy loaded locales + moment.locale(oldLocale); + } catch (e) { } + } + return locales[name]; + } + + // Return a moment from input, that is local/utc/zone equivalent to model. + function makeAs(input, model) { + var res, diff; + if (model._isUTC) { + res = model.clone(); + diff = (moment.isMoment(input) || isDate(input) ? + +input : +moment(input)) - (+res); + // Use low-level api, because this fn is low-level api. + res._d.setTime(+res._d + diff); + moment.updateOffset(res, false); + return res; + } else { + return moment(input).local(); + } + } + + /************************************ + Locale + ************************************/ + + + extend(Locale.prototype, { + + set : function (config) { + var prop, i; + for (i in config) { + prop = config[i]; + if (typeof prop === 'function') { + this[i] = prop; + } else { + this['_' + i] = prop; + } + } + // Lenient ordinal parsing accepts just a number in addition to + // number + (possibly) stuff coming from _ordinalParseLenient. + this._ordinalParseLenient = new RegExp(this._ordinalParse.source + '|' + /\d{1,2}/.source); + }, + + _months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), + months : function (m) { + return this._months[m.month()]; + }, + + _monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + monthsShort : function (m) { + return this._monthsShort[m.month()]; + }, + + monthsParse : function (monthName, format, strict) { + var i, mom, regex; + + if (!this._monthsParse) { + this._monthsParse = []; + this._longMonthsParse = []; + this._shortMonthsParse = []; + } + + for (i = 0; i < 12; i++) { + // make the regex if we don't have it already + mom = moment.utc([2000, i]); + if (strict && !this._longMonthsParse[i]) { + this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i'); + this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i'); + } + if (!strict && !this._monthsParse[i]) { + regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, ''); + this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i'); + } + // test the regex + if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) { + return i; + } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) { + return i; + } else if (!strict && this._monthsParse[i].test(monthName)) { + return i; + } + } + }, + + _weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), + weekdays : function (m) { + return this._weekdays[m.day()]; + }, + + _weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysShort : function (m) { + return this._weekdaysShort[m.day()]; + }, + + _weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + weekdaysMin : function (m) { + return this._weekdaysMin[m.day()]; + }, + + weekdaysParse : function (weekdayName) { + var i, mom, regex; + + if (!this._weekdaysParse) { + this._weekdaysParse = []; + } + + for (i = 0; i < 7; i++) { + // make the regex if we don't have it already + if (!this._weekdaysParse[i]) { + mom = moment([2000, 1]).day(i); + regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, ''); + this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i'); + } + // test the regex + if (this._weekdaysParse[i].test(weekdayName)) { + return i; + } + } + }, + + _longDateFormat : { + LTS : 'h:mm:ss A', + LT : 'h:mm A', + L : 'MM/DD/YYYY', + LL : 'MMMM D, YYYY', + LLL : 'MMMM D, YYYY LT', + LLLL : 'dddd, MMMM D, YYYY LT' + }, + longDateFormat : function (key) { + var output = this._longDateFormat[key]; + if (!output && this._longDateFormat[key.toUpperCase()]) { + output = this._longDateFormat[key.toUpperCase()].replace(/MMMM|MM|DD|dddd/g, function (val) { + return val.slice(1); + }); + this._longDateFormat[key] = output; + } + return output; + }, + + isPM : function (input) { + // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays + // Using charAt should be more compatible. + return ((input + '').toLowerCase().charAt(0) === 'p'); + }, + + _meridiemParse : /[ap]\.?m?\.?/i, + meridiem : function (hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'pm' : 'PM'; + } else { + return isLower ? 'am' : 'AM'; + } + }, + + _calendar : { + sameDay : '[Today at] LT', + nextDay : '[Tomorrow at] LT', + nextWeek : 'dddd [at] LT', + lastDay : '[Yesterday at] LT', + lastWeek : '[Last] dddd [at] LT', + sameElse : 'L' + }, + calendar : function (key, mom, now) { + var output = this._calendar[key]; + return typeof output === 'function' ? output.apply(mom, [now]) : output; + }, + + _relativeTime : { + future : 'in %s', + past : '%s ago', + s : 'a few seconds', + m : 'a minute', + mm : '%d minutes', + h : 'an hour', + hh : '%d hours', + d : 'a day', + dd : '%d days', + M : 'a month', + MM : '%d months', + y : 'a year', + yy : '%d years' + }, + + relativeTime : function (number, withoutSuffix, string, isFuture) { + var output = this._relativeTime[string]; + return (typeof output === 'function') ? + output(number, withoutSuffix, string, isFuture) : + output.replace(/%d/i, number); + }, + + pastFuture : function (diff, output) { + var format = this._relativeTime[diff > 0 ? 'future' : 'past']; + return typeof format === 'function' ? format(output) : format.replace(/%s/i, output); + }, + + ordinal : function (number) { + return this._ordinal.replace('%d', number); + }, + _ordinal : '%d', + _ordinalParse : /\d{1,2}/, + + preparse : function (string) { + return string; + }, + + postformat : function (string) { + return string; + }, + + week : function (mom) { + return weekOfYear(mom, this._week.dow, this._week.doy).week; + }, + + _week : { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + }, + + _invalidDate: 'Invalid date', + invalidDate: function () { + return this._invalidDate; + } + }); + + /************************************ + Formatting + ************************************/ + + + function removeFormattingTokens(input) { + if (input.match(/\[[\s\S]/)) { + return input.replace(/^\[|\]$/g, ''); + } + return input.replace(/\\/g, ''); + } + + function makeFormatFunction(format) { + var array = format.match(formattingTokens), i, length; + + for (i = 0, length = array.length; i < length; i++) { + if (formatTokenFunctions[array[i]]) { + array[i] = formatTokenFunctions[array[i]]; + } else { + array[i] = removeFormattingTokens(array[i]); + } + } + + return function (mom) { + var output = ''; + for (i = 0; i < length; i++) { + output += array[i] instanceof Function ? array[i].call(mom, format) : array[i]; + } + return output; + }; + } + + // format date using native date object + function formatMoment(m, format) { + if (!m.isValid()) { + return m.localeData().invalidDate(); + } + + format = expandFormat(format, m.localeData()); + + if (!formatFunctions[format]) { + formatFunctions[format] = makeFormatFunction(format); + } + + return formatFunctions[format](m); + } + + function expandFormat(format, locale) { + var i = 5; + + function replaceLongDateFormatTokens(input) { + return locale.longDateFormat(input) || input; + } + + localFormattingTokens.lastIndex = 0; + while (i >= 0 && localFormattingTokens.test(format)) { + format = format.replace(localFormattingTokens, replaceLongDateFormatTokens); + localFormattingTokens.lastIndex = 0; + i -= 1; + } + + return format; + } + + + /************************************ + Parsing + ************************************/ + + + // get the regex to find the next token + function getParseRegexForToken(token, config) { + var a, strict = config._strict; + switch (token) { + case 'Q': + return parseTokenOneDigit; + case 'DDDD': + return parseTokenThreeDigits; + case 'YYYY': + case 'GGGG': + case 'gggg': + return strict ? parseTokenFourDigits : parseTokenOneToFourDigits; + case 'Y': + case 'G': + case 'g': + return parseTokenSignedNumber; + case 'YYYYYY': + case 'YYYYY': + case 'GGGGG': + case 'ggggg': + return strict ? parseTokenSixDigits : parseTokenOneToSixDigits; + case 'S': + if (strict) { + return parseTokenOneDigit; + } + /* falls through */ + case 'SS': + if (strict) { + return parseTokenTwoDigits; + } + /* falls through */ + case 'SSS': + if (strict) { + return parseTokenThreeDigits; + } + /* falls through */ + case 'DDD': + return parseTokenOneToThreeDigits; + case 'MMM': + case 'MMMM': + case 'dd': + case 'ddd': + case 'dddd': + return parseTokenWord; + case 'a': + case 'A': + return config._locale._meridiemParse; + case 'x': + return parseTokenOffsetMs; + case 'X': + return parseTokenTimestampMs; + case 'Z': + case 'ZZ': + return parseTokenTimezone; + case 'T': + return parseTokenT; + case 'SSSS': + return parseTokenDigits; + case 'MM': + case 'DD': + case 'YY': + case 'GG': + case 'gg': + case 'HH': + case 'hh': + case 'mm': + case 'ss': + case 'ww': + case 'WW': + return strict ? parseTokenTwoDigits : parseTokenOneOrTwoDigits; + case 'M': + case 'D': + case 'd': + case 'H': + case 'h': + case 'm': + case 's': + case 'w': + case 'W': + case 'e': + case 'E': + return parseTokenOneOrTwoDigits; + case 'Do': + return strict ? config._locale._ordinalParse : config._locale._ordinalParseLenient; + default : + a = new RegExp(regexpEscape(unescapeFormat(token.replace('\\', '')), 'i')); + return a; + } + } + + function timezoneMinutesFromString(string) { + string = string || ''; + var possibleTzMatches = (string.match(parseTokenTimezone) || []), + tzChunk = possibleTzMatches[possibleTzMatches.length - 1] || [], + parts = (tzChunk + '').match(parseTimezoneChunker) || ['-', 0, 0], + minutes = +(parts[1] * 60) + toInt(parts[2]); + + return parts[0] === '+' ? -minutes : minutes; + } + + // function to convert string input to date + function addTimeToArrayFromToken(token, input, config) { + var a, datePartArray = config._a; + + switch (token) { + // QUARTER + case 'Q': + if (input != null) { + datePartArray[MONTH] = (toInt(input) - 1) * 3; + } + break; + // MONTH + case 'M' : // fall through to MM + case 'MM' : + if (input != null) { + datePartArray[MONTH] = toInt(input) - 1; + } + break; + case 'MMM' : // fall through to MMMM + case 'MMMM' : + a = config._locale.monthsParse(input, token, config._strict); + // if we didn't find a month name, mark the date as invalid. + if (a != null) { + datePartArray[MONTH] = a; + } else { + config._pf.invalidMonth = input; + } + break; + // DAY OF MONTH + case 'D' : // fall through to DD + case 'DD' : + if (input != null) { + datePartArray[DATE] = toInt(input); + } + break; + case 'Do' : + if (input != null) { + datePartArray[DATE] = toInt(parseInt( + input.match(/\d{1,2}/)[0], 10)); + } + break; + // DAY OF YEAR + case 'DDD' : // fall through to DDDD + case 'DDDD' : + if (input != null) { + config._dayOfYear = toInt(input); + } + + break; + // YEAR + case 'YY' : + datePartArray[YEAR] = moment.parseTwoDigitYear(input); + break; + case 'YYYY' : + case 'YYYYY' : + case 'YYYYYY' : + datePartArray[YEAR] = toInt(input); + break; + // AM / PM + case 'a' : // fall through to A + case 'A' : + config._isPm = config._locale.isPM(input); + break; + // HOUR + case 'h' : // fall through to hh + case 'hh' : + config._pf.bigHour = true; + /* falls through */ + case 'H' : // fall through to HH + case 'HH' : + datePartArray[HOUR] = toInt(input); + break; + // MINUTE + case 'm' : // fall through to mm + case 'mm' : + datePartArray[MINUTE] = toInt(input); + break; + // SECOND + case 's' : // fall through to ss + case 'ss' : + datePartArray[SECOND] = toInt(input); + break; + // MILLISECOND + case 'S' : + case 'SS' : + case 'SSS' : + case 'SSSS' : + datePartArray[MILLISECOND] = toInt(('0.' + input) * 1000); + break; + // UNIX OFFSET (MILLISECONDS) + case 'x': + config._d = new Date(toInt(input)); + break; + // UNIX TIMESTAMP WITH MS + case 'X': + config._d = new Date(parseFloat(input) * 1000); + break; + // TIMEZONE + case 'Z' : // fall through to ZZ + case 'ZZ' : + config._useUTC = true; + config._tzm = timezoneMinutesFromString(input); + break; + // WEEKDAY - human + case 'dd': + case 'ddd': + case 'dddd': + a = config._locale.weekdaysParse(input); + // if we didn't get a weekday name, mark the date as invalid + if (a != null) { + config._w = config._w || {}; + config._w['d'] = a; + } else { + config._pf.invalidWeekday = input; + } + break; + // WEEK, WEEK DAY - numeric + case 'w': + case 'ww': + case 'W': + case 'WW': + case 'd': + case 'e': + case 'E': + token = token.substr(0, 1); + /* falls through */ + case 'gggg': + case 'GGGG': + case 'GGGGG': + token = token.substr(0, 2); + if (input) { + config._w = config._w || {}; + config._w[token] = toInt(input); + } + break; + case 'gg': + case 'GG': + config._w = config._w || {}; + config._w[token] = moment.parseTwoDigitYear(input); + } + } + + function dayOfYearFromWeekInfo(config) { + var w, weekYear, week, weekday, dow, doy, temp; + + w = config._w; + if (w.GG != null || w.W != null || w.E != null) { + dow = 1; + doy = 4; + + // TODO: We need to take the current isoWeekYear, but that depends on + // how we interpret now (local, utc, fixed offset). So create + // a now version of current config (take local/utc/offset flags, and + // create now). + weekYear = dfl(w.GG, config._a[YEAR], weekOfYear(moment(), 1, 4).year); + week = dfl(w.W, 1); + weekday = dfl(w.E, 1); + } else { + dow = config._locale._week.dow; + doy = config._locale._week.doy; + + weekYear = dfl(w.gg, config._a[YEAR], weekOfYear(moment(), dow, doy).year); + week = dfl(w.w, 1); + + if (w.d != null) { + // weekday -- low day numbers are considered next week + weekday = w.d; + if (weekday < dow) { + ++week; + } + } else if (w.e != null) { + // local weekday -- counting starts from begining of week + weekday = w.e + dow; + } else { + // default to begining of week + weekday = dow; + } + } + temp = dayOfYearFromWeeks(weekYear, week, weekday, doy, dow); + + config._a[YEAR] = temp.year; + config._dayOfYear = temp.dayOfYear; + } + + // convert an array to a date. + // the array should mirror the parameters below + // note: all values past the year are optional and will default to the lowest possible value. + // [year, month, day , hour, minute, second, millisecond] + function dateFromConfig(config) { + var i, date, input = [], currentDate, yearToUse; + + if (config._d) { + return; + } + + currentDate = currentDateArray(config); + + //compute day of the year from weeks and weekdays + if (config._w && config._a[DATE] == null && config._a[MONTH] == null) { + dayOfYearFromWeekInfo(config); + } + + //if the day of the year is set, figure out what it is + if (config._dayOfYear) { + yearToUse = dfl(config._a[YEAR], currentDate[YEAR]); + + if (config._dayOfYear > daysInYear(yearToUse)) { + config._pf._overflowDayOfYear = true; + } + + date = makeUTCDate(yearToUse, 0, config._dayOfYear); + config._a[MONTH] = date.getUTCMonth(); + config._a[DATE] = date.getUTCDate(); + } + + // Default to current date. + // * if no year, month, day of month are given, default to today + // * if day of month is given, default month and year + // * if month is given, default only year + // * if year is given, don't default anything + for (i = 0; i < 3 && config._a[i] == null; ++i) { + config._a[i] = input[i] = currentDate[i]; + } + + // Zero out whatever was not defaulted, including time + for (; i < 7; i++) { + config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i]; + } + + // Check for 24:00:00.000 + if (config._a[HOUR] === 24 && + config._a[MINUTE] === 0 && + config._a[SECOND] === 0 && + config._a[MILLISECOND] === 0) { + config._nextDay = true; + config._a[HOUR] = 0; + } + + config._d = (config._useUTC ? makeUTCDate : makeDate).apply(null, input); + // Apply timezone offset from input. The actual zone can be changed + // with parseZone. + if (config._tzm != null) { + config._d.setUTCMinutes(config._d.getUTCMinutes() + config._tzm); + } + + if (config._nextDay) { + config._a[HOUR] = 24; + } + } + + function dateFromObject(config) { + var normalizedInput; + + if (config._d) { + return; + } + + normalizedInput = normalizeObjectUnits(config._i); + config._a = [ + normalizedInput.year, + normalizedInput.month, + normalizedInput.day || normalizedInput.date, + normalizedInput.hour, + normalizedInput.minute, + normalizedInput.second, + normalizedInput.millisecond + ]; + + dateFromConfig(config); + } + + function currentDateArray(config) { + var now = new Date(); + if (config._useUTC) { + return [ + now.getUTCFullYear(), + now.getUTCMonth(), + now.getUTCDate() + ]; + } else { + return [now.getFullYear(), now.getMonth(), now.getDate()]; + } + } + + // date from string and format string + function makeDateFromStringAndFormat(config) { + if (config._f === moment.ISO_8601) { + parseISO(config); + return; + } + + config._a = []; + config._pf.empty = true; + + // This array is used to make a Date, either with `new Date` or `Date.UTC` + var string = '' + config._i, + i, parsedInput, tokens, token, skipped, + stringLength = string.length, + totalParsedInputLength = 0; + + tokens = expandFormat(config._f, config._locale).match(formattingTokens) || []; + + for (i = 0; i < tokens.length; i++) { + token = tokens[i]; + parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0]; + if (parsedInput) { + skipped = string.substr(0, string.indexOf(parsedInput)); + if (skipped.length > 0) { + config._pf.unusedInput.push(skipped); + } + string = string.slice(string.indexOf(parsedInput) + parsedInput.length); + totalParsedInputLength += parsedInput.length; + } + // don't parse if it's not a known token + if (formatTokenFunctions[token]) { + if (parsedInput) { + config._pf.empty = false; + } + else { + config._pf.unusedTokens.push(token); + } + addTimeToArrayFromToken(token, parsedInput, config); + } + else if (config._strict && !parsedInput) { + config._pf.unusedTokens.push(token); + } + } + + // add remaining unparsed input length to the string + config._pf.charsLeftOver = stringLength - totalParsedInputLength; + if (string.length > 0) { + config._pf.unusedInput.push(string); + } + + // clear _12h flag if hour is <= 12 + if (config._pf.bigHour === true && config._a[HOUR] <= 12) { + config._pf.bigHour = undefined; + } + // handle am pm + if (config._isPm && config._a[HOUR] < 12) { + config._a[HOUR] += 12; + } + // if is 12 am, change hours to 0 + if (config._isPm === false && config._a[HOUR] === 12) { + config._a[HOUR] = 0; + } + dateFromConfig(config); + checkOverflow(config); + } + + function unescapeFormat(s) { + return s.replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) { + return p1 || p2 || p3 || p4; + }); + } + + // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript + function regexpEscape(s) { + return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); + } + + // date from string and array of format strings + function makeDateFromStringAndArray(config) { + var tempConfig, + bestMoment, + + scoreToBeat, + i, + currentScore; + + if (config._f.length === 0) { + config._pf.invalidFormat = true; + config._d = new Date(NaN); + return; + } + + for (i = 0; i < config._f.length; i++) { + currentScore = 0; + tempConfig = copyConfig({}, config); + if (config._useUTC != null) { + tempConfig._useUTC = config._useUTC; + } + tempConfig._pf = defaultParsingFlags(); + tempConfig._f = config._f[i]; + makeDateFromStringAndFormat(tempConfig); + + if (!isValid(tempConfig)) { + continue; + } + + // if there is any input that was not parsed add a penalty for that format + currentScore += tempConfig._pf.charsLeftOver; + + //or tokens + currentScore += tempConfig._pf.unusedTokens.length * 10; + + tempConfig._pf.score = currentScore; + + if (scoreToBeat == null || currentScore < scoreToBeat) { + scoreToBeat = currentScore; + bestMoment = tempConfig; + } + } + + extend(config, bestMoment || tempConfig); + } + + // date from iso format + function parseISO(config) { + var i, l, + string = config._i, + match = isoRegex.exec(string); + + if (match) { + config._pf.iso = true; + for (i = 0, l = isoDates.length; i < l; i++) { + if (isoDates[i][1].exec(string)) { + // match[5] should be 'T' or undefined + config._f = isoDates[i][0] + (match[6] || ' '); + break; + } + } + for (i = 0, l = isoTimes.length; i < l; i++) { + if (isoTimes[i][1].exec(string)) { + config._f += isoTimes[i][0]; + break; + } + } + if (string.match(parseTokenTimezone)) { + config._f += 'Z'; + } + makeDateFromStringAndFormat(config); + } else { + config._isValid = false; + } + } + + // date from iso format or fallback + function makeDateFromString(config) { + parseISO(config); + if (config._isValid === false) { + delete config._isValid; + moment.createFromInputFallback(config); + } + } + + function map(arr, fn) { + var res = [], i; + for (i = 0; i < arr.length; ++i) { + res.push(fn(arr[i], i)); + } + return res; + } + + function makeDateFromInput(config) { + var input = config._i, matched; + if (input === undefined) { + config._d = new Date(); + } else if (isDate(input)) { + config._d = new Date(+input); + } else if ((matched = aspNetJsonRegex.exec(input)) !== null) { + config._d = new Date(+matched[1]); + } else if (typeof input === 'string') { + makeDateFromString(config); + } else if (isArray(input)) { + config._a = map(input.slice(0), function (obj) { + return parseInt(obj, 10); + }); + dateFromConfig(config); + } else if (typeof(input) === 'object') { + dateFromObject(config); + } else if (typeof(input) === 'number') { + // from milliseconds + config._d = new Date(input); + } else { + moment.createFromInputFallback(config); + } + } + + function makeDate(y, m, d, h, M, s, ms) { + //can't just apply() to create a date: + //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply + var date = new Date(y, m, d, h, M, s, ms); + + //the date constructor doesn't accept years < 1970 + if (y < 1970) { + date.setFullYear(y); + } + return date; + } + + function makeUTCDate(y) { + var date = new Date(Date.UTC.apply(null, arguments)); + if (y < 1970) { + date.setUTCFullYear(y); + } + return date; + } + + function parseWeekday(input, locale) { + if (typeof input === 'string') { + if (!isNaN(input)) { + input = parseInt(input, 10); + } + else { + input = locale.weekdaysParse(input); + if (typeof input !== 'number') { + return null; + } + } + } + return input; + } + + /************************************ + Relative Time + ************************************/ + + + // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize + function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) { + return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture); + } + + function relativeTime(posNegDuration, withoutSuffix, locale) { + var duration = moment.duration(posNegDuration).abs(), + seconds = round(duration.asUnit('s')), + minutes = round(duration.asUnit('m')), + hours = round(duration.asUnit('h')), + days = round(duration.asUnit('d')), + months = round(duration.asUnit('M')), + years = round(duration.asUnit('y')), + + args = seconds < relativeTimeThresholds.s && ['s', seconds] || + minutes === 1 && ['m'] || + minutes < relativeTimeThresholds.m && ['mm', minutes] || + hours === 1 && ['h'] || + hours < relativeTimeThresholds.h && ['hh', hours] || + days === 1 && ['d'] || + days < relativeTimeThresholds.d && ['dd', days] || + months === 1 && ['M'] || + months < relativeTimeThresholds.M && ['MM', months] || + years === 1 && ['y'] || ['yy', years]; + + args[2] = withoutSuffix; + args[3] = +posNegDuration > 0; + args[4] = locale; + return substituteTimeAgo.apply({}, args); + } + + + /************************************ + Week of Year + ************************************/ + + + // firstDayOfWeek 0 = sun, 6 = sat + // the day of the week that starts the week + // (usually sunday or monday) + // firstDayOfWeekOfYear 0 = sun, 6 = sat + // the first week is the week that contains the first + // of this day of the week + // (eg. ISO weeks use thursday (4)) + function weekOfYear(mom, firstDayOfWeek, firstDayOfWeekOfYear) { + var end = firstDayOfWeekOfYear - firstDayOfWeek, + daysToDayOfWeek = firstDayOfWeekOfYear - mom.day(), + adjustedMoment; + + + if (daysToDayOfWeek > end) { + daysToDayOfWeek -= 7; + } + + if (daysToDayOfWeek < end - 7) { + daysToDayOfWeek += 7; + } + + adjustedMoment = moment(mom).add(daysToDayOfWeek, 'd'); + return { + week: Math.ceil(adjustedMoment.dayOfYear() / 7), + year: adjustedMoment.year() + }; + } + + //http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday + function dayOfYearFromWeeks(year, week, weekday, firstDayOfWeekOfYear, firstDayOfWeek) { + var d = makeUTCDate(year, 0, 1).getUTCDay(), daysToAdd, dayOfYear; + + d = d === 0 ? 7 : d; + weekday = weekday != null ? weekday : firstDayOfWeek; + daysToAdd = firstDayOfWeek - d + (d > firstDayOfWeekOfYear ? 7 : 0) - (d < firstDayOfWeek ? 7 : 0); + dayOfYear = 7 * (week - 1) + (weekday - firstDayOfWeek) + daysToAdd + 1; + + return { + year: dayOfYear > 0 ? year : year - 1, + dayOfYear: dayOfYear > 0 ? dayOfYear : daysInYear(year - 1) + dayOfYear + }; + } + + /************************************ + Top Level Functions + ************************************/ + + function makeMoment(config) { + var input = config._i, + format = config._f, + res; + + config._locale = config._locale || moment.localeData(config._l); + + if (input === null || (format === undefined && input === '')) { + return moment.invalid({nullInput: true}); + } + + if (typeof input === 'string') { + config._i = input = config._locale.preparse(input); + } + + if (moment.isMoment(input)) { + return new Moment(input, true); + } else if (format) { + if (isArray(format)) { + makeDateFromStringAndArray(config); + } else { + makeDateFromStringAndFormat(config); + } + } else { + makeDateFromInput(config); + } + + res = new Moment(config); + if (res._nextDay) { + // Adding is smart enough around DST + res.add(1, 'd'); + res._nextDay = undefined; + } + + return res; + } + + moment = function (input, format, locale, strict) { + var c; + + if (typeof(locale) === 'boolean') { + strict = locale; + locale = undefined; + } + // object construction must be done this way. + // https://github.com/moment/moment/issues/1423 + c = {}; + c._isAMomentObject = true; + c._i = input; + c._f = format; + c._l = locale; + c._strict = strict; + c._isUTC = false; + c._pf = defaultParsingFlags(); + + return makeMoment(c); + }; + + moment.suppressDeprecationWarnings = false; + + moment.createFromInputFallback = deprecate( + 'moment construction falls back to js Date. This is ' + + 'discouraged and will be removed in upcoming major ' + + 'release. Please refer to ' + + 'https://github.com/moment/moment/issues/1407 for more info.', + function (config) { + config._d = new Date(config._i + (config._useUTC ? ' UTC' : '')); + } + ); + + // Pick a moment m from moments so that m[fn](other) is true for all + // other. This relies on the function fn to be transitive. + // + // moments should either be an array of moment objects or an array, whose + // first element is an array of moment objects. + function pickBy(fn, moments) { + var res, i; + if (moments.length === 1 && isArray(moments[0])) { + moments = moments[0]; + } + if (!moments.length) { + return moment(); + } + res = moments[0]; + for (i = 1; i < moments.length; ++i) { + if (moments[i][fn](res)) { + res = moments[i]; + } + } + return res; + } + + moment.min = function () { + var args = [].slice.call(arguments, 0); + + return pickBy('isBefore', args); + }; + + moment.max = function () { + var args = [].slice.call(arguments, 0); + + return pickBy('isAfter', args); + }; + + // creating with utc + moment.utc = function (input, format, locale, strict) { + var c; + + if (typeof(locale) === 'boolean') { + strict = locale; + locale = undefined; + } + // object construction must be done this way. + // https://github.com/moment/moment/issues/1423 + c = {}; + c._isAMomentObject = true; + c._useUTC = true; + c._isUTC = true; + c._l = locale; + c._i = input; + c._f = format; + c._strict = strict; + c._pf = defaultParsingFlags(); + + return makeMoment(c).utc(); + }; + + // creating with unix timestamp (in seconds) + moment.unix = function (input) { + return moment(input * 1000); + }; + + // duration + moment.duration = function (input, key) { + var duration = input, + // matching against regexp is expensive, do it on demand + match = null, + sign, + ret, + parseIso, + diffRes; + + if (moment.isDuration(input)) { + duration = { + ms: input._milliseconds, + d: input._days, + M: input._months + }; + } else if (typeof input === 'number') { + duration = {}; + if (key) { + duration[key] = input; + } else { + duration.milliseconds = input; + } + } else if (!!(match = aspNetTimeSpanJsonRegex.exec(input))) { + sign = (match[1] === '-') ? -1 : 1; + duration = { + y: 0, + d: toInt(match[DATE]) * sign, + h: toInt(match[HOUR]) * sign, + m: toInt(match[MINUTE]) * sign, + s: toInt(match[SECOND]) * sign, + ms: toInt(match[MILLISECOND]) * sign + }; + } else if (!!(match = isoDurationRegex.exec(input))) { + sign = (match[1] === '-') ? -1 : 1; + parseIso = function (inp) { + // We'd normally use ~~inp for this, but unfortunately it also + // converts floats to ints. + // inp may be undefined, so careful calling replace on it. + var res = inp && parseFloat(inp.replace(',', '.')); + // apply sign while we're at it + return (isNaN(res) ? 0 : res) * sign; + }; + duration = { + y: parseIso(match[2]), + M: parseIso(match[3]), + d: parseIso(match[4]), + h: parseIso(match[5]), + m: parseIso(match[6]), + s: parseIso(match[7]), + w: parseIso(match[8]) + }; + } else if (typeof duration === 'object' && + ('from' in duration || 'to' in duration)) { + diffRes = momentsDifference(moment(duration.from), moment(duration.to)); + + duration = {}; + duration.ms = diffRes.milliseconds; + duration.M = diffRes.months; + } + + ret = new Duration(duration); + + if (moment.isDuration(input) && hasOwnProp(input, '_locale')) { + ret._locale = input._locale; + } + + return ret; + }; + + // version number + moment.version = VERSION; + + // default format + moment.defaultFormat = isoFormat; + + // constant that refers to the ISO standard + moment.ISO_8601 = function () {}; + + // Plugins that add properties should also add the key here (null value), + // so we can properly clone ourselves. + moment.momentProperties = momentProperties; + + // This function will be called whenever a moment is mutated. + // It is intended to keep the offset in sync with the timezone. + moment.updateOffset = function () {}; + + // This function allows you to set a threshold for relative time strings + moment.relativeTimeThreshold = function (threshold, limit) { + if (relativeTimeThresholds[threshold] === undefined) { + return false; + } + if (limit === undefined) { + return relativeTimeThresholds[threshold]; + } + relativeTimeThresholds[threshold] = limit; + return true; + }; + + moment.lang = deprecate( + 'moment.lang is deprecated. Use moment.locale instead.', + function (key, value) { + return moment.locale(key, value); + } + ); + + // This function will load locale and then set the global locale. If + // no arguments are passed in, it will simply return the current global + // locale key. + moment.locale = function (key, values) { + var data; + if (key) { + if (typeof(values) !== 'undefined') { + data = moment.defineLocale(key, values); + } + else { + data = moment.localeData(key); + } + + if (data) { + moment.duration._locale = moment._locale = data; + } + } + + return moment._locale._abbr; + }; + + moment.defineLocale = function (name, values) { + if (values !== null) { + values.abbr = name; + if (!locales[name]) { + locales[name] = new Locale(); + } + locales[name].set(values); + + // backwards compat for now: also set the locale + moment.locale(name); + + return locales[name]; + } else { + // useful for testing + delete locales[name]; + return null; + } + }; + + moment.langData = deprecate( + 'moment.langData is deprecated. Use moment.localeData instead.', + function (key) { + return moment.localeData(key); + } + ); + + // returns locale data + moment.localeData = function (key) { + var locale; + + if (key && key._locale && key._locale._abbr) { + key = key._locale._abbr; + } + + if (!key) { + return moment._locale; + } + + if (!isArray(key)) { + //short-circuit everything else + locale = loadLocale(key); + if (locale) { + return locale; + } + key = [key]; + } + + return chooseLocale(key); + }; + + // compare moment object + moment.isMoment = function (obj) { + return obj instanceof Moment || + (obj != null && hasOwnProp(obj, '_isAMomentObject')); + }; + + // for typechecking Duration objects + moment.isDuration = function (obj) { + return obj instanceof Duration; + }; + + for (i = lists.length - 1; i >= 0; --i) { + makeList(lists[i]); + } + + moment.normalizeUnits = function (units) { + return normalizeUnits(units); + }; + + moment.invalid = function (flags) { + var m = moment.utc(NaN); + if (flags != null) { + extend(m._pf, flags); + } + else { + m._pf.userInvalidated = true; + } + + return m; + }; + + moment.parseZone = function () { + return moment.apply(null, arguments).parseZone(); + }; + + moment.parseTwoDigitYear = function (input) { + return toInt(input) + (toInt(input) > 68 ? 1900 : 2000); + }; + + /************************************ + Moment Prototype + ************************************/ + + + extend(moment.fn = Moment.prototype, { + + clone : function () { + return moment(this); + }, + + valueOf : function () { + return +this._d + ((this._offset || 0) * 60000); + }, + + unix : function () { + return Math.floor(+this / 1000); + }, + + toString : function () { + return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ'); + }, + + toDate : function () { + return this._offset ? new Date(+this) : this._d; + }, + + toISOString : function () { + var m = moment(this).utc(); + if (0 < m.year() && m.year() <= 9999) { + if ('function' === typeof Date.prototype.toISOString) { + // native implementation is ~50x faster, use it when we can + return this.toDate().toISOString(); + } else { + return formatMoment(m, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); + } + } else { + return formatMoment(m, 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); + } + }, + + toArray : function () { + var m = this; + return [ + m.year(), + m.month(), + m.date(), + m.hours(), + m.minutes(), + m.seconds(), + m.milliseconds() + ]; + }, + + isValid : function () { + return isValid(this); + }, + + isDSTShifted : function () { + if (this._a) { + return this.isValid() && compareArrays(this._a, (this._isUTC ? moment.utc(this._a) : moment(this._a)).toArray()) > 0; + } + + return false; + }, + + parsingFlags : function () { + return extend({}, this._pf); + }, + + invalidAt: function () { + return this._pf.overflow; + }, + + utc : function (keepLocalTime) { + return this.zone(0, keepLocalTime); + }, + + local : function (keepLocalTime) { + if (this._isUTC) { + this.zone(0, keepLocalTime); + this._isUTC = false; + + if (keepLocalTime) { + this.add(this._dateTzOffset(), 'm'); + } + } + return this; + }, + + format : function (inputString) { + var output = formatMoment(this, inputString || moment.defaultFormat); + return this.localeData().postformat(output); + }, + + add : createAdder(1, 'add'), + + subtract : createAdder(-1, 'subtract'), + + diff : function (input, units, asFloat) { + var that = makeAs(input, this), + zoneDiff = (this.zone() - that.zone()) * 6e4, + diff, output, daysAdjust; + + units = normalizeUnits(units); + + if (units === 'year' || units === 'month') { + // average number of days in the months in the given dates + diff = (this.daysInMonth() + that.daysInMonth()) * 432e5; // 24 * 60 * 60 * 1000 / 2 + // difference in months + output = ((this.year() - that.year()) * 12) + (this.month() - that.month()); + // adjust by taking difference in days, average number of days + // and dst in the given months. + daysAdjust = (this - moment(this).startOf('month')) - + (that - moment(that).startOf('month')); + // same as above but with zones, to negate all dst + daysAdjust -= ((this.zone() - moment(this).startOf('month').zone()) - + (that.zone() - moment(that).startOf('month').zone())) * 6e4; + output += daysAdjust / diff; + if (units === 'year') { + output = output / 12; + } + } else { + diff = (this - that); + output = units === 'second' ? diff / 1e3 : // 1000 + units === 'minute' ? diff / 6e4 : // 1000 * 60 + units === 'hour' ? diff / 36e5 : // 1000 * 60 * 60 + units === 'day' ? (diff - zoneDiff) / 864e5 : // 1000 * 60 * 60 * 24, negate dst + units === 'week' ? (diff - zoneDiff) / 6048e5 : // 1000 * 60 * 60 * 24 * 7, negate dst + diff; + } + return asFloat ? output : absRound(output); + }, + + from : function (time, withoutSuffix) { + return moment.duration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix); + }, + + fromNow : function (withoutSuffix) { + return this.from(moment(), withoutSuffix); + }, + + calendar : function (time) { + // We want to compare the start of today, vs this. + // Getting start-of-today depends on whether we're zone'd or not. + var now = time || moment(), + sod = makeAs(now, this).startOf('day'), + diff = this.diff(sod, 'days', true), + format = diff < -6 ? 'sameElse' : + diff < -1 ? 'lastWeek' : + diff < 0 ? 'lastDay' : + diff < 1 ? 'sameDay' : + diff < 2 ? 'nextDay' : + diff < 7 ? 'nextWeek' : 'sameElse'; + return this.format(this.localeData().calendar(format, this, moment(now))); + }, + + isLeapYear : function () { + return isLeapYear(this.year()); + }, + + isDST : function () { + return (this.zone() < this.clone().month(0).zone() || + this.zone() < this.clone().month(5).zone()); + }, + + day : function (input) { + var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay(); + if (input != null) { + input = parseWeekday(input, this.localeData()); + return this.add(input - day, 'd'); + } else { + return day; + } + }, + + month : makeAccessor('Month', true), + + startOf : function (units) { + units = normalizeUnits(units); + // the following switch intentionally omits break keywords + // to utilize falling through the cases. + switch (units) { + case 'year': + this.month(0); + /* falls through */ + case 'quarter': + case 'month': + this.date(1); + /* falls through */ + case 'week': + case 'isoWeek': + case 'day': + this.hours(0); + /* falls through */ + case 'hour': + this.minutes(0); + /* falls through */ + case 'minute': + this.seconds(0); + /* falls through */ + case 'second': + this.milliseconds(0); + /* falls through */ + } + + // weeks are a special case + if (units === 'week') { + this.weekday(0); + } else if (units === 'isoWeek') { + this.isoWeekday(1); + } + + // quarters are also special + if (units === 'quarter') { + this.month(Math.floor(this.month() / 3) * 3); + } + + return this; + }, + + endOf: function (units) { + units = normalizeUnits(units); + if (units === undefined || units === 'millisecond') { + return this; + } + return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms'); + }, + + isAfter: function (input, units) { + var inputMs; + units = normalizeUnits(typeof units !== 'undefined' ? units : 'millisecond'); + if (units === 'millisecond') { + input = moment.isMoment(input) ? input : moment(input); + return +this > +input; + } else { + inputMs = moment.isMoment(input) ? +input : +moment(input); + return inputMs < +this.clone().startOf(units); + } + }, + + isBefore: function (input, units) { + var inputMs; + units = normalizeUnits(typeof units !== 'undefined' ? units : 'millisecond'); + if (units === 'millisecond') { + input = moment.isMoment(input) ? input : moment(input); + return +this < +input; + } else { + inputMs = moment.isMoment(input) ? +input : +moment(input); + return +this.clone().endOf(units) < inputMs; + } + }, + + isSame: function (input, units) { + var inputMs; + units = normalizeUnits(units || 'millisecond'); + if (units === 'millisecond') { + input = moment.isMoment(input) ? input : moment(input); + return +this === +input; + } else { + inputMs = +moment(input); + return +(this.clone().startOf(units)) <= inputMs && inputMs <= +(this.clone().endOf(units)); + } + }, + + min: deprecate( + 'moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548', + function (other) { + other = moment.apply(null, arguments); + return other < this ? this : other; + } + ), + + max: deprecate( + 'moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548', + function (other) { + other = moment.apply(null, arguments); + return other > this ? this : other; + } + ), + + // keepLocalTime = true means only change the timezone, without + // affecting the local hour. So 5:31:26 +0300 --[zone(2, true)]--> + // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist int zone + // +0200, so we adjust the time as needed, to be valid. + // + // Keeping the time actually adds/subtracts (one hour) + // from the actual represented time. That is why we call updateOffset + // a second time. In case it wants us to change the offset again + // _changeInProgress == true case, then we have to adjust, because + // there is no such time in the given timezone. + zone : function (input, keepLocalTime) { + var offset = this._offset || 0, + localAdjust; + if (input != null) { + if (typeof input === 'string') { + input = timezoneMinutesFromString(input); + } + if (Math.abs(input) < 16) { + input = input * 60; + } + if (!this._isUTC && keepLocalTime) { + localAdjust = this._dateTzOffset(); + } + this._offset = input; + this._isUTC = true; + if (localAdjust != null) { + this.subtract(localAdjust, 'm'); + } + if (offset !== input) { + if (!keepLocalTime || this._changeInProgress) { + addOrSubtractDurationFromMoment(this, + moment.duration(offset - input, 'm'), 1, false); + } else if (!this._changeInProgress) { + this._changeInProgress = true; + moment.updateOffset(this, true); + this._changeInProgress = null; + } + } + } else { + return this._isUTC ? offset : this._dateTzOffset(); + } + return this; + }, + + zoneAbbr : function () { + return this._isUTC ? 'UTC' : ''; + }, + + zoneName : function () { + return this._isUTC ? 'Coordinated Universal Time' : ''; + }, + + parseZone : function () { + if (this._tzm) { + this.zone(this._tzm); + } else if (typeof this._i === 'string') { + this.zone(this._i); + } + return this; + }, + + hasAlignedHourOffset : function (input) { + if (!input) { + input = 0; + } + else { + input = moment(input).zone(); + } + + return (this.zone() - input) % 60 === 0; + }, + + daysInMonth : function () { + return daysInMonth(this.year(), this.month()); + }, + + dayOfYear : function (input) { + var dayOfYear = round((moment(this).startOf('day') - moment(this).startOf('year')) / 864e5) + 1; + return input == null ? dayOfYear : this.add((input - dayOfYear), 'd'); + }, + + quarter : function (input) { + return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3); + }, + + weekYear : function (input) { + var year = weekOfYear(this, this.localeData()._week.dow, this.localeData()._week.doy).year; + return input == null ? year : this.add((input - year), 'y'); + }, + + isoWeekYear : function (input) { + var year = weekOfYear(this, 1, 4).year; + return input == null ? year : this.add((input - year), 'y'); + }, + + week : function (input) { + var week = this.localeData().week(this); + return input == null ? week : this.add((input - week) * 7, 'd'); + }, + + isoWeek : function (input) { + var week = weekOfYear(this, 1, 4).week; + return input == null ? week : this.add((input - week) * 7, 'd'); + }, + + weekday : function (input) { + var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7; + return input == null ? weekday : this.add(input - weekday, 'd'); + }, + + isoWeekday : function (input) { + // behaves the same as moment#day except + // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6) + // as a setter, sunday should belong to the previous week. + return input == null ? this.day() || 7 : this.day(this.day() % 7 ? input : input - 7); + }, + + isoWeeksInYear : function () { + return weeksInYear(this.year(), 1, 4); + }, + + weeksInYear : function () { + var weekInfo = this.localeData()._week; + return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy); + }, + + get : function (units) { + units = normalizeUnits(units); + return this[units](); + }, + + set : function (units, value) { + units = normalizeUnits(units); + if (typeof this[units] === 'function') { + this[units](value); + } + return this; + }, + + // If passed a locale key, it will set the locale for this + // instance. Otherwise, it will return the locale configuration + // variables for this instance. + locale : function (key) { + var newLocaleData; + + if (key === undefined) { + return this._locale._abbr; + } else { + newLocaleData = moment.localeData(key); + if (newLocaleData != null) { + this._locale = newLocaleData; + } + return this; + } + }, + + lang : deprecate( + 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.', + function (key) { + if (key === undefined) { + return this.localeData(); + } else { + return this.locale(key); + } + } + ), + + localeData : function () { + return this._locale; + }, + + _dateTzOffset : function () { + // On Firefox.24 Date#getTimezoneOffset returns a floating point. + // https://github.com/moment/moment/pull/1871 + return Math.round(this._d.getTimezoneOffset() / 15) * 15; + } + }); + + function rawMonthSetter(mom, value) { + var dayOfMonth; + + // TODO: Move this out of here! + if (typeof value === 'string') { + value = mom.localeData().monthsParse(value); + // TODO: Another silent failure? + if (typeof value !== 'number') { + return mom; + } + } + + dayOfMonth = Math.min(mom.date(), + daysInMonth(mom.year(), value)); + mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth); + return mom; + } + + function rawGetter(mom, unit) { + return mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit](); + } + + function rawSetter(mom, unit, value) { + if (unit === 'Month') { + return rawMonthSetter(mom, value); + } else { + return mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value); + } + } + + function makeAccessor(unit, keepTime) { + return function (value) { + if (value != null) { + rawSetter(this, unit, value); + moment.updateOffset(this, keepTime); + return this; + } else { + return rawGetter(this, unit); + } + }; + } + + moment.fn.millisecond = moment.fn.milliseconds = makeAccessor('Milliseconds', false); + moment.fn.second = moment.fn.seconds = makeAccessor('Seconds', false); + moment.fn.minute = moment.fn.minutes = makeAccessor('Minutes', false); + // Setting the hour should keep the time, because the user explicitly + // specified which hour he wants. So trying to maintain the same hour (in + // a new timezone) makes sense. Adding/subtracting hours does not follow + // this rule. + moment.fn.hour = moment.fn.hours = makeAccessor('Hours', true); + // moment.fn.month is defined separately + moment.fn.date = makeAccessor('Date', true); + moment.fn.dates = deprecate('dates accessor is deprecated. Use date instead.', makeAccessor('Date', true)); + moment.fn.year = makeAccessor('FullYear', true); + moment.fn.years = deprecate('years accessor is deprecated. Use year instead.', makeAccessor('FullYear', true)); + + // add plural methods + moment.fn.days = moment.fn.day; + moment.fn.months = moment.fn.month; + moment.fn.weeks = moment.fn.week; + moment.fn.isoWeeks = moment.fn.isoWeek; + moment.fn.quarters = moment.fn.quarter; + + // add aliased format methods + moment.fn.toJSON = moment.fn.toISOString; + + /************************************ + Duration Prototype + ************************************/ + + + function daysToYears (days) { + // 400 years have 146097 days (taking into account leap year rules) + return days * 400 / 146097; + } + + function yearsToDays (years) { + // years * 365 + absRound(years / 4) - + // absRound(years / 100) + absRound(years / 400); + return years * 146097 / 400; + } + + extend(moment.duration.fn = Duration.prototype, { + + _bubble : function () { + var milliseconds = this._milliseconds, + days = this._days, + months = this._months, + data = this._data, + seconds, minutes, hours, years = 0; + + // The following code bubbles up values, see the tests for + // examples of what that means. + data.milliseconds = milliseconds % 1000; + + seconds = absRound(milliseconds / 1000); + data.seconds = seconds % 60; + + minutes = absRound(seconds / 60); + data.minutes = minutes % 60; + + hours = absRound(minutes / 60); + data.hours = hours % 24; + + days += absRound(hours / 24); + + // Accurately convert days to years, assume start from year 0. + years = absRound(daysToYears(days)); + days -= absRound(yearsToDays(years)); + + // 30 days to a month + // TODO (iskren): Use anchor date (like 1st Jan) to compute this. + months += absRound(days / 30); + days %= 30; + + // 12 months -> 1 year + years += absRound(months / 12); + months %= 12; + + data.days = days; + data.months = months; + data.years = years; + }, + + abs : function () { + this._milliseconds = Math.abs(this._milliseconds); + this._days = Math.abs(this._days); + this._months = Math.abs(this._months); + + this._data.milliseconds = Math.abs(this._data.milliseconds); + this._data.seconds = Math.abs(this._data.seconds); + this._data.minutes = Math.abs(this._data.minutes); + this._data.hours = Math.abs(this._data.hours); + this._data.months = Math.abs(this._data.months); + this._data.years = Math.abs(this._data.years); + + return this; + }, + + weeks : function () { + return absRound(this.days() / 7); + }, + + valueOf : function () { + return this._milliseconds + + this._days * 864e5 + + (this._months % 12) * 2592e6 + + toInt(this._months / 12) * 31536e6; + }, + + humanize : function (withSuffix) { + var output = relativeTime(this, !withSuffix, this.localeData()); + + if (withSuffix) { + output = this.localeData().pastFuture(+this, output); + } + + return this.localeData().postformat(output); + }, + + add : function (input, val) { + // supports only 2.0-style add(1, 's') or add(moment) + var dur = moment.duration(input, val); + + this._milliseconds += dur._milliseconds; + this._days += dur._days; + this._months += dur._months; + + this._bubble(); + + return this; + }, + + subtract : function (input, val) { + var dur = moment.duration(input, val); + + this._milliseconds -= dur._milliseconds; + this._days -= dur._days; + this._months -= dur._months; + + this._bubble(); + + return this; + }, + + get : function (units) { + units = normalizeUnits(units); + return this[units.toLowerCase() + 's'](); + }, + + asUnit : function (units) { + var days, months; + units = normalizeUnits(units); + + if (units === 'month' || units === 'year') { + days = this._days + this._milliseconds / 864e5; + months = this._months + daysToYears(days) * 12; + return units === 'month' ? months : months / 12; + } else { + // handle milliseconds separately because of floating point math errors (issue #1867) + days = this._days + Math.round(yearsToDays(this._months / 12)); + switch (units) { + case 'week': return days / 7 + this._milliseconds / 6048e5; + case 'day': return days + this._milliseconds / 864e5; + case 'hour': return days * 24 + this._milliseconds / 36e5; + case 'minute': return days * 24 * 60 + this._milliseconds / 6e4; + case 'second': return days * 24 * 60 * 60 + this._milliseconds / 1000; + // Math.floor prevents floating point math errors here + case 'millisecond': return Math.floor(days * 24 * 60 * 60 * 1000) + this._milliseconds; + default: throw new Error('Unknown unit ' + units); + } + } + }, + + lang : moment.fn.lang, + locale : moment.fn.locale, + + toIsoString : deprecate( + 'toIsoString() is deprecated. Please use toISOString() instead ' + + '(notice the capitals)', + function () { + return this.toISOString(); + } + ), + + toISOString : function () { + // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js + var years = Math.abs(this.years()), + months = Math.abs(this.months()), + days = Math.abs(this.days()), + hours = Math.abs(this.hours()), + minutes = Math.abs(this.minutes()), + seconds = Math.abs(this.seconds() + this.milliseconds() / 1000); + + if (!this.asSeconds()) { + // this is the same as C#'s (Noda) and python (isodate)... + // but not other JS (goog.date) + return 'P0D'; + } + + return (this.asSeconds() < 0 ? '-' : '') + + 'P' + + (years ? years + 'Y' : '') + + (months ? months + 'M' : '') + + (days ? days + 'D' : '') + + ((hours || minutes || seconds) ? 'T' : '') + + (hours ? hours + 'H' : '') + + (minutes ? minutes + 'M' : '') + + (seconds ? seconds + 'S' : ''); + }, + + localeData : function () { + return this._locale; + } + }); + + moment.duration.fn.toString = moment.duration.fn.toISOString; + + function makeDurationGetter(name) { + moment.duration.fn[name] = function () { + return this._data[name]; + }; + } + + for (i in unitMillisecondFactors) { + if (hasOwnProp(unitMillisecondFactors, i)) { + makeDurationGetter(i.toLowerCase()); + } + } + + moment.duration.fn.asMilliseconds = function () { + return this.asUnit('ms'); + }; + moment.duration.fn.asSeconds = function () { + return this.asUnit('s'); + }; + moment.duration.fn.asMinutes = function () { + return this.asUnit('m'); + }; + moment.duration.fn.asHours = function () { + return this.asUnit('h'); + }; + moment.duration.fn.asDays = function () { + return this.asUnit('d'); + }; + moment.duration.fn.asWeeks = function () { + return this.asUnit('weeks'); + }; + moment.duration.fn.asMonths = function () { + return this.asUnit('M'); + }; + moment.duration.fn.asYears = function () { + return this.asUnit('y'); + }; + + /************************************ + Default Locale + ************************************/ + + + // Set default locale, other locale will inherit from English. + moment.locale('en', { + ordinalParse: /\d{1,2}(th|st|nd|rd)/, + ordinal : function (number) { + var b = number % 10, + output = (toInt(number % 100 / 10) === 1) ? 'th' : + (b === 1) ? 'st' : + (b === 2) ? 'nd' : + (b === 3) ? 'rd' : 'th'; + return number + output; + } + }); + + /* EMBED_LOCALES */ + + /************************************ + Exposing Moment + ************************************/ + + function makeGlobal(shouldDeprecate) { + /*global ender:false */ + if (typeof ender !== 'undefined') { + return; + } + oldGlobalMoment = globalScope.moment; + if (shouldDeprecate) { + globalScope.moment = deprecate( + 'Accessing Moment through the global scope is ' + + 'deprecated, and will be removed in an upcoming ' + + 'release.', + moment); + } else { + globalScope.moment = moment; + } + } + + // CommonJS module is defined + if (hasModule) { + module.exports = moment; + } else if (typeof define === 'function' && define.amd) { + define('moment', function (require, exports, module) { + if (module.config && module.config() && module.config().noGlobal === true) { + // release the global variable + globalScope.moment = oldGlobalMoment; + } + + return moment; + }); + makeGlobal(true); + } else if (typeof Qt !== 'undefined') { + return moment; + } else { + makeGlobal(); + } +}).call(this); diff --git a/bar-descriptor.xml b/bar-descriptor.xml new file mode 100644 index 0000000..4583ea5 --- /dev/null +++ b/bar-descriptor.xml @@ -0,0 +1,103 @@ + + + + + + + + com.monkeystew.Goober + + armle-v7 + Goober + lib/libkqoauth.so.1 + + + Qnx/Cascades + armle-v7 + Goober.so + lib/libkqoauth.so.1 + + + armle-v7 + Goober + lib/libkqoauth.so.1 + + + x86 + Goober + + + + Goober + + + 0.1.0 + + + the Goober application, a client for pnut.io + gYAAgP-_4D6fs0QDWOhZdtQjf2I + Morgan McMillian + buildnum + + + + + + + + + + + + + + + + true + none + + + + + icon.png + + + icon.png + assets + + + + + + + + run_native + + + diff --git a/buildnum b/buildnum new file mode 100644 index 0000000..e440e5c --- /dev/null +++ b/buildnum @@ -0,0 +1 @@ +3 \ No newline at end of file diff --git a/config.pri b/config.pri new file mode 100644 index 0000000..7ab23e9 --- /dev/null +++ b/config.pri @@ -0,0 +1,125 @@ +# Config.pri file version 2.0. Auto-generated by IDE. Any changes made by user will be lost! +BASEDIR = $$quote($$_PRO_FILE_PWD_) + +device { + CONFIG(debug, debug|release) { + profile { + INCLUDEPATH += $$quote(C:/Users/morga/workspace/momentics-workspace/bb-cascades-oauth/oauth) + + DEPENDPATH += $$quote(C:/Users/morga/workspace/momentics-workspace/bb-cascades-oauth/oauth) + + LIBS += -lkqoauth + + LIBS += $$quote(-LC:/Users/morga/workspace/momentics-workspace/bb-cascades-oauth/oauth/o.le-v7) + + PRE_TARGETDEPS += $$quote(C:/Users/morga/workspace/momentics-workspace/bb-cascades-oauth/oauth/o.le-v7) + + CONFIG += \ + config_pri_assets \ + config_pri_source_group1 + } else { + INCLUDEPATH += $$quote(C:/Users/morga/workspace/momentics-workspace/bb-cascades-oauth/oauth) + + DEPENDPATH += $$quote(C:/Users/morga/workspace/momentics-workspace/bb-cascades-oauth/oauth) + + LIBS += -lkqoauth + + LIBS += $$quote(-LC:/Users/morga/workspace/momentics-workspace/bb-cascades-oauth/oauth/o.le-v7) + + PRE_TARGETDEPS += $$quote(C:/Users/morga/workspace/momentics-workspace/bb-cascades-oauth/oauth/o.le-v7) + + CONFIG += \ + config_pri_assets \ + config_pri_source_group1 + } + + } + + CONFIG(release, debug|release) { + !profile { + INCLUDEPATH += $$quote(C:/Users/morga/workspace/momentics-workspace/bb-cascades-oauth/oauth) + + DEPENDPATH += $$quote(C:/Users/morga/workspace/momentics-workspace/bb-cascades-oauth/oauth) + + LIBS += -lkqoauth + + LIBS += $$quote(-LC:/Users/morga/workspace/momentics-workspace/bb-cascades-oauth/oauth/o.le-v7) + + PRE_TARGETDEPS += $$quote(C:/Users/morga/workspace/momentics-workspace/bb-cascades-oauth/oauth/o.le-v7) + + CONFIG += \ + config_pri_assets \ + config_pri_source_group1 + } + } +} + +simulator { + CONFIG(debug, debug|release) { + !profile { + CONFIG += \ + config_pri_assets \ + config_pri_source_group1 + } + } +} + +config_pri_assets { + OTHER_FILES += \ + $$quote($$BASEDIR/assets/NewPostSheet.qml) \ + $$quote($$BASEDIR/assets/PostItem.qml) \ + $$quote($$BASEDIR/assets/StreamTab.qml) \ + $$quote($$BASEDIR/assets/icons/globe.png) \ + $$quote($$BASEDIR/assets/icons/ic_add.png) \ + $$quote($$BASEDIR/assets/icons/ic_reload.png) \ + $$quote($$BASEDIR/assets/icons/ic_reply.png) \ + $$quote($$BASEDIR/assets/icons/ic_reply_all.png) \ + $$quote($$BASEDIR/assets/icons/ic_to_bottom.png) \ + $$quote($$BASEDIR/assets/icons/ic_to_top.png) \ + $$quote($$BASEDIR/assets/icons/laughing_man.png) \ + $$quote($$BASEDIR/assets/main.qml) \ + $$quote($$BASEDIR/assets/moment.js) +} + +config_pri_source_group1 { + SOURCES += \ + $$quote($$BASEDIR/src/Pnut.cpp) \ + $$quote($$BASEDIR/src/Pnut_test.cpp) \ + $$quote($$BASEDIR/src/WebImageView.cpp) \ + $$quote($$BASEDIR/src/applicationui.cpp) \ + $$quote($$BASEDIR/src/main.cpp) + + HEADERS += \ + $$quote($$BASEDIR/src/Pnut.h) \ + $$quote($$BASEDIR/src/WebImageView.h) \ + $$quote($$BASEDIR/src/applicationui.hpp) \ + $$quote($$BASEDIR/src/globals.h) +} + +CONFIG += precompile_header + +PRECOMPILED_HEADER = $$quote($$BASEDIR/precompiled.h) + +lupdate_inclusion { + SOURCES += \ + $$quote($$BASEDIR/../src/*.c) \ + $$quote($$BASEDIR/../src/*.c++) \ + $$quote($$BASEDIR/../src/*.cc) \ + $$quote($$BASEDIR/../src/*.cpp) \ + $$quote($$BASEDIR/../src/*.cxx) \ + $$quote($$BASEDIR/../assets/*.qml) \ + $$quote($$BASEDIR/../assets/*.js) \ + $$quote($$BASEDIR/../assets/*.qs) \ + $$quote($$BASEDIR/../assets/icons/*.qml) \ + $$quote($$BASEDIR/../assets/icons/*.js) \ + $$quote($$BASEDIR/../assets/icons/*.qs) + + HEADERS += \ + $$quote($$BASEDIR/../src/*.h) \ + $$quote($$BASEDIR/../src/*.h++) \ + $$quote($$BASEDIR/../src/*.hh) \ + $$quote($$BASEDIR/../src/*.hpp) \ + $$quote($$BASEDIR/../src/*.hxx) +} + +TRANSLATIONS = $$quote($${TARGET}.ts) diff --git a/icon.png b/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..4da03ad09fa137997651737015b1e2f2920e51ae GIT binary patch literal 17429 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 +#include +#include diff --git a/src/Pnut.cpp b/src/Pnut.cpp new file mode 100644 index 0000000..e559c3a --- /dev/null +++ b/src/Pnut.cpp @@ -0,0 +1,219 @@ +/* + * Copyright (C) 2016 Morgan McMillian + * + * This file is apart of the Goober application, a client for pnut.io + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "Pnut.h" +#include "globals.h" +#include +#include + +const QString Pnut::PNUT_API_ROOT = QString("https://api.pnut.io/v0"); +const QString Pnut::PNUT_AUTH_URL = QString("https://pnut.io/oauth/authenticate"); + +Pnut::Pnut() +{ + req_id = 0; + before_id = 0; + since_id = 0; + + m_appSettings = new QSettings("Morgan McMillian", "Goober"); + oauthRequest = new KQOAuthRequest; + oauthManager = new KQOAuthManager(this); + + bool auth_req = connect(oauthManager, SIGNAL(authorizationReceived(QString,QString)), + this, SLOT(onAuthorizationReceived(QString,QString))); + + Q_ASSERT(auth_req); + + bool conn_req = connect(oauthManager, SIGNAL(authorizedRequestReady(QByteArray,int)), + this, SLOT(onAuthorizedRequestReady(QByteArray,int))); + + Q_ASSERT(conn_req); + + qDebug() << "Pnut created, I am life."; +} + +Pnut::~Pnut() +{ + delete oauthRequest; + delete oauthManager; + qDebug() << "Pnut destroyed,, I am death."; +} + +int Pnut::sinceId() const +{ + return since_id; +} + +void Pnut::setSinceId(const int& id) +{ + since_id = id; +} + +int Pnut::beforeId() const +{ + return before_id; +} + +void Pnut::setBeforeId(const int& id) +{ + before_id = id; +} + +void Pnut::authorize() +{ + QUrl url(PNUT_AUTH_URL); + KQOAuthParameters parameters; + parameters.insert("scope", "basic stream write_post follow update_profile presence"); + oauthManager->getOauth2UserAuthorization(url, PNUT_CLIENT_ID, parameters); +} + +void Pnut::getRequest(QUrl url, KQOAuthParameters parameters, int id) +{ + oauthRequest->clearRequest(); + oauthRequest->initRequest(KQOAuthRequest::AuthorizedRequest, url); + oauthRequest->setToken(m_appSettings->value("access_token").toString()); + oauthRequest->setHttpMethod(KQOAuthRequest::GET); + oauthRequest->setRequestOAuthMethod(KQOAuthRequest::OAUTH2); + oauthRequest->setAdditionalParameters(parameters); + + oauthManager->executeAuthorizedRequest(oauthRequest, id); +} + +void Pnut::postRequest(QUrl url, KQOAuthParameters parameters, int id, QByteArray data) +{ + oauthRequest->clearRequest(); + oauthRequest->initRequest(KQOAuthRequest::AuthorizedRequest, url); + oauthRequest->setToken(m_appSettings->value("access_token").toString()); + oauthRequest->setHttpMethod(KQOAuthRequest::POST); + oauthRequest->setRequestOAuthMethod(KQOAuthRequest::OAUTH2); + oauthRequest->setContentType("application/json"); + oauthRequest->setAdditionalParameters(parameters); + oauthRequest->setRawData(data); + + oauthManager->executeAuthorizedRequest(oauthRequest, id); +} + +void Pnut::onAuthorizationReceived(QString token, QString verifier) +{ + switch (oauthManager->lastError()) + { + case KQOAuthManager::NoError: + qDebug() << "- authorization received -"; + m_appSettings->setValue("access_token", token); + emit authorizationReceived(); + break; + default: + qDebug() << "- authorization error -"; + qDebug() << oauthManager->lastError(); + } +} + +void Pnut::onAuthorizedRequestReady(QByteArray data, int id) +{ + QString endpoint = req_map[id]; +// qDebug() << "- onAuthorizedRequestReady"; +// qDebug() << "- id: " << id; +// qDebug() << "- endpoint: " << endpoint; +// qDebug() << data; + + QVariant variant; + bb::data::JsonDataAccess jda; + variant = jda.loadFromBuffer(data); + QVariantMap meta = variant.toMap()["meta"].toMap(); + int code = meta["code"].toInt(); + + switch (code) + { + case Pnut::OK: + { +// qDebug() << ":: OK"; + if (endpoint.startsWith("/posts/streams/")) + { + Pnut::RequestType rtype = rtype_map[id]; + emit streamReceived(variant.toMap()["data"].toList(), rtype); + req_map.remove(id); + rtype_map.remove(id); + } + break; + } + case Pnut::CREATED: + { + if (endpoint == "/posts") + { + qDebug() << "Success!"; + req_map.remove(id); + } + break; + } + default: + { + qDebug() << ":: Error - " << code; + qDebug() << meta; + } + } +} + +void Pnut::getStream(QString endpoint, Pnut::RequestType rtype) +{ + QUrl url(PNUT_API_ROOT + endpoint); + KQOAuthParameters parameters; + switch (rtype) + { + case Pnut::STREAM_NEWER: + if (since_id > 0) parameters.insert("since_id", QString::number(since_id)); + break; + case Pnut::STREAM_OLDER: + if (before_id > 0) parameters.insert("before_id", QString::number(before_id)); + break; + } + req_map[++req_id] = endpoint; + rtype_map[req_id] = rtype; + getRequest(url, parameters, req_id); +} + +void Pnut::sendPost(QString text) +{ + QByteArray post; + QVariantMap map; + map["text"] = text; + QVariant data(map); + bb::data::JsonDataAccess jda; + jda.saveToBuffer(data, &post); + + QUrl url(PNUT_API_ROOT + "/posts"); + KQOAuthParameters parameters; + req_map[++req_id] = "/posts"; + postRequest(url, parameters, req_id, post); +} + +void Pnut::sendReply(QString text, int pid) +{ + QByteArray post; + QVariantMap map; + map["text"] = text; + map["reply_to"] = pid; + QVariant data(map); + bb::data::JsonDataAccess jda; + jda.saveToBuffer(data, &post); + + QUrl url(PNUT_API_ROOT + "/posts"); + KQOAuthParameters parameters; + req_map[++req_id] = "/posts"; + postRequest(url, parameters, req_id, post); +} diff --git a/src/Pnut.h b/src/Pnut.h new file mode 100644 index 0000000..a3078a2 --- /dev/null +++ b/src/Pnut.h @@ -0,0 +1,100 @@ +/* + * Copyright (C) 2016 Morgan McMillian + * + * This file is apart of the Goober application, a client for pnut.io + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef PNUT_H_ +#define PNUT_H_ + +#include +#include +#include + +class KQOauthManager; +class KQOauthRequest; +class Pnut: public QObject +{ + Q_OBJECT + + Q_PROPERTY(int sinceId READ sinceId WRITE setSinceId) + Q_PROPERTY(int beforeId READ beforeId WRITE setBeforeId) + +public: + + enum StatusCode { + OK = 200, + CREATED = 201, + NO_CONTENT = 204, + FOUND = 302, + BAD_REQUEST = 400, + UNAUTHORIZED = 401, + FORBIDDEN = 403, + NOT_FOUND = 404, + METHOD_NOT_ALLOWED = 405, + TOO_MANY_REQUESTS = 429, + INTERNAL_SERVER_ERROR = 500, + INSUFFICIENT_STORAGE = 507 + }; + + enum RequestType { + STREAM_NEWER = 0, + STREAM_OLDER = 1 + }; + + Q_ENUMS(RequestType) + + Pnut(); + virtual ~Pnut(); + + int sinceId() const; + void setSinceId(const int &id); + int beforeId() const; + void setBeforeId(const int &id); + + Q_INVOKABLE void authorize(); + Q_INVOKABLE void getStream(QString endpoint, Pnut::RequestType rtype); + Q_INVOKABLE void sendPost(QString text); + Q_INVOKABLE void sendReply(QString text, int pid); + +public slots: + void onAuthorizedRequestReady(QByteArray data, int id); + void onAuthorizationReceived(QString token, QString verifier); + +Q_SIGNALS: + void authorizationReceived(); + void streamReceived(QVariantList stream, Pnut::RequestType rtype); + +private: + static const QString PNUT_API_ROOT; + static const QString PNUT_AUTH_URL; + static const QString PNUT_USERS_URL; + + QSettings *m_appSettings; + KQOAuthManager *oauthManager; + KQOAuthRequest *oauthRequest; + + int before_id; + int since_id; + int req_id; + QMap req_map; + QMap rtype_map; + + void getRequest(QUrl url, KQOAuthParameters parameters, int id); + void postRequest(QUrl url, KQOAuthParameters parameters, int id, QByteArray data); +}; + +#endif /* PNUT_H_ */ diff --git a/src/Pnut_test.cpp b/src/Pnut_test.cpp new file mode 100644 index 0000000..d5e2cf8 --- /dev/null +++ b/src/Pnut_test.cpp @@ -0,0 +1,21 @@ +/* + * Copyright (C) 2016 Morgan McMillian + * + * This file is apart of the Goober application, a client for pnut.io + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "Pnut.h" + diff --git a/src/WebImageView.cpp b/src/WebImageView.cpp new file mode 100644 index 0000000..8cbc80f --- /dev/null +++ b/src/WebImageView.cpp @@ -0,0 +1,71 @@ +#include "WebImageView.h" +#include + +QNetworkAccessManager * WebImageView::mNetManager = new QNetworkAccessManager; +QNetworkDiskCache * WebImageView::mNetworkDiskCache = new QNetworkDiskCache(); + +WebImageView::WebImageView() { + mNetworkDiskCache->setCacheDirectory(QDesktopServices::storageLocation(QDesktopServices::CacheLocation)); + mNetManager->setCache(mNetworkDiskCache); +} + +const QUrl& WebImageView::url() const { + return mUrl; +} + +void WebImageView::setUrl(const QUrl& url) { + + mUrl = url; + mLoading = 0; + + resetImage(); + QNetworkRequest request; + request.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::PreferCache); + request.setUrl(url); + + QNetworkReply * reply = mNetManager->get(QNetworkRequest(request)); + connect(reply,SIGNAL(finished()), this, SLOT(imageLoaded())); + connect(reply,SIGNAL(downloadProgress ( qint64 , qint64 )), this, SLOT(dowloadProgressed(qint64,qint64))); + emit urlChanged(); +} + +double WebImageView::loading() const { + return mLoading; +} + +void WebImageView::imageLoaded() { + + QNetworkReply * reply = qobject_cast(sender()); + + QVariant possibleRedirectUrl = reply->attribute(QNetworkRequest::RedirectionTargetAttribute); + + mRedirectUrl = this->redirectUrl(possibleRedirectUrl.toUrl(),mRedirectUrl); + if (!mRedirectUrl.isEmpty()) { + this->setUrl(mRedirectUrl); + } else { + setImage(Image(reply->readAll())); + } + + reply->deleteLater(); + +} + +void WebImageView::dowloadProgressed(qint64 bytes,qint64 total) { + + + mLoading = double(bytes)/double(total); + emit loadingChanged(); + +} + +QUrl WebImageView::redirectUrl(const QUrl& possibleRedirectUrl, const QUrl& oldRedirectUrl) const { + QUrl redirectUrl; + if (!possibleRedirectUrl.isEmpty() && possibleRedirectUrl != oldRedirectUrl) { + redirectUrl = possibleRedirectUrl; + } + return redirectUrl; +} + + + + diff --git a/src/WebImageView.h b/src/WebImageView.h new file mode 100644 index 0000000..78fe413 --- /dev/null +++ b/src/WebImageView.h @@ -0,0 +1,41 @@ +#ifndef WEBIMAGEVIEW_H_ +#define WEBIMAGEVIEW_H_ + +#include +#include +using namespace bb::cascades; + +class QNetworkAccessManager; +class WebImageView: public bb::cascades::ImageView { + Q_OBJECT + Q_PROPERTY (QUrl url READ url WRITE setUrl NOTIFY urlChanged) + Q_PROPERTY (float loading READ loading NOTIFY loadingChanged) + +public: + WebImageView(); + const QUrl& url() const; + double loading() const; + + public Q_SLOTS: + void setUrl(const QUrl& url); + + private Q_SLOTS: + void imageLoaded(); + void dowloadProgressed(qint64,qint64); + + signals: + void urlChanged(); + void loadingChanged(); + + +private: + static QNetworkAccessManager * mNetManager; + static QNetworkDiskCache * mNetworkDiskCache; + QUrl mUrl; + QUrl mRedirectUrl; + float mLoading; + + QUrl redirectUrl(const QUrl& possibleRedirectUrl, const QUrl& oldRedirectUrl) const; +}; + +#endif /* WEBIMAGEVIEW_H_ */ diff --git a/src/applicationui.cpp b/src/applicationui.cpp new file mode 100644 index 0000000..044c5ce --- /dev/null +++ b/src/applicationui.cpp @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2011-2015 BlackBerry Limited. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "applicationui.hpp" +#include "Pnut.h" +#include "WebImageView.h" + +#include +#include +#include +#include + +using namespace bb::cascades; + +ApplicationUI::ApplicationUI() : + QObject() +{ + // prepare the localization + m_pTranslator = new QTranslator(this); + m_pLocaleHandler = new LocaleHandler(this); + + bool res = QObject::connect(m_pLocaleHandler, SIGNAL(systemLanguageChanged()), this, SLOT(onSystemLanguageChanged())); + // This is only available in Debug builds + Q_ASSERT(res); + // Since the variable is not used in the app, this is added to avoid a + // compiler warning + Q_UNUSED(res); + + // initial load + onSystemLanguageChanged(); + + qmlRegisterType("com.monkeystew.pnut", 1, 0, "Pnut"); + qmlRegisterType ("com.monkeystew.qtimer", 1, 0, "QTimer"); + qmlRegisterType("org.labsquare", 1, 0, "WebImageView"); + + m_appSettings = new QSettings("Morgan McMillian", "Goober"); + + // Create scene document from main.qml asset, the parent is set + // to ensure the document gets destroyed properly at shut down. + QmlDocument *qml = QmlDocument::create("asset:///main.qml").parent(this); + + qml->setContextProperty("_app", this); + + // Create root object for the UI + AbstractPane *root = qml->createRootObject(); + + // Set created root object as the application scene + Application::instance()->setScene(root); +} + +QVariant ApplicationUI::setting(const QString& key) +{ + return m_appSettings->value(key); +} + +void ApplicationUI::setSetting(const QString& key, const QString& value) +{ + m_appSettings->setValue(key, value); +} + +void ApplicationUI::onSystemLanguageChanged() +{ + QCoreApplication::instance()->removeTranslator(m_pTranslator); + // Initiate, load and install the application translation files. + QString locale_string = QLocale().name(); + QString file_name = QString("Goober_%1").arg(locale_string); + if (m_pTranslator->load(file_name, "app/native/qm")) { + QCoreApplication::instance()->installTranslator(m_pTranslator); + } +} diff --git a/src/applicationui.hpp b/src/applicationui.hpp new file mode 100644 index 0000000..cba42ae --- /dev/null +++ b/src/applicationui.hpp @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2011-2015 BlackBerry Limited. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef ApplicationUI_HPP_ +#define ApplicationUI_HPP_ + +#include +#include + +namespace bb +{ + namespace cascades + { + class LocaleHandler; + } +} + +class QTranslator; + +/*! + * @brief Application UI object + * + * Use this object to create and init app UI, to create context objects, to register the new meta types etc. + */ +class ApplicationUI : public QObject +{ + Q_OBJECT +public: + ApplicationUI(); + virtual ~ApplicationUI() {} + + Q_INVOKABLE QVariant setting(const QString &key); + Q_INVOKABLE void setSetting(const QString &key, const QString &value); +private slots: + void onSystemLanguageChanged(); +private: + QTranslator* m_pTranslator; + bb::cascades::LocaleHandler* m_pLocaleHandler; + QSettings* m_appSettings; +}; + +#endif /* ApplicationUI_HPP_ */ diff --git a/src/main.cpp b/src/main.cpp new file mode 100644 index 0000000..b955edf --- /dev/null +++ b/src/main.cpp @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2011-2015 BlackBerry Limited. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "applicationui.hpp" + +#include + +#include +#include + +#include + +using namespace bb::cascades; + +Q_DECL_EXPORT int main(int argc, char **argv) +{ + Application app(argc, argv); + + // Create the Application UI object, this is where the main.qml file + // is loaded and the application scene is set. + ApplicationUI appui; + + // Enter the application main event loop. + return Application::exec(); +} diff --git a/translations/Goober.pro b/translations/Goober.pro new file mode 100644 index 0000000..6f4c42b --- /dev/null +++ b/translations/Goober.pro @@ -0,0 +1 @@ +include (../Goober.pro) diff --git a/translations/Goober.ts b/translations/Goober.ts new file mode 100644 index 0000000..cad0b3a --- /dev/null +++ b/translations/Goober.ts @@ -0,0 +1,66 @@ + + + + + NewPostSheet + + + Send + + + + + Cancel + + + + + New Post + + + + + PostItem + + + Reply + + + + + StreamTab + + + New Post + + + + + Load Newer + + + + + Reload + + + + + Load Older + + + + + Logout + + + + + main + + + Global + + + + diff --git a/translations/Makefile b/translations/Makefile new file mode 100644 index 0000000..4cfa8d8 --- /dev/null +++ b/translations/Makefile @@ -0,0 +1,12 @@ +QMAKE_TARGET = Goober +LUPDATE = $(QNX_HOST)/usr/bin/lupdate +LRELEASE = $(QNX_HOST)/usr/bin/lrelease + +update: $(QMAKE_TARGET).pro FORCE + $(LUPDATE) $(QMAKE_TARGET).pro + +release: $(QMAKE_TARGET).pro $(QMAKE_TARGET).ts + $(LRELEASE) $(QMAKE_TARGET).pro + +FORCE: +